From afafc6b032b914f57ebf2e8859cee17decd97923 Mon Sep 17 00:00:00 2001 From: Keivan Date: Sat, 2 Oct 2010 12:01:43 -0700 Subject: [PATCH] pretty... --- CassiniDev/BuildDeploy.cmd | 7 + CassiniDev/CassiniDev.4.csproj | 180 + CassiniDev/CassiniDev.Console.csproj | 105 + CassiniDev/CassiniDev.Console4.csproj | 156 + CassiniDev/CassiniDev.Lib.csproj | 96 + CassiniDev/CassiniDev.Lib4.csproj | 148 + CassiniDev/CassiniDev.VisualStudio.csproj | 177 + CassiniDev/CassiniDev.VisualStudio42.csproj | 181 + CassiniDev/CassiniDev.VisualStudio44.csproj | 190 + CassiniDev/CassiniDev.csproj | 200 + CassiniDev/CassiniDev4-console.exe.config | 9 + CassiniDev/CassiniDev4-lib.dll.config | 9 + CassiniDev/CassiniDev4.csproj | 163 + CassiniDev/CassiniDev4.exe.config | 9 + CassiniDev/CassiniDevServerOP.cs | 241 + CassiniDev/CassiniServer.cs | 140 + .../CassiniDevConfigurationSection.cs | 121 + CassiniDev/ConsoleProgram.cs | 156 + CassiniDev/Core/Connection.cs | 410 + CassiniDev/Core/Host.cs | 296 + CassiniDev/Core/Messages.cs | 164 + CassiniDev/Core/NtlmAuth.cs | 179 + CassiniDev/Core/Request.cs | 1405 ++ CassiniDev/Core/RequestEventArgs.cs | 53 + CassiniDev/Core/Server.cs | 523 + CassiniDev/Logging/LogInfo.cs | 73 + CassiniDev/Misc/CommandLine.cs | 100 + CassiniDev/Misc/CommandLineArguments.cs | 443 + CassiniDev/Misc/CommandLineParser.cs | 1585 ++ CassiniDev/Misc/Common.cs | 1783 ++ CassiniDev/Misc/HostsFile.cs | 118 + CassiniDev/Misc/Interop.cs | 160 + CassiniDev/Misc/NetworkUtils.cs | 221 + CassiniDev/Misc/ServiceInstaller.cs | 37 + CassiniDev/Program.cs | 386 + CassiniDev/Properties/AssemblyInfo.cs | 19 + CassiniDev/Properties/AssemblyInfo4.cs | 19 + CassiniDev/Resources/CassiniDev.resx | 254 + CassiniDev/Resources/SR.cs | 164 + .../preferences-web-browser-shortcuts.ico | Bin 0 -> 3774 bytes CassiniDev/Views/BodyView.Designer.cs | 187 + CassiniDev/Views/BodyView.cs | 77 + CassiniDev/Views/BodyView.resx | 123 + CassiniDev/Views/FormView.Designer.cs | 686 + CassiniDev/Views/FormView.cs | 834 + CassiniDev/Views/FormView.resx | 290 + CassiniDev/Views/LogView.Designer.cs | 356 + CassiniDev/Views/LogView.cs | 137 + CassiniDev/Views/LogView.resx | 194 + CassiniDev/WebDev.WebServer40.exe.config | 6 + CassiniDev/app.config | 6 + Content/Black/editor.png | Bin 0 -> 2873 bytes Content/Black/loading.gif | Bin 0 -> 1093 bytes Content/Black/sprite.png | Bin 0 -> 3660 bytes Content/Black/treeview-line.png | Bin 0 -> 339 bytes Content/Black/treeview-nodes.png | Bin 0 -> 261 bytes Content/Default/editor.png | Bin 0 -> 2877 bytes Content/Default/loading.gif | Bin 0 -> 1517 bytes Content/Default/sprite.png | Bin 0 -> 4182 bytes Content/Default/treeview-line.png | Bin 0 -> 339 bytes Content/Default/treeview-nodes.png | Bin 0 -> 261 bytes Content/Forest/editor.png | Bin 0 -> 2978 bytes Content/Forest/loading.gif | Bin 0 -> 1376 bytes Content/Forest/sprite.png | Bin 0 -> 3749 bytes Content/Forest/treeview-line.png | Bin 0 -> 339 bytes Content/Forest/treeview-nodes.png | Bin 0 -> 261 bytes Content/Hay/editor.png | Bin 0 -> 2912 bytes Content/Hay/loading.gif | Bin 0 -> 1620 bytes Content/Hay/sprite.png | Bin 0 -> 3719 bytes Content/Hay/treeview-line.png | Bin 0 -> 339 bytes Content/Hay/treeview-nodes.png | Bin 0 -> 261 bytes Content/Images/img01.jpg | Bin 0 -> 1714 bytes Content/Images/img02.jpg | Bin 0 -> 772 bytes Content/Images/img03.jpg | Bin 0 -> 8156 bytes Content/Images/img04.jpg | Bin 0 -> 1656 bytes Content/Images/img07.jpg | Bin 0 -> 6462 bytes Content/Office2007/editor.png | Bin 0 -> 5132 bytes Content/Office2007/loading.gif | Bin 0 -> 2080 bytes Content/Office2007/sprite.png | Bin 0 -> 3610 bytes Content/Office2007/treeview-line.png | Bin 0 -> 339 bytes Content/Office2007/treeview-nodes.png | Bin 0 -> 261 bytes Content/Outlook/editor.png | Bin 0 -> 2969 bytes Content/Outlook/loading.gif | Bin 0 -> 2080 bytes Content/Outlook/sprite.png | Bin 0 -> 3818 bytes Content/Outlook/treeview-line.png | Bin 0 -> 339 bytes Content/Outlook/treeview-nodes.png | Bin 0 -> 261 bytes Content/Simple/editor.png | Bin 0 -> 2927 bytes Content/Simple/loading.gif | Bin 0 -> 2080 bytes Content/Simple/sprite.png | Bin 0 -> 2956 bytes Content/Simple/treeview-line.png | Bin 0 -> 339 bytes Content/Simple/treeview-nodes.png | Bin 0 -> 261 bytes Content/Sitefinity/editor.png | Bin 0 -> 2806 bytes Content/Sitefinity/loading.gif | Bin 0 -> 1282 bytes Content/Sitefinity/sprite.png | Bin 0 -> 3046 bytes Content/Sitefinity/treeview-line.png | Bin 0 -> 339 bytes Content/Sitefinity/treeview-nodes.png | Bin 0 -> 261 bytes Content/Sunset/editor.png | Bin 0 -> 2958 bytes Content/Sunset/loading.gif | Bin 0 -> 1306 bytes Content/Sunset/sprite.png | Bin 0 -> 3325 bytes Content/Sunset/treeview-line.png | Bin 0 -> 339 bytes Content/Sunset/treeview-nodes.png | Bin 0 -> 261 bytes Content/Telerik/editor.png | Bin 0 -> 2842 bytes Content/Telerik/loading.gif | Bin 0 -> 1202 bytes Content/Telerik/sprite.png | Bin 0 -> 4016 bytes Content/Telerik/treeview-line.png | Bin 0 -> 339 bytes Content/Telerik/treeview-nodes.png | Bin 0 -> 261 bytes Content/Vista/editor.png | Bin 0 -> 2906 bytes Content/Vista/loading.gif | Bin 0 -> 2055 bytes Content/Vista/sprite.png | Bin 0 -> 3567 bytes Content/Web20/editor.png | Bin 0 -> 2984 bytes Content/Web20/loading.gif | Bin 0 -> 1263 bytes Content/Web20/sprite.png | Bin 0 -> 3752 bytes Content/Web20/treeview-line.png | Bin 0 -> 339 bytes Content/Web20/treeview-nodes.png | Bin 0 -> 261 bytes Content/WebBlue/editor.png | Bin 0 -> 2998 bytes Content/WebBlue/loading.gif | Bin 0 -> 835 bytes Content/WebBlue/sprite.png | Bin 0 -> 3616 bytes Content/WebBlue/treeview-line.png | Bin 0 -> 339 bytes Content/WebBlue/treeview-nodes.png | Bin 0 -> 261 bytes Content/Windows7/editor.png | Bin 0 -> 2913 bytes Content/Windows7/loading.gif | Bin 0 -> 2076 bytes Content/Windows7/sprite.png | Bin 0 -> 3203 bytes Content/style.css | 345 + Content/telerik.black.min.css | 1 + Content/telerik.common.min.css | 1 + Content/telerik.default.min.css | 1 + Content/telerik.forest.min.css | 1 + Content/telerik.hay.min.css | 1 + Content/telerik.office2007.min.css | 1 + Content/telerik.outlook.min.css | 1 + Content/telerik.simple.min.css | 1 + Content/telerik.sitefinity.min.css | 1 + Content/telerik.sunset.min.css | 1 + Content/telerik.telerik.min.css | 1 + Content/telerik.vista.min.css | 1 + Content/telerik.web20.min.css | 1 + Content/telerik.webblue.min.css | 1 + Content/telerik.windows7.min.css | 1 + NzbDrone.Core.Test/Fixtures.cs | 6 + NzbDrone.Core.Test/SeriesTest.cs | 62 +- NzbDrone.Core/Libraries/CassiniDev-lib.dll | Bin 118784 -> 0 bytes NzbDrone.Core/Libraries/NLog.Extended.dll | Bin 0 -> 14336 bytes NzbDrone.Core/Libraries/NLog.Extended.xml | 432 + NzbDrone.Core/Libraries/NLog.dll | Bin 300544 -> 368640 bytes NzbDrone.Core/Libraries/NLog.pdb | Bin 736768 -> 882176 bytes NzbDrone.Core/Libraries/NLog.xml | 3357 +++- NzbDrone.Core/Main.cs | 45 +- NzbDrone.Core/NzbDrone.Core.csproj | 15 +- NzbDrone.Core/Providers/ISeriesProvider.cs | 8 +- NzbDrone.Core/Providers/SeriesProvider.cs | 165 +- NzbDrone.Core/Repository/Series.cs | 8 +- NzbDrone.Web/Content/Background.jpg | Bin 57828 -> 0 bytes NzbDrone.Web/Content/BannerBottomEdge.gif | Bin 131 -> 0 bytes NzbDrone.Web/Content/BannerTopEdge.gif | Bin 112 -> 0 bytes NzbDrone.Web/Content/Black/editor.png | Bin 0 -> 2873 bytes NzbDrone.Web/Content/Black/loading.gif | Bin 0 -> 1093 bytes NzbDrone.Web/Content/Black/sprite.png | Bin 0 -> 3660 bytes NzbDrone.Web/Content/Black/treeview-line.png | Bin 0 -> 339 bytes NzbDrone.Web/Content/Black/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/ButtonBack.gif | Bin 820 -> 0 bytes NzbDrone.Web/Content/Default/editor.png | Bin 0 -> 2877 bytes NzbDrone.Web/Content/Default/loading.gif | Bin 0 -> 1517 bytes NzbDrone.Web/Content/Default/sprite.png | Bin 0 -> 4182 bytes .../Content/Default/treeview-line.png | Bin 0 -> 339 bytes .../Content/Default/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/Error.png | Bin 270 -> 0 bytes NzbDrone.Web/Content/Forest/editor.png | Bin 0 -> 2978 bytes NzbDrone.Web/Content/Forest/loading.gif | Bin 0 -> 1376 bytes NzbDrone.Web/Content/Forest/sprite.png | Bin 0 -> 3749 bytes NzbDrone.Web/Content/Forest/treeview-line.png | Bin 0 -> 339 bytes .../Content/Forest/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/Hay/editor.png | Bin 0 -> 2912 bytes NzbDrone.Web/Content/Hay/loading.gif | Bin 0 -> 1620 bytes NzbDrone.Web/Content/Hay/sprite.png | Bin 0 -> 3719 bytes NzbDrone.Web/Content/Hay/treeview-line.png | Bin 0 -> 339 bytes NzbDrone.Web/Content/Hay/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/Images/img01.jpg | Bin 0 -> 1714 bytes NzbDrone.Web/Content/Images/img02.jpg | Bin 0 -> 772 bytes NzbDrone.Web/Content/Images/img03.jpg | Bin 0 -> 8156 bytes NzbDrone.Web/Content/Images/img07.jpg | Bin 0 -> 6462 bytes NzbDrone.Web/Content/Office2007/editor.png | Bin 0 -> 5132 bytes NzbDrone.Web/Content/Office2007/loading.gif | Bin 0 -> 2080 bytes NzbDrone.Web/Content/Office2007/sprite.png | Bin 0 -> 3610 bytes .../Content/Office2007/treeview-line.png | Bin 0 -> 339 bytes .../Content/Office2007/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/Outlook/editor.png | Bin 0 -> 2969 bytes NzbDrone.Web/Content/Outlook/loading.gif | Bin 0 -> 2080 bytes NzbDrone.Web/Content/Outlook/sprite.png | Bin 0 -> 3818 bytes .../Content/Outlook/treeview-line.png | Bin 0 -> 339 bytes .../Content/Outlook/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/Simple/editor.png | Bin 0 -> 2927 bytes NzbDrone.Web/Content/Simple/loading.gif | Bin 0 -> 2080 bytes NzbDrone.Web/Content/Simple/sprite.png | Bin 0 -> 2956 bytes NzbDrone.Web/Content/Simple/treeview-line.png | Bin 0 -> 339 bytes .../Content/Simple/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/Site.css | 358 - NzbDrone.Web/Content/Sitefinity/editor.png | Bin 0 -> 2806 bytes NzbDrone.Web/Content/Sitefinity/loading.gif | Bin 0 -> 1282 bytes NzbDrone.Web/Content/Sitefinity/sprite.png | Bin 0 -> 3046 bytes .../Content/Sitefinity/treeview-line.png | Bin 0 -> 339 bytes .../Content/Sitefinity/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/Sunset/editor.png | Bin 0 -> 2958 bytes NzbDrone.Web/Content/Sunset/loading.gif | Bin 0 -> 1306 bytes NzbDrone.Web/Content/Sunset/sprite.png | Bin 0 -> 3325 bytes NzbDrone.Web/Content/Sunset/treeview-line.png | Bin 0 -> 339 bytes .../Content/Sunset/treeview-nodes.png | Bin 0 -> 261 bytes .../Content/TableHeaderBackground.gif | Bin 824 -> 0 bytes NzbDrone.Web/Content/Telerik/editor.png | Bin 0 -> 2842 bytes NzbDrone.Web/Content/Telerik/loading.gif | Bin 0 -> 1202 bytes NzbDrone.Web/Content/Telerik/sprite.png | Bin 0 -> 4016 bytes .../Content/Telerik/treeview-line.png | Bin 0 -> 339 bytes .../Content/Telerik/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/Vista/editor.png | Bin 0 -> 2906 bytes NzbDrone.Web/Content/Vista/loading.gif | Bin 0 -> 2055 bytes NzbDrone.Web/Content/Vista/sprite.png | Bin 0 -> 3567 bytes NzbDrone.Web/Content/Web20/editor.png | Bin 0 -> 2984 bytes NzbDrone.Web/Content/Web20/loading.gif | Bin 0 -> 1263 bytes NzbDrone.Web/Content/Web20/sprite.png | Bin 0 -> 3752 bytes NzbDrone.Web/Content/Web20/treeview-line.png | Bin 0 -> 339 bytes NzbDrone.Web/Content/Web20/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/WebBlue/editor.png | Bin 0 -> 2998 bytes NzbDrone.Web/Content/WebBlue/loading.gif | Bin 0 -> 835 bytes NzbDrone.Web/Content/WebBlue/sprite.png | Bin 0 -> 3616 bytes .../Content/WebBlue/treeview-line.png | Bin 0 -> 339 bytes .../Content/WebBlue/treeview-nodes.png | Bin 0 -> 261 bytes NzbDrone.Web/Content/Windows7/editor.png | Bin 0 -> 2913 bytes NzbDrone.Web/Content/Windows7/loading.gif | Bin 0 -> 2076 bytes NzbDrone.Web/Content/Windows7/sprite.png | Bin 0 -> 3203 bytes NzbDrone.Web/Content/menuBack.gif | Bin 820 -> 0 bytes NzbDrone.Web/Content/menuHoverBack.gif | Bin 825 -> 0 bytes NzbDrone.Web/Content/style.css | 396 + NzbDrone.Web/Content/telerik.black.min.css | 1 + NzbDrone.Web/Content/telerik.common.min.css | 1 + NzbDrone.Web/Content/telerik.default.min.css | 1 + NzbDrone.Web/Content/telerik.forest.min.css | 1 + NzbDrone.Web/Content/telerik.hay.min.css | 1 + .../Content/telerik.office2007.min.css | 1 + NzbDrone.Web/Content/telerik.outlook.min.css | 1 + NzbDrone.Web/Content/telerik.simple.min.css | 1 + .../Content/telerik.sitefinity.min.css | 1 + NzbDrone.Web/Content/telerik.sunset.min.css | 1 + NzbDrone.Web/Content/telerik.telerik.min.css | 1 + NzbDrone.Web/Content/telerik.vista.min.css | 1 + NzbDrone.Web/Content/telerik.web20.min.css | 1 + NzbDrone.Web/Content/telerik.webblue.min.css | 1 + NzbDrone.Web/Content/telerik.windows7.min.css | 1 + NzbDrone.Web/Controllers/SeriesController.cs | 7 + NzbDrone.Web/Global.asax.cs | 1 + NzbDrone.Web/Helpers/IsCurrentActionHelper.cs | 36 + NzbDrone.Web/Libraries/Telerik.Web.Mvc.dll | Bin 0 -> 585728 bytes NzbDrone.Web/Libraries/Telerik.Web.Mvc.xml | 14017 ++++++++++++++++ NzbDrone.Web/NzbDrone.Web.csproj | 127 +- .../Scripts/2010.2.825/jquery-1.4.2.min.js | 154 + .../Scripts/2010.2.825/jquery.validate.min.js | 16 + .../2010.2.825/telerik.autocomplete.min.js | 1 + .../2010.2.825/telerik.calendar.min.js | 1 + .../2010.2.825/telerik.combobox.min.js | 1 + .../Scripts/2010.2.825/telerik.common.min.js | 1 + .../2010.2.825/telerik.datepicker.min.js | 1 + .../2010.2.825/telerik.draganddrop.min.js | 1 + .../Scripts/2010.2.825/telerik.editor.min.js | 1 + .../2010.2.825/telerik.grid.editing.min.js | 1 + .../2010.2.825/telerik.grid.filtering.min.js | 1 + .../2010.2.825/telerik.grid.grouping.min.js | 1 + .../Scripts/2010.2.825/telerik.grid.min.js | 1 + .../2010.2.825/telerik.grid.resizing.min.js | 1 + .../Scripts/2010.2.825/telerik.list.min.js | 1 + .../Scripts/2010.2.825/telerik.menu.min.js | 1 + .../2010.2.825/telerik.panelbar.min.js | 1 + .../2010.2.825/telerik.tabstrip.min.js | 1 + .../Scripts/2010.2.825/telerik.textbox.min.js | 1 + .../2010.2.825/telerik.treeview.min.js | 1 + .../Scripts/2010.2.825/telerik.window.min.js | 1 + NzbDrone.Web/Views/Series/Details.aspx | 28 +- NzbDrone.Web/Views/Series/Unmapped.aspx | 22 + NzbDrone.Web/Views/Series/index.aspx | 75 +- NzbDrone.Web/Views/Settings/Index.aspx | 4 +- .../Views/Shared/LogOnUserControl.ascx | 14 - NzbDrone.Web/Views/Shared/Site.Master | 82 +- NzbDrone.Web/Web.config | 34 +- NzbDrone.sln | 14 + NzbDrone/CassiniDev-lib.dll | Bin 118784 -> 0 bytes NzbDrone/CassiniDev4-lib.dll | Bin 0 -> 118784 bytes NzbDrone/NzbDrone.csproj | 10 +- NzbDrone/Program.cs | 9 +- 285 files changed, 32688 insertions(+), 784 deletions(-) create mode 100644 CassiniDev/BuildDeploy.cmd create mode 100644 CassiniDev/CassiniDev.4.csproj create mode 100644 CassiniDev/CassiniDev.Console.csproj create mode 100644 CassiniDev/CassiniDev.Console4.csproj create mode 100644 CassiniDev/CassiniDev.Lib.csproj create mode 100644 CassiniDev/CassiniDev.Lib4.csproj create mode 100644 CassiniDev/CassiniDev.VisualStudio.csproj create mode 100644 CassiniDev/CassiniDev.VisualStudio42.csproj create mode 100644 CassiniDev/CassiniDev.VisualStudio44.csproj create mode 100644 CassiniDev/CassiniDev.csproj create mode 100644 CassiniDev/CassiniDev4-console.exe.config create mode 100644 CassiniDev/CassiniDev4-lib.dll.config create mode 100644 CassiniDev/CassiniDev4.csproj create mode 100644 CassiniDev/CassiniDev4.exe.config create mode 100644 CassiniDev/CassiniDevServerOP.cs create mode 100644 CassiniDev/CassiniServer.cs create mode 100644 CassiniDev/Configuration/CassiniDevConfigurationSection.cs create mode 100644 CassiniDev/ConsoleProgram.cs create mode 100644 CassiniDev/Core/Connection.cs create mode 100644 CassiniDev/Core/Host.cs create mode 100644 CassiniDev/Core/Messages.cs create mode 100644 CassiniDev/Core/NtlmAuth.cs create mode 100644 CassiniDev/Core/Request.cs create mode 100644 CassiniDev/Core/RequestEventArgs.cs create mode 100644 CassiniDev/Core/Server.cs create mode 100644 CassiniDev/Logging/LogInfo.cs create mode 100644 CassiniDev/Misc/CommandLine.cs create mode 100644 CassiniDev/Misc/CommandLineArguments.cs create mode 100644 CassiniDev/Misc/CommandLineParser.cs create mode 100644 CassiniDev/Misc/Common.cs create mode 100644 CassiniDev/Misc/HostsFile.cs create mode 100644 CassiniDev/Misc/Interop.cs create mode 100644 CassiniDev/Misc/NetworkUtils.cs create mode 100644 CassiniDev/Misc/ServiceInstaller.cs create mode 100644 CassiniDev/Program.cs create mode 100644 CassiniDev/Properties/AssemblyInfo.cs create mode 100644 CassiniDev/Properties/AssemblyInfo4.cs create mode 100644 CassiniDev/Resources/CassiniDev.resx create mode 100644 CassiniDev/Resources/SR.cs create mode 100644 CassiniDev/Resources/preferences-web-browser-shortcuts.ico create mode 100644 CassiniDev/Views/BodyView.Designer.cs create mode 100644 CassiniDev/Views/BodyView.cs create mode 100644 CassiniDev/Views/BodyView.resx create mode 100644 CassiniDev/Views/FormView.Designer.cs create mode 100644 CassiniDev/Views/FormView.cs create mode 100644 CassiniDev/Views/FormView.resx create mode 100644 CassiniDev/Views/LogView.Designer.cs create mode 100644 CassiniDev/Views/LogView.cs create mode 100644 CassiniDev/Views/LogView.resx create mode 100644 CassiniDev/WebDev.WebServer40.exe.config create mode 100644 CassiniDev/app.config create mode 100644 Content/Black/editor.png create mode 100644 Content/Black/loading.gif create mode 100644 Content/Black/sprite.png create mode 100644 Content/Black/treeview-line.png create mode 100644 Content/Black/treeview-nodes.png create mode 100644 Content/Default/editor.png create mode 100644 Content/Default/loading.gif create mode 100644 Content/Default/sprite.png create mode 100644 Content/Default/treeview-line.png create mode 100644 Content/Default/treeview-nodes.png create mode 100644 Content/Forest/editor.png create mode 100644 Content/Forest/loading.gif create mode 100644 Content/Forest/sprite.png create mode 100644 Content/Forest/treeview-line.png create mode 100644 Content/Forest/treeview-nodes.png create mode 100644 Content/Hay/editor.png create mode 100644 Content/Hay/loading.gif create mode 100644 Content/Hay/sprite.png create mode 100644 Content/Hay/treeview-line.png create mode 100644 Content/Hay/treeview-nodes.png create mode 100644 Content/Images/img01.jpg create mode 100644 Content/Images/img02.jpg create mode 100644 Content/Images/img03.jpg create mode 100644 Content/Images/img04.jpg create mode 100644 Content/Images/img07.jpg create mode 100644 Content/Office2007/editor.png create mode 100644 Content/Office2007/loading.gif create mode 100644 Content/Office2007/sprite.png create mode 100644 Content/Office2007/treeview-line.png create mode 100644 Content/Office2007/treeview-nodes.png create mode 100644 Content/Outlook/editor.png create mode 100644 Content/Outlook/loading.gif create mode 100644 Content/Outlook/sprite.png create mode 100644 Content/Outlook/treeview-line.png create mode 100644 Content/Outlook/treeview-nodes.png create mode 100644 Content/Simple/editor.png create mode 100644 Content/Simple/loading.gif create mode 100644 Content/Simple/sprite.png create mode 100644 Content/Simple/treeview-line.png create mode 100644 Content/Simple/treeview-nodes.png create mode 100644 Content/Sitefinity/editor.png create mode 100644 Content/Sitefinity/loading.gif create mode 100644 Content/Sitefinity/sprite.png create mode 100644 Content/Sitefinity/treeview-line.png create mode 100644 Content/Sitefinity/treeview-nodes.png create mode 100644 Content/Sunset/editor.png create mode 100644 Content/Sunset/loading.gif create mode 100644 Content/Sunset/sprite.png create mode 100644 Content/Sunset/treeview-line.png create mode 100644 Content/Sunset/treeview-nodes.png create mode 100644 Content/Telerik/editor.png create mode 100644 Content/Telerik/loading.gif create mode 100644 Content/Telerik/sprite.png create mode 100644 Content/Telerik/treeview-line.png create mode 100644 Content/Telerik/treeview-nodes.png create mode 100644 Content/Vista/editor.png create mode 100644 Content/Vista/loading.gif create mode 100644 Content/Vista/sprite.png create mode 100644 Content/Web20/editor.png create mode 100644 Content/Web20/loading.gif create mode 100644 Content/Web20/sprite.png create mode 100644 Content/Web20/treeview-line.png create mode 100644 Content/Web20/treeview-nodes.png create mode 100644 Content/WebBlue/editor.png create mode 100644 Content/WebBlue/loading.gif create mode 100644 Content/WebBlue/sprite.png create mode 100644 Content/WebBlue/treeview-line.png create mode 100644 Content/WebBlue/treeview-nodes.png create mode 100644 Content/Windows7/editor.png create mode 100644 Content/Windows7/loading.gif create mode 100644 Content/Windows7/sprite.png create mode 100644 Content/style.css create mode 100644 Content/telerik.black.min.css create mode 100644 Content/telerik.common.min.css create mode 100644 Content/telerik.default.min.css create mode 100644 Content/telerik.forest.min.css create mode 100644 Content/telerik.hay.min.css create mode 100644 Content/telerik.office2007.min.css create mode 100644 Content/telerik.outlook.min.css create mode 100644 Content/telerik.simple.min.css create mode 100644 Content/telerik.sitefinity.min.css create mode 100644 Content/telerik.sunset.min.css create mode 100644 Content/telerik.telerik.min.css create mode 100644 Content/telerik.vista.min.css create mode 100644 Content/telerik.web20.min.css create mode 100644 Content/telerik.webblue.min.css create mode 100644 Content/telerik.windows7.min.css delete mode 100644 NzbDrone.Core/Libraries/CassiniDev-lib.dll create mode 100644 NzbDrone.Core/Libraries/NLog.Extended.dll create mode 100644 NzbDrone.Core/Libraries/NLog.Extended.xml delete mode 100644 NzbDrone.Web/Content/Background.jpg delete mode 100644 NzbDrone.Web/Content/BannerBottomEdge.gif delete mode 100644 NzbDrone.Web/Content/BannerTopEdge.gif create mode 100644 NzbDrone.Web/Content/Black/editor.png create mode 100644 NzbDrone.Web/Content/Black/loading.gif create mode 100644 NzbDrone.Web/Content/Black/sprite.png create mode 100644 NzbDrone.Web/Content/Black/treeview-line.png create mode 100644 NzbDrone.Web/Content/Black/treeview-nodes.png delete mode 100644 NzbDrone.Web/Content/ButtonBack.gif create mode 100644 NzbDrone.Web/Content/Default/editor.png create mode 100644 NzbDrone.Web/Content/Default/loading.gif create mode 100644 NzbDrone.Web/Content/Default/sprite.png create mode 100644 NzbDrone.Web/Content/Default/treeview-line.png create mode 100644 NzbDrone.Web/Content/Default/treeview-nodes.png delete mode 100644 NzbDrone.Web/Content/Error.png create mode 100644 NzbDrone.Web/Content/Forest/editor.png create mode 100644 NzbDrone.Web/Content/Forest/loading.gif create mode 100644 NzbDrone.Web/Content/Forest/sprite.png create mode 100644 NzbDrone.Web/Content/Forest/treeview-line.png create mode 100644 NzbDrone.Web/Content/Forest/treeview-nodes.png create mode 100644 NzbDrone.Web/Content/Hay/editor.png create mode 100644 NzbDrone.Web/Content/Hay/loading.gif create mode 100644 NzbDrone.Web/Content/Hay/sprite.png create mode 100644 NzbDrone.Web/Content/Hay/treeview-line.png create mode 100644 NzbDrone.Web/Content/Hay/treeview-nodes.png create mode 100644 NzbDrone.Web/Content/Images/img01.jpg create mode 100644 NzbDrone.Web/Content/Images/img02.jpg create mode 100644 NzbDrone.Web/Content/Images/img03.jpg create mode 100644 NzbDrone.Web/Content/Images/img07.jpg create mode 100644 NzbDrone.Web/Content/Office2007/editor.png create mode 100644 NzbDrone.Web/Content/Office2007/loading.gif create mode 100644 NzbDrone.Web/Content/Office2007/sprite.png create mode 100644 NzbDrone.Web/Content/Office2007/treeview-line.png create mode 100644 NzbDrone.Web/Content/Office2007/treeview-nodes.png create mode 100644 NzbDrone.Web/Content/Outlook/editor.png create mode 100644 NzbDrone.Web/Content/Outlook/loading.gif create mode 100644 NzbDrone.Web/Content/Outlook/sprite.png create mode 100644 NzbDrone.Web/Content/Outlook/treeview-line.png create mode 100644 NzbDrone.Web/Content/Outlook/treeview-nodes.png create mode 100644 NzbDrone.Web/Content/Simple/editor.png create mode 100644 NzbDrone.Web/Content/Simple/loading.gif create mode 100644 NzbDrone.Web/Content/Simple/sprite.png create mode 100644 NzbDrone.Web/Content/Simple/treeview-line.png create mode 100644 NzbDrone.Web/Content/Simple/treeview-nodes.png delete mode 100644 NzbDrone.Web/Content/Site.css create mode 100644 NzbDrone.Web/Content/Sitefinity/editor.png create mode 100644 NzbDrone.Web/Content/Sitefinity/loading.gif create mode 100644 NzbDrone.Web/Content/Sitefinity/sprite.png create mode 100644 NzbDrone.Web/Content/Sitefinity/treeview-line.png create mode 100644 NzbDrone.Web/Content/Sitefinity/treeview-nodes.png create mode 100644 NzbDrone.Web/Content/Sunset/editor.png create mode 100644 NzbDrone.Web/Content/Sunset/loading.gif create mode 100644 NzbDrone.Web/Content/Sunset/sprite.png create mode 100644 NzbDrone.Web/Content/Sunset/treeview-line.png create mode 100644 NzbDrone.Web/Content/Sunset/treeview-nodes.png delete mode 100644 NzbDrone.Web/Content/TableHeaderBackground.gif create mode 100644 NzbDrone.Web/Content/Telerik/editor.png create mode 100644 NzbDrone.Web/Content/Telerik/loading.gif create mode 100644 NzbDrone.Web/Content/Telerik/sprite.png create mode 100644 NzbDrone.Web/Content/Telerik/treeview-line.png create mode 100644 NzbDrone.Web/Content/Telerik/treeview-nodes.png create mode 100644 NzbDrone.Web/Content/Vista/editor.png create mode 100644 NzbDrone.Web/Content/Vista/loading.gif create mode 100644 NzbDrone.Web/Content/Vista/sprite.png create mode 100644 NzbDrone.Web/Content/Web20/editor.png create mode 100644 NzbDrone.Web/Content/Web20/loading.gif create mode 100644 NzbDrone.Web/Content/Web20/sprite.png create mode 100644 NzbDrone.Web/Content/Web20/treeview-line.png create mode 100644 NzbDrone.Web/Content/Web20/treeview-nodes.png create mode 100644 NzbDrone.Web/Content/WebBlue/editor.png create mode 100644 NzbDrone.Web/Content/WebBlue/loading.gif create mode 100644 NzbDrone.Web/Content/WebBlue/sprite.png create mode 100644 NzbDrone.Web/Content/WebBlue/treeview-line.png create mode 100644 NzbDrone.Web/Content/WebBlue/treeview-nodes.png create mode 100644 NzbDrone.Web/Content/Windows7/editor.png create mode 100644 NzbDrone.Web/Content/Windows7/loading.gif create mode 100644 NzbDrone.Web/Content/Windows7/sprite.png delete mode 100644 NzbDrone.Web/Content/menuBack.gif delete mode 100644 NzbDrone.Web/Content/menuHoverBack.gif create mode 100644 NzbDrone.Web/Content/style.css create mode 100644 NzbDrone.Web/Content/telerik.black.min.css create mode 100644 NzbDrone.Web/Content/telerik.common.min.css create mode 100644 NzbDrone.Web/Content/telerik.default.min.css create mode 100644 NzbDrone.Web/Content/telerik.forest.min.css create mode 100644 NzbDrone.Web/Content/telerik.hay.min.css create mode 100644 NzbDrone.Web/Content/telerik.office2007.min.css create mode 100644 NzbDrone.Web/Content/telerik.outlook.min.css create mode 100644 NzbDrone.Web/Content/telerik.simple.min.css create mode 100644 NzbDrone.Web/Content/telerik.sitefinity.min.css create mode 100644 NzbDrone.Web/Content/telerik.sunset.min.css create mode 100644 NzbDrone.Web/Content/telerik.telerik.min.css create mode 100644 NzbDrone.Web/Content/telerik.vista.min.css create mode 100644 NzbDrone.Web/Content/telerik.web20.min.css create mode 100644 NzbDrone.Web/Content/telerik.webblue.min.css create mode 100644 NzbDrone.Web/Content/telerik.windows7.min.css create mode 100644 NzbDrone.Web/Helpers/IsCurrentActionHelper.cs create mode 100644 NzbDrone.Web/Libraries/Telerik.Web.Mvc.dll create mode 100644 NzbDrone.Web/Libraries/Telerik.Web.Mvc.xml create mode 100644 NzbDrone.Web/Scripts/2010.2.825/jquery-1.4.2.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/jquery.validate.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.autocomplete.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.calendar.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.combobox.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.common.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.datepicker.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.draganddrop.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.editor.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.grid.editing.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.grid.filtering.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.grid.grouping.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.grid.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.grid.resizing.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.list.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.menu.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.panelbar.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.tabstrip.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.textbox.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.treeview.min.js create mode 100644 NzbDrone.Web/Scripts/2010.2.825/telerik.window.min.js create mode 100644 NzbDrone.Web/Views/Series/Unmapped.aspx delete mode 100644 NzbDrone.Web/Views/Shared/LogOnUserControl.ascx delete mode 100644 NzbDrone/CassiniDev-lib.dll create mode 100644 NzbDrone/CassiniDev4-lib.dll diff --git a/CassiniDev/BuildDeploy.cmd b/CassiniDev/BuildDeploy.cmd new file mode 100644 index 000000000..22683d94f --- /dev/null +++ b/CassiniDev/BuildDeploy.cmd @@ -0,0 +1,7 @@ +del ..\deploy\*.* /s/q +xcopy bin\x86 ..\deploy /S /I /F /Y ..\deploy.txt +copy ..\*.txt ..\deploy\ /Y diff --git a/CassiniDev/CassiniDev.4.csproj b/CassiniDev/CassiniDev.4.csproj new file mode 100644 index 000000000..972d2f802 --- /dev/null +++ b/CassiniDev/CassiniDev.4.csproj @@ -0,0 +1,180 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9AAD02EE-FE79-46BE-87EB-E3D2A376A043} + WinExe + Properties + CassiniDev + CassiniDev4 + v4.0 + 512 + true + ..\CasssiniDev-DevKey.snk + Resources\preferences-web-browser-shortcuts.ico + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + + + + true + bin\x86\Debug\ + TRACE;DEBUG;NET40 + true + full + x86 + bin\Debug\CassiniDev4\CassiniDev4.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + false + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + + + bin\x86\Release\ + TRACE;NET40 + true + true + pdbonly + x86 + bin\Release\CassiniDev4\CassiniDev4.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + false + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + + + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + + + + UserControl + + + BodyView.cs + + + Form + + + FormView.cs + + + Form + + + LogView.cs + + + + + + BodyView.cs + + + FormView.cs + + + LogView.cs + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + Always + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev.Console.csproj b/CassiniDev/CassiniDev.Console.csproj new file mode 100644 index 000000000..49b6e70d6 --- /dev/null +++ b/CassiniDev/CassiniDev.Console.csproj @@ -0,0 +1,105 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {539F0304-F14A-413F-A56A-AFB7724EA1A7} + Exe + Properties + CassiniDev + CassiniDev-console + v3.5 + 512 + + + + + + + + + true + ..\CasssiniDev-DevKey.snk + Resources\preferences-web-browser-shortcuts.ico + + + true + bin\x86\Debug\ + TRACE;DEBUG + true + full + x86 + true + GlobalSuppressions.cs + prompt + + + bin\x86\Release\ + TRACE;CONSOLE + true + true + pdbonly + x86 + true + GlobalSuppressions.cs + prompt + + + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev.Console4.csproj b/CassiniDev/CassiniDev.Console4.csproj new file mode 100644 index 000000000..0148be558 --- /dev/null +++ b/CassiniDev/CassiniDev.Console4.csproj @@ -0,0 +1,156 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {539F0304-F14A-413F-A56A-AFB7724EA1A7} + Exe + Properties + CassiniDev + CassiniDev4-console + v4.0 + 512 + + + + + + + + + true + ..\CasssiniDev-DevKey.snk + Resources\preferences-web-browser-shortcuts.ico + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + bin\x86\Debug\ + TRACE;DEBUG;NET40 + true + full + x86 + bin\Debug\CassiniDev4.Console\CassiniDev4-console.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + true + + + bin\x86\Release\ + TRACE;NET40 + true + true + pdbonly + x86 + bin\Release\CassiniDev4.Console\CassiniDev4-console.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + true + + + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + + + + + + + + + + + Always + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev.Lib.csproj b/CassiniDev/CassiniDev.Lib.csproj new file mode 100644 index 000000000..1d06077de --- /dev/null +++ b/CassiniDev/CassiniDev.Lib.csproj @@ -0,0 +1,96 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9AAD02EE-FE79-46BE-87EB-E3D2A376A043} + Library + Properties + CassiniDev + CassiniDev-lib + v3.5 + 512 + true + ..\CasssiniDev-DevKey.snk + Resources\preferences-web-browser-shortcuts.ico + + + true + bin\x86\Debug\ + DEBUG;TRACE + true + full + x86 + true + GlobalSuppressions.cs + prompt + + + bin\x86\Release\ + TRACE + true + true + pdbonly + x86 + true + GlobalSuppressions.cs + prompt + + + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + + Component + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev.Lib4.csproj b/CassiniDev/CassiniDev.Lib4.csproj new file mode 100644 index 000000000..cebce2220 --- /dev/null +++ b/CassiniDev/CassiniDev.Lib4.csproj @@ -0,0 +1,148 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {070AE36D-4CE1-4708-BD0F-2896A6F117FC} + Library + Properties + CassiniDev + CassiniDev4-lib + v4.0 + 512 + false + ..\CasssiniDev-DevKey.snk + Resources\preferences-web-browser-shortcuts.ico + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + bin\x86\Debug\ + TRACE;DEBUG;NET40 + true + full + x86 + bin\Debug\CassiniDev4.Lib\CassiniDev4-lib.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + true + + + bin\x86\Release\ + TRACE;NET40 + true + true + pdbonly + x86 + bin\Release\CassiniDev4.Lib\CassiniDev4-lib.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + false + + + + + + + 3.5 + + + + + + + + + + + + + + + + + + Code + + + Code + + + + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + Always + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev.VisualStudio.csproj b/CassiniDev/CassiniDev.VisualStudio.csproj new file mode 100644 index 000000000..e3b6b11bd --- /dev/null +++ b/CassiniDev/CassiniDev.VisualStudio.csproj @@ -0,0 +1,177 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {F50EB799-6DED-4906-9DB0-B8FBE5C14028} + WinExe + Properties + CassiniDev + WebDev.WebServer + v3.5 + 512 + Resources\preferences-web-browser-shortcuts.ico + true + ..\CasssiniDev-DevKey.snk + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + bin\x86\Debug\ + TRACE;DEBUG + true + full + x86 + true + GlobalSuppressions.cs + prompt + + + bin\x86\Release\ + TRACE;GUI + true + true + pdbonly + x86 + true + GlobalSuppressions.cs + prompt + + + + + + + 3.5 + + + + + + + + + + + + + + + Component + + + Code + + + + + + + + + + + + + + + + + + + + UserControl + + + BodyView.cs + + + Form + + + FormView.cs + + + Form + + + LogView.cs + + + + + + BodyView.cs + + + FormView.cs + + + LogView.cs + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev.VisualStudio42.csproj b/CassiniDev/CassiniDev.VisualStudio42.csproj new file mode 100644 index 000000000..d9e244ef3 --- /dev/null +++ b/CassiniDev/CassiniDev.VisualStudio42.csproj @@ -0,0 +1,181 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {06764838-9B08-4254-AFA6-2B790E110DFB} + WinExe + Properties + CassiniDev + WebDev.WebServer20 + v3.5 + 512 + Resources\preferences-web-browser-shortcuts.ico + true + ..\CasssiniDev-DevKey.snk + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + bin\x86\Debug\ + TRACE;DEBUG + true + full + x86 + true + GlobalSuppressions.cs + prompt + + + bin\x86\Release\ + TRACE;GUI + true + true + pdbonly + x86 + true + GlobalSuppressions.cs + prompt + + + + + + + 3.5 + + + False + True + + + + + + False + + + + + + + + + + Component + + + Code + + + + + + + + + + + + + + + + + + + + UserControl + + + BodyView.cs + + + Form + + + FormView.cs + + + Form + + + LogView.cs + + + + + + BodyView.cs + + + FormView.cs + + + LogView.cs + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev.VisualStudio44.csproj b/CassiniDev/CassiniDev.VisualStudio44.csproj new file mode 100644 index 000000000..07cdbb347 --- /dev/null +++ b/CassiniDev/CassiniDev.VisualStudio44.csproj @@ -0,0 +1,190 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {73C76E4C-426C-45C2-9D37-1E46FA29CE66} + WinExe + Properties + CassiniDev + WebDev.WebServer40 + v4.0 + 512 + Resources\preferences-web-browser-shortcuts.ico + true + ..\CasssiniDev-DevKey.snk + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + bin\x86\Debug\ + TRACE;DEBUG;NET40 + true + full + x86 + bin\Debug\DevServer\10.0\WebDev.WebServer40.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + true + + + bin\x86\Release\ + TRACE;NET40 + true + true + pdbonly + x86 + bin\Release\DevServer\10.0\WebDev.WebServer40.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + true + + + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + + + + UserControl + + + BodyView.cs + + + Form + + + FormView.cs + + + Form + + + HelpView.cs + + + Form + + + LogView.cs + + + + + + BodyView.cs + + + FormView.cs + + + HelpView.cs + + + LogView.cs + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + Always + Designer + + + + + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev.csproj b/CassiniDev/CassiniDev.csproj new file mode 100644 index 000000000..e7050b015 --- /dev/null +++ b/CassiniDev/CassiniDev.csproj @@ -0,0 +1,200 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {0D9F0FEA-45F7-4CE4-9868-6FB9BBE3DD4C} + WinExe + Properties + CassiniDev + CassiniDev + v3.5 + 512 + Resources\preferences-web-browser-shortcuts.ico + + + + + + + + + + + true + ..\CasssiniDev-DevKey.snk + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + bin\x86\Debug\ + TRACE;DEBUG + true + full + x86 + true + GlobalSuppressions.cs + prompt + + + bin\x86\Release\ + TRACE + true + true + pdbonly + x86 + true + GlobalSuppressions.cs + prompt + + + + + + + 3.5 + + + + + + + + + + + + Component + + + + + + + + + UserControl + + + BodyView.cs + + + + Form + + + LogView.cs + + + + + + + + + + Form + + + FormView.cs + + + + + + + + + + + + + + + + + + + + + + + BodyView.cs + + + LogView.cs + + + FormView.cs + + + Designer + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev4-console.exe.config b/CassiniDev/CassiniDev4-console.exe.config new file mode 100644 index 000000000..22ab261b3 --- /dev/null +++ b/CassiniDev/CassiniDev4-console.exe.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev4-lib.dll.config b/CassiniDev/CassiniDev4-lib.dll.config new file mode 100644 index 000000000..22ab261b3 --- /dev/null +++ b/CassiniDev/CassiniDev4-lib.dll.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev4.csproj b/CassiniDev/CassiniDev4.csproj new file mode 100644 index 000000000..d52911de2 --- /dev/null +++ b/CassiniDev/CassiniDev4.csproj @@ -0,0 +1,163 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {0D9F0FEA-45F7-4CE4-9868-6FB9BBE3DD4C} + WinExe + Properties + CassiniDev + CassiniDev + v3.5 + 512 + Resources\earth_network.ico + + + + + + + + + + + true + ..\CasssiniDev-DevKey.snk + + + + + true + full + false + bin\Debug\ + TRACE;DEBUG + prompt + 4 + + + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + + + + 3.5 + + + + False + ..\lib\System.Data.SQLite.dll + False + + + + + + + + Form + + + HelpView.cs + + + + + + + + + UserControl + + + BodyView.cs + + + + + + Form + + + LogView.cs + + + + + + + + + + + Form + + + FormView.cs + + + + + + + + + + + + + + + + + + + + + Always + + + Always + + + + + BodyView.cs + + + HelpView.cs + + + LogView.cs + + + FormView.cs + + + Designer + + + + + + xcopy "$(TargetDir)$(TargetName).*" "$(ProjectDir)..\deploy\$(ConfigurationName)\" /S /I /F /Y <nul: + + \ No newline at end of file diff --git a/CassiniDev/CassiniDev4.exe.config b/CassiniDev/CassiniDev4.exe.config new file mode 100644 index 000000000..22ab261b3 --- /dev/null +++ b/CassiniDev/CassiniDev4.exe.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/CassiniDev/CassiniDevServerOP.cs b/CassiniDev/CassiniDevServerOP.cs new file mode 100644 index 000000000..dda970556 --- /dev/null +++ b/CassiniDev/CassiniDevServerOP.cs @@ -0,0 +1,241 @@ +// /* ********************************************************************************** +// * +// * Copyright (c) Sky Sanders. All rights reserved. +// * +// * This source code is subject to terms and conditions of the Microsoft Public +// * License (Ms-PL). A copy of the license can be found in the license.htm file +// * included in this distribution. +// * +// * You must not remove this notice, or any other, from this software. +// * +// * **********************************************************************************/ +using System; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Threading; + +namespace CassiniDev +{ + + /// + /// Made a go at spinning the server up from this process but after dealing with + /// irratic behaviour regarding apartment state, platform concerns, unloaded app domains, + /// and all the other issues that you can find that people struggle with I just decided + /// to strictly format the console app's output and just spin up an external process. + /// Seems robust so far. + /// + public class CassiniDevServerOP + { + //private bool _disposed; + + private string _hostname; + private StreamWriter _input; + private IPAddress _ipAddress; + private Thread _outputThread; + private string _rootUrl; + private Process _serverProcess; + private const int TimeOut = 60000; + private const int WaitForPort = 5000; + + + /// + /// + public void Dispose() + { + { + if (_serverProcess != null) + { + StopServer(); + } + } + } + + + /// + /// The root URL of the running web application + /// + public string RootUrl + { + get { return _rootUrl; } + } + + /// + /// Combine the RootUrl of the running web application with the relative url specified. + /// + /// + /// + public string NormalizeUrl(string relativeUrl) + { + return CassiniNetworkUtils.NormalizeUrl(RootUrl, relativeUrl); + } + + /// + /// Will start specified application as "localhost" on loopback and first available port in the range 8000-10000 with vpath "/" + /// + /// Physical path to application. + public void StartServer(string applicationPath) + { + StartServer(applicationPath, CassiniNetworkUtils.GetAvailablePort(8000, 10000, IPAddress.Loopback, true), "/", "localhost"); + } + + /// + /// Will start specified application on loopback + /// + /// Physical path to application. + /// Port to listen on. + /// Optional. defaults to "/" + /// Optional. Is used to construct RootUrl. Defaults to "localhost" + public void StartServer(string applicationPath, int port, string virtualPath, string hostName) + { + // WebHost.Server will not run on any other IP + IPAddress ipAddress = IPAddress.Loopback; + + if (!CassiniNetworkUtils.IsPortAvailable(ipAddress, port)) + { + throw new Exception(string.Format("Port {0} is in use.", port)); + } + + applicationPath = Path.GetFullPath(applicationPath); + + virtualPath = String.Format("/{0}/", (virtualPath ?? string.Empty).Trim('/')).Replace("//", "/"); + hostName = string.IsNullOrEmpty(hostName) ? "localhost" : hostName; + + StartServer(applicationPath, ipAddress, port, virtualPath, hostName); + + + } + /// + /// + /// Physical path to application. + /// IP to listen on. + /// Port to listen on. + /// Optional. default value '/' + /// Optional. Used to construct RootUrl. Defaults to 'localhost' + public virtual void StartServer(string applicationPath, IPAddress ipAddress, int port, string virtualPath, string hostName) + { + + _hostname = hostName; + _ipAddress = ipAddress; + + // massage and validate arguments + if (string.IsNullOrEmpty(virtualPath)) + { + virtualPath = "/"; + } + if (!virtualPath.StartsWith("/")) + { + virtualPath = "/" + virtualPath; + } + if (_serverProcess != null) + { + throw new InvalidOperationException("Server is running"); + } + + + string commandLine = (new CommandLineArguments + { + Port = port, + ApplicationPath = string.Format("\"{0}\"", Path.GetFullPath(applicationPath).Trim('\"').TrimEnd('\\')), + HostName = hostName, + IPAddress = ipAddress.ToString(), + VirtualPath = string.Format("\"{0}\"", virtualPath), + TimeOut = TimeOut, + WaitForPort = WaitForPort, + IPMode = IPMode.Specific, + PortMode = PortMode.Specific + }).ToString(); + + + _serverProcess = new Process + { + StartInfo = new ProcessStartInfo + { + UseShellExecute = false, + ErrorDialog = false, + CreateNoWindow = true, + RedirectStandardOutput = true, + RedirectStandardInput = true, +#if NET40 //TODO: find out the real flag + FileName = "CassiniDev4-console.exe", +#else + FileName = "CassiniDev-console.exe", +#endif + + Arguments = commandLine, + WorkingDirectory = Environment.CurrentDirectory + } + }; + + // we are going to monitor each line of the output until we get a start or error signal + // and then just ignore the rest + + string line = null; + + _serverProcess.Start(); + + _outputThread = new Thread(() => + { + string l = _serverProcess.StandardOutput.ReadLine(); + while (l != null) + { + if (l.StartsWith("started:") || l.StartsWith("error:")) + { + line = l; + } + l = _serverProcess.StandardOutput.ReadLine(); + } + }); + _outputThread.Start(); + + // use StandardInput to send the newline to stop the server when required + _input = _serverProcess.StandardInput; + + // block until we get a signal + while (line == null) + { + Thread.Sleep(10); + } + + if (!line.StartsWith("started:")) + { + throw new Exception(string.Format("Could not start server: {0}", line)); + } + + // line is the root url + _rootUrl = line.Substring(line.IndexOf(':') + 1); + } + /// + /// Stops the server, if running. + /// + public virtual void StopServer() + { + StopServer(100); + } + + /// + /// Stops the server, if running. + /// + protected virtual void StopServer(int delay) + { + Thread.Sleep(delay); + if (_serverProcess != null) + { + try + { + _input.WriteLine(); + _serverProcess.WaitForExit(10000); + Thread.Sleep(10); + } + catch + { + } + finally + { + _serverProcess.Dispose(); + _serverProcess = null; + } + } + } + } +} diff --git a/CassiniDev/CassiniServer.cs b/CassiniDev/CassiniServer.cs new file mode 100644 index 000000000..956298627 --- /dev/null +++ b/CassiniDev/CassiniServer.cs @@ -0,0 +1,140 @@ +// /* ********************************************************************************** +// * +// * Copyright (c) Sky Sanders. All rights reserved. +// * +// * This source code is subject to terms and conditions of the Microsoft Public +// * License (Ms-PL). A copy of the license can be found in the license.htm file +// * included in this distribution. +// * +// * You must not remove this notice, or any other, from this software. +// * +// * **********************************************************************************/ +using System; +using System.Globalization; +using System.IO; +using System.Net; + + +namespace CassiniDev +{ + public class CassiniDevServer + { + + private Server _server; + + #region Implementation of IDisposable + + /// + /// + public void Dispose() + { + if (_server != null) + { + StopServer(); + _server.Dispose(); + _server = null; + } + } + + #endregion + + + + + + /// + /// The root URL of the running web application + /// + public string RootUrl + { + get { return string.Format(CultureInfo.InvariantCulture, "http://{0}:{1}{2}", _server.HostName, _server.Port, _server.VirtualPath); } + + } + /// + /// Combine the RootUrl of the running web application with the relative url + /// specified. + /// + /// + /// + public string NormalizeUrl(string relativeUrl) + { + return CassiniNetworkUtils.NormalizeUrl(RootUrl, relativeUrl); + } + + /// + /// Will start specified application as "localhost" on loopback and first available port in the range 8000-10000 with vpath "/" + /// + /// Physical path to application. + public void StartServer(string applicationPath) + { + StartServer(applicationPath, CassiniNetworkUtils.GetAvailablePort(8000, 10000, IPAddress.Loopback, true), "/", "localhost"); + } + + /// + /// Will start specified application on loopback + /// + /// Physical path to application. + /// Port to listen on. + /// Optional. defaults to "/" + /// Optional. Is used to construct RootUrl. Defaults to "localhost" + public void StartServer(string applicationPath, int port, string virtualPath, string hostName) + { + // WebHost.Server will not run on any other IP + IPAddress ipAddress = IPAddress.Loopback; + + if (!CassiniNetworkUtils.IsPortAvailable(ipAddress, port)) + { + throw new Exception(string.Format("Port {0} is in use.", port)); + } + + applicationPath = Path.GetFullPath(applicationPath); + + virtualPath = String.Format("/{0}/", (virtualPath ?? string.Empty).Trim('/')).Replace("//", "/"); + hostName = string.IsNullOrEmpty(hostName) ? "localhost" : hostName; + + StartServer(applicationPath, ipAddress, port, virtualPath, hostName); + + + } + + /// + /// + /// Physical path to application. + /// IP to listen on. + /// Port to listen on. + /// Optional. default value '/' + /// Optional. Used to construct RootUrl. Defaults to 'localhost' + public void StartServer(string applicationPath, IPAddress ipAddress, int port, string virtualPath, string hostname) + { + if (_server != null) + { + throw new InvalidOperationException("Server already started"); + } + _server = new Server(port, virtualPath, applicationPath, ipAddress,hostname, 60000); + + try + { + _server.Start(); + } + catch (Exception ex) + { + + throw new InvalidOperationException("Error starting server instance.", ex); + } + + } + + /// + /// Stops the server. + /// + public void StopServer() + { + if (_server != null) + { + _server.ShutDown(); + } + } + + + } +} diff --git a/CassiniDev/Configuration/CassiniDevConfigurationSection.cs b/CassiniDev/Configuration/CassiniDevConfigurationSection.cs new file mode 100644 index 000000000..78bfd8055 --- /dev/null +++ b/CassiniDev/Configuration/CassiniDevConfigurationSection.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Linq; +using System.Net; +using System.Text; + +namespace CassiniDev.Configuration +{ + public class CassiniDevConfigurationSection : ConfigurationSection + { + [ConfigurationProperty("profiles")] + public CassiniDevProfileElementCollection Profiles + { + get + { + return (CassiniDevProfileElementCollection)this["profiles"]; + } + } + } + + [ConfigurationCollection(typeof(CassiniDevProfileElement), AddItemName = "profile", CollectionType = ConfigurationElementCollectionType.BasicMap)] + public class CassiniDevProfileElementCollection : ConfigurationElementCollection + { + protected override ConfigurationElement CreateNewElement() + { + return new CassiniDevProfileElement(); + } + + protected override object GetElementKey(ConfigurationElement element) + { + return ((CassiniDevProfileElement)element).Port; + } + } + public class CassiniDevProfileElement : ConfigurationElement + { + /// + /// Port is used as profile selector + /// + [ConfigurationProperty("port", DefaultValue = "*", IsKey = true, IsRequired = true)] + public string Port + { + get + { + return (string)this["port"]; + } + set + { + this["port"] = value; + } + } + + [ConfigurationProperty("path")] + public string Path + { + get + { + return (string)this["path"]; + } + set + { + this["path"] = value; + } + } + + + + + [ConfigurationProperty("hostName")] + public string HostName + { + get + { + return (string)this["hostName"]; + } + set + { + this["hostName"] = value; + } + } + + [ConfigurationProperty("ip")] + public string IpAddress + { + get + { + return (string)this["ip"]; + } + set + { + this["ip"] = value; + } + } + + [ConfigurationProperty("ipMode", DefaultValue = CassiniDev.IPMode.Loopback)] + public IPMode IpMode + { + get + { + return (IPMode)this["ipMode"]; + } + set + { + this["ipMode"] = value; + } + } + + [ConfigurationProperty("v6", DefaultValue = false)] + public bool IpV6 + { + get + { + return (bool)this["v6"]; + } + set + { + this["v6"] = value; + } + } + } +} diff --git a/CassiniDev/ConsoleProgram.cs b/CassiniDev/ConsoleProgram.cs new file mode 100644 index 000000000..94e6a3adb --- /dev/null +++ b/CassiniDev/ConsoleProgram.cs @@ -0,0 +1,156 @@ +// /* ********************************************************************************** +// * +// * Copyright (c) Sky Sanders. All rights reserved. +// * +// * This source code is subject to terms and conditions of the Microsoft Public +// * License (Ms-PL). A copy of the license can be found in the license.htm file +// * included in this distribution. +// * +// * You must not remove this notice, or any other, from this software. +// * +// * **********************************************************************************/ +using System; +using System.Collections; +using System.Configuration.Install; +using System.Net; + + + + +namespace CassiniDev +{ + public class Program + { + [STAThread] + private static void Main(string[] cmdLine) + { + CommandLineArguments args = new CommandLineArguments(); + + + if (!CommandLineParser.ParseArgumentsWithUsage(cmdLine, args)) + { + Environment.Exit(-1); + } + else + { + switch (args.RunMode) + { + case RunMode.Server: + IPAddress ip=IPAddress.Loopback; + try + { + args.Validate(); + + ip = CommandLineArguments.ParseIP(args.IPMode, args.IPv6, args.IPAddress); + int port = args.PortMode == PortMode.FirstAvailable ? + CassiniNetworkUtils.GetAvailablePort(args.PortRangeStart, args.PortRangeEnd, ip, true) : + args.Port; + + if(args.AddHost) + { + HostsFile.AddHostEntry(ip.ToString(), args.HostName); + } + + using (var server = + new Server(port, args.VirtualPath, args.ApplicationPath, + ip, args.HostName, args.TimeOut)) + { + server.Start(); + Console.WriteLine("started: {0}\r\nPress Enter key to exit....", server.RootUrl); + Console.ReadLine(); + server.ShutDown(); + } + } + catch (CassiniException ex) + { + Console.WriteLine("error:{0} {1}", + ex.Field == ErrorField.None + ? ex.GetType().Name + : ex.Field.ToString(), ex.Message); + } + catch (Exception ex2) + { + Console.WriteLine("error:{0}", ex2.Message); + Console.WriteLine(CommandLineParser.ArgumentsUsage(typeof(CommandLineArguments))); + } + finally + { + if (args.AddHost) + { + HostsFile.RemoveHostEntry(ip.ToString(), args.HostName); + } + + } + break; + case RunMode.Hostsfile: + SetHostsFile(args); + break; + } + } + } + + private static void SetHostsFile(CommandLineArguments sargs) + { + try + { + if (sargs.AddHost) + { + HostsFile.AddHostEntry(sargs.IPAddress, sargs.HostName); + } + else + { + HostsFile.RemoveHostEntry(sargs.IPAddress, sargs.HostName); + } + } + catch (UnauthorizedAccessException) + { + Environment.Exit(-1); + } + catch + { + Environment.Exit(-2); + } + } + } + + public sealed class ServiceUtil + { + static void Install(bool undo, string[] args) + { + try + { + Console.WriteLine(undo ? "uninstalling" : "installing"); + using (AssemblyInstaller inst = new AssemblyInstaller(typeof(Program).Assembly, args)) + { + IDictionary state = new Hashtable(); + inst.UseNewContext = true; + try + { + if (undo) + { + inst.Uninstall(state); + } + else + { + inst.Install(state); + inst.Commit(state); + } + } + catch + { + try + { + inst.Rollback(state); + } + catch { } + throw; + } + } + } + catch (Exception ex) + { + Console.Error.WriteLine(ex.Message); + } + } + } +} \ No newline at end of file diff --git a/CassiniDev/Core/Connection.cs b/CassiniDev/Core/Connection.cs new file mode 100644 index 000000000..c04731fd0 --- /dev/null +++ b/CassiniDev/Core/Connection.cs @@ -0,0 +1,410 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Globalization; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Web; +using CassiniDev.ServerLog; + +#endregion + +namespace CassiniDev +{ + public class Connection : MarshalByRefObject + { + private const int HttpForbidden = 403; + + private const int HttpOK = 200; + + private readonly MemoryStream _responseContent; + + private readonly Server _server; + private LogInfo _requestLog; + private LogInfo _responseLog; + + private Socket _socket; + + internal Connection(Server server, Socket socket) + { + Id = Guid.NewGuid(); + _responseContent = new MemoryStream(); + _server = server; + _socket = socket; + InitializeLogInfo(); + } + + public bool Connected + { + get { return _socket.Connected; } + } + + public Guid Id { get; private set; } + + public string LocalIP + { + get + { + IPEndPoint ep = (IPEndPoint) _socket.LocalEndPoint; + return (ep != null && ep.Address != null) ? ep.Address.ToString() : "127.0.0.1"; + } + } + + public string RemoteIP + { + get + { + IPEndPoint ep = (IPEndPoint) _socket.RemoteEndPoint; + return (ep != null && ep.Address != null) ? ep.Address.ToString() : "127.0.0.1"; + } + } + + public LogInfo RequestLog + { + get { return _requestLog; } + } + + public LogInfo ResponseLog + { + get { return _responseLog; } + } + + public void Close() + { + FinalizeLogInfo(); + + try + { + _socket.Shutdown(SocketShutdown.Both); + _socket.Close(); + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + finally + { + _socket = null; + } + } + + /// + /// + public override object InitializeLifetimeService() + { + return null; + } + + public void LogRequest(string pathTranslated, string url) + { + _requestLog.PathTranslated = pathTranslated; + + _requestLog.Url = url; + } + + public void LogRequestBody(byte[] content) + { + _requestLog.Body = content; + } + + public void LogRequestHeaders(string headers) + { + _requestLog.Headers = headers; + } + + public byte[] ReadRequestBytes(int maxBytes) + { + try + { + if (WaitForRequestBytes() == 0) + { + return null; + } + + int numBytes = _socket.Available; + + if (numBytes > maxBytes) + { + numBytes = maxBytes; + } + + int numReceived = 0; + + byte[] buffer = new byte[numBytes]; + + if (numBytes > 0) + { + numReceived = _socket.Receive(buffer, 0, numBytes, SocketFlags.None); + } + + if (numReceived < numBytes) + { + byte[] tempBuffer = new byte[numReceived]; + + if (numReceived > 0) + { + Buffer.BlockCopy(buffer, 0, tempBuffer, 0, numReceived); + } + + buffer = tempBuffer; + } + + return buffer; + } + catch + { + return null; + } + } + + public int WaitForRequestBytes() + { + int availBytes = 0; + + try + { + if (_socket.Available == 0) + { + _socket.Poll(100000, SelectMode.SelectRead); + + if (_socket.Available == 0 && _socket.Connected) + { + _socket.Poll(30000000, SelectMode.SelectRead); + } + } + + availBytes = _socket.Available; + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + + return availBytes; + } + + public void Write100Continue() + { + WriteEntireResponseFromString(100, null, null, true); + } + + public void WriteBody(byte[] data, int offset, int length) + { + try + { + _responseContent.Write(data, 0, data.Length); + _socket.Send(data, offset, length, SocketFlags.None); + } + catch (SocketException) + { + } + } + + public void WriteEntireResponseFromFile(String fileName, bool keepAlive) + { + if (!File.Exists(fileName)) + { + WriteErrorAndClose(404); + return; + } + + // Deny the request if the contentType cannot be recognized. + + string contentType = Common.GetContentType(fileName); + + //TODO: i am pretty sure this is unnecessary + if (contentType == null) + { + WriteErrorAndClose(HttpForbidden); + return; + } + + string contentTypeHeader = "Content-Type: " + contentType + "\r\n"; + + bool completed = false; + FileStream fs = null; + + try + { + fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); + int len = (int) fs.Length; + byte[] fileBytes = new byte[len]; + int bytesRead = fs.Read(fileBytes, 0, len); + + String headers = MakeResponseHeaders(HttpOK, contentTypeHeader, bytesRead, keepAlive); + _responseLog.Headers = headers; + _responseLog.StatusCode = HttpOK; + _socket.Send(Encoding.UTF8.GetBytes(headers)); + + _socket.Send(fileBytes, 0, bytesRead, SocketFlags.None); + + completed = true; + } + catch (SocketException) + { + } + finally + { + if (!keepAlive || !completed) + { + Close(); + } + + if (fs != null) + { + fs.Close(); + } + } + } + + public void WriteEntireResponseFromString(int statusCode, String extraHeaders, String body, bool keepAlive) + { + try + { + int bodyLength = (body != null) ? Encoding.UTF8.GetByteCount(body) : 0; + string headers = MakeResponseHeaders(statusCode, extraHeaders, bodyLength, keepAlive); + + _responseLog.Headers = headers; + _responseLog.StatusCode = statusCode; + _socket.Send(Encoding.UTF8.GetBytes(headers + body)); + } + catch (SocketException) + { + } + finally + { + if (!keepAlive) + { + Close(); + } + } + } + + public void WriteErrorAndClose(int statusCode, string message) + { + WriteEntireResponseFromString(statusCode, null, GetErrorResponseBody(statusCode, message), false); + } + + public void WriteErrorAndClose(int statusCode) + { + WriteErrorAndClose(statusCode, null); + } + + public void WriteErrorWithExtraHeadersAndKeepAlive(int statusCode, string extraHeaders) + { + WriteEntireResponseFromString(statusCode, extraHeaders, GetErrorResponseBody(statusCode, null), true); + } + + public void WriteHeaders(int statusCode, String extraHeaders) + { + string headers = MakeResponseHeaders(statusCode, extraHeaders, -1, false); + + _responseLog.Headers = headers; + _responseLog.StatusCode = statusCode; + + try + { + _socket.Send(Encoding.UTF8.GetBytes(headers)); + } + catch (SocketException) + { + } + } + + private void FinalizeLogInfo() + { + try + { + _responseLog.Body = _responseContent.ToArray(); + _responseContent.Dispose(); + _responseLog.Created = DateTime.Now; + _responseLog.Url = _requestLog.Url; + _responseLog.PathTranslated = _requestLog.PathTranslated; + _responseLog.Identity = _requestLog.Identity; + _responseLog.PhysicalPath = _requestLog.PhysicalPath; + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + // log error to text + } + } + + private string GetErrorResponseBody(int statusCode, string message) + { + string body = Messages.FormatErrorMessageBody(statusCode, _server.VirtualPath); + + if (!string.IsNullOrEmpty(message)) + { + body += "\r\n"; + } + + return body; + } + + private void InitializeLogInfo() + { + _requestLog = new LogInfo + { + Created = DateTime.Now, + ConversationId = Id, + RowType = 1, + Identity = _server.GetProcessUser(), + PhysicalPath = _server.PhysicalPath + }; + + _responseLog = new LogInfo + { + ConversationId = Id, + RowType = 2 + }; + } + + private static string MakeResponseHeaders(int statusCode, string moreHeaders, int contentLength, bool keepAlive) + { + StringBuilder sb = new StringBuilder(); + + sb.Append("HTTP/1.1 " + statusCode + " " + HttpWorkerRequest.GetStatusDescription(statusCode) + "\r\n"); + sb.Append("Server: Cassini/" + Messages.VersionString + "\r\n"); + sb.Append("Date: " + DateTime.Now.ToUniversalTime().ToString("R", DateTimeFormatInfo.InvariantInfo) + "\r\n"); + + if (contentLength >= 0) + { + sb.Append("Content-Length: " + contentLength + "\r\n"); + } + + if (moreHeaders != null) + { + sb.Append(moreHeaders); + } + + if (!keepAlive) + { + sb.Append("Connection: Close\r\n"); + } + + sb.Append("\r\n"); + + return sb.ToString(); + } + } +} \ No newline at end of file diff --git a/CassiniDev/Core/Host.cs b/CassiniDev/Core/Host.cs new file mode 100644 index 000000000..46569f6e0 --- /dev/null +++ b/CassiniDev/Core/Host.cs @@ -0,0 +1,296 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Globalization; +using System.Security.Permissions; +using System.Security.Principal; +using System.Threading; +using System.Web; +using System.Web.Hosting; + +#endregion + +namespace CassiniDev +{ + /// + /// 01/01/10 sky: added HttpRuntime.Close to IRegisteredObject.Stop to eliminate + /// System.AppDomainUnloadedException when running tests in NUnit GuiRunner. + /// reference: http://stackoverflow.com/questions/561402/cassini-webserver-webdev-nunit-and-appdomainunloadedexception + /// need to test thoroughly but seems to work just fine with no ill effects + /// 01.03.10 sky: removed the HttpRuntime.Close because, even though it tests fine, I am not entirely certain it is in the right place + /// and since I am no longer recommending that the server be used as a library in testing (run a console instance in a new process). + /// + /// + internal class Host : MarshalByRefObject, IRegisteredObject + { + private bool _disableDirectoryListing; + + private string _installPath; + + private string _lowerCasedClientScriptPathWithTrailingSlash; + + private string _lowerCasedVirtualPath; + + private string _lowerCasedVirtualPathWithTrailingSlash; + + private volatile int _pendingCallsCount; + + private string _physicalClientScriptPath; + + private string _physicalPath; + + private int _port; + + private bool _requireAuthentication; + + private Server _server; + + private string _virtualPath; + + public Host() + { + HostingEnvironment.RegisterObject(this); + } + + public bool DisableDirectoryListing + { + get { return _disableDirectoryListing; } + } + + public string InstallPath + { + get { return _installPath; } + } + + public string NormalizedClientScriptPath + { + get { return _lowerCasedClientScriptPathWithTrailingSlash; } + } + + public string NormalizedVirtualPath + { + get { return _lowerCasedVirtualPathWithTrailingSlash; } + } + + public string PhysicalClientScriptPath + { + get { return _physicalClientScriptPath; } + } + + public string PhysicalPath + { + get { return _physicalPath; } + } + + public int Port + { + get { return _port; } + } + + public bool RequireAuthentication + { + get { return _requireAuthentication; } + } + + public string VirtualPath + { + get { return _virtualPath; } + } + + #region IRegisteredObject Members + + void IRegisteredObject.Stop(bool immediate) + { + // Unhook the Host so Server will process the requests in the new appdomain. + + if (_server != null) + { + _server.HostStopped(); + } + + // Make sure all the pending calls complete before this Object is unregistered. + WaitForPendingCallsToFinish(); + + HostingEnvironment.UnregisterObject(this); + } + + #endregion + + public void Configure(Server server, int port, string virtualPath, string physicalPath, + bool requireAuthentication) + { + Configure(server, port, virtualPath, physicalPath, requireAuthentication, false); + } + + public void Configure(Server server, int port, string virtualPath, string physicalPath) + { + Configure(server, port, virtualPath, physicalPath, false, false); + } + + public void Configure(Server server, int port, string virtualPath, string physicalPath, + bool requireAuthentication, bool disableDirectoryListing) + { + _server = server; + + _port = port; + _installPath = null; + _virtualPath = virtualPath; + _requireAuthentication = requireAuthentication; + _disableDirectoryListing = disableDirectoryListing; + _lowerCasedVirtualPath = CultureInfo.InvariantCulture.TextInfo.ToLower(_virtualPath); + _lowerCasedVirtualPathWithTrailingSlash = virtualPath.EndsWith("/", StringComparison.Ordinal) + ? virtualPath + : virtualPath + "/"; + _lowerCasedVirtualPathWithTrailingSlash = + CultureInfo.InvariantCulture.TextInfo.ToLower(_lowerCasedVirtualPathWithTrailingSlash); + _physicalPath = physicalPath; + _physicalClientScriptPath = HttpRuntime.AspClientScriptPhysicalPath + "\\"; + _lowerCasedClientScriptPathWithTrailingSlash = + CultureInfo.InvariantCulture.TextInfo.ToLower(HttpRuntime.AspClientScriptVirtualPath + "/"); + } + + public SecurityIdentifier GetProcessSid() + { + using (WindowsIdentity identity = new WindowsIdentity(_server.GetProcessToken())) + { + return identity.User; + } + } + + public IntPtr GetProcessToken() + { + new SecurityPermission(PermissionState.Unrestricted).Assert(); + return _server.GetProcessToken(); + } + + public string GetProcessUser() + { + return _server.GetProcessUser(); + } + + public override object InitializeLifetimeService() + { + // never expire the license + return null; + } + + public bool IsVirtualPathAppPath(string path) + { + if (path == null) + { + return false; + } + path = CultureInfo.InvariantCulture.TextInfo.ToLower(path); + return (path == _lowerCasedVirtualPath || path == _lowerCasedVirtualPathWithTrailingSlash); + } + + public bool IsVirtualPathInApp(string path, out bool isClientScriptPath) + { + isClientScriptPath = false; + + if (path == null) + { + return false; + } + + if (_virtualPath == "/" && path.StartsWith("/", StringComparison.Ordinal)) + { + if (path.StartsWith(_lowerCasedClientScriptPathWithTrailingSlash, StringComparison.Ordinal)) + { + isClientScriptPath = true; + } + return true; + } + + path = CultureInfo.InvariantCulture.TextInfo.ToLower(path); + + if (path.StartsWith(_lowerCasedVirtualPathWithTrailingSlash, StringComparison.Ordinal)) + { + return true; + } + + if (path == _lowerCasedVirtualPath) + { + return true; + } + + if (path.StartsWith(_lowerCasedClientScriptPathWithTrailingSlash, StringComparison.Ordinal)) + { + isClientScriptPath = true; + return true; + } + + return false; + } + + public bool IsVirtualPathInApp(String path) + { + bool isClientScriptPath; + return IsVirtualPathInApp(path, out isClientScriptPath); + } + + public void ProcessRequest(Connection conn) + { + // Add a pending call to make sure our thread doesn't get killed + AddPendingCall(); + + try + { + new Request(_server, this, conn).Process(); + } + finally + { + RemovePendingCall(); + } + } + + [SecurityPermission(SecurityAction.Assert, Unrestricted = true)] + public void Shutdown() + { + HostingEnvironment.InitiateShutdown(); + } + + private void AddPendingCall() + { + //TODO: investigate this issue - ref var not volitile +#pragma warning disable 0420 + Interlocked.Increment(ref _pendingCallsCount); +#pragma warning restore 0420 + } + + private void RemovePendingCall() + { + //TODO: investigate this issue - ref var not volitile +#pragma warning disable 0420 + Interlocked.Decrement(ref _pendingCallsCount); +#pragma warning restore 0420 + } + + private void WaitForPendingCallsToFinish() + { + for (;;) + { + if (_pendingCallsCount <= 0) + { + break; + } + + Thread.Sleep(250); + } + } + } +} \ No newline at end of file diff --git a/CassiniDev/Core/Messages.cs b/CassiniDev/Core/Messages.cs new file mode 100644 index 000000000..42b15887c --- /dev/null +++ b/CassiniDev/Core/Messages.cs @@ -0,0 +1,164 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System.IO; +using System.Text; +using System.Web; + +#endregion + +namespace CassiniDev +{ + /// + /// TODO: get this into resources + /// + internal static class Messages + { + private const string _dirListingDirFormat = + @"{0,38:dddd, MMMM dd, yyyy hh:mm tt} <dir> {2} +"; + + private const string _dirListingFileFormat = + @"{0,38:dddd, MMMM dd, yyyy hh:mm tt} {1,12:n0} {3} +"; + + private const string _dirListingFormat1 = + @" + + Directory Listing -- {0} +"; + + private const string _dirListingFormat2 = + @" + + +

Directory Listing -- {0}

+ +
+ +
+";
+
+        private const string _dirListingParentFormat =
+            @"[To Parent Directory]
+
+";
+
+        private const string _httpErrorFormat1 =
+            @"
+    
+        {0}
+";
+
+        private const string _httpStyle =
+            @"        
+";
+
+        private static readonly string _dirListingTail =
+            @"
+
+ + Version Information: Cassini Web Server " + + VersionString + @" + + + + + +"; + + private static readonly string _httpErrorFormat2 = + @" + + +

Server Error in '{0}' Application.

+ +

HTTP Error {1} - {2}.

+ +
+ + Version Information: Cassini Web Server " + + VersionString + @" + + + + + +"; + + public static string VersionString = typeof (Server).Assembly.GetName().Version.ToString(); + + public static string FormatDirectoryListing(string dirPath, string parentPath, FileSystemInfo[] elements) + { + StringBuilder sb = new StringBuilder(); + + sb.Append(string.Format(_dirListingFormat1, dirPath)); + sb.Append(_httpStyle); + sb.Append(string.Format(_dirListingFormat2, dirPath)); + + if (parentPath != null) + { + if (!parentPath.EndsWith("/")) + { + parentPath += "/"; + } + + sb.Append(string.Format(_dirListingParentFormat, parentPath)); + } + + if (elements != null) + { + for (int i = 0; i < elements.Length; i++) + { + if (elements[i] is FileInfo) + { + FileInfo fi = (FileInfo) elements[i]; + sb.Append(string.Format(_dirListingFileFormat, + fi.LastWriteTime, fi.Length, fi.Name, fi.Name)); + } + else if (elements[i] is DirectoryInfo) + { + DirectoryInfo di = (DirectoryInfo) elements[i]; + sb.Append(string.Format(_dirListingDirFormat, + di.LastWriteTime, di.Name, di.Name)); + } + } + } + + sb.Append(_dirListingTail); + return sb.ToString(); + } + + public static string FormatErrorMessageBody(int statusCode, string appName) + { + string desc = HttpWorkerRequest.GetStatusDescription(statusCode); + + return string.Format(_httpErrorFormat1, desc) + + _httpStyle + + string.Format(_httpErrorFormat2, appName, statusCode, desc); + } + } +} \ No newline at end of file diff --git a/CassiniDev/Core/NtlmAuth.cs b/CassiniDev/Core/NtlmAuth.cs new file mode 100644 index 000000000..40ab7df51 --- /dev/null +++ b/CassiniDev/Core/NtlmAuth.cs @@ -0,0 +1,179 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Security; +using System.Security.Principal; + +#endregion + +namespace CassiniDev +{ + [SuppressUnmanagedCodeSecurity] + internal sealed class NtlmAuth : IDisposable + { + private readonly bool _credentialsHandleAcquired; + + private string _blob; + + private bool _completed; + + private Interop.SecHandle _credentialsHandle; + + private Interop.SecBuffer _inputBuffer; + private Interop.SecBufferDesc _inputBufferDesc; + + private Interop.SecBuffer _outputBuffer; + + private Interop.SecBufferDesc _outputBufferDesc; + + private Interop.SecHandle _securityContext; + + private bool _securityContextAcquired; + + private uint _securityContextAttributes; + + private SecurityIdentifier _sid; + + private long _timestamp; + + public NtlmAuth() + { + if ( + Interop.AcquireCredentialsHandle(null, "NTLM", 1, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, + ref _credentialsHandle, ref _timestamp) != 0) + { + throw new InvalidOperationException(); + } + _credentialsHandleAcquired = true; + } + + public string Blob + { + get { return _blob; } + } + + public bool Completed + { + get { return _completed; } + } + + public SecurityIdentifier SID + { + get { return _sid; } + } + + #region IDisposable Members + + void IDisposable.Dispose() + { + FreeUnmanagedResources(); + GC.SuppressFinalize(this); + } + + #endregion + + public unsafe bool Authenticate(string blobString) + { + _blob = null; + byte[] buffer = Convert.FromBase64String(blobString); + byte[] inArray = new byte[0x4000]; + fixed (void* ptrRef = &_securityContext) + { + fixed (void* ptrRef2 = &_inputBuffer) + { + fixed (void* ptrRef3 = &_outputBuffer) + { + fixed (void* ptrRef4 = buffer) + { + fixed (void* ptrRef5 = inArray) + { + IntPtr zero = IntPtr.Zero; + if (_securityContextAcquired) + { + zero = (IntPtr) ptrRef; + } + _inputBufferDesc.ulVersion = 0; + _inputBufferDesc.cBuffers = 1; + _inputBufferDesc.pBuffers = (IntPtr) ptrRef2; + _inputBuffer.cbBuffer = (uint) buffer.Length; + _inputBuffer.BufferType = 2; + _inputBuffer.pvBuffer = (IntPtr) ptrRef4; + _outputBufferDesc.ulVersion = 0; + _outputBufferDesc.cBuffers = 1; + _outputBufferDesc.pBuffers = (IntPtr) ptrRef3; + _outputBuffer.cbBuffer = (uint) inArray.Length; + _outputBuffer.BufferType = 2; + _outputBuffer.pvBuffer = (IntPtr) ptrRef5; + int num = Interop.AcceptSecurityContext(ref _credentialsHandle, zero, + ref _inputBufferDesc, 20, + 0, ref _securityContext, ref _outputBufferDesc, + ref _securityContextAttributes, ref _timestamp); + if (num == 0x90312) + { + _securityContextAcquired = true; + _blob = Convert.ToBase64String(inArray, 0, (int) _outputBuffer.cbBuffer); + } + else + { + if (num != 0) + { + return false; + } + IntPtr phToken = IntPtr.Zero; + if (Interop.QuerySecurityContextToken(ref _securityContext, ref phToken) != 0) + { + return false; + } + try + { + using (WindowsIdentity identity = new WindowsIdentity(phToken)) + { + _sid = identity.User; + } + } + finally + { + Interop.CloseHandle(phToken); + } + _completed = true; + } + } + } + } + } + } + return true; + } + + ~NtlmAuth() + { + FreeUnmanagedResources(); + } + + private void FreeUnmanagedResources() + { + if (_securityContextAcquired) + { + Interop.DeleteSecurityContext(ref _securityContext); + } + if (_credentialsHandleAcquired) + { + Interop.FreeCredentialsHandle(ref _credentialsHandle); + } + } + } +} \ No newline at end of file diff --git a/CassiniDev/Core/Request.cs b/CassiniDev/Core/Request.cs new file mode 100644 index 000000000..50f5c06d7 --- /dev/null +++ b/CassiniDev/Core/Request.cs @@ -0,0 +1,1405 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Security; +using System.Security.Permissions; +using System.Text; +using System.Web; +using System.Web.Hosting; +using Microsoft.Win32.SafeHandles; + +#endregion + +namespace CassiniDev +{ + internal class Request : SimpleWorkerRequest + { + private const int MaxChunkLength = 64 * 1024; + + private const int MaxHeaderBytes = 32 * 1024; + + private static readonly char[] BadPathChars = new[] { '%', '>', '<', ':', '\\' }; + + private static readonly string[] DefaultFileNames = new[] { "default.aspx", "default.htm", "default.html" }; + + private static readonly char[] IntToHex = new[] + { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' + }; + + private static readonly string[] RestrictedDirs = new[] + { + "/bin", + "/app_browsers", + "/app_code", + "/app_data", + "/app_localresources", + "/app_globalresources", + "/app_webreferences" + }; + + private readonly IStackWalk _connectionPermission = new PermissionSet(PermissionState.Unrestricted); + private readonly Host _host; + private readonly Server _server; + + private string _allRawHeaders; + + private byte[] _body; + + private int _bodyLength; + + private Connection _connection; + + private int _contentLength; + + // security permission to Assert remoting calls to _connection + private int _endHeadersOffset; + + private string _filePath; + + private byte[] _headerBytes; + + private List _headerByteStrings; + + private bool _headersSent; + + // parsed request data + + private bool _isClientScriptPath; + + private string[] _knownRequestHeaders; + + private string _path; + + private string _pathInfo; + + private string _pathTranslated; + + private string _protocol; + + private string _queryString; + private byte[] _queryStringBytes; + + private List _responseBodyBytes; + + private StringBuilder _responseHeadersBuilder; + + private int _responseStatus; + + private bool _specialCaseStaticFileHeaders; + + private int _startHeadersOffset; + + private string[][] _unknownRequestHeaders; + + private string _url; + + private string _verb; + + public Request(Server server, Host host, Connection connection) + : base(String.Empty, String.Empty, null) + { + _connectionPermission = new PermissionSet(PermissionState.Unrestricted); + _server = server; + _host = host; + _connection = connection; + } + + public override void CloseConnection() + { + _connectionPermission.Assert(); + _connection.Close(); + } + + public override void EndOfRequest() + { + Connection conn = _connection; + if (conn != null) + { + _connection = null; + _server.OnRequestEnd(conn); + } + } + + public override void FlushResponse(bool finalFlush) + { + if (_responseStatus == 404 && !_headersSent && finalFlush && _verb == "GET") + { + // attempt directory listing + if (ProcessDirectoryListingRequest()) + { + return; + } + } + + _connectionPermission.Assert(); + + if (!_headersSent) + { + _connection.WriteHeaders(_responseStatus, _responseHeadersBuilder.ToString()); + + _headersSent = true; + } + for (int i = 0; i < _responseBodyBytes.Count; i++) + { + byte[] bytes = _responseBodyBytes[i]; + _connection.WriteBody(bytes, 0, bytes.Length); + } + + _responseBodyBytes = new List(); + + if (finalFlush) + { + _connection.Close(); + } + } + + public override string GetAppPath() + { + return _host.VirtualPath; + } + + public override string GetAppPathTranslated() + { + return _host.PhysicalPath; + } + + public override string GetFilePath() + { + return _filePath; + } + + public override string GetFilePathTranslated() + { + return _pathTranslated; + } + + public override string GetHttpVerbName() + { + return _verb; + } + + public override string GetHttpVersion() + { + return _protocol; + } + + public override string GetKnownRequestHeader(int index) + { + return _knownRequestHeaders[index]; + } + + public override string GetLocalAddress() + { + _connectionPermission.Assert(); + return _connection.LocalIP; + } + + public override int GetLocalPort() + { + return _host.Port; + } + + public override string GetPathInfo() + { + return _pathInfo; + } + + public override byte[] GetPreloadedEntityBody() + { + return _body; + } + + public override string GetQueryString() + { + return _queryString; + } + + public override byte[] GetQueryStringRawBytes() + { + return _queryStringBytes; + } + + public override string GetRawUrl() + { + return _url; + } + + public override string GetRemoteAddress() + { + _connectionPermission.Assert(); + return _connection.RemoteIP; + } + + public override int GetRemotePort() + { + return 0; + } + + public override string GetServerName() + { + string localAddress = GetLocalAddress(); + if (localAddress.Equals("127.0.0.1")) + { + return "localhost"; + } + return localAddress; + } + + public override string GetServerVariable(string name) + { + string processUser = string.Empty; + string str2 = name; + if (str2 == null) + { + return processUser; + } + if (!(str2 == "ALL_RAW")) + { + if (str2 != "SERVER_PROTOCOL") + { + if (str2 == "LOGON_USER") + { + if (GetUserToken() != IntPtr.Zero) + { + processUser = _host.GetProcessUser(); + } + return processUser; + } + if ((str2 == "AUTH_TYPE") && (GetUserToken() != IntPtr.Zero)) + { + processUser = "NTLM"; + } + return processUser; + } + } + else + { + return _allRawHeaders; + } + return _protocol; + } + + public override string GetUnknownRequestHeader(string name) + { + int n = _unknownRequestHeaders.Length; + + for (int i = 0; i < n; i++) + { + if (string.Compare(name, _unknownRequestHeaders[i][0], StringComparison.OrdinalIgnoreCase) == 0) + { + return _unknownRequestHeaders[i][1]; + } + } + + return null; + } + + public override string[][] GetUnknownRequestHeaders() + { + return _unknownRequestHeaders; + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + // Implementation of HttpWorkerRequest + + public override string GetUriPath() + { + return _path; + } + + public override IntPtr GetUserToken() + { + return _host.GetProcessToken(); + } + + public override bool HeadersSent() + { + return _headersSent; + } + + public override bool IsClientConnected() + { + _connectionPermission.Assert(); + return _connection.Connected; + } + + public override bool IsEntireEntityBodyIsPreloaded() + { + return (_contentLength == _bodyLength); + } + + public override string MapPath(string path) + { + string mappedPath; + bool isClientScriptPath; + + if (string.IsNullOrEmpty(path) || path.Equals("/")) + { + // asking for the site root + mappedPath = _host.VirtualPath == "/" ? _host.PhysicalPath : Environment.SystemDirectory; + } + else if (_host.IsVirtualPathAppPath(path)) + { + // application path + mappedPath = _host.PhysicalPath; + } + else if (_host.IsVirtualPathInApp(path, out isClientScriptPath)) + { + if (isClientScriptPath) + { + mappedPath = _host.PhysicalClientScriptPath + + path.Substring(_host.NormalizedClientScriptPath.Length); + } + else + { + // inside app but not the app path itself + mappedPath = _host.PhysicalPath + path.Substring(_host.NormalizedVirtualPath.Length); + } + } + else + { + // outside of app -- make relative to app path + if (path.StartsWith("/", StringComparison.Ordinal)) + { + mappedPath = _host.PhysicalPath + path.Substring(1); + } + else + { + mappedPath = _host.PhysicalPath + path; + } + } + + mappedPath = mappedPath.Replace('/', '\\'); + + if (mappedPath.EndsWith("\\", StringComparison.Ordinal) && + !mappedPath.EndsWith(":\\", StringComparison.Ordinal)) + { + mappedPath = mappedPath.Substring(0, mappedPath.Length - 1); + } + + return mappedPath; + } + + [AspNetHostingPermission(SecurityAction.Assert, Level = AspNetHostingPermissionLevel.Medium)] + public void Process() + { + // read the request + if (!TryParseRequest()) + { + return; + } + + // 100 response to POST + if (_verb == "POST" && _contentLength > 0 && _bodyLength < _contentLength) + { + _connection.Write100Continue(); + } + if (!_host.RequireAuthentication || TryNtlmAuthenticate()) + { + // special case for client script + if (_isClientScriptPath) + { + _connection.WriteEntireResponseFromFile( + _host.PhysicalClientScriptPath + _path.Substring(_host.NormalizedClientScriptPath.Length), false); + return; + } + + // deny access to code, bin, etc. + if (IsRequestForRestrictedDirectory()) + { + _connection.WriteErrorAndClose(403); + return; + } + + // special case for a request to a directory (ensure / at the end and process default documents) + if (ProcessDirectoryRequest()) + { + return; + } + + PrepareResponse(); + + // Hand the processing over to HttpRuntime + HttpRuntime.ProcessRequest(this); + } + } + + public override int ReadEntityBody(byte[] buffer, int size) + { + int bytesRead = 0; + + _connectionPermission.Assert(); + byte[] bytes = _connection.ReadRequestBytes(size); + + if (bytes != null && bytes.Length > 0) + { + bytesRead = bytes.Length; + Buffer.BlockCopy(bytes, 0, buffer, 0, bytesRead); + } + + return bytesRead; + } + + public override void SendCalculatedContentLength(int contentLength) + { + if (!_headersSent) + { + _responseHeadersBuilder.Append("Content-Length: "); + _responseHeadersBuilder.Append(contentLength.ToString(CultureInfo.InvariantCulture)); + _responseHeadersBuilder.Append("\r\n"); + } + } + + public override void SendKnownResponseHeader(int index, string value) + { + if (_headersSent) + { + return; + } + + switch (index) + { + case HeaderServer: + case HeaderDate: + case HeaderConnection: + // ignore these + return; +/* case HeaderContentType: + if (value == "bytes") + { + // use this header to detect when we're processing a static file + _specialCaseStaticFileHeaders = true; + return; + } + break; + case HeaderExpires: + case HeaderLastModified: + if (_specialCaseStaticFileHeaders) + { + // NOTE: Ignore these for static files. These are generated + // by the StaticFileHandler, but they shouldn't be. + //return; + } + break;*/ + + // FIX: #12506 + case HeaderContentType: + + string contentType = null; + + if (value == "application/octet-stream") + { + // application/octet-stream is default for unknown so lets + // take a shot at determining the type. + // don't do this for other content-types as you are going to + // end up sending text/plain for endpoints that are handled by + // asp.net such as .aspx, .asmx, .axd, etc etc + contentType = Common.GetContentType(_pathTranslated); + } + value = contentType ?? value; + break; + } + + + _responseHeadersBuilder.Append(GetKnownResponseHeaderName(index)); + _responseHeadersBuilder.Append(": "); + _responseHeadersBuilder.Append(value); + _responseHeadersBuilder.Append("\r\n"); + + } + + public override void SendResponseFromFile(string filename, long offset, long length) + { + if (length == 0) + { + return; + } + + FileStream f = null; + try + { + f = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); + SendResponseFromFileStream(f, offset, length); + } + finally + { + if (f != null) + { + f.Close(); + } + } + } + + public override void SendResponseFromFile(IntPtr handle, long offset, long length) + { + if (length == 0) + { + return; + } + + using (SafeFileHandle sfh = new SafeFileHandle(handle, false)) + { + using (FileStream f = new FileStream(sfh, FileAccess.Read)) + { + SendResponseFromFileStream(f, offset, length); + } + } + } + + public override void SendResponseFromMemory(byte[] data, int length) + { + if (length > 0) + { + byte[] bytes = new byte[length]; + + Buffer.BlockCopy(data, 0, bytes, 0, length); + _responseBodyBytes.Add(bytes); + } + } + + public override void SendStatus(int statusCode, string statusDescription) + { + _responseStatus = statusCode; + } + + public override void SendUnknownResponseHeader(string name, string value) + { + if (_headersSent) + return; + + _responseHeadersBuilder.Append(name); + _responseHeadersBuilder.Append(": "); + _responseHeadersBuilder.Append(value); + _responseHeadersBuilder.Append("\r\n"); + } + + private bool IsBadPath() + { + if (_path.IndexOfAny(BadPathChars) >= 0) + { + return true; + } + + if (CultureInfo.InvariantCulture.CompareInfo.IndexOf(_path, "..", CompareOptions.Ordinal) >= 0) + { + return true; + } + + if (CultureInfo.InvariantCulture.CompareInfo.IndexOf(_path, "//", CompareOptions.Ordinal) >= 0) + { + return true; + } + + return false; + } + + private bool IsRequestForRestrictedDirectory() + { + String p = CultureInfo.InvariantCulture.TextInfo.ToLower(_path); + + if (_host.VirtualPath != "/") + { + p = p.Substring(_host.VirtualPath.Length); + } + + foreach (String dir in RestrictedDirs) + { + if (p.StartsWith(dir, StringComparison.Ordinal)) + { + if (p.Length == dir.Length || p[dir.Length] == '/') + { + return true; + } + } + } + + return false; + } + + private void ParseHeaders() + { + _knownRequestHeaders = new string[RequestHeaderMaximum]; + + // construct unknown headers as array list of name1,value1,... + List headers = new List(); + + for (int i = 1; i < _headerByteStrings.Count; i++) + { + string s = _headerByteStrings[i].GetString(); + + int c = s.IndexOf(':'); + + if (c >= 0) + { + string name = s.Substring(0, c).Trim(); + string value = s.Substring(c + 1).Trim(); + + // remember + int knownIndex = GetKnownRequestHeaderIndex(name); + if (knownIndex >= 0) + { + _knownRequestHeaders[knownIndex] = value; + } + else + { + headers.Add(name); + headers.Add(value); + } + } + } + + // copy to array unknown headers + + int n = headers.Count / 2; + _unknownRequestHeaders = new string[n][]; + int j = 0; + + for (int i = 0; i < n; i++) + { + _unknownRequestHeaders[i] = new string[2]; + _unknownRequestHeaders[i][0] = headers[j++]; + _unknownRequestHeaders[i][1] = headers[j++]; + } + + // remember all raw headers as one string + + if (_headerByteStrings.Count > 1) + { + _allRawHeaders = Encoding.UTF8.GetString(_headerBytes, _startHeadersOffset, + _endHeadersOffset - _startHeadersOffset); + } + else + { + _allRawHeaders = String.Empty; + } + } + + private void ParsePostedContent() + { + _contentLength = 0; + _bodyLength = 0; + + string contentLengthValue = _knownRequestHeaders[HeaderContentLength]; + if (contentLengthValue != null) + { + try + { + _contentLength = Int32.Parse(contentLengthValue, CultureInfo.InvariantCulture); + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + } + + if (_headerBytes.Length > _endHeadersOffset) + { + _bodyLength = _headerBytes.Length - _endHeadersOffset; + + if (_bodyLength > _contentLength) + { + _bodyLength = _contentLength; // don't read more than the content-length + } + + if (_bodyLength > 0) + { + _body = new byte[_bodyLength]; + Buffer.BlockCopy(_headerBytes, _endHeadersOffset, _body, 0, _bodyLength); + _connection.LogRequestBody(_body); + } + } + } + + private void ParseRequestLine() + { + ByteString requestLine = _headerByteStrings[0]; + ByteString[] elems = requestLine.Split(' '); + + if (elems == null || elems.Length < 2 || elems.Length > 3) + { + _connection.WriteErrorAndClose(400); + return; + } + + _verb = elems[0].GetString(); + + ByteString urlBytes = elems[1]; + _url = urlBytes.GetString(); + + _protocol = elems.Length == 3 ? elems[2].GetString() : "HTTP/1.0"; + + // query string + + int iqs = urlBytes.IndexOf('?'); + _queryStringBytes = iqs > 0 ? urlBytes.Substring(iqs + 1).GetBytes() : new byte[0]; + + iqs = _url.IndexOf('?'); + if (iqs > 0) + { + _path = _url.Substring(0, iqs); + _queryString = _url.Substring(iqs + 1); + } + else + { + _path = _url; + _queryStringBytes = new byte[0]; + } + + // url-decode path + + if (_path.IndexOf('%') >= 0) + { + _path = HttpUtility.UrlDecode(_path, Encoding.UTF8); + + iqs = _url.IndexOf('?'); + if (iqs >= 0) + { + _url = _path + _url.Substring(iqs); + } + else + { + _url = _path; + } + } + + // path info + + int lastDot = _path.LastIndexOf('.'); + int lastSlh = _path.LastIndexOf('/'); + + if (lastDot >= 0 && lastSlh >= 0 && lastDot < lastSlh) + { + int ipi = _path.IndexOf('/', lastDot); + _filePath = _path.Substring(0, ipi); + _pathInfo = _path.Substring(ipi); + } + else + { + _filePath = _path; + _pathInfo = String.Empty; + } + + _pathTranslated = MapPath(_filePath); + + _connection.LogRequest(_pathTranslated, _url); + } + + private void PrepareResponse() + { + _headersSent = false; + _responseStatus = 200; + _responseHeadersBuilder = new StringBuilder(); + _responseBodyBytes = new List(); + } + + private bool ProcessDirectoryListingRequest() + { + if (_verb != "GET") + { + return false; + } + + String dirPathTranslated = _pathTranslated; + + if (_pathInfo.Length > 0) + { + // directory path can never have pathInfo + dirPathTranslated = MapPath(_path); + } + + if (!Directory.Exists(dirPathTranslated)) + { + return false; + } + + // get all files and subdirs + FileSystemInfo[] infos = null; + try + { + infos = (new DirectoryInfo(dirPathTranslated)).GetFileSystemInfos(); + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + + // determine if parent is appropriate + string parentPath = null; + + if (_path.Length > 1) + { + int i = _path.LastIndexOf('/', _path.Length - 2); + + parentPath = (i > 0) ? _path.Substring(0, i) : "/"; + if (!_host.IsVirtualPathInApp(parentPath)) + { + parentPath = null; + } + } + + _connection.WriteEntireResponseFromString(200, "Content-type: text/html; charset=utf-8\r\n", + Messages.FormatDirectoryListing(_path, parentPath, infos), + false); + return true; + } + + private bool ProcessDirectoryRequest() + { + String dirPathTranslated = _pathTranslated; + + if (_pathInfo.Length > 0) + { + // directory path can never have pathInfo + dirPathTranslated = MapPath(_path); + } + + if (!Directory.Exists(dirPathTranslated)) + { + return false; + } + + // have to redirect /foo to /foo/ to allow relative links to work + if (!_path.EndsWith("/", StringComparison.Ordinal)) + { + string newPath = _path + "/"; + string location = "Location: " + UrlEncodeRedirect(newPath) + "\r\n"; + string body = "Object moved\r\n" + + "

Object moved to here.

\r\n" + + "\r\n"; + + _connection.WriteEntireResponseFromString(302, location, body, false); + return true; + } + + // check for the default file + foreach (string filename in DefaultFileNames) + { + string defaultFilePath = dirPathTranslated + "\\" + filename; + + if (File.Exists(defaultFilePath)) + { + // pretend the request is for the default file path + _path += filename; + _filePath = _path; + _url = (_queryString != null) ? (_path + "?" + _queryString) : _path; + _pathTranslated = defaultFilePath; + return false; // go through normal processing + } + } + + return false; // go through normal processing + } + + private void ReadAllHeaders() + { + _headerBytes = null; + + do + { + if (!TryReadAllHeaders()) + { + // something bad happened + break; + } + } while (_endHeadersOffset < 0); // found \r\n\r\n + + // + // fixed: Item # 13290 + if (_headerByteStrings != null && _headerByteStrings.Count > 0) + { + _connection.LogRequestHeaders(string.Join(Environment.NewLine, _headerByteStrings.Select(b => b.GetString()).ToArray())); + } + + } + + private void Reset() + { + _headerBytes = null; + _startHeadersOffset = 0; + _endHeadersOffset = 0; + _headerByteStrings = null; + + _isClientScriptPath = false; + + _verb = null; + _url = null; + _protocol = null; + + _path = null; + _filePath = null; + _pathInfo = null; + _pathTranslated = null; + _queryString = null; + _queryStringBytes = null; + + _contentLength = 0; + _bodyLength = 0; + _body = null; + + _allRawHeaders = null; + _unknownRequestHeaders = null; + _knownRequestHeaders = null; + //_specialCaseStaticFileHeaders = false; + } + + private void SendResponseFromFileStream(Stream f, long offset, long length) + { + long fileSize = f.Length; + + if (length == -1) + { + length = fileSize - offset; + } + + if (length == 0 || offset < 0 || length > fileSize - offset) + { + return; + } + + if (offset > 0) + { + f.Seek(offset, SeekOrigin.Begin); + } + + if (length <= MaxChunkLength) + { + byte[] fileBytes = new byte[(int)length]; + int bytesRead = f.Read(fileBytes, 0, (int)length); + SendResponseFromMemory(fileBytes, bytesRead); + } + else + { + byte[] chunk = new byte[MaxChunkLength]; + int bytesRemaining = (int)length; + + while (bytesRemaining > 0) + { + int bytesToRead = (bytesRemaining < MaxChunkLength) ? bytesRemaining : MaxChunkLength; + int bytesRead = f.Read(chunk, 0, bytesToRead); + + SendResponseFromMemory(chunk, bytesRead); + bytesRemaining -= bytesRead; + + // flush to release keep memory + if ((bytesRemaining > 0) && (bytesRead > 0)) + { + FlushResponse(false); + } + } + } + } + + private void SkipAllPostedContent() + { + if ((_contentLength > 0) && (_bodyLength < _contentLength)) + { + byte[] buffer; + for (int i = _contentLength - _bodyLength; i > 0; i -= buffer.Length) + { + buffer = _connection.ReadRequestBytes(i); + if ((buffer == null) || (buffer.Length == 0)) + { + return; + } + } + } + } + + [SecurityPermission(SecurityAction.Assert, UnmanagedCode = true), + SecurityPermission(SecurityAction.Assert, ControlPrincipal = true)] + private bool TryNtlmAuthenticate() + { + try + { + using (NtlmAuth auth = new NtlmAuth()) + { + do + { + string blobString = null; + string extraHeaders = _knownRequestHeaders[0x18]; + if ((extraHeaders != null) && extraHeaders.StartsWith("NTLM ", StringComparison.Ordinal)) + { + blobString = extraHeaders.Substring(5); + } + if (blobString != null) + { + if (!auth.Authenticate(blobString)) + { + _connection.WriteErrorAndClose(0x193); + return false; + } + if (auth.Completed) + { + goto Label_009A; + } + extraHeaders = "WWW-Authenticate: NTLM " + auth.Blob + "\r\n"; + } + else + { + extraHeaders = "WWW-Authenticate: NTLM\r\n"; + } + SkipAllPostedContent(); + _connection.WriteErrorWithExtraHeadersAndKeepAlive(0x191, extraHeaders); + } while (TryParseRequest()); + return false; + Label_009A: + if (_host.GetProcessSid() != auth.SID) + { + _connection.WriteErrorAndClose(0x193); + return false; + } + } + } + catch + { + try + { + _connection.WriteErrorAndClose(500); + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + return false; + } + return true; + } + + /// + /// TODO: defer response until request is written + /// + /// + private bool TryParseRequest() + { + Reset(); + + ReadAllHeaders(); + + if (_headerBytes == null || _endHeadersOffset < 0 || + _headerByteStrings == null || _headerByteStrings.Count == 0) + { + _connection.WriteErrorAndClose(400); + return false; + } + + ParseRequestLine(); + + // Check for bad path + if (IsBadPath()) + { + _connection.WriteErrorAndClose(400); + return false; + } + + // Check if the path is not well formed or is not for the current app + if (!_host.IsVirtualPathInApp(_path, out _isClientScriptPath)) + { + _connection.WriteErrorAndClose(404); + return false; + } + + ParseHeaders(); + + ParsePostedContent(); + + return true; + } + + private bool TryReadAllHeaders() + { + // read the first packet (up to 32K) + byte[] headerBytes = _connection.ReadRequestBytes(MaxHeaderBytes); + + if (headerBytes == null || headerBytes.Length == 0) + return false; + + if (_headerBytes != null) + { + // previous partial read + int len = headerBytes.Length + _headerBytes.Length; + if (len > MaxHeaderBytes) + return false; + + byte[] bytes = new byte[len]; + Buffer.BlockCopy(_headerBytes, 0, bytes, 0, _headerBytes.Length); + Buffer.BlockCopy(headerBytes, 0, bytes, _headerBytes.Length, headerBytes.Length); + _headerBytes = bytes; + } + else + { + _headerBytes = headerBytes; + } + + // start parsing + _startHeadersOffset = -1; + _endHeadersOffset = -1; + _headerByteStrings = new List(); + + // find the end of headers + ByteParser parser = new ByteParser(_headerBytes); + + for (; ; ) + { + ByteString line = parser.ReadLine(); + + if (line == null) + { + break; + } + + if (_startHeadersOffset < 0) + { + _startHeadersOffset = parser.CurrentOffset; + } + + if (line.IsEmpty) + { + _endHeadersOffset = parser.CurrentOffset; + break; + } + + _headerByteStrings.Add(line); + } + + return true; + } + + private static string UrlEncodeRedirect(string path) + { + // this method mimics the logic in HttpResponse.Redirect (which relies on internal methods) + + // count non-ascii characters + byte[] bytes = Encoding.UTF8.GetBytes(path); + int count = bytes.Length; + int countNonAscii = 0; + for (int i = 0; i < count; i++) + { + if ((bytes[i] & 0x80) != 0) + { + countNonAscii++; + } + } + + // encode all non-ascii characters using UTF-8 %XX + if (countNonAscii > 0) + { + // expand not 'safe' characters into %XX, spaces to +s + byte[] expandedBytes = new byte[count + countNonAscii * 2]; + int pos = 0; + for (int i = 0; i < count; i++) + { + byte b = bytes[i]; + + if ((b & 0x80) == 0) + { + expandedBytes[pos++] = b; + } + else + { + expandedBytes[pos++] = (byte)'%'; + expandedBytes[pos++] = (byte)IntToHex[(b >> 4) & 0xf]; + expandedBytes[pos++] = (byte)IntToHex[b & 0xf]; + } + } + + path = Encoding.ASCII.GetString(expandedBytes); + } + + // encode spaces into %20 + if (path.IndexOf(' ') >= 0) + { + path = path.Replace(" ", "%20"); + } + + return path; + } + + #region Nested type: ByteParser + + internal class ByteParser + { + private readonly byte[] _bytes; + + private int _pos; + + public ByteParser(byte[] bytes) + { + _bytes = bytes; + _pos = 0; + } + + public int CurrentOffset + { + get { return _pos; } + } + + public ByteString ReadLine() + { + ByteString line = null; + + for (int i = _pos; i < _bytes.Length; i++) + { + if (_bytes[i] == (byte)'\n') + { + int len = i - _pos; + if (len > 0 && _bytes[i - 1] == (byte)'\r') + { + len--; + } + + line = new ByteString(_bytes, _pos, len); + _pos = i + 1; + return line; + } + } + + if (_pos < _bytes.Length) + { + line = new ByteString(_bytes, _pos, _bytes.Length - _pos); + } + + _pos = _bytes.Length; + return line; + } + } + + #endregion + + #region Nested type: ByteString + + internal class ByteString + { + private readonly byte[] _bytes; + + private readonly int _length; + + private readonly int _offset; + + public ByteString(byte[] bytes, int offset, int length) + { + _bytes = bytes; + _offset = offset; + _length = length; + } + + public byte[] Bytes + { + get { return _bytes; } + } + + public bool IsEmpty + { + get { return (_bytes == null || _length == 0); } + } + + public byte this[int index] + { + get { return _bytes[_offset + index]; } + } + + public int Length + { + get { return _length; } + } + + public int Offset + { + get { return _offset; } + } + + public byte[] GetBytes() + { + byte[] bytes = new byte[_length]; + if (_length > 0) Buffer.BlockCopy(_bytes, _offset, bytes, 0, _length); + return bytes; + } + + public string GetString(Encoding enc) + { + if (IsEmpty) return string.Empty; + return enc.GetString(_bytes, _offset, _length); + } + + public string GetString() + { + return GetString(Encoding.UTF8); + } + + public int IndexOf(char ch) + { + return IndexOf(ch, 0); + } + + public int IndexOf(char ch, int offset) + { + for (int i = offset; i < _length; i++) + { + if (this[i] == (byte)ch) return i; + } + return -1; + } + + public ByteString[] Split(char sep) + { + List list = new List(); + + int pos = 0; + while (pos < _length) + { + int i = IndexOf(sep, pos); + if (i < 0) + { + break; + } + + list.Add(Substring(pos, i - pos)); + pos = i + 1; + + while (this[pos] == (byte)sep && pos < _length) + { + pos++; + } + } + + if (pos < _length) + list.Add(Substring(pos)); + + return list.ToArray(); + } + + public ByteString Substring(int offset, int len) + { + return new ByteString(_bytes, _offset + offset, len); + } + + public ByteString Substring(int offset) + { + return Substring(offset, _length - offset); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/CassiniDev/Core/RequestEventArgs.cs b/CassiniDev/Core/RequestEventArgs.cs new file mode 100644 index 000000000..ac2606200 --- /dev/null +++ b/CassiniDev/Core/RequestEventArgs.cs @@ -0,0 +1,53 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using CassiniDev.ServerLog; + +#endregion + +namespace CassiniDev +{ + public class RequestEventArgs : EventArgs + { + private readonly Guid _id; + + private readonly LogInfo _requestLog; + + private readonly LogInfo _responseLog; + + public RequestEventArgs(Guid id, LogInfo requestLog, LogInfo responseLog) + { + _requestLog = requestLog; + _responseLog = responseLog; + _id = id; + } + + public Guid Id + { + get { return _id; } + } + + public LogInfo RequestLog + { + get { return _requestLog; } + } + + public LogInfo ResponseLog + { + get { return _responseLog; } + } + } +} \ No newline at end of file diff --git a/CassiniDev/Core/Server.cs b/CassiniDev/Core/Server.cs new file mode 100644 index 000000000..ff5e4791c --- /dev/null +++ b/CassiniDev/Core/Server.cs @@ -0,0 +1,523 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Globalization; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Reflection; +using System.Runtime.Remoting; +using System.Security.Permissions; +using System.Security.Principal; +using System.Threading; +using System.Web; +using System.Web.Hosting; +using CassiniDev.ServerLog; + +#endregion + +namespace CassiniDev +{ + [PermissionSet(SecurityAction.LinkDemand, Name = "Everything"), + PermissionSet(SecurityAction.InheritanceDemand, Name = "FullTrust")] + public class Server : MarshalByRefObject, IDisposable + { + private readonly ApplicationManager _appManager; + + private readonly bool _disableDirectoryListing; + + private readonly string _hostName; + + private readonly IPAddress _ipAddress; + + private readonly object _lockObject; + + private readonly string _physicalPath; + + private readonly int _port; + private readonly bool _requireAuthentication; + private readonly int _timeoutInterval; + private readonly string _virtualPath; + private bool _disposed; + + private Host _host; + + private IntPtr _processToken; + + private string _processUser; + + private int _requestCount; + + private bool _shutdownInProgress; + + private Socket _socket; + + private Timer _timer; + + public Server(int port, string virtualPath, string physicalPath) + : this(port, virtualPath, physicalPath, false, false) + { + } + + public Server(int port, string physicalPath) + : this(port, "/", physicalPath, IPAddress.Loopback) + { + } + + public Server(string physicalPath) + : this(CassiniNetworkUtils.GetAvailablePort(32768, 65535, IPAddress.Loopback, false), physicalPath) + { + } + + public Server(int port, string virtualPath, string physicalPath, IPAddress ipAddress, string hostName, + int timeout, bool requireAuthentication) + : this(port, virtualPath, physicalPath, ipAddress, hostName, timeout, requireAuthentication, false) + { + } + + public Server(int port, string virtualPath, string physicalPath, bool requireAuthentication) + : this(port, virtualPath, physicalPath, requireAuthentication, false) + { + } + + public Server(int port, string virtualPath, string physicalPath, IPAddress ipAddress, string hostName) + : this(port, virtualPath, physicalPath, ipAddress, hostName, 0, false, false) + { + } + + public Server(int port, string virtualPath, string physicalPath, IPAddress ipAddress, string hostName, + int timeout, bool requireAuthentication, bool disableDirectoryListing) + : this(port, virtualPath, physicalPath, requireAuthentication, disableDirectoryListing) + { + _ipAddress = ipAddress; + _hostName = hostName; + _timeoutInterval = timeout; + } + + public Server(int port, string virtualPath, string physicalPath, IPAddress ipAddress) + : this(port, virtualPath, physicalPath, ipAddress, null, 0, false, false) + { + } + + public Server(int port, string virtualPath, string physicalPath, bool requireAuthentication, + bool disableDirectoryListing) + { + _ipAddress = IPAddress.Loopback; + _requireAuthentication = requireAuthentication; + _disableDirectoryListing = disableDirectoryListing; + _lockObject = new object(); + _port = port; + _virtualPath = virtualPath; + _physicalPath = Path.GetFullPath(physicalPath); + _physicalPath = _physicalPath.EndsWith("\\", StringComparison.Ordinal) + ? _physicalPath + : _physicalPath + "\\"; + _appManager = ApplicationManager.GetApplicationManager(); + ObtainProcessToken(); + } + + public Server(string physicalPath, bool requireAuthentication) + : this( + CassiniNetworkUtils.GetAvailablePort(32768, 65535, IPAddress.Loopback, false), "/", physicalPath, + requireAuthentication) + { + } + + public Server(int port, string virtualPath, string physicalPath, IPAddress ipAddress, string hostName, + int timeout) + : this(port, virtualPath, physicalPath, ipAddress, hostName, timeout, false, false) + { + } + + public bool DisableDirectoryListing + { + get { return _disableDirectoryListing; } + } + + public bool RequireAuthentication + { + get { return _requireAuthentication; } + } + + public int TimeoutInterval + { + get { return _timeoutInterval; } + } + + public string HostName + { + get { return _hostName; } + } + + public IPAddress IPAddress + { + get { return _ipAddress; } + } + + public string PhysicalPath + { + get { return _physicalPath; } + } + + public int Port + { + get { return _port; } + } + + public string RootUrl + { + get + { + string hostname = _hostName; + if (string.IsNullOrEmpty(_hostName)) + { + if (_ipAddress.Equals(IPAddress.Loopback) || _ipAddress.Equals(IPAddress.IPv6Loopback) || + _ipAddress.Equals(IPAddress.Any) || _ipAddress.Equals(IPAddress.IPv6Any)) + { + hostname = "localhost"; + } + else + { + hostname = _ipAddress.ToString(); + } + } + + return _port != 80 + ? + String.Format("http://{0}:{1}{2}", hostname, _port, _virtualPath) + : + //FIX: #12017 - TODO:TEST + string.Format("http://{0}{1}", hostname, _virtualPath); + } + } + + public string VirtualPath + { + get { return _virtualPath; } + } + + #region IDisposable Members + + public void Dispose() + { + if (!_disposed) + { + ShutDown(); + } + _disposed = true; + GC.SuppressFinalize(this); + } + + #endregion + + public event EventHandler RequestComplete; + + public event EventHandler TimedOut; + + public IntPtr GetProcessToken() + { + return _processToken; + } + + public string GetProcessUser() + { + return _processUser; + } + + public void HostStopped() + { + _host = null; + } + + [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)] + public override object InitializeLifetimeService() + { + // never expire the license + return null; + } + + // called at the end of request processing + // to disconnect the remoting proxy for Connection object + // and allow GC to pick it up + /// + /// + /// + public void OnRequestEnd(Connection conn) + { + try + { + OnRequestComplete(conn.Id, conn.RequestLog.Clone(), conn.ResponseLog.Clone()); + } + catch + { + // swallow - we don't want consumer killing the server + } + RemotingServices.Disconnect(conn); + DecrementRequestCount(); + } + + public void Start() + { + _socket = CreateSocketBindAndListen(AddressFamily.InterNetwork, _ipAddress, _port); + + //start the timer + DecrementRequestCount(); + + ThreadPool.QueueUserWorkItem(delegate + { + while (!_shutdownInProgress) + { + try + { + Socket acceptedSocket = _socket.Accept(); + + ThreadPool.QueueUserWorkItem(delegate + { + if (!_shutdownInProgress) + { + Connection conn = new Connection(this, acceptedSocket); + + if (conn.WaitForRequestBytes() == 0) + { + conn.WriteErrorAndClose(400); + return; + } + + Host host = GetHost(); + + if (host == null) + { + conn.WriteErrorAndClose(500); + return; + } + + IncrementRequestCount(); + host.ProcessRequest(conn); + } + }); + } + catch + { + Thread.Sleep(100); + } + } + }); + } + + + ~Server() + { + Dispose(); + } + + + private static Socket CreateSocketBindAndListen(AddressFamily family, IPAddress address, int port) + { + Socket socket = new Socket(family, SocketType.Stream, ProtocolType.Tcp); + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + socket.Bind(new IPEndPoint(address, port)); + socket.Listen((int) SocketOptionName.MaxConnections); + return socket; + } + + /// + /// + /// + /// + /// + /// + /// + /// This is Dmitry's hack to enable running outside of GAC + private object CreateWorkerAppDomainWithHost(string virtualPath, string physicalPath, Type hostType) + { + // this creates worker app domain in a way that host doesn't need to be in GAC or bin + // using BuildManagerHost via private reflection + string uniqueAppString = string.Concat(virtualPath, physicalPath).ToLowerInvariant(); + string appId = (uniqueAppString.GetHashCode()).ToString("x", CultureInfo.InvariantCulture); + + // create BuildManagerHost in the worker app domain + //ApplicationManager appManager = ApplicationManager.GetApplicationManager(); + Type buildManagerHostType = typeof (HttpRuntime).Assembly.GetType("System.Web.Compilation.BuildManagerHost"); + IRegisteredObject buildManagerHost = _appManager.CreateObject(appId, buildManagerHostType, virtualPath, + physicalPath, false); + + // call BuildManagerHost.RegisterAssembly to make Host type loadable in the worker app domain + buildManagerHostType.InvokeMember("RegisterAssembly", + BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic, + null, + buildManagerHost, + new object[] {hostType.Assembly.FullName, hostType.Assembly.Location}); + + // create Host in the worker app domain + return _appManager.CreateObject(appId, hostType, virtualPath, physicalPath, false); + } + + private void DecrementRequestCount() + { + _requestCount--; + + if (_requestCount < 1) + { + _requestCount = 0; + + if (_timeoutInterval > 0) + { + _timer = new Timer(TimeOut, null, _timeoutInterval, Timeout.Infinite); + } + } + } + + private Host GetHost() + { + if (_shutdownInProgress) + return null; + Host host = _host; + if (host == null) + { +#if NET40 + object obj2 = new object(); + bool flag = false; + try + { + Monitor.Enter(obj2 = _lockObject, ref flag); + host = _host; + if (host == null) + { + host = (Host)CreateWorkerAppDomainWithHost(_virtualPath, _physicalPath, typeof(Host)); + host.Configure(this, _port, _virtualPath, _physicalPath, _requireAuthentication, _disableDirectoryListing); + _host = host; + } + } + finally + { + if (flag) + { + Monitor.Exit(obj2); + } + } +#else + + lock (_lockObject) + { + host = _host; + if (host == null) + { + host = (Host) CreateWorkerAppDomainWithHost(_virtualPath, _physicalPath, typeof (Host)); + host.Configure(this, _port, _virtualPath, _physicalPath, _requireAuthentication, + _disableDirectoryListing); + _host = host; + } + } + +#endif + } + + return host; + } + + private void IncrementRequestCount() + { + _requestCount++; + _timer = null; + } + + + private void ObtainProcessToken() + { + if (Interop.ImpersonateSelf(2)) + { + Interop.OpenThreadToken(Interop.GetCurrentThread(), 0xf01ff, true, ref _processToken); + Interop.RevertToSelf(); + // ReSharper disable PossibleNullReferenceException + _processUser = WindowsIdentity.GetCurrent().Name; + // ReSharper restore PossibleNullReferenceException + } + } + + private void OnRequestComplete(Guid id, LogInfo requestLog, LogInfo responseLog) + { + EventHandler complete = RequestComplete; + + if (complete != null) + { + complete(this, new RequestEventArgs(id, requestLog, responseLog)); + } + } + + + public void ShutDown() + { + _shutdownInProgress = true; + + try + { + if (_socket != null) + { + _socket.Close(); + } + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + finally + { + _socket = null; + } + + try + { + if (_host != null) + { + _host.Shutdown(); + } + + while (_host != null) + { + Thread.Sleep(100); + } + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + finally + { + _host = null; + } + } + + private void TimeOut(object ignored) + { + TimeOut(); + } + + public void TimeOut() + { + ShutDown(); + OnTimeOut(); + } + + private void OnTimeOut() + { + EventHandler handler = TimedOut; + if (handler != null) handler(this, EventArgs.Empty); + } + } +} \ No newline at end of file diff --git a/CassiniDev/Logging/LogInfo.cs b/CassiniDev/Logging/LogInfo.cs new file mode 100644 index 000000000..d36828953 --- /dev/null +++ b/CassiniDev/Logging/LogInfo.cs @@ -0,0 +1,73 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; + +#endregion + +namespace CassiniDev.ServerLog +{ + /// + /// TODO: get rid of status code and url in the database and simply parse the headers + /// + [Serializable] + public class LogInfo : ICloneable + { + public byte[] Body { get; set; } + + public Guid ConversationId { get; set; } + + public DateTime Created { get; set; } + + public string Exception { get; set; } + + public string Headers { get; set; } + + public string Identity { get; set; } + + public string PathTranslated { get; set; } + + public string PhysicalPath { get; set; } + + public long RowId { get; set; } + + public long RowType { get; set; } + + public long? StatusCode { get; set; } + + public string Url { get; set; } + + #region ICloneable Members + + object ICloneable.Clone() + { + return MemberwiseClone(); + } + + #endregion + + public LogInfo Clone() + { + LogInfo result = (LogInfo) ((ICloneable) this).Clone(); + if (Body != null) + { + result.Body = new byte[Body.Length]; + Body.CopyTo(result.Body, 0); + } + + return result; + } + } +} \ No newline at end of file diff --git a/CassiniDev/Misc/CommandLine.cs b/CassiniDev/Misc/CommandLine.cs new file mode 100644 index 000000000..55798ee7c --- /dev/null +++ b/CassiniDev/Misc/CommandLine.cs @@ -0,0 +1,100 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Collections; +using System.Collections.Specialized; + +#endregion + +namespace CassiniDev.UIComponents +{ + public sealed class CommandLine + { + #region Fields + + private readonly string[] _arguments; + + private readonly bool _showHelp; + private IDictionary _options; + + #endregion + + #region Constructors + + public CommandLine(string[] args) + { + ArrayList list = new ArrayList(); + for (int i = 0; i < args.Length; i++) + { + char ch = args[i][0]; + if ((ch != '/') && (ch != '-')) + { + list.Add(args[i]); + } + else + { + int index = args[i].IndexOf(':'); + if (index == -1) + { + string strA = args[i].Substring(1); + if ((string.Compare(strA, "help", StringComparison.OrdinalIgnoreCase) == 0) || strA.Equals("?")) + { + _showHelp = true; + } + else + { + Options[strA] = string.Empty; + } + } + else + { + Options[args[i].Substring(1, index - 1)] = args[i].Substring(index + 1); + } + } + } + _arguments = (string[]) list.ToArray(typeof (string)); + } + + #endregion + + #region Properties + + public string[] Arguments + { + get { return _arguments; } + } + + public IDictionary Options + { + get + { + if (_options == null) + { + _options = new HybridDictionary(true); + } + return _options; + } + } + + public bool ShowHelp + { + get { return _showHelp; } + } + + #endregion + } +} \ No newline at end of file diff --git a/CassiniDev/Misc/CommandLineArguments.cs b/CassiniDev/Misc/CommandLineArguments.cs new file mode 100644 index 000000000..a80d95658 --- /dev/null +++ b/CassiniDev/Misc/CommandLineArguments.cs @@ -0,0 +1,443 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Text; +using System.Threading; + +#endregion + +namespace CassiniDev +{ + /// + /// Command line arguments + /// + /// fixed 5/24/10 - quoted embedded spaces in ToString + /// + public class CommandLineArguments + { + #region Properties + + [Argument(ArgumentType.AtMostOnce, ShortName = "ah", DefaultValue = false, + HelpText = "If true add entry to Windows hosts file. Requires write permissions to hosts file.")] public + bool AddHost; + + [Argument(ArgumentType.AtMostOnce, ShortName = "a", LongName = "path", + HelpText = "Physical location of content.")] public string + ApplicationPath; + + [Argument(ArgumentType.AtMostOnce, LongName = "log", DefaultValue = false, HelpText = "Enable logging.")] public + bool EnableLogging; + + [Argument(ArgumentType.AtMostOnce, ShortName = "h", LongName = "host", + HelpText = "Host name used for app root url. Optional unless AddHost is true.")] public string HostName; + + [Argument(ArgumentType.AtMostOnce, ShortName = "i", LongName = "ip", + HelpText = "IP address to listen to. Ignored if IPMode != Specific")] public string IPAddress; + + [Argument(ArgumentType.AtMostOnce, ShortName = "im", DefaultValue = IPMode.Loopback, HelpText = "", + LongName = "ipMode")] public + IPMode IPMode; + + [Argument(ArgumentType.AtMostOnce, ShortName = "v6", DefaultValue = false, + HelpText = "If IPMode 'Any' or 'LoopBack' are specified use the V6 address", LongName = "ipV6")] public bool + IPv6; + + + [Argument(ArgumentType.AtMostOnce, LongName = "nodirlist", DefaultValue = false, + HelpText = "Disable diretory listing")] public bool Nodirlist; + + [Argument(ArgumentType.AtMostOnce, LongName = "ntlm", DefaultValue = false, HelpText = "Run as current identity" + )] public bool Ntlm; + + + [Argument(ArgumentType.AtMostOnce, ShortName = "p", LongName = "port", + HelpText = "Port to listen to. Ignored if PortMode=FirstAvailable.", DefaultValue = 0)] public int Port; + + [Argument(ArgumentType.AtMostOnce, ShortName = "pm", HelpText = "", LongName = "portMode", + DefaultValue = PortMode.FirstAvailable)] public PortMode PortMode; + + [Argument(ArgumentType.AtMostOnce, ShortName = "pre", DefaultValue = 65535, LongName = "highPort", + HelpText = "End of port range. Ignored if PortMode != FirstAvailable")] public int PortRangeEnd = 9000; + + [Argument(ArgumentType.AtMostOnce, ShortName = "prs", DefaultValue = 32768, LongName = "lowPort", + HelpText = "Start of port range. Ignored if PortMode != FirstAvailable")] public int PortRangeStart = + 8080; + + [DefaultArgument(ArgumentType.AtMostOnce, DefaultValue = RunMode.Server, HelpText = "[Server|Hostsfile]")] public RunMode RunMode; + [Argument(ArgumentType.AtMostOnce, LongName = "silent", DefaultValue = false, HelpText = "Fail silently")] public bool Silent; + + [Argument(ArgumentType.AtMostOnce, ShortName = "t", DefaultValue = 0, LongName = "timeout", + HelpText = "Length of time, in ms, to wait for a request before stopping the server. 0 = no timeout.")] public int TimeOut; + + [Argument(ArgumentType.AtMostOnce, ShortName = "v", LongName = "vpath", DefaultValue = "/", + HelpText = "Optional. default value '/'" + )] public string VirtualPath = "/"; + + [Argument(ArgumentType.AtMostOnce, ShortName = "vs", DefaultValue = false, + HelpText = "If true run in Visual Studio Development Server mode - readonly UI with single option to quit.." + )] public + bool VisualStudio; + + [Argument(ArgumentType.AtMostOnce, ShortName = "w", DefaultValue = 0, LongName = "wait", + HelpText = + "Length of time, in ms, to wait for a specific port before throwing an exception or exiting. 0 = don't wait." + )] public int WaitForPort; + + #endregion + + public string[] ToArgs() + { + List result = new List(); + if (RunMode != RunMode.Server) + { + result.Add(string.Format("{0}", RunMode)); + } + if (!string.IsNullOrEmpty(ApplicationPath)) + { + result.Add(string.Format("/a:{0}", ApplicationPath.Contains("") ? String.Format("\"{0}\"", ApplicationPath) : ApplicationPath)); + } + result.Add(string.Format("/v:{0}", VirtualPath.Contains("") ? String.Format("\"{0}\"", VirtualPath) : VirtualPath)); + + if (!string.IsNullOrEmpty(HostName)) + { + result.Add(string.Format("/h:{0}", HostName.Contains("") ? String.Format("\"{0}\"", HostName) : HostName)); + } + if (AddHost) + { + result.Add("/ah"); + } + + if (IPMode != IPMode.Loopback) + { + result.Add(string.Format("/im:{0}", IPMode)); + } + + if (!string.IsNullOrEmpty(IPAddress)) + { + result.Add(string.Format("/i:{0}", IPAddress)); + } + + if (IPv6) + { + result.Add("/v6"); + } + + if (VisualStudio) + { + result.Add("/vs"); + } + + if (PortMode != PortMode.FirstAvailable) + { + result.Add(string.Format("/pm:{0}", PortMode)); + } + + if (Port != 0) + { + result.Add(string.Format("/p:{0}", Port)); + } + + if (PortRangeStart != 32768) + { + result.Add(string.Format("/prs:{0}", PortRangeStart)); + } + if (PortRangeEnd != 65535) + { + result.Add(string.Format("/pre:{0}", PortRangeEnd)); + } + if (TimeOut > 0) + { + result.Add(string.Format("/t:{0}", TimeOut)); + } + if (WaitForPort > 0) + { + result.Add(string.Format("/w:{0}", WaitForPort)); + } + + if (Ntlm) + { + result.Add("/ntlm"); + } + if (Silent) + { + result.Add("/silent"); + } + if (Nodirlist) + { + result.Add("/nodirlist"); + } + if (EnableLogging) + { + result.Add("/log"); + } + + return result.ToArray(); + } + public override string ToString() + { + return string.Join(" ", ToArgs()); + //StringBuilder sb = new StringBuilder(); + //if (RunMode != RunMode.Server) + //{ + // sb.AppendFormat("{0}", RunMode); + //} + //if (!string.IsNullOrEmpty(ApplicationPath)) + //{ + // sb.AppendFormat(" /a:{0}", ApplicationPath.Contains(" ") ? String.Format("\"{0}\"", ApplicationPath) : ApplicationPath); + //} + //sb.AppendFormat(" /v:{0}", VirtualPath.Contains(" ") ? String.Format("\"{0}\"", VirtualPath) : VirtualPath); + + //if (!string.IsNullOrEmpty(HostName)) + //{ + // sb.AppendFormat(" /h:{0}", HostName.Contains(" ") ? String.Format("\"{0}\"", HostName) : HostName); + //} + //if (AddHost) + //{ + // sb.Append(" /ah"); + //} + + //if (IPMode != IPMode.Loopback) + //{ + // sb.AppendFormat(" /im:{0}", IPMode); + //} + + //if (!string.IsNullOrEmpty(IPAddress)) + //{ + // sb.AppendFormat(" /i:{0}", IPAddress); + //} + + //if (IPv6) + //{ + // sb.Append(" /v6"); + //} + + //if (VisualStudio) + //{ + // sb.Append(" /vs"); + //} + + //if (PortMode != PortMode.FirstAvailable) + //{ + // sb.AppendFormat(" /pm:{0}", PortMode); + //} + + //if (Port != 0) + //{ + // sb.AppendFormat(" /p:{0}", Port); + //} + + //if (PortRangeStart != 32768) + //{ + // sb.AppendFormat(" /prs:{0}", PortRangeStart); + //} + //if (PortRangeEnd != 65535) + //{ + // sb.AppendFormat(" /pre:{0}", PortRangeEnd); + //} + //if (TimeOut > 0) + //{ + // sb.AppendFormat(" /t:{0}", TimeOut); + //} + //if (WaitForPort > 0) + //{ + // sb.AppendFormat(" /w:{0}", WaitForPort); + //} + + //if (Ntlm) + //{ + // sb.Append(" /ntlm"); + //} + //if (Silent) + //{ + // sb.Append(" /silent"); + //} + //if (Nodirlist) + //{ + // sb.Append(" /nodirlist"); + //} + //if (EnableLogging) + //{ + // sb.Append(" /log"); + //} + //return sb.ToString().Trim(); + } + + /// + /// + internal void Validate() + { + if (string.IsNullOrEmpty(ApplicationPath)) + { + throw new CassiniException(SR.ErrApplicationPathIsNull, ErrorField.ApplicationPath); + } + + try + { + ApplicationPath = Path.GetFullPath(ApplicationPath); + } + catch + { + } + if (!Directory.Exists(ApplicationPath)) + { + throw new CassiniException(SR.WebdevDirNotExist, ErrorField.ApplicationPath); + } + + ApplicationPath = ApplicationPath.Trim('\"').TrimEnd('\\'); + + + if (!string.IsNullOrEmpty(VirtualPath)) + { + VirtualPath = VirtualPath.Trim('\"'); + VirtualPath = VirtualPath.Trim('/'); + VirtualPath = "/" + VirtualPath; + } + else + { + VirtualPath = "/"; + } + + + if (!VirtualPath.StartsWith("/")) + { + VirtualPath = "/" + VirtualPath; + } + + + if (AddHost && string.IsNullOrEmpty(HostName)) + { + throw new CassiniException(SR.ErrInvalidHostname, ErrorField.HostName); + } + + + IPAddress = ParseIP(IPMode, IPv6, IPAddress).ToString(); + + + if (VisualStudio) // then STOP HERE. + { + // It is fortunate that in order to provide api parity with WebDev + // we do not need to port scan. Visual Studio balks and refuses to + // attach if we monkey around and open ports. + Port = Port == 0 ? 80 : Port; + PortMode = PortMode.Specific; + return; + } + + + switch (PortMode) + { + case PortMode.FirstAvailable: + + if (PortRangeStart < 1) + { + throw new CassiniException(SR.ErrInvalidPortRangeValue, ErrorField.PortRangeStart); + } + + if (PortRangeEnd < 1) + { + throw new CassiniException(SR.ErrInvalidPortRangeValue, ErrorField.PortRangeEnd); + } + + if (PortRangeStart > PortRangeEnd) + { + throw new CassiniException(SR.ErrPortRangeEndMustBeEqualOrGreaterThanPortRangeSta, + ErrorField.PortRange); + } + Port = CassiniNetworkUtils.GetAvailablePort(PortRangeStart, PortRangeEnd, + System.Net.IPAddress.Parse(IPAddress), true); + + if (Port == 0) + { + throw new CassiniException(SR.ErrNoAvailablePortFound, ErrorField.PortRange); + } + + break; + + case PortMode.Specific: + + if ((Port < 1) || (Port > 0xffff)) + { + throw new CassiniException(SR.ErrPortOutOfRange, ErrorField.Port); + } + + + // start waiting.... + //TODO: design this hack away.... why am I waiting in a validation method? + int now = Environment.TickCount; + + // wait until either 1) the specified port is available or 2) the specified amount of time has passed + while (Environment.TickCount < now + WaitForPort && + CassiniNetworkUtils.GetAvailablePort(Port, Port, System.Net.IPAddress.Parse(IPAddress), true) != + Port) + { + Thread.Sleep(100); + } + + // is the port available? + if (CassiniNetworkUtils.GetAvailablePort(Port, Port, System.Net.IPAddress.Parse(IPAddress), true) != + Port) + { + throw new CassiniException(SR.ErrPortIsInUse, ErrorField.Port); + } + + + break; + default: + + throw new CassiniException(SR.ErrInvalidPortMode, ErrorField.None); + } + } + + + /// + /// Converts CommandLineArgument values to an IP address if possible. + /// Throws Exception if not. + /// + /// + /// + /// + /// + /// If IPMode is invalid + /// If IPMode is 'Specific' and ipString is invalid + public static IPAddress ParseIP(IPMode ipmode, bool v6, string ipString) + { + IPAddress ip; + switch (ipmode) + { + case IPMode.Loopback: + + ip = v6 ? System.Net.IPAddress.IPv6Loopback : System.Net.IPAddress.Loopback; + break; + case IPMode.Any: + ip = v6 ? System.Net.IPAddress.IPv6Any : System.Net.IPAddress.Any; + break; + case IPMode.Specific: + + if (!System.Net.IPAddress.TryParse(ipString, out ip)) + { + throw new CassiniException(SR.ErrInvalidIPAddress, ErrorField.IPAddress); + } + break; + default: + throw new CassiniException(SR.ErrInvalidIPMode, ErrorField.None); + } + return ip; + } + } +} \ No newline at end of file diff --git a/CassiniDev/Misc/CommandLineParser.cs b/CassiniDev/Misc/CommandLineParser.cs new file mode 100644 index 000000000..0aa1bb4e1 --- /dev/null +++ b/CassiniDev/Misc/CommandLineParser.cs @@ -0,0 +1,1585 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; + +#endregion + +namespace CassiniDev +{ + /// + /// Parser for command line arguments. + /// + /// The parser specification is infered from the instance fields of the object + /// specified as the destination of the parse. + /// Valid argument types are: int, uint, string, bool, enums + /// Also argument types of Array of the above types are also valid. + /// + /// Error checking options can be controlled by adding a ArgumentAttribute + /// to the instance fields of the destination object. + /// + /// At most one field may be marked with the DefaultArgumentAttribute + /// indicating that arguments without a '-' or '/' prefix will be parsed as that argument. + /// + /// If not specified then the parser will infer default options for parsing each + /// instance field. The default long name of the argument is the field name. The + /// default short name is the first character of the long name. Long names and explicitly + /// specified short names must be unique. Default short names will be used provided that + /// the default short name does not conflict with a long name or an explicitly + /// specified short name. + /// + /// Arguments which are array types are collection arguments. Collection + /// arguments can be specified multiple times. + /// + /// + /// Usage + /// ----- + /// + /// Parsing command line arguments to a console application is a common problem. + /// This library handles the common task of reading arguments from a command line + /// and filling in the values in a type. + /// + /// To use this library, define a class whose fields represent the data that your + /// application wants to receive from arguments on the command line. Then call + /// CommandLine.ParseArguments() to fill the object with the data + /// from the command line. Each field in the class defines a command line argument. + /// The type of the field is used to validate the data read from the command line. + /// The name of the field defines the name of the command line option. + /// + /// The parser can handle fields of the following types: + /// + /// - string + /// - int + /// - uint + /// - bool + /// - enum + /// - array of the above type + /// + /// For example, suppose you want to read in the argument list for wc (word count). + /// wc takes three optional boolean arguments: -l, -w, and -c and a list of files. + /// + /// You could parse these arguments using the following code: + /// + /// class WCArguments + /// { + /// public bool lines; + /// public bool words; + /// public bool chars; + /// public string[] files; + /// } + /// + /// class WC + /// { + /// static void Main(string[] args) + /// { + /// if (CommandLine.ParseArgumentsWithUsage(args, parsedArgs)) + /// { + /// // insert application code here + /// } + /// } + /// } + /// + /// So you could call this aplication with the following command line to count + /// lines in the foo and bar files: + /// + /// wc.exe /lines /files:foo /files:bar + /// + /// The program will display the following usage message when bad command line + /// arguments are used: + /// + /// wc.exe -x + /// + /// Unrecognized command line argument '-x' + /// /lines[+|-] short form /l + /// /words[+|-] short form /w + /// /chars[+|-] short form /c + /// /files:<string> short form /f + /// @<file> Read response file for more options + /// + /// That was pretty easy. However, you realy want to omit the "/files:" for the + /// list of files. The details of field parsing can be controled using custom + /// attributes. The attributes which control parsing behaviour are: + /// + /// ArgumentAttribute + /// - controls short name, long name, required, allow duplicates, default value + /// and help text + /// DefaultArgumentAttribute + /// - allows omition of the "/name". + /// - This attribute is allowed on only one field in the argument class. + /// + /// So for the wc.exe program we want this: + /// + /// using System; + /// using Utilities; + /// + /// class WCArguments + /// { + /// [Argument(ArgumentType.AtMostOnce, HelpText="Count number of lines in the input text.")] + /// public bool lines; + /// [Argument(ArgumentType.AtMostOnce, HelpText="Count number of words in the input text.")] + /// public bool words; + /// [Argument(ArgumentType.AtMostOnce, HelpText="Count number of chars in the input text.")] + /// public bool chars; + /// [DefaultArgument(ArgumentType.MultipleUnique, HelpText="Input files to count.")] + /// public string[] files; + /// } + /// + /// class WC + /// { + /// static void Main(string[] args) + /// { + /// WCArguments parsedArgs = new WCArguments(); + /// if (CommandLine.ParseArgumentsWithUsage(args, parsedArgs)) + /// { + /// // insert application code here + /// } + /// } + /// } + /// + /// + /// + /// So now we have the command line we want: + /// + /// wc.exe /lines foo bar + /// + /// This will set lines to true and will set files to an array containing the + /// strings "foo" and "bar". + /// + /// The new usage message becomes: + /// + /// wc.exe -x + /// + /// Unrecognized command line argument '-x' + /// /lines[+|-] Count number of lines in the input text. (short form /l) + /// /words[+|-] Count number of words in the input text. (short form /w) + /// /chars[+|-] Count number of chars in the input text. (short form /c) + /// @<file> Read response file for more options + /// <files> Input files to count. (short form /f) + /// + /// If you want more control over how error messages are reported, how /help is + /// dealt with, etc you can instantiate the CommandLine.Parser class. + /// + /// + /// + /// Cheers, + /// Peter Hallam + /// C# Compiler Developer + /// Microsoft Corp. + /// + /// + /// + /// + /// Release Notes + /// ------------- + /// + /// 10/02/2002 Initial Release + /// 10/14/2002 Bug Fix + /// 01/08/2003 Bug Fix in @ include files + /// 10/23/2004 Added user specified help text, formatting of help text to + /// screen width. Added ParseHelp for /?. + /// 11/23/2004 Added support for default values. + /// 02/23/2005 Fix bug with short name and default arguments. + /// + /// 12/24/2009 sky: Added ushort as valid argument type. + /// 12/27/2009 sky: todo: expose out and err to enable use in forms app. + /// 12/29/2009 sky: added ArgumentsAttribute and GetGenericUsageString to allow attaching generic help text + /// 01/01/2010 sky: split classes into seperate files + /// 01/01/2010 sky: cleaned up Parser.cs + /// 05/22/2010 sky: major cleanup - more to come. + /// + public sealed class CommandLineParser + { + /// + /// The System Defined new line string. + /// + public const string NewLine = "\r\n"; + + private const int SpaceBeforeParam = 2; + + private const int StdOutputHandle = -11; + + private readonly Hashtable _argumentMap; + + private readonly ArrayList _arguments; + + private readonly Type _argumentSpecification; + + private readonly Argument _defaultArgument; + + private readonly ErrorReporter _reporter; + + /// + /// Don't ever call this. + /// + // ReSharper disable UnusedMember.Local + private CommandLineParser() + // ReSharper restore UnusedMember.Local + { + //noop + } + + /// + /// Creates a new command line argument parser. + /// + /// The type of object to parse. + /// The destination for parse errors. + public CommandLineParser(Type argumentSpecification, ErrorReporter reporter) + { + _argumentSpecification = argumentSpecification; + _reporter = reporter; + _arguments = new ArrayList(); + _argumentMap = new Hashtable(); + + foreach (FieldInfo field in argumentSpecification.GetFields()) + { + if (!field.IsStatic && !field.IsInitOnly && !field.IsLiteral) + { + ArgumentAttribute attribute = GetAttribute(field); + if (attribute is DefaultArgumentAttribute) + { + Debug.Assert(_defaultArgument == null); + _defaultArgument = new Argument(attribute, field, reporter); + } + else + { + _arguments.Add(new Argument(attribute, field, reporter)); + } + } + } + + // add explicit names to map + foreach (Argument argument in _arguments) + { + Debug.Assert(!_argumentMap.ContainsKey(argument.LongName)); + _argumentMap[argument.LongName] = argument; + if (argument.ExplicitShortName) + { + if (!string.IsNullOrEmpty(argument.ShortName)) + { + Debug.Assert(!_argumentMap.ContainsKey(argument.ShortName)); + _argumentMap[argument.ShortName] = argument; + } + else + { + argument.ClearShortName(); + } + } + } + + // add implicit names which don't collide to map + foreach (Argument argument in _arguments) + { + if (!argument.ExplicitShortName) + { + if (!string.IsNullOrEmpty(argument.ShortName) && !_argumentMap.ContainsKey(argument.ShortName)) + _argumentMap[argument.ShortName] = argument; + else + argument.ClearShortName(); + } + } + } + + /// + /// Does this parser have a default argument. + /// + /// Does this parser have a default argument. + public bool HasDefaultArgument + { + get { return _defaultArgument != null; } + } + + /// + /// Returns a Usage string for command line argument parsing. + /// Use ArgumentAttributes to control parsing behaviour. + /// Formats the output to the width of the current console window. + /// + /// The type of the arguments to display usage for. + /// Printable string containing a user friendly description of command line arguments. + public static string ArgumentsUsage(Type argumentType) + { + int screenWidth = GetConsoleWindowWidth(); + if (screenWidth == 0) + screenWidth = 80; + return ArgumentsUsage(argumentType, screenWidth); + } + + /// + /// Returns a Usage string for command line argument parsing. + /// Use ArgumentAttributes to control parsing behaviour. + /// + /// The type of the arguments to display usage for. + /// The number of columns to format the output to. + /// Printable string containing a user friendly description of command line arguments. + public static string ArgumentsUsage(Type argumentType, int columns) + { + return (new CommandLineParser(argumentType, null)).GetUsageString(columns); + } + + /// + /// Returns the number of columns in the current console window + /// + /// Returns the number of columns in the current console window + public static int GetConsoleWindowWidth() + { + Interop.CONSOLE_SCREEN_BUFFER_INFO csbi = new Interop.CONSOLE_SCREEN_BUFFER_INFO(); + +#pragma warning disable 168 + int rc = Interop.GetConsoleScreenBufferInfo(Interop.GetStdHandle(StdOutputHandle), ref csbi); +#pragma warning restore 168 + int screenWidth = csbi.dwSize.x; + return screenWidth; + } + + /// + /// A user firendly usage string describing the command line argument syntax. + /// + public string GetUsageString(int screenWidth) + { + ArgumentHelpStrings[] strings = GetAllHelpStrings(); + + int maxParamLen = 0; + foreach (ArgumentHelpStrings helpString in strings) + { + maxParamLen = Math.Max(maxParamLen, helpString.syntax.Length); + } + + const int minimumNumberOfCharsForHelpText = 10; + const int minimumHelpTextColumn = 5; + const int minimumScreenWidth = minimumHelpTextColumn + minimumNumberOfCharsForHelpText; + + int idealMinimumHelpTextColumn = maxParamLen + SpaceBeforeParam; + screenWidth = Math.Max(screenWidth, minimumScreenWidth); + int helpTextColumn = screenWidth < (idealMinimumHelpTextColumn + minimumNumberOfCharsForHelpText) + ? minimumHelpTextColumn + : idealMinimumHelpTextColumn; + + const string newLine = "\n"; + StringBuilder builder = new StringBuilder(); + + // 01/01/2010 sky + string genericUsage = GetGenericUsageString(_argumentSpecification, screenWidth); + if (!string.IsNullOrEmpty(genericUsage)) + { + builder.AppendLine(genericUsage); + } + + foreach (ArgumentHelpStrings helpStrings in strings) + { + // add syntax string + int syntaxLength = helpStrings.syntax.Length; + builder.Append(helpStrings.syntax); + + // start help text on new line if syntax string is too long + int currentColumn = syntaxLength; + if (syntaxLength >= helpTextColumn) + { + builder.Append(newLine); + currentColumn = 0; + } + + // add help text broken on spaces + int charsPerLine = screenWidth - helpTextColumn; + int index = 0; + while (index < helpStrings.help.Length) + { + // tab to start column + builder.Append(' ', helpTextColumn - currentColumn); + currentColumn = helpTextColumn; + + // find number of chars to display on this line + int endIndex = index + charsPerLine; + if (endIndex >= helpStrings.help.Length) + { + // rest of text fits on this line + endIndex = helpStrings.help.Length; + } + else + { + endIndex = helpStrings.help.LastIndexOf(' ', endIndex - 1, + Math.Min(endIndex - index, charsPerLine)); + if (endIndex <= index) + { + // no spaces on this line, append full set of chars + endIndex = index + charsPerLine; + } + } + + // add chars + builder.Append(helpStrings.help, index, endIndex - index); + index = endIndex; + + // do new line + AddNewLine(newLine, builder, ref currentColumn); + + // don't start a new line with spaces + while (index < helpStrings.help.Length && helpStrings.help[index] == ' ') + index++; + } + + // add newline if there's no help text + if (helpStrings.help.Length == 0) + { + builder.Append(newLine); + } + } + + return builder.ToString(); + } + + /// + /// Searches a StringBuilder for a character + /// + /// The text to search. + /// The character value to search for. + /// The index to stat searching at. + /// The index of the first occurence of value or -1 if it is not found. + public static int IndexOf(StringBuilder text, char value, int startIndex) + { + for (int index = startIndex; index < text.Length; index++) + { + if (text[index] == value) + return index; + } + + return -1; + } + + /// + /// Searches a StringBuilder for a character in reverse + /// + /// The text to search. + /// The character to search for. + /// The index to start the search at. + /// The index of the last occurence of value in text or -1 if it is not found. + public static int LastIndexOf(StringBuilder text, char value, int startIndex) + { + for (int index = Math.Min(startIndex, text.Length - 1); index >= 0; index--) + { + if (text[index] == value) + return index; + } + + return -1; + } + + /// + /// Parses an argument list. + /// + /// The arguments to parse. + /// The destination of the parsed arguments. + /// true if no parse errors were encountered. + public bool Parse(string[] args, object destination) + { + bool hadError = ParseArgumentList(args, destination); + + // check for missing required arguments + foreach (Argument arg in _arguments) + { + hadError |= arg.Finish(destination); + } + if (_defaultArgument != null) + { + hadError |= _defaultArgument.Finish(destination); + } + + return !hadError; + } + + /// + /// Parses Command Line Arguments. + /// Errors are output on Console.Error. + /// Use ArgumentAttributes to control parsing behaviour. + /// + /// The actual arguments. + /// The resulting parsed arguments. + /// true if no errors were detected. + public static bool ParseArguments(string[] arguments, object destination) + { + return ParseArguments(arguments, destination, Console.Error.WriteLine); + } + + /// + /// Parses Command Line Arguments. + /// Use ArgumentAttributes to control parsing behaviour. + /// + /// The actual arguments. + /// The resulting parsed arguments. + /// The destination for parse errors. + /// true if no errors were detected. + public static bool ParseArguments(string[] arguments, object destination, ErrorReporter reporter) + { + CommandLineParser parser = new CommandLineParser(destination.GetType(), reporter); + return parser.Parse(arguments, destination); + } + + /// + /// Parses Command Line Arguments. Displays usage message to Console.Out + /// if /?, /help or invalid arguments are encounterd. + /// Errors are output on Console.Error. + /// Use ArgumentAttributes to control parsing behaviour. + /// + /// The actual arguments. + /// The resulting parsed arguments. + /// true if no errors were detected. + public static bool ParseArgumentsWithUsage(string[] arguments, object destination) + { + if (ParseHelp(arguments) || !ParseArguments(arguments, destination)) + { + // error encountered in arguments. Display usage message + Console.Write(ArgumentsUsage(destination.GetType())); + return false; + } + + return true; + } + + /// + /// Checks if a set of arguments asks for help. + /// + /// Args to check for help. + /// Returns true if args contains /? or /help. + public static bool ParseHelp(string[] args) + { + CommandLineParser helpParser = new CommandLineParser(typeof (HelpArgument), NullErrorReporter); + HelpArgument helpArgument = new HelpArgument(); + helpParser.Parse(args, helpArgument); + return helpArgument.help; + } + + private static void AddNewLine(string newLine, StringBuilder builder, ref int currentColumn) + { + builder.Append(newLine); + currentColumn = 0; + } + + private static object DefaultValue(ArgumentAttribute attribute) + { + return (attribute == null || !attribute.HasDefaultValue) ? null : attribute.DefaultValue; + } + + private static Type ElementType(FieldInfo field) + { + return IsCollectionType(field.FieldType) ? field.FieldType.GetElementType() : null; + } + + private static bool ExplicitShortName(ArgumentAttribute attribute) + { + return (attribute != null && !attribute.DefaultShortName); + } + + private static ArgumentType Flags(ArgumentAttribute attribute, FieldInfo field) + { + if (attribute != null) + { + return attribute.Type; + } + + return IsCollectionType(field.FieldType) ? ArgumentType.MultipleUnique : ArgumentType.AtMostOnce; + } + + private ArgumentHelpStrings[] GetAllHelpStrings() + { + ArgumentHelpStrings[] strings = new ArgumentHelpStrings[NumberOfParametersToDisplay()]; + + int index = 0; + foreach (Argument arg in _arguments) + { + strings[index] = GetHelpStrings(arg); + index++; + } + strings[index++] = new ArgumentHelpStrings("@", "Read response file for more options"); + if (_defaultArgument != null) + { + strings[index] = GetHelpStrings(_defaultArgument); + } + + return strings; + } + + private static ArgumentAttribute GetAttribute(ICustomAttributeProvider field) + { + object[] attributes = field.GetCustomAttributes(typeof (ArgumentAttribute), false); + if (attributes.Length == 1) + return (ArgumentAttribute) attributes[0]; + + Debug.Assert(attributes.Length == 0); + return null; + } + + /// + /// 01/01/2010 sky + /// + private static string GetGenericUsageString(ICustomAttributeProvider type, int cols) + { + object[] attributes = type.GetCustomAttributes(typeof (ArgumentsAttribute), true); + if (attributes.Length == 0 || !((ArgumentsAttribute) attributes[0]).HasHelpText) + { + return string.Empty; + } + + StringBuilder sb = new StringBuilder(); + string usage = ((ArgumentsAttribute) attributes[0]).HelpText; + // simple width formatter + string[] lines = Regex.Split(usage, Environment.NewLine); + foreach (string line in lines) + { + string[] words = Regex.Split(line, " "); + string currentLine = string.Empty; + foreach (string word in words) + { + if (currentLine.Length + word.Length + 1 > cols) + { + // start new line + sb.AppendLine(currentLine); + currentLine = word + " "; + } + else + { + currentLine += (word + " "); + } + } + sb.AppendLine(currentLine); + sb.Append(Environment.NewLine); + } + return sb.ToString(); + } + + private static ArgumentHelpStrings GetHelpStrings(Argument arg) + { + return new ArgumentHelpStrings(arg.SyntaxHelp, arg.FullHelpText); + } + + private static bool HasHelpText(ArgumentAttribute attribute) + { + return (attribute != null && attribute.HasHelpText); + } + + private static string HelpText(ArgumentAttribute attribute) + { + return attribute == null ? null : attribute.HelpText; + } + + private static bool IsCollectionType(Type type) + { + return type.IsArray; + } + + private static bool IsValidElementType(Type type) + { + //SKY:12/25/09 - added ushort + return type != null && ( + type == typeof (int) || + type == typeof (uint) || + type == typeof (ushort) || + type == typeof (string) || + type == typeof (bool) || + type.IsEnum); + } + + private bool LexFileArguments(string fileName, out string[] argumentsOut) + { + string args; + + try + { + using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read)) + { + args = (new StreamReader(file)).ReadToEnd(); + } + } + catch (Exception e) + { + _reporter(string.Format("Error: Can't open command line argument file '{0}' : '{1}'", fileName, + e.Message)); + argumentsOut = null; + return false; + } + + bool hadError = false; + ArrayList argArray = new ArrayList(); + StringBuilder currentArg = new StringBuilder(); + bool inQuotes = false; + int index = 0; + + // while (index < args.Length) + try + { + while (true) + { + // skip whitespace + while (char.IsWhiteSpace(args[index])) + { + index += 1; + } + + // # - comment to end of line + if (args[index] == '#') + { + index += 1; + while (args[index] != '\n') + { + index += 1; + } + continue; + } + + // do one argument + do + { + if (args[index] == '\\') + { + int cSlashes = 1; + index += 1; + while (index == args.Length && args[index] == '\\') + { + cSlashes += 1; + } + + if (index == args.Length || args[index] != '"') + { + currentArg.Append('\\', cSlashes); + } + else + { + currentArg.Append('\\', (cSlashes >> 1)); + if (0 != (cSlashes & 1)) + { + currentArg.Append('"'); + } + else + { + inQuotes = !inQuotes; + } + } + } + else if (args[index] == '"') + { + inQuotes = !inQuotes; + index += 1; + } + else + { + currentArg.Append(args[index]); + index += 1; + } + } while (!char.IsWhiteSpace(args[index]) || inQuotes); + argArray.Add(currentArg.ToString()); + currentArg.Length = 0; + } + } + catch (IndexOutOfRangeException) + { + // got EOF + if (inQuotes) + { + _reporter(string.Format("Error: Unbalanced '\"' in command line argument file '{0}'", fileName)); + hadError = true; + } + else if (currentArg.Length > 0) + { + // valid argument can be terminated by EOF + argArray.Add(currentArg.ToString()); + } + } + + argumentsOut = (string[]) argArray.ToArray(typeof (string)); + return hadError; + } + + private static string LongName(ArgumentAttribute attribute, FieldInfo field) + { + return (attribute == null || attribute.DefaultLongName) ? field.Name : attribute.LongName; + } + + private static void NullErrorReporter(string message) + { + } + + private int NumberOfParametersToDisplay() + { + int numberOfParameters = _arguments.Count + 1; + if (HasDefaultArgument) + { + numberOfParameters += 1; + } + return numberOfParameters; + } + + /// + /// Parses an argument list into an object + /// + /// + /// + /// true if an error occurred + private bool ParseArgumentList(IEnumerable args, object destination) + { + bool hadError = false; + if (args != null) + { + foreach (string argument in args) + { + if (argument.Length > 0) + { + switch (argument[0]) + { + case '-': + case '/': + int endIndex = argument.IndexOfAny(new[] {':', '+', '-'}, 1); + string option = argument.Substring(1, + endIndex == -1 ? argument.Length - 1 : endIndex - 1); + string optionArgument; + if (option.Length + 1 == argument.Length) + { + optionArgument = null; + } + else if (argument.Length > 1 + option.Length && argument[1 + option.Length] == ':') + { + optionArgument = argument.Substring(option.Length + 2); + } + else + { + optionArgument = argument.Substring(option.Length + 1); + } + + Argument arg = (Argument) _argumentMap[option]; + if (arg == null) + { + ReportUnrecognizedArgument(argument); + hadError = true; + } + else + { + hadError |= !arg.SetValue(optionArgument, destination); + } + break; + case '@': + string[] nestedArguments; + hadError |= LexFileArguments(argument.Substring(1), out nestedArguments); + hadError |= ParseArgumentList(nestedArguments, destination); + break; + default: + if (_defaultArgument != null) + { + hadError |= !_defaultArgument.SetValue(argument, destination); + } + else + { + ReportUnrecognizedArgument(argument); + hadError = true; + } + break; + } + } + } + } + + return hadError; + } + + private void ReportUnrecognizedArgument(string argument) + { + _reporter(string.Format("Unrecognized command line argument '{0}'", argument)); + } + + private static string ShortName(ArgumentAttribute attribute, FieldInfo field) + { + if (attribute is DefaultArgumentAttribute) + return null; + if (!ExplicitShortName(attribute)) + return LongName(attribute, field).Substring(0, 1); + return attribute.ShortName; + } + + #region Nested type: Argument + + [DebuggerDisplay("Name = {LongName}")] + private class Argument + { + private readonly ArrayList _collectionValues; + private readonly object _defaultValue; + private readonly Type _elementType; + private readonly bool _explicitShortName; + private readonly FieldInfo _field; + private readonly ArgumentType _flags; + private readonly bool _hasHelpText; + private readonly string _helpText; + private readonly bool _isDefault; + private readonly string _longName; + private readonly ErrorReporter _reporter; + private bool _seenValue; + private string _shortName; + + public Argument(ArgumentAttribute attribute, FieldInfo field, ErrorReporter reporter) + { + _longName = CommandLineParser.LongName(attribute, field); + _explicitShortName = CommandLineParser.ExplicitShortName(attribute); + _shortName = CommandLineParser.ShortName(attribute, field); + _hasHelpText = CommandLineParser.HasHelpText(attribute); + _helpText = CommandLineParser.HelpText(attribute); + _defaultValue = CommandLineParser.DefaultValue(attribute); + _elementType = ElementType(field); + _flags = Flags(attribute, field); + _field = field; + _seenValue = false; + _reporter = reporter; + _isDefault = attribute != null && attribute is DefaultArgumentAttribute; + + if (IsCollection) + { + _collectionValues = new ArrayList(); + } + + Debug.Assert(!string.IsNullOrEmpty(_longName)); + Debug.Assert(!_isDefault || !ExplicitShortName); + Debug.Assert(!IsCollection || AllowMultiple, "Collection arguments must have allow multiple"); + Debug.Assert(!Unique || IsCollection, "Unique only applicable to collection arguments"); + Debug.Assert(IsValidElementType(Type) || IsCollectionType(Type)); + Debug.Assert((IsCollection && IsValidElementType(_elementType)) || + (!IsCollection && _elementType == null)); + Debug.Assert(!(IsRequired && HasDefaultValue), "Required arguments cannot have default value"); + Debug.Assert(!HasDefaultValue || (_defaultValue.GetType() == field.FieldType), + "Type of default value must match field type"); + } + + private Type ValueType + { + get { return IsCollection ? _elementType : Type; } + } + + public string LongName + { + get { return _longName; } + } + + public bool ExplicitShortName + { + get { return _explicitShortName; } + } + + public string ShortName + { + get { return _shortName; } + } + + private bool HasShortName + { + get { return _shortName != null; } + } + + private bool HasHelpText + { + get { return _hasHelpText; } + } + + private string HelpText + { + get { return _helpText; } + } + + private object DefaultValue + { + get { return _defaultValue; } + } + + private bool HasDefaultValue + { + get { return null != _defaultValue; } + } + + public string FullHelpText + { + get + { + StringBuilder builder = new StringBuilder(); + if (HasHelpText) + { + builder.Append(HelpText); + } + if (HasDefaultValue) + { + if (builder.Length > 0) + builder.Append(" "); + builder.Append("Default value:'"); + AppendValue(builder, DefaultValue); + builder.Append('\''); + } + if (HasShortName) + { + if (builder.Length > 0) + builder.Append(" "); + builder.Append("(short form /"); + builder.Append(ShortName); + builder.Append(")"); + } + return builder.ToString(); + } + } + + public string SyntaxHelp + { + get + { + StringBuilder builder = new StringBuilder(); + + if (IsDefault) + { + builder.Append("<"); + builder.Append(LongName); + builder.Append(">"); + } + else + { + builder.Append("/"); + builder.Append(LongName); + Type valueType = ValueType; + if (valueType == typeof (int)) + { + builder.Append(":"); + } + else if (valueType == typeof (uint)) + { + builder.Append(":"); + } + else if (valueType == typeof (bool)) + { + builder.Append("[+|-]"); + } + else if (valueType == typeof (string)) + { + builder.Append(":"); + } + else + { + Debug.Assert(valueType.IsEnum); + + builder.Append(":{"); + bool first = true; + foreach (FieldInfo info in valueType.GetFields()) + { + if (info.IsStatic) + { + if (first) + first = false; + else + builder.Append('|'); + builder.Append(info.Name); + } + } + builder.Append('}'); + } + } + + return builder.ToString(); + } + } + + private bool IsRequired + { + get { return 0 != (_flags & ArgumentType.Required); } + } + + private bool SeenValue + { + get { return _seenValue; } + } + + private bool AllowMultiple + { + get { return 0 != (_flags & ArgumentType.Multiple); } + } + + private bool Unique + { + get { return 0 != (_flags & ArgumentType.Unique); } + } + + private Type Type + { + get { return _field.FieldType; } + } + + private bool IsCollection + { + get { return IsCollectionType(Type); } + } + + private bool IsDefault + { + get { return _isDefault; } + } + + public bool Finish(object destination) + { + if (SeenValue) + { + if (IsCollection) + { + _field.SetValue(destination, _collectionValues.ToArray(_elementType)); + } + } + else + { + if (HasDefaultValue) + { + _field.SetValue(destination, DefaultValue); + } + } + + return ReportMissingRequiredArgument(); + } + + private bool ReportMissingRequiredArgument() + { + if (IsRequired && !SeenValue) + { + if (IsDefault) + _reporter(string.Format("Missing required argument '<{0}>'.", LongName)); + else + _reporter(string.Format("Missing required argument '/{0}'.", LongName)); + return true; + } + return false; + } + + private void ReportDuplicateArgumentValue(string value) + { + _reporter(string.Format("Duplicate '{0}' argument '{1}'", LongName, value)); + } + + public bool SetValue(string value, object destination) + { + if (SeenValue && !AllowMultiple) + { + _reporter(string.Format("Duplicate '{0}' argument", LongName)); + return false; + } + _seenValue = true; + + object newValue; + + if (!ParseValue(ValueType, value, out newValue)) + { + return false; + } + + if (IsCollection) + { + if (Unique && _collectionValues.Contains(newValue)) + { + ReportDuplicateArgumentValue(value); + return false; + } + _collectionValues.Add(newValue); + } + else + { + _field.SetValue(destination, newValue); + } + + return true; + } + + private void ReportBadArgumentValue(string value) + { + _reporter(string.Format("'{0}' is not a valid value for the '{1}' command line option", value, LongName)); + } + + private bool ParseValue(Type type, string stringData, out object value) + { + // null is only valid for bool variables + // empty string is never valid + if (!string.IsNullOrEmpty(stringData) || type == typeof (bool)) + { + try + { + do //omed loop + { + if (type == typeof (string)) + { + value = stringData; + return true; + } + + if (type == typeof (bool)) + { + if (stringData == null || stringData == "+") + { + value = true; + return true; + } + + if (stringData == "-") + { + value = false; + return true; + } + break; + } + + // from this point on, a null or empty string is invalid + if (string.IsNullOrEmpty(stringData)) + { + break; + } + + if (type == typeof (int)) + { + value = int.Parse(stringData); + return true; + } + + if (type == typeof (uint)) + { + value = int.Parse(stringData); + return true; + } + + //SKY:12/25/09 - added ushort + if (type == typeof (ushort)) + { + value = ushort.Parse(stringData); + return true; + } + + Debug.Assert(type.IsEnum); + + bool valid = false; + + foreach (string name in Enum.GetNames(type)) + { + if (string.Compare(name, stringData, StringComparison.InvariantCultureIgnoreCase) == 0) + { + valid = true; + break; + } + } + if (valid) + { + value = Enum.Parse(type, stringData, true); + return true; + } + } while (false); + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + // catch parse errors + } + } + + ReportBadArgumentValue(stringData); + value = null; + return false; + } + + private static void AppendValue(StringBuilder builder, object value) + { + //SKY:12/25/09 - add ushort + if (value is string || value is int || value is uint || value is ushort || value.GetType().IsEnum) + { + builder.Append(value.ToString()); + } + else if (value is bool) + { + builder.Append((bool) value ? "+" : "-"); + } + else + { + bool first = true; + foreach (object o in (Array) value) + { + if (!first) + { + builder.Append(", "); + } + AppendValue(builder, o); + first = false; + } + } + } + + public void ClearShortName() + { + _shortName = null; + } + } + + #endregion + + #region Nested type: ArgumentHelpStrings + + private struct ArgumentHelpStrings + { + public readonly string help; + public readonly string syntax; + + public ArgumentHelpStrings(string syntax, string help) + { + this.syntax = syntax; + this.help = help; + } + } + + #endregion + + #region Nested type: HelpArgument + + private class HelpArgument + { + [Argument(ArgumentType.AtMostOnce, ShortName = "?")] public bool help; + } + + #endregion + } + + /// + /// A delegate used in error reporting. + /// + public delegate void ErrorReporter(string message); + + /// + /// Indicates that this argument is the default argument. + /// '/' or '-' prefix only the argument value is specified. + /// The ShortName property should not be set for DefaultArgumentAttribute + /// instances. The LongName property is used for usage text only and + /// does not affect the usage of the argument. + /// + [AttributeUsage(AttributeTargets.Field)] + public class DefaultArgumentAttribute : ArgumentAttribute + { + /// + /// Indicates that this argument is the default argument. + /// + /// Specifies the error checking to be done on the argument. + public DefaultArgumentAttribute(ArgumentType type) + : base(type) + { + } + } + + /// + /// Used to control parsing of command line arguments. + /// + [Flags] + public enum ArgumentType + { + /// + /// Indicates that this field is required. An error will be displayed + /// if it is not present when parsing arguments. + /// + Required = 0x01, + /// + /// Only valid in conjunction with Multiple. + /// Duplicate values will result in an error. + /// + Unique = 0x02, + /// + /// Inidicates that the argument may be specified more than once. + /// Only valid if the argument is a collection + /// + Multiple = 0x04, + + /// + /// The default type for non-collection arguments. + /// The argument is not required, but an error will be reported if it is specified more than once. + /// + AtMostOnce = 0x00, + + /// + /// For non-collection arguments, when the argument is specified more than + /// once no error is reported and the value of the argument is the last + /// value which occurs in the argument list. + /// + LastOccurenceWins = Multiple, + + /// + /// The default type for collection arguments. + /// The argument is permitted to occur multiple times, but duplicate + /// values will cause an error to be reported. + /// + MultipleUnique = Multiple | Unique, + } + + /// + /// Allows attaching generic help text to arguments class + /// + /// 12/29/09 sky: added + /// + [AttributeUsage(AttributeTargets.Class)] + public class ArgumentsAttribute : Attribute + { + private string _helpText; + + /// + /// Returns true if the argument has help text specified. + /// + public bool HasHelpText + { + get { return null != _helpText; } + } + + /// + /// The help text for the argument. + /// + public string HelpText + { + get { return _helpText; } + set { _helpText = value; } + } + } + + /// + /// Allows control of command line parsing. + /// Attach this attribute to instance fields of types used + /// as the destination of command line argument parsing. + /// + [AttributeUsage(AttributeTargets.Field)] + public class ArgumentAttribute : Attribute + { + #region Fields + + private readonly ArgumentType _type; + private object _defaultValue; + + private string _helpText; + + private string _longName; + + private string _shortName; + + #endregion + + #region Constructors + + /// + /// Allows control of command line parsing. + /// + /// Specifies the error checking to be done on the argument. + public ArgumentAttribute(ArgumentType type) + { + _type = type; + } + + #endregion + + #region Properties + + /// + /// Returns true if the argument did not have an explicit long name specified. + /// + public bool DefaultLongName + { + get { return null == _longName; } + } + + /// + /// Returns true if the argument did not have an explicit short name specified. + /// + public bool DefaultShortName + { + get { return null == _shortName; } + } + + /// + /// The default value of the argument. + /// + public object DefaultValue + { + get { return _defaultValue; } + set { _defaultValue = value; } + } + + /// + /// Returns true if the argument has a default value. + /// + public bool HasDefaultValue + { + get { return null != _defaultValue; } + } + + /// + /// Returns true if the argument has help text specified. + /// + public bool HasHelpText + { + get { return null != _helpText; } + } + + /// + /// The help text for the argument. + /// + public string HelpText + { + get { return _helpText; } + set { _helpText = value; } + } + + /// + /// The long name of the argument. + /// Set to null means use the default long name. + /// The long name for every argument must be unique. + /// It is an error to specify a long name of String.Empty. + /// + public string LongName + { + get + { + Debug.Assert(!DefaultLongName); + return _longName; + } + set + { + Debug.Assert(value != ""); + _longName = value; + } + } + + /// + /// The short name of the argument. + /// Set to null means use the default short name if it does not + /// conflict with any other parameter name. + /// Set to String.Empty for no short name. + /// This property should not be set for DefaultArgumentAttributes. + /// + public string ShortName + { + get { return _shortName; } + set + { + Debug.Assert(value == null || !(this is DefaultArgumentAttribute)); + _shortName = value; + } + } + + /// + /// The error checking to be done on the argument. + /// + public ArgumentType Type + { + get { return _type; } + } + + #endregion + } +} \ No newline at end of file diff --git a/CassiniDev/Misc/Common.cs b/CassiniDev/Misc/Common.cs new file mode 100644 index 000000000..6ba35d0cf --- /dev/null +++ b/CassiniDev/Misc/Common.cs @@ -0,0 +1,1783 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Web.UI; + +#endregion + +namespace CassiniDev +{ + internal static class Common + { + public static string ConvertToHexView(this byte[] value, int numBytesPerRow) + { + if (value == null) return null; + + List hexSplit = BitConverter.ToString(value) + .Replace('-', ' ') + .Trim() + .SplitIntoChunks(numBytesPerRow*3) + .ToList(); + + int byteAddress = 0; + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < hexSplit.Count; i++) + { + sb.AppendLine(byteAddress.ToString("X4") + ":\t" + hexSplit[i]); + byteAddress += numBytesPerRow; + } + + return sb.ToString(); + } + + public static string GetAspVersion() + { + string version = null; + try + { + Type type = typeof (Page); + Assembly assembly = Assembly.GetAssembly(type); + + object[] customAttributes = assembly.GetCustomAttributes(typeof (AssemblyFileVersionAttribute), true); + if ((customAttributes != null) && (customAttributes.GetLength(0) > 0)) + { + version = ((AssemblyFileVersionAttribute) customAttributes[0]).Version; + } + else + { + version = assembly.GetName().Version.ToString(); + } + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + return version; + } + + /// + /// CassiniDev FIX: #12506 + /// + /// + /// + public static string GetContentType(string fileName) + { + if (!File.Exists(fileName)) + { + return null; + } + + string contentType; + + FileInfo info = new FileInfo(fileName); + string extension = info.Extension.ToLowerInvariant(); + + switch (extension) + { + //NOTE: these are fallbacks - and should be refined as needed + // Only if the request does not already know + // the content-type will this switch be hit - meaning that + // served content-types for extensions listed here may not match + // as this method may not be polled. + + case ".svgz": + contentType = "image/svg+xml"; + break; + + // from registry - last resort - verified mappings follow + + case ".3g2": + contentType = "video/3gpp2"; + break; + case ".3gp": + contentType = "video/3gpp"; + break; + case ".3gp2": + contentType = "video/3gpp2"; + break; + case ".3gpp": + contentType = "video/3gpp"; + break; + case ".adt": + contentType = "audio/vnd.dlna.adts"; + break; + case ".amr": + contentType = "audio/AMR"; + break; + case ".addin": + contentType = "text/xml"; + break; + case ".evr": + contentType = "audio/evrc-qcp"; + break; + case ".evrc": + contentType = "audio/evrc-qcp"; + break; + case ".ssisdeploymentmanifest": + contentType = "text/xml"; + break; + case ".xoml": + contentType = "text/plain"; + break; + case ".aac": + contentType = "audio/aac"; + break; + case ".ac3": + contentType = "audio/ac3"; + break; + case ".accda": + contentType = "application/msaccess"; + break; + case ".accdb": + contentType = "application/msaccess"; + break; + case ".accdc": + contentType = "application/msaccess"; + break; + case ".accde": + contentType = "application/msaccess"; + break; + case ".accdr": + contentType = "application/msaccess"; + break; + case ".accdt": + contentType = "application/msaccess"; + break; + case ".acrobatsecuritysettings": + contentType = "application/vnd.adobe.acrobat-security-settings"; + break; + case ".ad": + contentType = "text/plain"; + break; + case ".ade": + contentType = "application/msaccess"; + break; + case ".adobebridge": + contentType = "application/x-bridge-url"; + break; + case ".adp": + contentType = "application/msaccess"; + break; + case ".adts": + contentType = "audio/vnd.dlna.adts"; + break; + case ".amc": + contentType = "application/x-mpeg"; + break; + case ".application": + contentType = "application/x-ms-application"; + break; + case ".asa": + contentType = "application/xml"; + break; + case ".asax": + contentType = "application/xml"; + break; + case ".ascx": + contentType = "application/xml"; + break; + + case ".ashx": + contentType = "application/xml"; + break; + case ".asm": + contentType = "text/plain"; + break; + case ".asmx": + contentType = "application/xml"; + break; + case ".aspx": + contentType = "application/xml"; + break; + case ".awf": + contentType = "application/vnd.adobe.workflow"; + break; + case ".biz": + contentType = "text/xml"; + break; + + case ".c2r": + contentType = "text/vnd-ms.click2record+xml"; + break; + case ".caf": + contentType = "audio/x-caf"; + break; + + case ".cc": + contentType = "text/plain"; + break; + case ".cd": + contentType = "text/plain"; + break; + case ".cdda": + contentType = "audio/aiff"; + break; + + case ".config": + contentType = "application/xml"; + break; + case ".contact": + contentType = "text/x-ms-contact"; + break; + case ".coverage": + contentType = "application/xml"; + break; + case ".cpp": + contentType = "text/plain"; + break; + case ".cs": + contentType = "text/plain"; + break; + case ".csdproj": + contentType = "text/plain"; + break; + case ".csproj": + contentType = "text/plain"; + break; + + case ".csv": + contentType = "application/vnd.ms-excel"; + break; + case ".cur": + contentType = "text/plain"; + break; + case ".cxx": + contentType = "text/plain"; + break; + case ".datasource": + contentType = "application/xml"; + break; + case ".dbproj": + contentType = "text/plain"; + break; + case ".dcd": + contentType = "text/xml"; + break; + case ".dd": + contentType = "text/plain"; + break; + case ".def": + contentType = "text/plain"; + break; + + case ".design": + contentType = "image/design"; + break; + case ".dgml": + contentType = "application/xml"; + break; + case ".dib": + contentType = "image/bmp"; + break; + case ".dif": + contentType = "video/x-dv"; + break; + case ".docm": + contentType = "application/vnd.ms-word.document.macroEnabled.12"; + break; + case ".docx": + contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; + break; + case ".dotm": + contentType = "application/vnd.ms-word.template.macroEnabled.12"; + break; + case ".dotx": + contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.template"; + break; + case ".dsp": + contentType = "text/plain"; + break; + case ".dsprototype": + contentType = "text/plain"; + break; + case ".dsw": + contentType = "text/plain"; + break; + case ".dtd": + contentType = "application/xml-dtd"; + break; + case ".dtsconfig": + contentType = "text/xml"; + break; + case ".dv": + contentType = "video/x-dv"; + break; + case ".dwfx": + contentType = "model/vnd.dwfx+xps"; + break; + case ".easmx": + contentType = "model/vnd.easmx+xps"; + break; + case ".edrwx": + contentType = "model/vnd.edrwx+xps"; + break; + case ".eprtx": + contentType = "model/vnd.eprtx+xps"; + break; + case ".fdf": + contentType = "application/vnd.fdf"; + break; + case ".filters": + contentType = "Application/xml"; + break; + case ".flc": + contentType = "video/flc"; + break; + case ".fo": + contentType = "text/xml"; + break; + case ".fsscript": + contentType = "application/fsharp-script"; + break; + case ".fsx": + contentType = "application/fsharp-script"; + break; + case ".generictest": + contentType = "application/xml"; + break; + case ".group": + contentType = "text/x-ms-group"; + break; + case ".gsm": + contentType = "audio/x-gsm"; + break; + case ".hpp": + contentType = "text/plain"; + break; + case ".hxa": + contentType = "application/xml"; + break; + case ".hxc": + contentType = "application/xml"; + break; + case ".hxd": + contentType = "application/octet-stream"; + break; + case ".hxe": + contentType = "application/xml"; + break; + case ".hxf": + contentType = "application/xml"; + break; + case ".hxh": + contentType = "application/octet-stream"; + break; + case ".hxi": + contentType = "application/octet-stream"; + break; + case ".hxk": + contentType = "application/xml"; + break; + case ".hxq": + contentType = "application/octet-stream"; + break; + case ".hxr": + contentType = "application/octet-stream"; + break; + case ".hxs": + contentType = "application/octet-stream"; + break; + case ".hxt": + contentType = "application/xml"; + break; + case ".hxv": + contentType = "application/xml"; + break; + case ".hxw": + contentType = "application/octet-stream"; + break; + case ".hxx": + contentType = "text/plain"; + break; + case ".i": + contentType = "text/plain"; + break; + case ".idl": + contentType = "text/plain"; + break; + case ".inc": + contentType = "text/plain"; + break; + case ".inl": + contentType = "text/plain"; + break; + case ".ipproj": + contentType = "text/plain"; + break; + case ".iqy": + contentType = "text/x-ms-iqy"; + break; + case ".ismv": + contentType = "video/ismv"; + break; + case ".jsx": + contentType = "text/plain"; + break; + case ".jsxbin": + contentType = "text/plain"; + break; + case ".jtx": + contentType = "application/x-jtx+xps"; + break; + case ".ldd": + contentType = "text/plain"; + break; + case ".library-ms": + contentType = "application/windows-library+xml"; + break; + case ".loadtest": + contentType = "application/xml"; + break; + case ".lsaprototype": + contentType = "text/plain"; + break; + case ".lst": + contentType = "text/plain"; + break; + case ".m1v": + contentType = "video/mpeg"; + break; + case ".m2t": + contentType = "video/vnd.dlna.mpeg-tts"; + break; + case ".m2ts": + contentType = "video/vnd.dlna.mpeg-tts"; + break; + case ".m2v": + contentType = "video/mpeg"; + break; + case ".m4a": + contentType = "audio/mp4"; + break; + case ".m4b": + contentType = "audio/x-m4b"; + break; + case ".m4p": + contentType = "audio/x-m4p"; + break; + case ".m4v": + contentType = "video/x-m4v"; + break; + case ".mac": + contentType = "image/x-macpaint"; + break; + case ".mak": + contentType = "text/plain"; + break; + case ".map": + contentType = "text/plain"; + break; + case ".master": + contentType = "application/xml"; + break; + case ".mda": + contentType = "application/msaccess"; + break; + case ".mde": + contentType = "application/msaccess"; + break; + case ".mdp": + contentType = "text/plain"; + break; + case ".mfp": + contentType = "application/x-shockwave-flash"; + break; + case ".mk": + contentType = "text/plain"; + break; + case ".mod": + contentType = "video/mpeg"; + break; + case ".mp2v": + contentType = "video/mpeg"; + break; + case ".mp4": + contentType = "video/mp4"; + break; + case ".mp4v": + contentType = "video/mp4"; + break; + case ".mpf": + contentType = "application/vnd.ms-mediapackage"; + break; + case ".mqv": + contentType = "video/quicktime"; + break; + case ".mts": + contentType = "video/vnd.dlna.mpeg-tts"; + break; + case ".mtx": + contentType = "application/xml"; + break; + case ".mxp": + contentType = "application/x-mmxp"; + break; + case ".nix": + contentType = "application/x-mix-transfer"; + break; + case ".odc": + contentType = "text/x-ms-odc"; + break; + case ".odh": + contentType = "text/plain"; + break; + case ".odl": + contentType = "text/plain"; + break; + case ".odp": + contentType = "application/vnd.oasis.opendocument.presentation"; + break; + case ".ods": + contentType = "application/vnd.oasis.opendocument.spreadsheet"; + break; + case ".odt": + contentType = "application/vnd.oasis.opendocument.text"; + break; + case ".orderedtest": + contentType = "application/xml"; + break; + case ".osdx": + contentType = "application/opensearchdescription+xml"; + break; + case ".pct": + contentType = "image/pict"; + break; + case ".pcx": + contentType = "image/x-pcx"; + break; + + case ".pdfxml": + contentType = "application/vnd.adobe.pdfxml"; + break; + case ".pdx": + contentType = "application/vnd.adobe.pdx"; + break; + case ".pic": + contentType = "image/pict"; + break; + case ".pict": + contentType = "image/pict"; + break; + case ".pkgdef": + contentType = "text/plain"; + break; + case ".pkgundef": + contentType = "text/plain"; + break; + case ".png": + contentType = "image/png"; + break; + case ".pnt": + contentType = "image/x-macpaint"; + break; + case ".pntg": + contentType = "image/x-macpaint"; + break; + case ".potm": + contentType = "application/vnd.ms-powerpoint.template.macroEnabled.12"; + break; + case ".potx": + contentType = "application/vnd.openxmlformats-officedocument.presentationml.template"; + break; + case ".ppa": + contentType = "application/vnd.ms-powerpoint"; + break; + case ".ppam": + contentType = "application/vnd.ms-powerpoint.addin.macroEnabled.12"; + break; + case ".ppsm": + contentType = "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"; + break; + case ".ppsx": + contentType = "application/vnd.openxmlformats-officedocument.presentationml.slideshow"; + break; + case ".pptm": + contentType = "application/vnd.ms-powerpoint.presentation.macroEnabled.12"; + break; + case ".pptx": + contentType = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; + break; + case ".psc1": + contentType = "application/PowerShell"; + break; + case ".psess": + contentType = "application/xml"; + break; + case ".pwz": + contentType = "application/vnd.ms-powerpoint"; + break; + case ".pxr": + contentType = "image/pxr"; + break; + case ".qcp": + contentType = "audio/vnd.qcelp"; + break; + case ".qht": + contentType = "text/x-html-insertion"; + break; + case ".qhtm": + contentType = "text/x-html-insertion"; + break; + case ".qti": + contentType = "image/x-quicktime"; + break; + case ".qtif": + contentType = "image/x-quicktime"; + break; + case ".qtl": + contentType = "application/x-quicktimeplayer"; + break; + case ".rat": + contentType = "application/rat-file"; + break; + case ".raw": + contentType = "application/octet-stream"; + break; + + case ".rc": + contentType = "text/plain"; + break; + case ".rc2": + contentType = "text/plain"; + break; + case ".rct": + contentType = "text/plain"; + break; + case ".rdf": + contentType = "text/xml"; + break; + case ".rdlc": + contentType = "application/xml"; + break; + case ".rels": + contentType = "application/vnd.ms-package.relationships+xml"; + break; + case ".resx": + contentType = "application/xml"; + break; + case ".rgs": + contentType = "text/plain"; + break; + case ".rjt": + contentType = "application/vnd.rn-realsystem-rjt"; + break; + case ".rm": + contentType = "application/vnd.rn-realmedia"; + break; + case ".rmf": + contentType = "application/vnd.adobe.rmf"; + break; + case ".rmj": + contentType = "application/vnd.rn-realsystem-rmj"; + break; + case ".rmm": + contentType = "audio/x-pn-realaudio"; + break; + case ".rmp": + contentType = "application/vnd.rn-rn_music_package"; + break; + case ".rms": + contentType = "application/vnd.rn-realaudio-secure"; + break; + case ".rmvb": + contentType = "application/vnd.rn-realmedia-vbr"; + break; + case ".rmx": + contentType = "application/vnd.rn-realsystem-rmx"; + break; + case ".rnx": + contentType = "application/vnd.rn-realplayer"; + break; + case ".rp": + contentType = "image/vnd.rn-realpix"; + break; + case ".rpm": + contentType = "audio/x-pn-realaudio-plugin"; + break; + case ".rqy": + contentType = "text/x-ms-rqy"; + break; + case ".rsml": + contentType = "application/vnd.rn-rsml"; + break; + case ".rt": + contentType = "text/vnd.rn-realtext"; + break; + case ".rtsp": + contentType = "application/x-rtsp"; + break; + case ".ruleset": + contentType = "application/xml"; + break; + case ".rv": + contentType = "video/vnd.rn-realvideo"; + break; + case ".s": + contentType = "text/plain"; + break; + case ".sd": + contentType = "text/plain"; + break; + case ".sd2": + contentType = "audio/x-sd2"; + break; + case ".sdm": + contentType = "text/plain"; + break; + case ".sdmdocument": + contentType = "text/plain"; + break; + case ".sdp": + contentType = "application/sdp"; + break; + case ".sdv": + contentType = "video/sd-video"; + break; + case ".searchConnector-ms": + contentType = "application/windows-search-connector+xml"; + break; + case ".settings": + contentType = "application/xml"; + break; + case ".sgi": + contentType = "image/x-sgi"; + break; + case ".shtml": + contentType = "text/html"; + break; + case ".sitemap": + contentType = "application/xml"; + break; + case ".skin": + contentType = "application/xml"; + break; + case ".sldm": + contentType = "application/vnd.ms-powerpoint.slide.macroEnabled.12"; + break; + case ".sldx": + contentType = "application/vnd.openxmlformats-officedocument.presentationml.slide"; + break; + case ".slk": + contentType = "application/vnd.ms-excel"; + break; + case ".sln": + contentType = "text/plain"; + break; + case ".slupkg-ms": + contentType = "application/x-ms-license"; + break; + case ".smi": + contentType = "application/smil"; + break; + case ".smil": + contentType = "application/smil"; + break; + case ".snippet": + contentType = "application/xml"; + break; + case ".sol": + contentType = "text/plain"; + break; + case ".sor": + contentType = "text/plain"; + break; + case ".srf": + contentType = "text/plain"; + break; + case ".svc": + contentType = "application/xml"; + break; + case ".tga": + contentType = "image/x-targa"; + break; + case ".targa": + contentType = "image/x-targa"; + break; + case ".testrunconfig": + contentType = "application/xml"; + break; + case ".testsettings": + contentType = "application/xml"; + break; + case ".thmx": + contentType = "application/vnd.ms-officetheme"; + break; + case ".tlh": + contentType = "text/plain"; + break; + case ".tli": + contentType = "text/plain"; + break; + case ".trx": + contentType = "application/xml"; + break; + case ".ts": + contentType = "video/vnd.dlna.mpeg-tts"; + break; + case ".tts": + contentType = "video/vnd.dlna.mpeg-tts"; + break; + case ".user": + contentType = "text/plain"; + break; + case ".vb": + contentType = "text/plain"; + break; + case ".vbdproj": + contentType = "text/plain"; + break; + case ".vbproj": + contentType = "text/plain"; + break; + case ".vcproj": + contentType = "Application/xml"; + break; + case ".vcxproj": + contentType = "Application/xml"; + break; + case ".vddproj": + contentType = "text/plain"; + break; + case ".vdp": + contentType = "text/plain"; + break; + case ".vdproj": + contentType = "text/plain"; + break; + case ".vdx": + contentType = "application/vnd.visio"; + break; + case ".vscontent": + contentType = "application/xml"; + break; + case ".vsct": + contentType = "text/xml"; + break; + case ".vsd": + contentType = "application/vnd.visio"; + break; + case ".vsi": + contentType = "application/ms-vsi"; + break; + case ".vsix": + contentType = "application/vsix"; + break; + case ".vsixlangpack": + contentType = "text/xml"; + break; + case ".vsixmanifest": + contentType = "text/xml"; + break; + case ".vsl": + contentType = "application/vnd.visio"; + break; + case ".vsmdi": + contentType = "application/xml"; + break; + case ".vspscc": + contentType = "text/plain"; + break; + case ".vss": + contentType = "application/vnd.visio"; + break; + case ".vsscc": + contentType = "text/plain"; + break; + case ".vssettings": + contentType = "text/xml"; + break; + case ".vssscc": + contentType = "text/plain"; + break; + case ".vst": + contentType = "application/vnd.visio"; + break; + case ".vstemplate": + contentType = "text/xml"; + break; + case ".vsto": + contentType = "application/x-ms-vsto"; + break; + case ".vsu": + contentType = "application/vnd.visio"; + break; + case ".vsw": + contentType = "application/vnd.visio"; + break; + case ".vsx": + contentType = "application/vnd.visio"; + break; + case ".vtx": + contentType = "application/vnd.visio"; + break; + case ".wax": + contentType = "audio/x-ms-wax"; + break; + case ".wbk": + contentType = "application/msword"; + break; + case ".wdp": + contentType = "image/vnd.ms-photo"; + break; + case ".webtest": + contentType = "application/xml"; + break; + case ".wiq": + contentType = "application/xml"; + break; + case ".wiz": + contentType = "application/msword"; + break; + case ".wm": + contentType = "video/x-ms-wm"; + break; + case ".wma": + contentType = "audio/x-ms-wma"; + break; + case ".wmd": + contentType = "application/x-ms-wmd"; + break; + case ".wmv": + contentType = "video/x-ms-wmv"; + break; + case ".wmx": + contentType = "video/x-ms-wmx"; + break; + case ".wmz": + contentType = "application/x-ms-wmz"; + break; + case ".wpl": + contentType = "application/vnd.ms-wpl"; + break; + case ".wsc": + contentType = "text/scriptlet"; + break; + case ".wsdl": + contentType = "application/xml"; + break; + case ".wvx": + contentType = "video/x-ms-wvx"; + break; + case ".xaml": + contentType = "application/xaml+xml"; + break; + case ".xbap": + contentType = "application/x-ms-xbap"; + break; + case ".xbrl": + contentType = "text/xml"; + break; + case ".xdp": + contentType = "application/vnd.adobe.xdp+xml"; + break; + case ".xdr": + contentType = "application/xml"; + break; + case ".xej": + contentType = "application/xej+xml"; + break; + case ".xel": + contentType = "application/xel+xml"; + break; + case ".xesc": + contentType = "application/x-ms-wmv"; + break; + case ".xfd": + contentType = "application/vnd.adobe.xfd+xml"; + break; + case ".xfdf": + contentType = "application/vnd.adobe.xfdf"; + break; + case ".xht": + contentType = "application/xhtml+xml"; + break; + case ".xhtml": + contentType = "application/xhtml+xml"; + break; + case ".xlam": + contentType = "application/vnd.ms-excel.addin.macroEnabled.12"; + break; + case ".xlk": + contentType = "application/vnd.ms-excel"; + break; + case ".xll": + contentType = "application/vnd.ms-excel"; + break; + case ".xlsb": + contentType = "application/vnd.ms-excel.sheet.binary.macroEnabled.12"; + break; + case ".xlsm": + contentType = "application/vnd.ms-excel.sheet.macroEnabled.12"; + break; + case ".xlsx": + contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + break; + case ".xltm": + contentType = "application/vnd.ms-excel.template.macroEnabled.12"; + break; + case ".xltx": + contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.template"; + break; + case ".xml": + contentType = "application/xml"; + break; + case ".xmta": + contentType = "application/xml"; + break; + case ".xpr": + contentType = "image/xpr"; + break; + case ".xps": + contentType = "application/vnd.ms-xpsdocument"; + break; + case ".xrm-ms": + contentType = "text/xml"; + break; + case ".xsc": + contentType = "application/xml"; + break; + case ".xsd": + contentType = "application/xml"; + break; + case ".xsl": + contentType = "text/xml"; + break; + case ".xslt": + contentType = "application/xml"; + break; + case ".xss": + contentType = "application/xml"; + break; + + // standard mappings from http://www.w3schools.com/media/media_mimeref.asp + + case ".323": + contentType = "text/h323"; + break; + case ".acx": + contentType = "application/internet-property-stream"; + break; + case ".ai": + contentType = "application/postscript"; + break; + case ".aif": + contentType = "audio/x-aiff"; + break; + case ".aifc": + contentType = "audio/x-aiff"; + break; + case ".aiff": + contentType = "audio/x-aiff"; + break; + case ".asf": + contentType = "video/x-ms-asf"; + break; + case ".asr": + contentType = "video/x-ms-asf"; + break; + case ".asx": + contentType = "video/x-ms-asf"; + break; + case ".au": + contentType = "audio/basic"; + break; + case ".avi": + contentType = "video/x-msvideo"; + break; + case ".axs": + contentType = "application/olescript"; + break; + case ".bas": + contentType = "text/plain"; + break; + case ".bcpio": + contentType = "application/x-bcpio"; + break; + case ".bin": + contentType = "application/octet-stream"; + break; + case ".bmp": + contentType = "image/bmp"; + break; + case ".c": + contentType = "text/plain"; + break; + case ".cat": + contentType = "application/vnd.ms-pkiseccat"; + break; + case ".cdf": + contentType = "application/x-cdf"; + break; + case ".cer": + contentType = "application/x-x509-ca-cert"; + break; + case ".class": + contentType = "application/octet-stream"; + break; + case ".clp": + contentType = "application/x-msclip"; + break; + case ".cmx": + contentType = "image/x-cmx"; + break; + case ".cod": + contentType = "image/cis-cod"; + break; + case ".cpio": + contentType = "application/x-cpio"; + break; + case ".crd": + contentType = "application/x-mscardfile"; + break; + case ".crl": + contentType = "application/pkix-crl"; + break; + case ".crt": + contentType = "application/x-x509-ca-cert"; + break; + case ".csh": + contentType = "application/x-csh"; + break; + case ".css": + contentType = "text/css"; + break; + case ".dcr": + contentType = "application/x-director"; + break; + case ".der": + contentType = "application/x-x509-ca-cert"; + break; + case ".dir": + contentType = "application/x-director"; + break; + case ".dll": + contentType = "application/x-msdownload"; + break; + case ".dms": + contentType = "application/octet-stream"; + break; + case ".doc": + contentType = "application/msword"; + break; + case ".dot": + contentType = "application/msword"; + break; + case ".dvi": + contentType = "application/x-dvi"; + break; + case ".dxr": + contentType = "application/x-director"; + break; + case ".eps": + contentType = "application/postscript"; + break; + case ".etx": + contentType = "text/x-setext"; + break; + case ".evy": + contentType = "application/envoy"; + break; + case ".exe": + contentType = "application/octet-stream"; + break; + case ".fif": + contentType = "application/fractals"; + break; + case ".flr": + contentType = "x-world/x-vrml"; + break; + case ".gif": + contentType = "image/gif"; + break; + case ".gtar": + contentType = "application/x-gtar"; + break; + case ".gz": + contentType = "application/x-gzip"; + break; + case ".h": + contentType = "text/plain"; + break; + case ".hdf": + contentType = "application/x-hdf"; + break; + case ".hlp": + contentType = "application/winhlp"; + break; + case ".hqx": + contentType = "application/mac-binhex40"; + break; + case ".hta": + contentType = "application/hta"; + break; + case ".htc": + contentType = "text/x-component"; + break; + case ".htm": + contentType = "text/html"; + break; + case ".html": + contentType = "text/html"; + break; + case ".htt": + contentType = "text/webviewhtml"; + break; + case ".ico": + contentType = "image/x-icon"; + break; + case ".ief": + contentType = "image/ief"; + break; + case ".iii": + contentType = "application/x-iphone"; + break; + case ".ins": + contentType = "application/x-internet-signup"; + break; + case ".isp": + contentType = "application/x-internet-signup"; + break; + case ".jfif": + contentType = "image/pipeg"; + break; + case ".jpe": + contentType = "image/jpeg"; + break; + case ".jpeg": + contentType = "image/jpeg"; + break; + case ".jpg": + contentType = "image/jpeg"; + break; + case ".js": + contentType = "application/x-javascript"; + break; + case ".latex": + contentType = "application/x-latex"; + break; + case ".lha": + contentType = "application/octet-stream"; + break; + case ".lsf": + contentType = "video/x-la-asf"; + break; + case ".lsx": + contentType = "video/x-la-asf"; + break; + case ".lzh": + contentType = "application/octet-stream"; + break; + case ".m13": + contentType = "application/x-msmediaview"; + break; + case ".m14": + contentType = "application/x-msmediaview"; + break; + case ".m3u": + contentType = "audio/x-mpegurl"; + break; + case ".man": + contentType = "application/x-troff-man"; + break; + case ".mdb": + contentType = "application/x-msaccess"; + break; + case ".me": + contentType = "application/x-troff-me"; + break; + case ".mht": + contentType = "message/rfc822"; + break; + case ".mhtml": + contentType = "message/rfc822"; + break; + case ".mid": + contentType = "audio/mid"; + break; + case ".mny": + contentType = "application/x-msmoney"; + break; + case ".mov": + contentType = "video/quicktime"; + break; + case ".movie": + contentType = "video/x-sgi-movie"; + break; + case ".mp2": + contentType = "video/mpeg"; + break; + case ".mp3": + contentType = "audio/mpeg"; + break; + case ".mpa": + contentType = "video/mpeg"; + break; + case ".mpe": + contentType = "video/mpeg"; + break; + case ".mpeg": + contentType = "video/mpeg"; + break; + case ".mpg": + contentType = "video/mpeg"; + break; + case ".mpp": + contentType = "application/vnd.ms-project"; + break; + case ".mpv2": + contentType = "video/mpeg"; + break; + case ".ms": + contentType = "application/x-troff-ms"; + break; + case ".msg": + contentType = "application/vnd.ms-outlook"; + break; + case ".mvb": + contentType = "application/x-msmediaview"; + break; + case ".nc": + contentType = "application/x-netcdf"; + break; + case ".nws": + contentType = "message/rfc822"; + break; + case ".oda": + contentType = "application/oda"; + break; + case ".p10": + contentType = "application/pkcs10"; + break; + case ".p12": + contentType = "application/x-pkcs12"; + break; + case ".p7b": + contentType = "application/x-pkcs7-certificates"; + break; + case ".p7c": + contentType = "application/x-pkcs7-mime"; + break; + case ".p7m": + contentType = "application/x-pkcs7-mime"; + break; + case ".p7r": + contentType = "application/x-pkcs7-certreqresp"; + break; + case ".p7s": + contentType = "application/x-pkcs7-signature"; + break; + case ".pbm": + contentType = "image/x-portable-bitmap"; + break; + case ".pdf": + contentType = "application/pdf"; + break; + case ".pfx": + contentType = "application/x-pkcs12"; + break; + case ".pgm": + contentType = "image/x-portable-graymap"; + break; + case ".pko": + contentType = "application/ynd.ms-pkipko"; + break; + case ".pma": + contentType = "application/x-perfmon"; + break; + case ".pmc": + contentType = "application/x-perfmon"; + break; + case ".pml": + contentType = "application/x-perfmon"; + break; + case ".pmr": + contentType = "application/x-perfmon"; + break; + case ".pmw": + contentType = "application/x-perfmon"; + break; + case ".pnm": + contentType = "image/x-portable-anymap"; + break; + case ".pot": + contentType = "application/vnd.ms-powerpoint"; + break; + case ".pot,": + contentType = "application/vnd.ms-powerpoint"; + break; + case ".ppm": + contentType = "image/x-portable-pixmap"; + break; + case ".pps": + contentType = "application/vnd.ms-powerpoint"; + break; + case ".ppt": + contentType = "application/vnd.ms-powerpoint"; + break; + case ".prf": + contentType = "application/pics-rules"; + break; + case ".ps": + contentType = "application/postscript"; + break; + case ".pub": + contentType = "application/x-mspublisher"; + break; + case ".qt": + contentType = "video/quicktime"; + break; + case ".ra": + contentType = "audio/x-pn-realaudio"; + break; + case ".ram": + contentType = "audio/x-pn-realaudio"; + break; + case ".ras": + contentType = "image/x-cmu-raster"; + break; + case ".rgb": + contentType = "image/x-rgb"; + break; + case ".rmi": + contentType = "audio/mid"; + break; + case ".roff": + contentType = "application/x-troff"; + break; + case ".rtf": + contentType = "application/rtf"; + break; + case ".rtx": + contentType = "text/richtext"; + break; + case ".scd": + contentType = "application/x-msschedule"; + break; + case ".sct": + contentType = "text/scriptlet"; + break; + case ".setpay": + contentType = "application/set-payment-initiation"; + break; + case ".setreg": + contentType = "application/set-registration-initiation"; + break; + case ".sh": + contentType = "application/x-sh"; + break; + case ".shar": + contentType = "application/x-shar"; + break; + case ".sit": + contentType = "application/x-stuffit"; + break; + case ".snd": + contentType = "audio/basic"; + break; + case ".spc": + contentType = "application/x-pkcs7-certificates"; + break; + case ".spl": + contentType = "application/futuresplash"; + break; + case ".src": + contentType = "application/x-wais-source"; + break; + case ".sst": + contentType = "application/vnd.ms-pkicertstore"; + break; + case ".stl": + contentType = "application/vnd.ms-pkistl"; + break; + case ".stm": + contentType = "text/html"; + break; + case ".sv4cpio": + contentType = "application/x-sv4cpio"; + break; + case ".sv4crc": + contentType = "application/x-sv4crc"; + break; + case ".svg": + contentType = "image/svg+xml"; + break; + case ".swf": + contentType = "application/x-shockwave-flash"; + break; + case ".t": + contentType = "application/x-troff"; + break; + case ".tar": + contentType = "application/x-tar"; + break; + case ".tcl": + contentType = "application/x-tcl"; + break; + case ".tex": + contentType = "application/x-tex"; + break; + case ".texi": + contentType = "application/x-texinfo"; + break; + case ".texinfo": + contentType = "application/x-texinfo"; + break; + case ".tgz": + contentType = "application/x-compressed"; + break; + case ".tif": + contentType = "image/tiff"; + break; + case ".tiff": + contentType = "image/tiff"; + break; + case ".tr": + contentType = "application/x-troff"; + break; + case ".trm": + contentType = "application/x-msterminal"; + break; + case ".tsv": + contentType = "text/tab-separated-values"; + break; + case ".txt": + contentType = "text/plain"; + break; + case ".uls": + contentType = "text/iuls"; + break; + case ".ustar": + contentType = "application/x-ustar"; + break; + case ".vcf": + contentType = "text/x-vcard"; + break; + case ".vrml": + contentType = "x-world/x-vrml"; + break; + case ".wav": + contentType = "audio/x-wav"; + break; + case ".wcm": + contentType = "application/vnd.ms-works"; + break; + case ".wdb": + contentType = "application/vnd.ms-works"; + break; + case ".wks": + contentType = "application/vnd.ms-works"; + break; + case ".wmf": + contentType = "application/x-msmetafile"; + break; + case ".wps": + contentType = "application/vnd.ms-works"; + break; + case ".wri": + contentType = "application/x-mswrite"; + break; + case ".wrl": + contentType = "x-world/x-vrml"; + break; + case ".wrz": + contentType = "x-world/x-vrml"; + break; + case ".xaf": + contentType = "x-world/x-vrml"; + break; + case ".xbm": + contentType = "image/x-xbitmap"; + break; + case ".xla": + contentType = "application/vnd.ms-excel"; + break; + case ".xlc": + contentType = "application/vnd.ms-excel"; + break; + case ".xlm": + contentType = "application/vnd.ms-excel"; + break; + case ".xls": + contentType = "application/vnd.ms-excel"; + break; + case ".xlt": + contentType = "application/vnd.ms-excel"; + break; + case ".xlw": + contentType = "application/vnd.ms-excel"; + break; + case ".xof": + contentType = "x-world/x-vrml"; + break; + case ".xpm": + contentType = "image/x-xpixmap"; + break; + case ".xwd": + contentType = "image/x-xwindowdump"; + break; + case ".z": + contentType = "application/x-compress"; + break; + case ".zip": + contentType = "application/zip"; + break; + + default: + // this should be used as a last resort only. i.e. svg files return text/xml + contentType = GetMimeFromFile(fileName); + break; + } + return contentType; + } + + public static T GetValueOrDefault(this IDataRecord row, string fieldName) + { + int ordinal = row.GetOrdinal(fieldName); + return row.GetValueOrDefault(ordinal); + } + + public static T GetValueOrDefault(this IDataRecord row, int ordinal) + { + return (T) (row.IsDBNull(ordinal) ? default(T) : row.GetValue(ordinal)); + } + + public static byte[] StreamToBytes(this Stream input) + { + int capacity = input.CanSeek ? (int) input.Length : 0; + using (MemoryStream output = new MemoryStream(capacity)) + { + int readLength; + byte[] buffer = new byte[4096]; + + do + { + readLength = input.Read(buffer, 0, buffer.Length); + output.Write(buffer, 0, readLength); + } while (readLength != 0); + + return output.ToArray(); + } + } + + /// + /// CassiniDev FIX: #12506 + /// + /// + /// + private static string GetMimeFromFile(string file) + { + IntPtr mimeout; + if (!File.Exists(file)) + return null; + //throw new FileNotFoundException(file + " not found"); + + int maxContent = (int) new FileInfo(file).Length; + if (maxContent > 4096) maxContent = 4096; + FileStream fs = File.OpenRead(file); + + byte[] buf = new byte[maxContent]; + fs.Read(buf, 0, maxContent); + fs.Close(); + int result = Interop.FindMimeFromData(IntPtr.Zero, file, buf, maxContent, null, 0, out mimeout, 0); + + if (result != 0) + throw Marshal.GetExceptionForHR(result); + string mime = Marshal.PtrToStringUni(mimeout); + Marshal.FreeCoTaskMem(mimeout); + return mime; + } + + private static IList SplitIntoChunks(this string text, int chunkSize) + { + List chunks = new List(); + int offset = 0; + while (offset < text.Length) + { + int size = Math.Min(chunkSize, text.Length - offset); + chunks.Add(text.Substring(offset, size)); + offset += size; + } + return chunks; + } + } + + public enum RunState + { + Idle = 0, + Running + } + + public enum PortMode + { + FirstAvailable = 0, + Specific + } + + public enum ErrorField + { + None, + ApplicationPath, + VirtualPath, + HostName, + IsAddHost, + IPAddress, + IPAddressAny, + IPAddressLoopBack, + Port, + PortRangeStart, + PortRangeEnd, + PortRange + } + + public enum IPMode + { + Loopback = 0, + Any, + Specific + } + + public enum RunMode + { + Server, + Hostsfile + } + + internal class CassiniException : Exception + { + public CassiniException(string message, ErrorField field, Exception innerException) + : base(message, innerException) + { + Field = field; + } + + public CassiniException(string message, ErrorField field) + : this(message, field, null) + { + } + + public ErrorField Field { get; set; } + } +} \ No newline at end of file diff --git a/CassiniDev/Misc/HostsFile.cs b/CassiniDev/Misc/HostsFile.cs new file mode 100644 index 000000000..b8a828b7f --- /dev/null +++ b/CassiniDev/Misc/HostsFile.cs @@ -0,0 +1,118 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Text.RegularExpressions; + +#endregion + +namespace CassiniDev +{ + public static class HostsFile + { + /// + /// + /// + /// + /// + /// + public static int AddHostEntry(string ipAddress, string hostname) + { + try + { + SetHostsEntry(true, ipAddress, hostname); + return 0; + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + string executablePath = Assembly.GetExecutingAssembly().Location; + return StartElevated(executablePath, string.Format("Hostsfile /ah+ /h:{0} /i:{1}", hostname, ipAddress)); + } + + /// + /// + /// + /// + /// + /// + public static int RemoveHostEntry(string ipAddress, string hostname) + { + try + { + SetHostsEntry(false, ipAddress, hostname); + return 0; + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + string executablePath = Assembly.GetExecutingAssembly().Location; + return StartElevated(executablePath, string.Format("Hostsfile /ah- /h:{0} /i:{1}", hostname, ipAddress)); + } + + private static void SetHostsEntry(bool addHost, string ipAddress, string hostname) + { + // limitation: while windows allows mulitple entries for a single host, we currently allow only one + string windir = Environment.GetEnvironmentVariable("SystemRoot") ?? @"c:\windows"; + string hostsFilePath = Path.Combine(windir, @"system32\drivers\etc\hosts"); + + string hostsFileContent = File.ReadAllText(hostsFilePath); + + hostsFileContent = Regex.Replace(hostsFileContent, + string.Format(@"\r\n^\s*[\d\w\.:]+\s{0}\s#\sadded\sby\scassini$", + hostname), "", RegexOptions.Multiline); + + if (addHost) + { + hostsFileContent += string.Format("\r\n{0} {1} # added by cassini", ipAddress, hostname); + } + + File.WriteAllText(hostsFilePath, hostsFileContent); + } + + private static int StartElevated(string filename, string args) + { + ProcessStartInfo startInfo = new ProcessStartInfo + { + UseShellExecute = true, + WorkingDirectory = Environment.CurrentDirectory, + FileName = filename, + Arguments = args, + Verb = "runas" + }; + try + { + Process p = Process.Start(startInfo); + if (p != null) + { + p.WaitForExit(); + return p.ExitCode; + } + return -2; + } + catch + { + return -2; + } + } + } +} \ No newline at end of file diff --git a/CassiniDev/Misc/Interop.cs b/CassiniDev/Misc/Interop.cs new file mode 100644 index 000000000..4c118f2d3 --- /dev/null +++ b/CassiniDev/Misc/Interop.cs @@ -0,0 +1,160 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Runtime.InteropServices; + +#endregion + +namespace CassiniDev +{ + internal static class Interop + { + #region Structs + + [DllImport("SECUR32.DLL", CharSet = CharSet.Unicode)] + public static extern int AcceptSecurityContext(ref SecHandle phCredential, IntPtr phContext, + ref SecBufferDesc pInput, uint fContextReq, uint TargetDataRep, + ref SecHandle phNewContext, ref SecBufferDesc pOutput, + ref uint pfContextAttr, ref long ptsTimeStamp); + + [DllImport("SECUR32.DLL", CharSet = CharSet.Unicode)] + public static extern int AcquireCredentialsHandle(string pszPrincipal, string pszPackage, uint fCredentialUse, + IntPtr pvLogonID, IntPtr pAuthData, IntPtr pGetKeyFn, + IntPtr pvGetKeyArgument, ref SecHandle phCredential, + ref long ptsExpiry); + + [DllImport("KERNEL32.DLL", CharSet = CharSet.Unicode)] + public static extern int CloseHandle(IntPtr phToken); + + [DllImport("SECUR32.DLL", CharSet = CharSet.Unicode)] + public static extern int DeleteSecurityContext(ref SecHandle phContext); + + /// + /// FIX: #12506 + /// + [DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)] + public static extern int FindMimeFromData(IntPtr pBC, [MarshalAs(UnmanagedType.LPWStr)] string pwzUrl, + [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1, + SizeParamIndex = 3)] byte[] pBuffer, int cbSize, + [MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed, + int dwMimeFlags, out IntPtr ppwzMimeOut, int dwReserved); + + [DllImport("SECUR32.DLL", CharSet = CharSet.Unicode)] + public static extern int FreeCredentialsHandle(ref SecHandle phCredential); + + [DllImport("kernel32.dll", EntryPoint = "GetConsoleScreenBufferInfo", SetLastError = true, + CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] + public static extern int GetConsoleScreenBufferInfo(int hConsoleOutput, + ref CONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo); + + [DllImport("KERNEL32.DLL", SetLastError = true)] + public static extern IntPtr GetCurrentThread(); + + [DllImport("kernel32.dll", EntryPoint = "GetStdHandle", SetLastError = true, CharSet = CharSet.Auto, + CallingConvention = CallingConvention.StdCall)] + public static extern int GetStdHandle(int nStdHandle); + + [DllImport("ADVAPI32.DLL", SetLastError = true)] + public static extern bool ImpersonateSelf(int level); + + [DllImport("ADVAPI32.DLL", SetLastError = true)] + public static extern int OpenThreadToken(IntPtr thread, int access, bool openAsSelf, ref IntPtr hToken); + + [DllImport("SECUR32.DLL", CharSet = CharSet.Unicode)] + public static extern int QuerySecurityContextToken(ref SecHandle phContext, ref IntPtr phToken); + + [DllImport("ADVAPI32.DLL", SetLastError = true)] + public static extern int RevertToSelf(); + + #region Nested type: CONSOLE_SCREEN_BUFFER_INFO + + public struct CONSOLE_SCREEN_BUFFER_INFO + { + internal COORD dwCursorPosition; + internal COORD dwMaximumWindowSize; + internal COORD dwSize; + internal SMALL_RECT srWindow; + internal Int16 wAttributes; + } + + #endregion + + #region Nested type: COORD + + public struct COORD + { + internal Int16 x; + internal Int16 y; + } + + #endregion + + #region Nested type: SecBuffer + + [StructLayout(LayoutKind.Sequential)] + public struct SecBuffer + { + // ReSharper disable InconsistentNaming + public uint cbBuffer; + public uint BufferType; + public IntPtr pvBuffer; + // ReSharper restore InconsistentNaming + } + + #endregion + + #region Nested type: SecBufferDesc + + [StructLayout(LayoutKind.Sequential)] + public struct SecBufferDesc + { + // ReSharper disable InconsistentNaming + public uint ulVersion; + public uint cBuffers; + public IntPtr pBuffers; + // ReSharper restore InconsistentNaming + } + + #endregion + + #region Nested type: SecHandle + + [StructLayout(LayoutKind.Sequential)] + public struct SecHandle + { + // ReSharper disable InconsistentNaming + public IntPtr dwLower; + public IntPtr dwUpper; + // ReSharper restore InconsistentNaming + } + + #endregion + + #region Nested type: SMALL_RECT + + public struct SMALL_RECT + { + internal Int16 Bottom; + internal Int16 Left; + internal Int16 Right; + internal Int16 Top; + } + + #endregion + + #endregion + } +} \ No newline at end of file diff --git a/CassiniDev/Misc/NetworkUtils.cs b/CassiniDev/Misc/NetworkUtils.cs new file mode 100644 index 000000000..dc647d48a --- /dev/null +++ b/CassiniDev/Misc/NetworkUtils.cs @@ -0,0 +1,221 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) 2010 Sky Sanders. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.txt file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Text.RegularExpressions; +using System.Threading; + +#endregion + +namespace CassiniDev +{ + public static class CassiniNetworkUtils + { + public static IPAddress[] GetLocalAddresses() + { + string strHostName = Dns.GetHostName(); + IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); + return ipEntry.AddressList; + } + + /// + /// Returns first available port on the specified IP address. + /// The port scan excludes ports that are open on ANY loopback adapter. + /// + /// If the address upon which a port is requested is an 'ANY' address all + /// ports that are open on ANY IP are excluded. + /// + /// + /// + /// The IP address upon which to search for available port. + /// If true includes ports in TIME_WAIT state in results. + /// TIME_WAIT state is typically cool down period for recently released ports. + /// + public static int GetAvailablePort(int rangeStart, int rangeEnd, IPAddress ip, bool includeIdlePorts) + { + IPGlobalProperties ipProps = IPGlobalProperties.GetIPGlobalProperties(); + + // if the ip we want a port on is an 'any' or loopback port we need to exclude all ports that are active on any IP + Func isIpAnyOrLoopBack = i => IPAddress.Any.Equals(i) || + IPAddress.IPv6Any.Equals(i) || + IPAddress.Loopback.Equals(i) || + IPAddress.IPv6Loopback. + Equals(i); + // get all active ports on specified IP. + List excludedPorts = new List(); + + // if a port is open on an 'any' or 'loopback' interface then include it in the excludedPorts + excludedPorts.AddRange(from n in ipProps.GetActiveTcpConnections() + where + n.LocalEndPoint.Port >= rangeStart && + n.LocalEndPoint.Port <= rangeEnd && ( + isIpAnyOrLoopBack(ip) || + n.LocalEndPoint.Address.Equals(ip) || + isIpAnyOrLoopBack(n.LocalEndPoint.Address)) && + (!includeIdlePorts || n.State != TcpState.TimeWait) + select (ushort) n.LocalEndPoint.Port); + + excludedPorts.AddRange(from n in ipProps.GetActiveTcpListeners() + where n.Port >= rangeStart && n.Port <= rangeEnd && ( + isIpAnyOrLoopBack(ip) || + n.Address.Equals(ip) || + isIpAnyOrLoopBack(n.Address)) + select (ushort) n.Port); + + excludedPorts.AddRange(from n in ipProps.GetActiveUdpListeners() + where n.Port >= rangeStart && n.Port <= rangeEnd && ( + isIpAnyOrLoopBack(ip) || + n.Address.Equals(ip) || + isIpAnyOrLoopBack(n.Address)) + select (ushort) n.Port); + + excludedPorts.Sort(); + + for (int port = rangeStart; port <= rangeEnd; port++) + { + if (!excludedPorts.Contains((ushort) port)) + { + return port; + } + } + + return 0; + } + + /// + /// Returns the first IPV4 address available for this host. + /// This is typically an external IP + /// + /// + public static IPAddress GetExternalIPV4() + { + return GetIPAdresses().ToList() + .FirstOrDefault(i => i.ToString().IndexOf(":") == -1); + } + + /// + /// + /// + public static string GetHostName() + { + return Dns.GetHostName(); + } + + /// + /// Gets all IP addresses for this host + /// + public static IPAddress[] GetIPAdresses() + { + return Dns.GetHostEntry(GetHostName()).AddressList; + } + + /// + /// Gently polls specified IP:Port to determine if it is available. + /// + /// + /// + public static bool IsPortAvailable(IPAddress ipAddress, int port) + { + bool portAvailable = false; + + for (int i = 0; i < 5; i++) + { + portAvailable = GetAvailablePort(port, port, ipAddress, true) == port; + if (portAvailable) + { + break; + } + // be a little patient and wait for the port if necessary, + // the previous occupant may have just vacated + Thread.Sleep(100); + } + return portAvailable; + } + + /// + /// Combine the RootUrl of the running web application with the relative url + /// specified. + /// + /// + /// + /// + public static string NormalizeUrl(string rootUrl, string relativeUrl) + { + relativeUrl = relativeUrl.TrimStart(new[] {'/'}); + + if (!rootUrl.EndsWith("/")) + { + rootUrl += "/"; + } + return new Uri(rootUrl + relativeUrl).ToString(); + } + + /// + /// + /// + /// + public static IPAddress ParseIPString(string ipString) + { + if (string.IsNullOrEmpty(ipString)) + { + ipString = "loopback"; + } + ipString = ipString.Trim().ToLower(); + switch (ipString) + { + case "any": + return IPAddress.Any; + case "loopback": + return IPAddress.Loopback; + case "ipv6any": + return IPAddress.IPv6Any; + case "ipv6loopback": + return IPAddress.IPv6Loopback; + default: + IPAddress result; + IPAddress.TryParse(ipString, out result); + return result; + } + } + + /// + /// + /// Hostnames are composed of series of labels concatenated with dots, as are all domain names[1]. + /// For example, "en.wikipedia.org" is a hostname. Each label must be between 1 and 63 characters long, + /// and the entire hostname has a maximum of 255 characters. + /// + /// The Internet standards (Request for Comments) for protocols mandate that component hostname + /// labels may contain only the ASCII letters 'a' through 'z' (in a case-insensitive manner), the digits + /// '0' through '9', and the hyphen. The original specification of hostnames in RFC 952, mandated that + /// labels could not start with a digit or with a hyphen, and must not end with a hyphen. However, a + /// subsequent specification (RFC 1123) permitted hostname labels to start with digits. No other symbols, + /// punctuation characters, or blank spaces are permitted. + /// + /// + /// + /// http://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names + public static bool ValidateHostName(string hostname) + { + Regex hostnameRx = + new Regex( + @"^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$"); + return hostnameRx.IsMatch(hostname); + } + } +} \ No newline at end of file diff --git a/CassiniDev/Misc/ServiceInstaller.cs b/CassiniDev/Misc/ServiceInstaller.cs new file mode 100644 index 000000000..a12bf4f63 --- /dev/null +++ b/CassiniDev/Misc/ServiceInstaller.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Configuration.Install; +using System.Linq; +using System.ServiceProcess; +using System.Text; +using System.Configuration; +namespace CassiniDev +{ + + + [RunInstaller(true)] + public sealed class MyServiceInstallerProcess : ServiceProcessInstaller + { + public MyServiceInstallerProcess() + { + this.Account = ServiceAccount.NetworkService; + + } + } + [RunInstaller(true)] + public sealed class MyServiceInstaller : ServiceInstaller + { + public MyServiceInstaller() + { + + + this.Description = "CassiniDev"; + this.DisplayName = "CassiniDev"; + this.ServiceName = "CassiniDev"; + this.StartType = System.ServiceProcess.ServiceStartMode.Automatic; + } + } + +} diff --git a/CassiniDev/Program.cs b/CassiniDev/Program.cs new file mode 100644 index 000000000..bd3526de1 --- /dev/null +++ b/CassiniDev/Program.cs @@ -0,0 +1,386 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.htm file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Collections; +using System.Configuration.Install; +using System.Globalization; +using System.IO; +using System.Reflection; +using System.Threading; +using System.Windows.Forms; +using CassiniDev.UIComponents; + +#endregion + +namespace CassiniDev +{ + public sealed class Program + { + + + [STAThread, LoaderOptimization(LoaderOptimization.MultiDomainHost)] + public static int Main(string[] cmdLine) + { + Server server = null; + + if (cmdLine != null && cmdLine.Length > 0) + { + bool isVS = Assembly.GetExecutingAssembly() + .GetName().Name.StartsWith("WEBDEV.WEBSERVER", StringComparison.OrdinalIgnoreCase); + + CommandLineArguments args = new CommandLineArguments(); + + if (!CommandLineParser.ParseArgumentsWithUsage(cmdLine, args)) + { + if (isVS) + { + // will display vs usage and return a code that VS understands + return ValidateForVS(cmdLine); + } + + string usage = CommandLineParser.ArgumentsUsage(typeof(CommandLineArguments), 120); + ShowMessage(usage, MessageBoxIcon.Asterisk); + return 0; + } + + + if (args.RunMode == RunMode.Hostsfile) + { + SetHostsFile(args); + return 0; + } + + + // now we validate for us. + int returnValue = -1; + string message = null; + + try + { + args.VisualStudio = isVS; + args.Validate(); + } + catch (CassiniException ex) + { + switch (ex.Message) + { + case SR.ErrNoAvailablePortFound: + case SR.ErrApplicationPathIsNull: + message = ex.Message; + break; + case SR.ErrInvalidIPMode: + message = SR.GetString(ex.Message, args.IPMode); + break; + case SR.ErrInvalidPortMode: + message = SR.GetString(ex.Message, args.PortMode); + break; + case SR.ErrPortIsInUse: + message = SR.GetString(ex.Message, args.Port); + break; + case SR.ErrPortRangeEndMustBeEqualOrGreaterThanPortRangeSta: + message = SR.GetString(ex.Message, args.PortRangeStart, args.PortRangeEnd); + break; + case SR.ErrInvalidPortRangeValue: + message = SR.GetString(ex.Message, + ex.Field == ErrorField.PortRangeStart + ? "start " + args.PortRangeStart + : "end " + args.PortRangeEnd); + break; + case SR.ErrInvalidHostname: + message = SR.GetString(ex.Message, args.HostName); + break; + case SR.WebdevDirNotExist: + message = SR.GetString(ex.Message, args.ApplicationPath); + returnValue = -2; + break; + case SR.ErrPortOutOfRange: + message = SR.GetString(ex.Message, args.Port); + break; + } + + if (!args.Silent) + { + ShowMessage(message, MessageBoxIcon.Asterisk); + } + return returnValue; + } + catch (Exception exception) + { + if (!args.Silent) + { + ShowMessage(SR.GetString(SR.ErrFailedToStartCassiniDevServerOnPortError, args.Port, + exception.Message, exception.HelpLink), MessageBoxIcon.Error); + } + return -1; + } + + + + server = new Server(args.Port, args.VirtualPath, args.ApplicationPath, args.Ntlm, args.Nodirlist); + + + if (args.AddHost) + { + HostsFile.AddHostEntry(server.IPAddress.ToString(), server.HostName); + } + + try + { + server.Start(); + } + catch (Exception exception) + { + if (!args.Silent) + { + ShowMessage(SR.GetString(SR.ErrFailedToStartCassiniDevServerOnPortError, args.Port, + exception.Message, exception.HelpLink), MessageBoxIcon.Error); + } + return -4; + } + + } + + using (FormView form = new FormView(server)) + { + Application.Run(form); + } + + return 0; + } + + private static void ShowMessage(string msg, MessageBoxIcon icon) + { + if (Thread.CurrentThread.CurrentUICulture.TextInfo.IsRightToLeft) + { + MessageBox.Show(msg, SR.GetString(SR.WebdevName), MessageBoxButtons.OK, icon, + MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading); + } + else + { + MessageBox.Show(msg, SR.GetString(SR.WebdevName), MessageBoxButtons.OK, icon); + } + } + + private static void ShowMessage(string msg) + { + if (Thread.CurrentThread.CurrentUICulture.TextInfo.IsRightToLeft) + { + MessageBox.Show(msg, SR.GetString(SR.WebdevName), MessageBoxButtons.OK, MessageBoxIcon.Hand, + MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading); + } + else + { + MessageBox.Show(msg, SR.GetString(SR.WebdevName), MessageBoxButtons.OK, MessageBoxIcon.Hand); + } + } + + /// + /// TODO: update usage will all arguments and present on a legible substrate. + /// + private static void ShowUsage() + { + ShowMessage(SR.GetString(SR.WebdevUsagestr1) + SR.GetString(SR.WebdevUsagestr2) + + SR.GetString(SR.WebdevUsagestr3) + + SR.GetString(SR.WebdevUsagestr4) + SR.GetString(SR.WebdevUsagestr5) + + SR.GetString(SR.WebdevUsagestr6) + + SR.GetString(SR.WebdevUsagestr7), MessageBoxIcon.Asterisk); + } + + + /// + /// Keeping the VS validation to return codes that it likes. + /// + /// + /// + private static int ValidateForVS(string[] args) + { + CommandLine line = new CommandLine(args); + + bool flag = line.Options["silent"] != null; + + if (!flag && line.ShowHelp) + { + ShowUsage(); + return 0; + } + + string virtualPath = (string)line.Options["vpath"]; + + if (virtualPath != null) + { + virtualPath = virtualPath.Trim(); + } + + // we are being a bit generous here as CommandLineArguments can handle these sitchiashuns + if (string.IsNullOrEmpty(virtualPath)) + { + virtualPath = "/"; + } + + else if (!virtualPath.StartsWith("/", StringComparison.Ordinal)) + { + if (!flag) + { + ShowUsage(); + } + return -1; + } + + string path = (string)line.Options["path"]; + + if (path != null) + { + path = path.Trim(); + } + + if (string.IsNullOrEmpty(path)) + { + if (!flag) + { + ShowUsage(); + } + return -1; + } + + path = Path.GetFullPath(path); + + if (!Directory.Exists(path)) + { + if (!flag) + { + ShowMessage(SR.GetString(SR.WebdevDirNotExist, new object[] { path })); + } + return -2; + } + + int port = 0; + + string s = (string)line.Options["port"]; + + if (s != null) + { + s = s.Trim(); + } + + if (!string.IsNullOrEmpty(s)) + { + try + { + port = int.Parse(s, CultureInfo.InvariantCulture); + if ((port < 1) || (port > 0xffff)) + { + if (!flag) + { + ShowUsage(); + } + return -1; + } + + } + catch + { + if (!flag) + { + ShowMessage(SR.GetString(SR.WebdevInvalidPort, new object[] { s })); + } + return -3; + } + } + + if (!flag) + { + ShowUsage(); + } + + return 0; + } + + + private static void SetHostsFile(CommandLineArguments sargs) + { + try + { + if (sargs.AddHost) + { + HostsFile.AddHostEntry(sargs.IPAddress, sargs.HostName); + } + else + { + HostsFile.RemoveHostEntry(sargs.IPAddress, sargs.HostName); + } + } + catch (UnauthorizedAccessException) + { + Environment.Exit(-1); + } + catch + { + Environment.Exit(-2); + } + } + + + + } + + internal sealed class ServiceUtil + { + /// + /// http://stackoverflow.com/questions/1449994/inno-setup-for-windows-service + /// http://groups.google.co.uk/group/microsoft.public.dotnet.languages.csharp/browse_thread/thread/4d45e9ea5471cba4/4519371a77ed4a74 + /// + /// + /// + public static void Install(bool undo, string[] args) + { + try + { + Console.WriteLine(undo ? "uninstalling" : "installing"); + using (AssemblyInstaller inst = new AssemblyInstaller(typeof(Program).Assembly, args)) + { + IDictionary state = new Hashtable(); + inst.UseNewContext = true; + try + { + if (undo) + { + inst.Uninstall(state); + } + else + { + inst.Install(state); + inst.Commit(state); + } + } + catch + { + try + { + inst.Rollback(state); + } + catch { } + throw; + } + } + } + catch (Exception ex) + { + Console.Error.WriteLine(ex.Message); + } + } + } +} \ No newline at end of file diff --git a/CassiniDev/Properties/AssemblyInfo.cs b/CassiniDev/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..13a4100b0 --- /dev/null +++ b/CassiniDev/Properties/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System; +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security.Permissions; + +[assembly: AssemblyTitle("CassiniDev")] +[assembly: AssemblyDescription("Cassini For Developers")] +[assembly: AssemblyCompany("Salient Solutions")] +[assembly: AssemblyProduct("CassiniDev")] +[assembly: AssemblyCopyright("\x00a9 Sky Sanders/\x00a9 Microsoft Corporation. All rights reserved.")] +[assembly: NeutralResourcesLanguage("en-US")] +[assembly: AssemblyVersion("3.5.1.8")] +[assembly: AssemblyFileVersion("3.5.1.8")] +[assembly: ComVisible(false)] +[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] +[assembly: SecurityPermission(SecurityAction.RequestMinimum)] +[assembly: CLSCompliant(true)] diff --git a/CassiniDev/Properties/AssemblyInfo4.cs b/CassiniDev/Properties/AssemblyInfo4.cs new file mode 100644 index 000000000..8d9c630b0 --- /dev/null +++ b/CassiniDev/Properties/AssemblyInfo4.cs @@ -0,0 +1,19 @@ +using System; +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security.Permissions; + +[assembly: AssemblyTitle("CassiniDev")] +[assembly: AssemblyDescription("Cassini For Developers")] +[assembly: AssemblyCompany("Salient Solutions")] +[assembly: AssemblyProduct("CassiniDev")] +[assembly: AssemblyCopyright("\x00a9 Sky Sanders/\x00a9 Microsoft Corporation. All rights reserved.")] +[assembly: NeutralResourcesLanguage("en-US")] +[assembly: AssemblyVersion("4.0.1.8")] +[assembly: AssemblyFileVersion("4.0.1.8")] +[assembly: ComVisible(false)] +[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] +[assembly: SecurityPermission(SecurityAction.RequestMinimum)] +[assembly: CLSCompliant(true)] diff --git a/CassiniDev/Resources/CassiniDev.resx b/CassiniDev/Resources/CassiniDev.resx new file mode 100644 index 000000000..067380c9a --- /dev/null +++ b/CassiniDev/Resources/CassiniDev.resx @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Directory Listing -- {0} + + + CassiniDev Server + + + Server Error in '{0}' Application. + + + Version Information + + + HTTP Error {0} - {1}. + + + The directory '{0}' does not exist. + + + CassiniDev Server failed to start listening on port {0}. + Error message: + {1} + + + Invalid port'{0}' + + + CassiniDev Server + + + CassiniDev Server - Port {0} + + + Open in Web Browser + + + Run ASP.NET applications locally. + + + Show Details + + + Stop + + + CassiniDev Server Usage: + + + + WebDev.WebServer /port:<port number> /path:<physical path> [/vpath:<virtual path>] + + + + + port number: + [Optional] An unused port number between 1 and 65535. + The default is 80 (usable if you do not also have IIS listening on the same port). + + + + + physical path: + A valid directory name where the Web application is rooted. + + + + + virtual path: + [Optional] The virtual path or application root in the form of '/<app name>'. + The default is simply '/'. + + + + + Example: +WebDev.WebServer /port:8080 /path:"c:\inetpub\wwwroot\MyApp" /vpath:"/MyApp" + + + + + You can then access the Web application using a URL of the form: + http://localhost:8080/MyApp + + + CassiniDev Server - Port {0} - Log Viewer + + + In memory logging is enabled. + +Events are only captured when the Log window is visible +and all data will be lost when this window is closed. + +Install the latest System.Data.SQLite package to enable +log persistence. + + + ASP.Net Version: {0} + + + Start + + + ApplicationPath is null + + + Failed to start CassiniDev Server on Port:{0} Error:{1} {2} + + + Invalid Hostname {0} + + + Invalid IP Address {0} + + + Invalid IPMode {0} + + + Invalid PortMode + + + Invalid port range value {0} + + + No available port found. + + + Port is in use {0} + + + Port out of range: {0} + + + Port range end must be equal or greater than port range start {0} {1} + + \ No newline at end of file diff --git a/CassiniDev/Resources/SR.cs b/CassiniDev/Resources/SR.cs new file mode 100644 index 000000000..1101656c8 --- /dev/null +++ b/CassiniDev/Resources/SR.cs @@ -0,0 +1,164 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) Sky Sanders. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.htm file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Globalization; +using System.Reflection; +using System.Resources; +using System.Threading; + +#endregion + +namespace CassiniDev +{ + internal sealed class SR + { + + internal const string ErrInvalidIPMode="SR.ErrInvalidIPMode"; + internal const string ErrInvalidIPAddress = "ErrInvalidIPAddress"; + internal const string ErrInvalidPortMode = "ErrInvalidPortMode"; + internal const string ErrPortIsInUse = "ErrPortIsInUse"; + internal const string ErrNoAvailablePortFound = "ErrNoAvailablePortFound"; + internal const string ErrPortRangeEndMustBeEqualOrGreaterThanPortRangeSta = + "ErrPortRangeEndMustBeEqualOrGreaterThanPortRangeSta"; + internal const string ErrInvalidPortRangeValue = "ErrInvalidPortRangeValue"; + internal const string ErrInvalidHostname = "ErrInvalidHostname"; + + internal const string ErrFailedToStartCassiniDevServerOnPortError = + "ErrFailedToStartCassiniDevServerOnPortError"; + internal const string ErrApplicationPathIsNull = "ErrApplicationPathIsNull"; + internal const string ErrPortOutOfRange = "ErrPortOutOfRange"; + + internal const string WebdevAspNetVersion = "WebdevAspNetVersion"; + + internal const string WebdevDirListing = "WebdevDirListing"; + + internal const string WebdevDirNotExist = "WebdevDirNotExist"; + + internal const string WebdevErrorListeningPort = "WebdevErrorListeningPort"; + + internal const string WebdevHttpError = "WebdevHttpError"; + + internal const string WebdevInMemoryLogging = "WebdevInMemoryLogging"; + + internal const string WebdevInvalidPort = "WebdevInvalidPort"; + + internal const string WebdevLogViewerNameWithPort = "WebdevLogViewerNameWithPort"; + + internal const string WebdevName = "WebdevName"; + + internal const string WebdevNameWithPort = "WebdevNameWithPort"; + + internal const string WebdevOpenInBrowser = "WebdevOpenInBrowser"; + + internal const string WebdevRunAspNetLocally = "WebdevRunAspNetLocally"; + + internal const string WebdevServerError = "WebdevServerError"; + + internal const string WebdevShowDetail = "WebdevShowDetail"; + + internal const string WebdevStop = "WebdevStop"; + + internal const string WebdevUsagestr1 = "WebdevUsagestr1"; + + internal const string WebdevUsagestr2 = "WebdevUsagestr2"; + + internal const string WebdevUsagestr3 = "WebdevUsagestr3"; + + internal const string WebdevUsagestr4 = "WebdevUsagestr4"; + + internal const string WebdevUsagestr5 = "WebdevUsagestr5"; + + internal const string WebdevUsagestr6 = "WebdevUsagestr6"; + + internal const string WebdevUsagestr7 = "WebdevUsagestr7"; + + internal const string WebdevVersionInfo = "WebdevVersionInfo"; + + internal const string WebdevVwdName = "WebdevVwdName"; + + private static SR _loader; + + private readonly ResourceManager _resources; + public const string WebdevStart = "WebdevStart"; + + internal SR() + { + Type t = GetType(); + Assembly thisAssembly = t.Assembly; + string stringResourcesName = t.Namespace + ".Resources.CassiniDev"; + _resources = new ResourceManager(stringResourcesName, thisAssembly); + } + + private static CultureInfo Culture + { + get { return null; } + } + + public static ResourceManager Resources + { + get { return GetLoader()._resources; } + } + + public static string GetString(string name) + { + SR loader = GetLoader(); + if (loader == null) + { + return null; + } + return loader._resources.GetString(name, Culture); + } + + public static string GetString(string name, params object[] args) + { + SR loader = GetLoader(); + if (loader == null) + { + return null; + } + string format = loader._resources.GetString(name, Culture); + if ((args == null) || (args.Length <= 0)) + { + return format; + } + for (int i = 0; i < args.Length; i++) + { + string str2 = args[i] as string; + if ((str2 != null) && (str2.Length > 0x400)) + { + args[i] = str2.Substring(0, 0x3fd) + "..."; + } + } + if (string.IsNullOrEmpty(format)) + { + return string.Empty; + } + return string.Format(CultureInfo.CurrentCulture, format, args); + } + + private static SR GetLoader() + { + if (_loader == null) + { + SR sr = new SR(); + Interlocked.CompareExchange(ref _loader, sr, null); + } + return _loader; + } + + } +} \ No newline at end of file diff --git a/CassiniDev/Resources/preferences-web-browser-shortcuts.ico b/CassiniDev/Resources/preferences-web-browser-shortcuts.ico new file mode 100644 index 0000000000000000000000000000000000000000..472a8ede166881c9543a6035d6582efd5fdc7a57 GIT binary patch literal 3774 zcmcJS3s_U<8OQ&Qt|d5aT`$lq)(W;2+Er>sv7*KfrO_g7GOe{0r5K!eK`bdaR1TH~ z6e~)AaDf^}IHtz_Rxz-!la&z`+JIq$jr{_pMk za(DtvB7d%~uvpGi;2Cl@n|$b7e&jO=w&Vyz+F9H~2ea9X$CF0UxX%@bWck=N<7o^v zM!@GgGoW3q@FRP@s?qkR0C~O143%XAXDsv{?sar8r3+s;#oYe96`a}RY@nLdcftVOTPz&v$7;u`v)E{i}>+HO=utbwGi1RGUm#8=eeDVYfgZ!JW<<^rmt zw_#m%7rw6l1jYLVkgR|1KF7sV9R!NXrC`H!hMY!IbhtpNHxTa4-vzUjL<42IP zbS4fibcOh=0lL)r$ltyOg`L;Xk`e@cZ88SyLeN?m0EZS6E>xdHbb|@m;X%j=^F?t? zD9Q_RVN}JSs~{Z5SIuGMP%!|BT8`gz-3Fx`gTJB`ikt(GiB{o6YBXFG-=n)a8B^-6qb4&HUv!zUPu7a9 zMl&i)N+Bte;bg#ar1>mHeUv+-Q39L}^TCBvA3&S_Aym>&v9-JkEk{H+C19f?gNy1` z5lZ*Y!D{7sWbmAEqpubL6=TT$Xg11&Uq&Zcqkx?We!djB)nB2f%pVd1*=vILpi-*QdNd4m1qV=fFbqfKl}KFr zIvycJB|&(_o{9#wdIx7oCRT2@y#ZCbef^(!xSt?*VTh(I^;P>LdIl*v>m2=9K= zK0G{p+O!KZbH55}RWO;%(b|UugA{LcG+jaBm$@INd3*b%?>?D(#Y@2)9p&+wP4_2o z;@9%TqfEkwx_|TNZu{M|MSnk3vm#wV+fxo7rUisg`EqFayhT=?uXDSbU_{5KNO)3?HX(F^j&XNi zJ(Lx&;%mAAiqBWyO&~DQd}VsFCc(xvg%}A=@F&(Sw_D!rbXKc#;kYzXYh*x$c&6`X@Ye7zeK|Y`2 z@kT`oh4=e=Y-|#2+7te<`LFxldE&hxyR4UF7X#^m@*~yOT`{OLS@_f+(!KY1TyC?W zt^c1dy!`m9)r8Oe@F^y{SxoWOY9~uUlSlY8FBXk5uXt{z0QnVzGwH+lWcmy!Dp+`8Tud?6Qt7`deixo6R*A zS{n`;G3h9(Ik-}LN#w!OYFU?yFJG0NlFQ{={*w3DD_JkTT~b+EYA_hMR(?=mqSrUo zQJXC4(`d9T+GJZT{Mxm7Yv26crZIM@fy*^ozi5IYnlCgsYA>bs^|3ry8e+17sZ*zJ zNqa6YZ|!sI|6al_9k|1fs7b$ky|_=yy5y(L@t|>yY}r)F)b(l4(YC&ziJj_jhZhKh zq=DcYex#Bd+B71OsP97wvGqUx_{i4R)^FT&&JfErPShiaR2$X7fen5v773q|!xD)c zlQ$ihEs<>4uwkc{*Yww?G#P@q#_{kJ zi47#x7$-K|NUxIN66M>_;72lOSRPuF{G2(gtbPqutPiN!|3yIHpb;G|M<5`!Ha2%eMUXW^5RLkeh~2u^%Q z8H|)s=XQsOvr3hyLIf29dL!43;s(EA;eC8|HAO`g-BbMdsmg^2VjUa?d^x>tZrmFoyEFg{N3f011&Olt;lt12!Ja9f))e(`%NK~m*y+UDc zuR4-E|0SM0E>e=!Cew8;io9=)9*F$wF3E2n`sWYGVPM>=tp0|L)z?k3dVoW7KLImn ze-(I)_T7LD?dwQB+D8&kSxzl}j9h{P5E&8P^*8A2#{r9f3?Si1zz4hy&`sa}KX^+% z68FKp6ZK5g_h8)<{g76zeMS;bF6jOz(Y||p9uxB+0W5PO&%)^E=I-%%TIc>R6NWea literal 0 HcmV?d00001 diff --git a/CassiniDev/Views/BodyView.Designer.cs b/CassiniDev/Views/BodyView.Designer.cs new file mode 100644 index 000000000..3f039539a --- /dev/null +++ b/CassiniDev/Views/BodyView.Designer.cs @@ -0,0 +1,187 @@ +namespace CassiniDev.ServerLog +{ + partial class BodyView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.TextViewTab = new System.Windows.Forms.TabPage(); + this.TextViewTextBox = new System.Windows.Forms.RichTextBox(); + this.HexViewTab = new System.Windows.Forms.TabPage(); + this.HexViewTextBox = new System.Windows.Forms.RichTextBox(); + this.ImageViewTab = new System.Windows.Forms.TabPage(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.tabControl1.SuspendLayout(); + this.TextViewTab.SuspendLayout(); + this.HexViewTab.SuspendLayout(); + this.ImageViewTab.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.SuspendLayout(); + // + // pictureBox1 + // + this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBox1.Location = new System.Drawing.Point(4, 4); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(271, 123); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.TextViewTab); + this.tabControl1.Controls.Add(this.HexViewTab); + this.tabControl1.Controls.Add(this.ImageViewTab); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(287, 157); + this.tabControl1.TabIndex = 2; + // + // TextViewTab + // + this.TextViewTab.Controls.Add(this.TextViewTextBox); + this.TextViewTab.Location = new System.Drawing.Point(4, 22); + this.TextViewTab.Name = "TextViewTab"; + this.TextViewTab.Padding = new System.Windows.Forms.Padding(3); + this.TextViewTab.Size = new System.Drawing.Size(279, 131); + this.TextViewTab.TabIndex = 1; + this.TextViewTab.Text = "TextView"; + this.TextViewTab.UseVisualStyleBackColor = true; + // + // TextViewTextBox + // + this.TextViewTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.TextViewTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TextViewTextBox.Location = new System.Drawing.Point(3, 3); + this.TextViewTextBox.Name = "TextViewTextBox"; + this.TextViewTextBox.ReadOnly = true; + this.TextViewTextBox.Size = new System.Drawing.Size(273, 125); + this.TextViewTextBox.TabIndex = 0; + this.TextViewTextBox.Text = ""; + this.toolTip1.SetToolTip(this.TextViewTextBox, "CTRL+ Mouse Wheel to Zoom"); + this.TextViewTextBox.WordWrap = false; + // + // HexViewTab + // + this.HexViewTab.Controls.Add(this.HexViewTextBox); + this.HexViewTab.Location = new System.Drawing.Point(4, 22); + this.HexViewTab.Name = "HexViewTab"; + this.HexViewTab.Padding = new System.Windows.Forms.Padding(3); + this.HexViewTab.Size = new System.Drawing.Size(279, 131); + this.HexViewTab.TabIndex = 0; + this.HexViewTab.Text = "HexView"; + this.HexViewTab.UseVisualStyleBackColor = true; + // + // HexViewTextBox + // + this.HexViewTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.HexViewTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HexViewTextBox.Location = new System.Drawing.Point(3, 3); + this.HexViewTextBox.Name = "HexViewTextBox"; + this.HexViewTextBox.ReadOnly = true; + this.HexViewTextBox.Size = new System.Drawing.Size(273, 125); + this.HexViewTextBox.TabIndex = 1; + this.HexViewTextBox.Text = ""; + this.toolTip1.SetToolTip(this.HexViewTextBox, "CTRL+ Mouse Wheel to Zoom"); + this.HexViewTextBox.WordWrap = false; + // + // ImageViewTab + // + this.ImageViewTab.AutoScroll = true; + this.ImageViewTab.Controls.Add(this.pictureBox1); + this.ImageViewTab.Location = new System.Drawing.Point(4, 22); + this.ImageViewTab.Name = "ImageViewTab"; + this.ImageViewTab.Padding = new System.Windows.Forms.Padding(4); + this.ImageViewTab.Size = new System.Drawing.Size(279, 131); + this.ImageViewTab.TabIndex = 2; + this.ImageViewTab.Text = "ImageView"; + this.ImageViewTab.UseVisualStyleBackColor = true; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.richTextBox1); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(279, 131); + this.tabPage1.TabIndex = 3; + this.tabPage1.Text = "TODO"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // richTextBox1 + // + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ReadOnly = true; + this.richTextBox1.Size = new System.Drawing.Size(279, 131); + this.richTextBox1.TabIndex = 2; + this.richTextBox1.Text = "Expose extension API, probably via MEF, to enable incremental implemention of add" + + "itional views, e.g. a PDF view, a XAML view"; + this.toolTip1.SetToolTip(this.richTextBox1, "CTRL+ Mouse Wheel to Zoom"); + // + // BodyView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.Controls.Add(this.tabControl1); + this.Name = "BodyView"; + this.Size = new System.Drawing.Size(287, 157); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.tabControl1.ResumeLayout(false); + this.TextViewTab.ResumeLayout(false); + this.HexViewTab.ResumeLayout(false); + this.ImageViewTab.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage HexViewTab; + private System.Windows.Forms.RichTextBox HexViewTextBox; + private System.Windows.Forms.TabPage TextViewTab; + private System.Windows.Forms.RichTextBox TextViewTextBox; + private System.Windows.Forms.TabPage ImageViewTab; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.RichTextBox richTextBox1; + } +} diff --git a/CassiniDev/Views/BodyView.cs b/CassiniDev/Views/BodyView.cs new file mode 100644 index 000000000..0068c817b --- /dev/null +++ b/CassiniDev/Views/BodyView.cs @@ -0,0 +1,77 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) Sky Sanders. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.htm file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Text; +using System.Windows.Forms; + +#endregion + +namespace CassiniDev.ServerLog +{ + [DefaultBindingProperty("Value")] + public partial class BodyView : UserControl + { + private byte[] _value; + + public BodyView() + { + InitializeComponent(); + pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; + } + + public Byte[] Value + { + get { return _value; } + set + { + _value = value; + ClearDisplay(); + if (_value != null) + { + HexViewTextBox.Text = _value.ConvertToHexView(8); + TextViewTextBox.Text = Encoding.UTF8.GetString(_value); + try + { + using (MemoryStream s = new MemoryStream(_value)) + { + pictureBox1.Image = Image.FromStream(s); + } + pictureBox1.Visible = true; + } + // ReSharper disable EmptyGeneralCatchClause + catch + // ReSharper restore EmptyGeneralCatchClause + { + } + } + } + } + + private void ClearDisplay() + { + if (pictureBox1.Image != null) + { + pictureBox1.Image.Dispose(); + pictureBox1.Image = null; + } + HexViewTextBox.Text = ""; + TextViewTextBox.Text = ""; + } + } +} \ No newline at end of file diff --git a/CassiniDev/Views/BodyView.resx b/CassiniDev/Views/BodyView.resx new file mode 100644 index 000000000..9454f3d77 --- /dev/null +++ b/CassiniDev/Views/BodyView.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/CassiniDev/Views/FormView.Designer.cs b/CassiniDev/Views/FormView.Designer.cs new file mode 100644 index 000000000..ca1f1b0d3 --- /dev/null +++ b/CassiniDev/Views/FormView.Designer.cs @@ -0,0 +1,686 @@ +namespace CassiniDev +{ + partial class FormView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormView)); + this.RootUrlLinkLabel = new System.Windows.Forms.LinkLabel(); + this.ApplicationPathTextBox = new System.Windows.Forms.TextBox(); + this.VirtualPathTextBox = new System.Windows.Forms.TextBox(); + this.HostNameTextBox = new System.Windows.Forms.TextBox(); + this.LabelPhysicalPath = new System.Windows.Forms.Label(); + this.AddHostEntryCheckBox = new System.Windows.Forms.CheckBox(); + this.LabelVPath = new System.Windows.Forms.Label(); + this.ButtonBrowsePhysicalPath = new System.Windows.Forms.Button(); + this.LabelHostName = new System.Windows.Forms.Label(); + this.GroupBoxPort = new System.Windows.Forms.GroupBox(); + this.PortRangeEndTextBox = new System.Windows.Forms.NumericUpDown(); + this.PortRangeStartTextBox = new System.Windows.Forms.NumericUpDown(); + this.PortTextBox = new System.Windows.Forms.NumericUpDown(); + this.LabelPortRangeSeperator = new System.Windows.Forms.Label(); + this.PortModeFirstAvailableRadioButton = new System.Windows.Forms.RadioButton(); + this.PortModeSpecificRadioButton = new System.Windows.Forms.RadioButton(); + this.GroupBoxIPAddress = new System.Windows.Forms.GroupBox(); + this.IPSpecificTextBox = new System.Windows.Forms.ComboBox(); + this.IPV6CheckBox = new System.Windows.Forms.CheckBox(); + this.RadioButtonIPSpecific = new System.Windows.Forms.RadioButton(); + this.IPModeAnyRadioButton = new System.Windows.Forms.RadioButton(); + this.IPModeLoopBackRadioButton = new System.Windows.Forms.RadioButton(); + this.ButtonStart = new System.Windows.Forms.Button(); + this.errorProvider1 = new System.Windows.Forms.ErrorProvider(this.components); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.LabelIdleTimeOut = new System.Windows.Forms.Label(); + this.TrayIcon = new System.Windows.Forms.NotifyIcon(this.components); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.showToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.browseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.ShowLogMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.ShowLogButton = new System.Windows.Forms.Button(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.hideToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.nTLMAuthenticationRequiredToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.directoryBrowsingEnabledToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.TimeOutNumeric = new System.Windows.Forms.NumericUpDown(); + this.GroupBoxPort.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PortRangeEndTextBox)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PortRangeStartTextBox)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PortTextBox)).BeginInit(); + this.GroupBoxIPAddress.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).BeginInit(); + this.contextMenuStrip1.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TimeOutNumeric)).BeginInit(); + this.SuspendLayout(); + // + // RootUrlLinkLabel + // + this.RootUrlLinkLabel.AutoSize = true; + this.RootUrlLinkLabel.Location = new System.Drawing.Point(9, 300); + this.RootUrlLinkLabel.Name = "RootUrlLinkLabel"; + this.RootUrlLinkLabel.Size = new System.Drawing.Size(189, 13); + this.RootUrlLinkLabel.TabIndex = 24; + this.RootUrlLinkLabel.TabStop = true; + this.RootUrlLinkLabel.Text = "XXXXXXXXXXXXXXXXXXXXXXXXXX"; + this.RootUrlLinkLabel.Visible = false; + this.RootUrlLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LaunchBrowser); + // + // ApplicationPathTextBox + // + this.ApplicationPathTextBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; + this.ApplicationPathTextBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories; + this.ApplicationPathTextBox.Location = new System.Drawing.Point(12, 53); + this.ApplicationPathTextBox.Name = "ApplicationPathTextBox"; + this.ApplicationPathTextBox.Size = new System.Drawing.Size(285, 20); + this.ApplicationPathTextBox.TabIndex = 0; + this.toolTip1.SetToolTip(this.ApplicationPathTextBox, "The physical directory of the web application or site to serve."); + // + // VirtualPathTextBox + // + this.VirtualPathTextBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; + this.VirtualPathTextBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.RecentlyUsedList; + this.VirtualPathTextBox.Location = new System.Drawing.Point(12, 92); + this.VirtualPathTextBox.Name = "VirtualPathTextBox"; + this.VirtualPathTextBox.Size = new System.Drawing.Size(317, 20); + this.VirtualPathTextBox.TabIndex = 2; + this.VirtualPathTextBox.Text = "/"; + this.toolTip1.SetToolTip(this.VirtualPathTextBox, "The virtual path upon which to root the application."); + // + // HostNameTextBox + // + this.HostNameTextBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; + this.HostNameTextBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.RecentlyUsedList; + this.HostNameTextBox.Location = new System.Drawing.Point(12, 131); + this.HostNameTextBox.Name = "HostNameTextBox"; + this.HostNameTextBox.Size = new System.Drawing.Size(213, 20); + this.HostNameTextBox.TabIndex = 3; + this.toolTip1.SetToolTip(this.HostNameTextBox, resources.GetString("HostNameTextBox.ToolTip")); + this.HostNameTextBox.TextChanged += new System.EventHandler(this.HostNameChanged); + // + // LabelPhysicalPath + // + this.LabelPhysicalPath.AutoSize = true; + this.LabelPhysicalPath.Location = new System.Drawing.Point(12, 36); + this.LabelPhysicalPath.Name = "LabelPhysicalPath"; + this.LabelPhysicalPath.Size = new System.Drawing.Size(71, 13); + this.LabelPhysicalPath.TabIndex = 1; + this.LabelPhysicalPath.Text = "Physical Path"; + this.toolTip1.SetToolTip(this.LabelPhysicalPath, "The physical directory of the web application or site to serve."); + // + // AddHostEntryCheckBox + // + this.AddHostEntryCheckBox.AutoSize = true; + this.AddHostEntryCheckBox.Enabled = false; + this.AddHostEntryCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.AddHostEntryCheckBox.Location = new System.Drawing.Point(231, 133); + this.AddHostEntryCheckBox.Name = "AddHostEntryCheckBox"; + this.AddHostEntryCheckBox.Size = new System.Drawing.Size(105, 18); + this.AddHostEntryCheckBox.TabIndex = 4; + this.AddHostEntryCheckBox.Text = "Add hosts entry"; + this.toolTip1.SetToolTip(this.AddHostEntryCheckBox, resources.GetString("AddHostEntryCheckBox.ToolTip")); + this.AddHostEntryCheckBox.UseVisualStyleBackColor = true; + // + // LabelVPath + // + this.LabelVPath.AutoSize = true; + this.LabelVPath.Location = new System.Drawing.Point(12, 75); + this.LabelVPath.Name = "LabelVPath"; + this.LabelVPath.Size = new System.Drawing.Size(61, 13); + this.LabelVPath.TabIndex = 3; + this.LabelVPath.Text = "Virtual Path"; + this.toolTip1.SetToolTip(this.LabelVPath, "The virtual path upon which to root the application."); + // + // ButtonBrowsePhysicalPath + // + this.ButtonBrowsePhysicalPath.Location = new System.Drawing.Point(303, 50); + this.ButtonBrowsePhysicalPath.Name = "ButtonBrowsePhysicalPath"; + this.ButtonBrowsePhysicalPath.Size = new System.Drawing.Size(27, 23); + this.ButtonBrowsePhysicalPath.TabIndex = 1; + this.ButtonBrowsePhysicalPath.Text = "..."; + this.toolTip1.SetToolTip(this.ButtonBrowsePhysicalPath, "Browse"); + this.ButtonBrowsePhysicalPath.UseVisualStyleBackColor = true; + this.ButtonBrowsePhysicalPath.Click += new System.EventHandler(this.BrowsePath); + // + // LabelHostName + // + this.LabelHostName.AutoSize = true; + this.LabelHostName.Location = new System.Drawing.Point(12, 115); + this.LabelHostName.Name = "LabelHostName"; + this.LabelHostName.Size = new System.Drawing.Size(106, 13); + this.LabelHostName.TabIndex = 5; + this.LabelHostName.Text = "Host Name (optional)"; + this.toolTip1.SetToolTip(this.LabelHostName, resources.GetString("LabelHostName.ToolTip")); + // + // GroupBoxPort + // + this.GroupBoxPort.Controls.Add(this.PortRangeEndTextBox); + this.GroupBoxPort.Controls.Add(this.PortRangeStartTextBox); + this.GroupBoxPort.Controls.Add(this.PortTextBox); + this.GroupBoxPort.Controls.Add(this.LabelPortRangeSeperator); + this.GroupBoxPort.Controls.Add(this.PortModeFirstAvailableRadioButton); + this.GroupBoxPort.Controls.Add(this.PortModeSpecificRadioButton); + this.GroupBoxPort.Location = new System.Drawing.Point(12, 213); + this.GroupBoxPort.Name = "GroupBoxPort"; + this.GroupBoxPort.Size = new System.Drawing.Size(324, 47); + this.GroupBoxPort.TabIndex = 9; + this.GroupBoxPort.TabStop = false; + this.GroupBoxPort.Text = "Port"; + // + // PortRangeEndTextBox + // + this.PortRangeEndTextBox.Location = new System.Drawing.Point(261, 12); + this.PortRangeEndTextBox.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.PortRangeEndTextBox.Minimum = new decimal(new int[] { + 2, + 0, + 0, + 0}); + this.PortRangeEndTextBox.Name = "PortRangeEndTextBox"; + this.PortRangeEndTextBox.Size = new System.Drawing.Size(57, 20); + this.PortRangeEndTextBox.TabIndex = 19; + this.PortRangeEndTextBox.Value = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + // + // PortRangeStartTextBox + // + this.PortRangeStartTextBox.Location = new System.Drawing.Point(182, 12); + this.PortRangeStartTextBox.Maximum = new decimal(new int[] { + 65534, + 0, + 0, + 0}); + this.PortRangeStartTextBox.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.PortRangeStartTextBox.Name = "PortRangeStartTextBox"; + this.PortRangeStartTextBox.Size = new System.Drawing.Size(57, 20); + this.PortRangeStartTextBox.TabIndex = 18; + this.PortRangeStartTextBox.Value = new decimal(new int[] { + 32768, + 0, + 0, + 0}); + // + // PortTextBox + // + this.PortTextBox.Location = new System.Drawing.Point(65, 12); + this.PortTextBox.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.PortTextBox.Name = "PortTextBox"; + this.PortTextBox.Size = new System.Drawing.Size(57, 20); + this.PortTextBox.TabIndex = 17; + // + // LabelPortRangeSeperator + // + this.LabelPortRangeSeperator.AutoSize = true; + this.LabelPortRangeSeperator.Location = new System.Drawing.Point(239, 16); + this.LabelPortRangeSeperator.Name = "LabelPortRangeSeperator"; + this.LabelPortRangeSeperator.Size = new System.Drawing.Size(22, 13); + this.LabelPortRangeSeperator.TabIndex = 16; + this.LabelPortRangeSeperator.Text = "<->"; + this.toolTip1.SetToolTip(this.LabelPortRangeSeperator, "Host on the first available port found in specified range."); + // + // PortModeFirstAvailableRadioButton + // + this.PortModeFirstAvailableRadioButton.AutoSize = true; + this.PortModeFirstAvailableRadioButton.Checked = true; + this.PortModeFirstAvailableRadioButton.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.PortModeFirstAvailableRadioButton.Location = new System.Drawing.Point(128, 13); + this.PortModeFirstAvailableRadioButton.Name = "PortModeFirstAvailableRadioButton"; + this.PortModeFirstAvailableRadioButton.Size = new System.Drawing.Size(63, 18); + this.PortModeFirstAvailableRadioButton.TabIndex = 6; + this.PortModeFirstAvailableRadioButton.TabStop = true; + this.PortModeFirstAvailableRadioButton.Text = "Range"; + this.toolTip1.SetToolTip(this.PortModeFirstAvailableRadioButton, "Host on the first available port found in specified range."); + this.PortModeFirstAvailableRadioButton.UseVisualStyleBackColor = true; + this.PortModeFirstAvailableRadioButton.CheckedChanged += new System.EventHandler(this.RadioButtonPortFind_CheckedChanged); + // + // PortModeSpecificRadioButton + // + this.PortModeSpecificRadioButton.AutoSize = true; + this.PortModeSpecificRadioButton.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.PortModeSpecificRadioButton.Location = new System.Drawing.Point(6, 13); + this.PortModeSpecificRadioButton.Name = "PortModeSpecificRadioButton"; + this.PortModeSpecificRadioButton.Size = new System.Drawing.Size(69, 18); + this.PortModeSpecificRadioButton.TabIndex = 6; + this.PortModeSpecificRadioButton.TabStop = true; + this.PortModeSpecificRadioButton.Text = "Specific"; + this.toolTip1.SetToolTip(this.PortModeSpecificRadioButton, "Host on specific port. \r\nIf port is already in use a warning will be issued and s" + + "erver will not start."); + this.PortModeSpecificRadioButton.UseVisualStyleBackColor = true; + this.PortModeSpecificRadioButton.CheckedChanged += new System.EventHandler(this.RadioButtonPortSpecific_CheckedChanged); + // + // GroupBoxIPAddress + // + this.GroupBoxIPAddress.Controls.Add(this.IPSpecificTextBox); + this.GroupBoxIPAddress.Controls.Add(this.IPV6CheckBox); + this.GroupBoxIPAddress.Controls.Add(this.RadioButtonIPSpecific); + this.GroupBoxIPAddress.Controls.Add(this.IPModeAnyRadioButton); + this.GroupBoxIPAddress.Controls.Add(this.IPModeLoopBackRadioButton); + this.GroupBoxIPAddress.Location = new System.Drawing.Point(12, 154); + this.GroupBoxIPAddress.Name = "GroupBoxIPAddress"; + this.GroupBoxIPAddress.Size = new System.Drawing.Size(324, 58); + this.GroupBoxIPAddress.TabIndex = 8; + this.GroupBoxIPAddress.TabStop = false; + this.GroupBoxIPAddress.Text = "IP Address"; + // + // IPSpecificTextBox + // + this.IPSpecificTextBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.IPSpecificTextBox.FormattingEnabled = true; + this.IPSpecificTextBox.Location = new System.Drawing.Point(216, 14); + this.IPSpecificTextBox.Name = "IPSpecificTextBox"; + this.IPSpecificTextBox.Size = new System.Drawing.Size(101, 21); + this.IPSpecificTextBox.TabIndex = 9; + // + // IPV6CheckBox + // + this.IPV6CheckBox.AutoSize = true; + this.IPV6CheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.IPV6CheckBox.Location = new System.Drawing.Point(39, 35); + this.IPV6CheckBox.Name = "IPV6CheckBox"; + this.IPV6CheckBox.Size = new System.Drawing.Size(77, 18); + this.IPV6CheckBox.TabIndex = 8; + this.IPV6CheckBox.Text = "Use IPV6"; + this.toolTip1.SetToolTip(this.IPV6CheckBox, "Use the IPV6 version of selected IP"); + this.IPV6CheckBox.UseVisualStyleBackColor = true; + // + // RadioButtonIPSpecific + // + this.RadioButtonIPSpecific.AutoSize = true; + this.RadioButtonIPSpecific.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.RadioButtonIPSpecific.Location = new System.Drawing.Point(150, 15); + this.RadioButtonIPSpecific.Name = "RadioButtonIPSpecific"; + this.RadioButtonIPSpecific.Size = new System.Drawing.Size(69, 18); + this.RadioButtonIPSpecific.TabIndex = 5; + this.RadioButtonIPSpecific.Text = "Specific"; + this.toolTip1.SetToolTip(this.RadioButtonIPSpecific, "Host on specified IP address.\r\nWCF Services may not be served using this setting." + + " Use Loopback."); + this.RadioButtonIPSpecific.UseVisualStyleBackColor = true; + this.RadioButtonIPSpecific.CheckedChanged += new System.EventHandler(this.RadioButtonIPSpecific_CheckedChanged); + // + // IPModeAnyRadioButton + // + this.IPModeAnyRadioButton.AutoSize = true; + this.IPModeAnyRadioButton.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.IPModeAnyRadioButton.Location = new System.Drawing.Point(88, 15); + this.IPModeAnyRadioButton.Name = "IPModeAnyRadioButton"; + this.IPModeAnyRadioButton.Size = new System.Drawing.Size(49, 18); + this.IPModeAnyRadioButton.TabIndex = 5; + this.IPModeAnyRadioButton.Text = "Any"; + this.toolTip1.SetToolTip(this.IPModeAnyRadioButton, "Host on all IP addresses at the specified port.\r\nWCF Services may not be served u" + + "sing this setting. Use Loopback."); + this.IPModeAnyRadioButton.UseVisualStyleBackColor = true; + this.IPModeAnyRadioButton.CheckedChanged += new System.EventHandler(this.RadioButtonIPAny_CheckedChanged); + // + // IPModeLoopBackRadioButton + // + this.IPModeLoopBackRadioButton.AutoSize = true; + this.IPModeLoopBackRadioButton.Checked = true; + this.IPModeLoopBackRadioButton.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.IPModeLoopBackRadioButton.Location = new System.Drawing.Point(6, 15); + this.IPModeLoopBackRadioButton.Name = "IPModeLoopBackRadioButton"; + this.IPModeLoopBackRadioButton.Size = new System.Drawing.Size(79, 18); + this.IPModeLoopBackRadioButton.TabIndex = 5; + this.IPModeLoopBackRadioButton.TabStop = true; + this.IPModeLoopBackRadioButton.Text = "Loopback"; + this.toolTip1.SetToolTip(this.IPModeLoopBackRadioButton, "Use the default loopback adapter. \r\nIf any sort of WCF service is to be served, t" + + "his is the only viable option."); + this.IPModeLoopBackRadioButton.UseVisualStyleBackColor = true; + this.IPModeLoopBackRadioButton.CheckedChanged += new System.EventHandler(this.RadioButtonIPLoopBack_CheckedChanged); + // + // ButtonStart + // + this.ButtonStart.Location = new System.Drawing.Point(261, 335); + this.ButtonStart.Name = "ButtonStart"; + this.ButtonStart.Size = new System.Drawing.Size(75, 23); + this.ButtonStart.TabIndex = 22; + this.ButtonStart.Text = "Start"; + this.toolTip1.SetToolTip(this.ButtonStart, "Start hosting application using specified criteria"); + this.ButtonStart.UseVisualStyleBackColor = true; + this.ButtonStart.Click += new System.EventHandler(this.StartStop); + // + // errorProvider1 + // + this.errorProvider1.ContainerControl = this; + // + // LabelIdleTimeOut + // + this.LabelIdleTimeOut.AutoSize = true; + this.LabelIdleTimeOut.Location = new System.Drawing.Point(15, 270); + this.LabelIdleTimeOut.Name = "LabelIdleTimeOut"; + this.LabelIdleTimeOut.Size = new System.Drawing.Size(73, 13); + this.LabelIdleTimeOut.TabIndex = 26; + this.LabelIdleTimeOut.Text = "Idle Time Out:"; + this.toolTip1.SetToolTip(this.LabelIdleTimeOut, "The amount of time, in milliseconds, to remain idle, i.e. no requests, before sto" + + "pping the server."); + // + // TrayIcon + // + this.TrayIcon.ContextMenuStrip = this.contextMenuStrip1; + this.TrayIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("TrayIcon.Icon"))); + this.TrayIcon.Text = "notifyIcon1"; + this.TrayIcon.BalloonTipClicked += new System.EventHandler(this.ShowMainForm); + this.TrayIcon.DoubleClick += new System.EventHandler(this.ShowMainForm); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.showToolStripMenuItem, + this.browseToolStripMenuItem, + this.toolStripSeparator2, + this.ShowLogMenuItem, + this.toolStripSeparator1, + this.closeToolStripMenuItem, + this.helpToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(117, 126); + // + // showToolStripMenuItem + // + this.showToolStripMenuItem.Name = "showToolStripMenuItem"; + this.showToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + this.showToolStripMenuItem.Text = "&Show"; + this.showToolStripMenuItem.Click += new System.EventHandler(this.ShowMainForm); + // + // browseToolStripMenuItem + // + this.browseToolStripMenuItem.Name = "browseToolStripMenuItem"; + this.browseToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + this.browseToolStripMenuItem.Text = "&Browse"; + this.browseToolStripMenuItem.Click += new System.EventHandler(this.LaunchBrowser); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(113, 6); + // + // ShowLogMenuItem + // + this.ShowLogMenuItem.Enabled = false; + this.ShowLogMenuItem.Name = "ShowLogMenuItem"; + this.ShowLogMenuItem.Size = new System.Drawing.Size(116, 22); + this.ShowLogMenuItem.Text = "&View Log"; + this.ShowLogMenuItem.Click += new System.EventHandler(this.ShowLog); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(113, 6); + // + // closeToolStripMenuItem + // + this.closeToolStripMenuItem.Name = "closeToolStripMenuItem"; + this.closeToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + this.closeToolStripMenuItem.Text = "&Exit"; + this.closeToolStripMenuItem.Click += new System.EventHandler(this.ExitApp); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + this.helpToolStripMenuItem.Text = "&Help"; + this.helpToolStripMenuItem.Click += new System.EventHandler(this.ShowHelp); + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1}); + this.statusStrip1.Location = new System.Drawing.Point(0, 370); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional; + this.statusStrip1.Size = new System.Drawing.Size(343, 22); + this.statusStrip1.SizingGrip = false; + this.statusStrip1.TabIndex = 27; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(118, 17); + this.toolStripStatusLabel1.Text = "ASP.Net Version XXXXX"; + // + // ShowLogButton + // + this.ShowLogButton.Location = new System.Drawing.Point(176, 335); + this.ShowLogButton.Margin = new System.Windows.Forms.Padding(0); + this.ShowLogButton.Name = "ShowLogButton"; + this.ShowLogButton.Size = new System.Drawing.Size(75, 23); + this.ShowLogButton.TabIndex = 28; + this.ShowLogButton.Text = "Show &Log"; + this.ShowLogButton.Click += new System.EventHandler(this.ShowLog); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.optionsToolStripMenuItem, + this.helpToolStripMenuItem1}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(343, 24); + this.menuStrip1.TabIndex = 29; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.hideToolStripMenuItem, + this.toolStripSeparator4, + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // hideToolStripMenuItem + // + this.hideToolStripMenuItem.Name = "hideToolStripMenuItem"; + this.hideToolStripMenuItem.Size = new System.Drawing.Size(95, 22); + this.hideToolStripMenuItem.Text = "&Hide"; + this.hideToolStripMenuItem.Click += new System.EventHandler(this.HideMainForm); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(92, 6); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(95, 22); + this.exitToolStripMenuItem.Text = "E&xit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitApp); + // + // optionsToolStripMenuItem + // + this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.nTLMAuthenticationRequiredToolStripMenuItem, + this.directoryBrowsingEnabledToolStripMenuItem}); + this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; + this.optionsToolStripMenuItem.Size = new System.Drawing.Size(56, 20); + this.optionsToolStripMenuItem.Text = "&Options"; + // + // nTLMAuthenticationRequiredToolStripMenuItem + // + this.nTLMAuthenticationRequiredToolStripMenuItem.CheckOnClick = true; + this.nTLMAuthenticationRequiredToolStripMenuItem.Name = "nTLMAuthenticationRequiredToolStripMenuItem"; + this.nTLMAuthenticationRequiredToolStripMenuItem.Size = new System.Drawing.Size(219, 22); + this.nTLMAuthenticationRequiredToolStripMenuItem.Text = "NTLM Authentication Required"; + this.nTLMAuthenticationRequiredToolStripMenuItem.ToolTipText = "When checked, require windows authentication via NTLM."; + // + // directoryBrowsingEnabledToolStripMenuItem + // + this.directoryBrowsingEnabledToolStripMenuItem.Checked = true; + this.directoryBrowsingEnabledToolStripMenuItem.CheckOnClick = true; + this.directoryBrowsingEnabledToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.directoryBrowsingEnabledToolStripMenuItem.Name = "directoryBrowsingEnabledToolStripMenuItem"; + this.directoryBrowsingEnabledToolStripMenuItem.Size = new System.Drawing.Size(219, 22); + this.directoryBrowsingEnabledToolStripMenuItem.Text = "Directory Browsing Enabled"; + this.directoryBrowsingEnabledToolStripMenuItem.ToolTipText = "When checked, if no default document is found display a directory listing."; + // + // helpToolStripMenuItem1 + // + this.helpToolStripMenuItem1.Name = "helpToolStripMenuItem1"; + this.helpToolStripMenuItem1.Size = new System.Drawing.Size(40, 20); + this.helpToolStripMenuItem1.Text = "&Help"; + this.helpToolStripMenuItem1.Click += new System.EventHandler(this.ShowHelp); + // + // TimeOutNumeric + // + this.TimeOutNumeric.Increment = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.TimeOutNumeric.Location = new System.Drawing.Point(95, 266); + this.TimeOutNumeric.Maximum = new decimal(new int[] { + 2000000000, + 0, + 0, + 0}); + this.TimeOutNumeric.Name = "TimeOutNumeric"; + this.TimeOutNumeric.Size = new System.Drawing.Size(66, 20); + this.TimeOutNumeric.TabIndex = 30; + // + // FormView + // + this.AcceptButton = this.ButtonStart; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.ClientSize = new System.Drawing.Size(343, 392); + this.Controls.Add(this.menuStrip1); + this.Controls.Add(this.TimeOutNumeric); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.LabelIdleTimeOut); + this.Controls.Add(this.ApplicationPathTextBox); + this.Controls.Add(this.ShowLogButton); + this.Controls.Add(this.VirtualPathTextBox); + this.Controls.Add(this.HostNameTextBox); + this.Controls.Add(this.RootUrlLinkLabel); + this.Controls.Add(this.LabelPhysicalPath); + this.Controls.Add(this.LabelVPath); + this.Controls.Add(this.GroupBoxIPAddress); + this.Controls.Add(this.ButtonStart); + this.Controls.Add(this.AddHostEntryCheckBox); + this.Controls.Add(this.GroupBoxPort); + this.Controls.Add(this.ButtonBrowsePhysicalPath); + this.Controls.Add(this.LabelHostName); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FormView"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.Text = "Cassini Developer Edition"; + this.WindowState = System.Windows.Forms.FormWindowState.Minimized; + this.GroupBoxPort.ResumeLayout(false); + this.GroupBoxPort.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PortRangeEndTextBox)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PortRangeStartTextBox)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PortTextBox)).EndInit(); + this.GroupBoxIPAddress.ResumeLayout(false); + this.GroupBoxIPAddress.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).EndInit(); + this.contextMenuStrip1.ResumeLayout(false); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TimeOutNumeric)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.LinkLabel RootUrlLinkLabel; + private System.Windows.Forms.TextBox ApplicationPathTextBox; + private System.Windows.Forms.TextBox VirtualPathTextBox; + private System.Windows.Forms.TextBox HostNameTextBox; + private System.Windows.Forms.Label LabelPhysicalPath; + private System.Windows.Forms.CheckBox AddHostEntryCheckBox; + private System.Windows.Forms.Label LabelVPath; + private System.Windows.Forms.Button ButtonBrowsePhysicalPath; + private System.Windows.Forms.Label LabelHostName; + private System.Windows.Forms.GroupBox GroupBoxPort; + private System.Windows.Forms.Label LabelPortRangeSeperator; + private System.Windows.Forms.RadioButton PortModeFirstAvailableRadioButton; + private System.Windows.Forms.RadioButton PortModeSpecificRadioButton; + private System.Windows.Forms.GroupBox GroupBoxIPAddress; + private System.Windows.Forms.RadioButton RadioButtonIPSpecific; + private System.Windows.Forms.RadioButton IPModeAnyRadioButton; + private System.Windows.Forms.RadioButton IPModeLoopBackRadioButton; + private System.Windows.Forms.Button ButtonStart; + private System.Windows.Forms.CheckBox IPV6CheckBox; + private System.Windows.Forms.ErrorProvider errorProvider1; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Label LabelIdleTimeOut; + internal System.Windows.Forms.NotifyIcon TrayIcon; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem showToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem browseToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem ShowLogMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.Button ShowLogButton; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem hideToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem nTLMAuthenticationRequiredToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem directoryBrowsingEnabledToolStripMenuItem; + private System.Windows.Forms.NumericUpDown TimeOutNumeric; + private System.Windows.Forms.NumericUpDown PortTextBox; + private System.Windows.Forms.NumericUpDown PortRangeStartTextBox; + private System.Windows.Forms.NumericUpDown PortRangeEndTextBox; + private System.Windows.Forms.ComboBox IPSpecificTextBox; + } +} \ No newline at end of file diff --git a/CassiniDev/Views/FormView.cs b/CassiniDev/Views/FormView.cs new file mode 100644 index 000000000..dbe0ea332 --- /dev/null +++ b/CassiniDev/Views/FormView.cs @@ -0,0 +1,834 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) Sky Sanders. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.htm file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Threading; +using System.Windows.Forms; +using CassiniDev.ServerLog; + +#endregion + +namespace CassiniDev +{ + public partial class FormView : Form + { + #region Fields + + private bool _automated; + + private LogView _logForm; + + private RunState _runState; + + private Server _server; + + #endregion + + #region Constructors + + public FormView(Server server) + { + _server = server; + InitializeComponent(); + InitializeUI(); + } + + #endregion + + #region Properties + + internal bool AddHost + { + get { return AddHostEntryCheckBox.Checked; } + set { AddHostEntryCheckBox.Checked = value; } + } + + internal string ApplicationPath + { + get { return ApplicationPathTextBox.Text; } + set { ApplicationPathTextBox.Text = value; } + } + + internal string HostName + { + get { return HostNameTextBox.Text; } + set { HostNameTextBox.Text = value; } + } + + internal string IPAddress + { + get { return IPSpecificTextBox.Text; } + set { IPSpecificTextBox.Text = value; } + } + + internal IPMode IPMode + { + get { return GetIpMode(); } + set { SetIpMode(value); } + } + + + internal bool NoDirList + { + get { return !directoryBrowsingEnabledToolStripMenuItem.Checked; } + set { directoryBrowsingEnabledToolStripMenuItem.Checked = !value; } + } + + internal bool NtmlAuthenticationRequired + { + get { return nTLMAuthenticationRequiredToolStripMenuItem.Checked; } + set { nTLMAuthenticationRequiredToolStripMenuItem.Checked = value; } + } + + internal int Port + { + get { return (int)PortTextBox.Value; } + set { PortTextBox.Value = value; } + } + + internal PortMode PortMode + { + get { return GetPortMode(); } + set { SetPortMode(value); } + } + + internal int PortRangeEnd + { + get { return (int)PortRangeEndTextBox.Value; } + set { PortRangeEndTextBox.Value = value; } + } + + internal int PortRangeStart + { + get { return (int)PortRangeStartTextBox.Value; } + set { PortRangeStartTextBox.Value = value; } + } + + internal string RootUrl + { + get { return RootUrlLinkLabel.Text; } + set + { + RootUrlLinkLabel.Text = value; + RootUrlLinkLabel.Visible = !string.IsNullOrEmpty(value); + } + } + + internal RunState RunState + { + get { return _runState; } + } + + internal int TimeOut + { + get { return (int)TimeOutNumeric.Value; } + set { TimeOutNumeric.Value = value; } + } + + internal bool V6 + { + get { return IPV6CheckBox.Checked; } + set { IPV6CheckBox.Checked = value; } + } + + internal string VirtualPath + { + get { return VirtualPathTextBox.Text; } + set { VirtualPathTextBox.Text = value; } + } + + #endregion + + #region Protected Methods + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + + if (disposing && _server != null) + { + _server.Dispose(); + _server = null; + } + base.Dispose(disposing); + } + + /// + /// If the form is closing we need to determine whether to exit + /// or to minimize to tray. + /// + /// + protected override void OnClosing(CancelEventArgs e) + { + // if explicit closure or we are doing nothing then exit app. + if (RunState == RunState.Idle) + { + InvokeStop(); + } + else + { + WindowState = FormWindowState.Minimized; + e.Cancel = true; + } + } + + //protected override void OnShown(EventArgs e) + //{ + // if (_automated) + // { + // WindowState = FormWindowState.Minimized; + // Hide(); + // } + //} + + #endregion + + #region Private Methods + + + private void InitializeUI() + { + ButtonStart.Text = SR.GetString(SR.WebdevStart); + toolStripStatusLabel1.Text = SR.GetString(SR.WebdevAspNetVersion, Common.GetAspVersion()); + + + // if sqlite is missing then just silently enable in-memory logging, + // hide the enable logging item and enable view log item + + + + ShowLogButton.Enabled = false; + + + + toolStripStatusLabel1.Text = SR.GetString(SR.WebdevAspNetVersion, Common.GetAspVersion()); + + List localAddresses = new List(CassiniNetworkUtils.GetLocalAddresses()); + localAddresses.Insert(0, System.Net.IPAddress.IPv6Loopback); + localAddresses.Insert(0, System.Net.IPAddress.Loopback); + + IPSpecificTextBox.Items.AddRange(localAddresses.Select(i => i.ToString()).ToArray()); + if (IPSpecificTextBox.Items.Count > 0) + { + IPSpecificTextBox.SelectedIndex = 0; + IPSpecificTextBox.Text = IPSpecificTextBox.Items[0].ToString(); + } + + InvokeSetRunState(RunState.Idle); + if (_server == null) + { + ShowMainForm(); + } + else + { + _automated = true; + _server.TimedOut += OnTimedOut; + IPMode = IPMode.Specific; + PortMode = PortMode.Specific; + + UpdateUIFromServer(); + + + InvokeSetRunState(RunState.Running); + base.Text = SR.GetString(SR.WebdevNameWithPort, _server.Port); + TrayIcon.Visible = true; + DisplayTrayTip(); + } + } + + private void DisplayTrayTip() + { + + if (_server==null) + { + return; + } + TrayIcon.Text = _server.RootUrl; + string trayBaloonText = _server.RootUrl; + TrayIcon.ShowBalloonTip(5000, base.Text, trayBaloonText, ToolTipIcon.Info); + } + + private void UpdateUIFromServer() + { + base.Text = SR.GetString(SR.WebdevNameWithPort, _server.Port); + RootUrl = _server.RootUrl; + ApplicationPath = _server.PhysicalPath; + IPAddress = _server.IPAddress.ToString(); + Port = _server.Port; + HostName = _server.HostName; + NtmlAuthenticationRequired = _server.RequireAuthentication; + NoDirList = _server.DisableDirectoryListing; + TimeOut = _server.TimeoutInterval; + } + + protected override void OnResize(EventArgs e) + { + if (WindowState == FormWindowState.Minimized) + { + Hide(); + DisplayTrayTip(); + ShowInTaskbar = false; + } + base.OnResize(e); + } + + + private void ShowMainForm() + { + Show(); + WindowState = FormWindowState.Normal; + ShowInTaskbar = true; + + + //TrayIcon.Visible = false; + //ShowInTaskbar = true; + + //TopMost = true; + //Focus(); + //BringToFront(); + //TopMost = false; + } + + private void InvokeSetRunState(RunState state) + { + // use invoke, runstate may come from another thread. + if (InvokeRequired) + { + Invoke(new ParameterizedThreadStart(SetRunState), state); + } + else + { + SetRunState(state); + } + } + + /// + /// Sets RunState and enables/disables form fields accordingly + /// + /// + private void SetRunState(object state) + { + _runState = (RunState)state; + + switch (_runState) + { + case RunState.Idle: + if (!_automated) + { + EnableForm(); + } + // if not automated we are on our way out + break; + case RunState.Running: + DisableForm(); + break; + } + } + + + + + private void EnableForm() + { + ShowLogMenuItem.Enabled = ShowLogButton.Enabled = false; + base.Text = SR.GetString(SR.WebdevName); + ButtonStart.Text = "&Start"; + ButtonStart.Enabled = true; + nTLMAuthenticationRequiredToolStripMenuItem.Enabled = true; + directoryBrowsingEnabledToolStripMenuItem.Enabled = true; + ApplicationPathTextBox.Enabled = true; + ButtonBrowsePhysicalPath.Enabled = true; + VirtualPathTextBox.Enabled = true; + HostNameTextBox.Enabled = true; + GroupBoxIPAddress.Enabled = true; + GroupBoxPort.Enabled = true; + LabelHostName.Enabled = true; + LabelPhysicalPath.Enabled = true; + LabelVPath.Enabled = true; + TimeOutNumeric.Enabled = true; + RootUrl = null; + + AddHostEntryCheckBox.Enabled = !String.IsNullOrEmpty(HostName); + + switch (IPMode) + { + case IPMode.Loopback: + RadioButtonIPLoopBack_CheckedChanged(null, EventArgs.Empty); + break; + case IPMode.Any: + RadioButtonIPAny_CheckedChanged(null, EventArgs.Empty); + break; + case IPMode.Specific: + RadioButtonIPSpecific_CheckedChanged(null, EventArgs.Empty); + break; + } + + switch (PortMode) + { + case PortMode.FirstAvailable: + RadioButtonPortFind_CheckedChanged(null, EventArgs.Empty); + break; + case PortMode.Specific: + RadioButtonPortSpecific_CheckedChanged(null, EventArgs.Empty); + break; + } + + HostNameChanged(null, EventArgs.Empty); + } + + private void DisableForm() + { + ShowLogMenuItem.Enabled = ShowLogButton.Enabled = true; + + TimeOutNumeric.Enabled = false; + ButtonStart.Text = "&Stop"; + directoryBrowsingEnabledToolStripMenuItem.Enabled = false; + nTLMAuthenticationRequiredToolStripMenuItem.Enabled = false; + ApplicationPathTextBox.Enabled = false; + ButtonBrowsePhysicalPath.Enabled = false; + VirtualPathTextBox.Enabled = false; + HostNameTextBox.Enabled = false; + GroupBoxIPAddress.Enabled = false; + GroupBoxPort.Enabled = false; + AddHostEntryCheckBox.Enabled = false; + LabelHostName.Enabled = false; + LabelPhysicalPath.Enabled = false; + LabelVPath.Enabled = false; + } + + private void HostNameChanged() + { + if (string.IsNullOrEmpty(HostName)) + { + AddHostEntryCheckBox.Enabled = false; + AddHost = false; + } + else + { + AddHostEntryCheckBox.Enabled = true; + } + } + + + private void StartStop() + { + if (RunState != RunState.Running) + { + DisableForm(); + Start(); + } + else + { + InvokeStop(); + } + } + + private CommandLineArguments GetArgs() + { + CommandLineArguments args = new CommandLineArguments + { + AddHost = AddHost, + ApplicationPath = ApplicationPath, + HostName = HostName, + IPAddress = IPAddress, + IPMode = IPMode, + IPv6 = V6, + Port = Port, + PortMode = PortMode, + PortRangeEnd = PortRangeEnd, + PortRangeStart = PortRangeStart, + VirtualPath = VirtualPath, + TimeOut = TimeOut, + WaitForPort = 0, + Ntlm = NtmlAuthenticationRequired, + Nodirlist = NoDirList + }; + return args; + } + private void Start() + { + // use CommandLineArguments as a pre validation tool + + CommandLineArguments args = GetArgs(); + ClearError(); + + try + { + args.Validate(); + } + + catch (CassiniException ex) + { + SetError(ex.Field, ex.Message); + return; + } + + IPAddress = args.IPAddress; + + Port = args.Port; + + HostName = args.HostName; + + _server = new Server(args.Port, args.VirtualPath, args.ApplicationPath, + System.Net.IPAddress.Parse(args.IPAddress), args.HostName, args.TimeOut, args.Ntlm, + args.Nodirlist); + + if (args.AddHost) + { + HostsFile.AddHostEntry(_server.IPAddress.ToString(), _server.HostName); + } + + try + { + _server.Start(); + _server.TimedOut += OnTimedOut; + UpdateUIFromServer(); + InvokeSetRunState(RunState.Running); + + } + + catch (Exception ex) + { + SetError(ErrorField.None, ex.Message); + _server.Dispose(); + } + } + + /// + /// The server could be stopped either by user action, + /// timeout or exception. If by timeout, the call will be + /// coming from another thread in another appdomain far far + /// away, so we execise caution and wrap the method that + /// actual does the stoppage in this invokable wrapper. + /// + private void InvokeStop() + { + if (InvokeRequired) + { + Invoke(new MethodInvoker(Stop)); + } + else + { + Stop(); + } + } + + private void Stop() + { + // kill the start button so we don't get a start + // signal before completely stopped. + ButtonStart.Enabled = false; + + // revert the host file modification, if necessary + if (AddHost && RunState == RunState.Running) + { + HostsFile.RemoveHostEntry(_server.IPAddress.ToString(), _server.HostName); + } + + if (_server != null) + { + _server.TimedOut -= OnTimedOut; + _server.Dispose(); + } + + RootUrl = string.Empty; + + InvokeSetRunState(RunState.Idle); + + if (_automated) + { + ExitApp(); + } + } + + + + private static void ExitApp() + { + Application.Exit(); + } + + + private static void ShowHelp() + { + MessageBox.Show("help/about TODO"); + } + + private void ShowLog() + { + if (_logForm == null || _logForm.IsDisposed) + { + _logForm = new LogView(_server); + } + _logForm.Show(); + _logForm.BringToFront(); + } + + + private void BrowsePath() + { + FolderBrowserDialog fbd = new FolderBrowserDialog(); + + if (fbd.ShowDialog() == DialogResult.OK) + { + ApplicationPath = fbd.SelectedPath; + } + } + + private void LaunchBrowser() + { + Process.Start(RootUrlLinkLabel.Text); + } + + + private IPMode GetIpMode() + { + IPMode result; + if (IPModeAnyRadioButton.Checked) + { + result = IPMode.Any; + } + else if (IPModeLoopBackRadioButton.Checked) + { + result = IPMode.Loopback; + } + else + { + result = IPMode.Specific; + } + return result; + } + + private PortMode GetPortMode() + { + return PortModeSpecificRadioButton.Checked ? PortMode.Specific : PortMode.FirstAvailable; + } + + + + private void SetIpMode(IPMode value) + { + switch (value) + { + case IPMode.Loopback: + IPModeLoopBackRadioButton.Checked = true; + break; + case IPMode.Any: + IPModeAnyRadioButton.Checked = true; + break; + case IPMode.Specific: + RadioButtonIPSpecific.Checked = true; + break; + } + } + + private void SetPortMode(PortMode value) + { + switch (value) + { + case PortMode.FirstAvailable: + PortModeFirstAvailableRadioButton.Checked = true; + break; + case PortMode.Specific: + PortModeSpecificRadioButton.Checked = true; + break; + } + } + + + + private void SetError(ErrorField field, string value) + { + EnableForm(); + switch (field) + { + case ErrorField.ApplicationPath: + errorProvider1.SetError(ApplicationPathTextBox, value); + break; + case ErrorField.VirtualPath: + errorProvider1.SetError(VirtualPathTextBox, value); + break; + case ErrorField.HostName: + errorProvider1.SetError(HostNameTextBox, value); + break; + case ErrorField.IsAddHost: + errorProvider1.SetError(AddHostEntryCheckBox, value); + break; + case ErrorField.IPAddress: + errorProvider1.SetError(IPSpecificTextBox, value); + break; + case ErrorField.IPAddressAny: + errorProvider1.SetError(IPModeAnyRadioButton, value); + break; + case ErrorField.IPAddressLoopBack: + errorProvider1.SetError(IPModeLoopBackRadioButton, value); + break; + case ErrorField.Port: + errorProvider1.SetError(PortTextBox, value); + break; + case ErrorField.PortRange: + errorProvider1.SetError(PortRangeStartTextBox, value); + errorProvider1.SetError(PortRangeEndTextBox, value); + break; + case ErrorField.PortRangeStart: + errorProvider1.SetError(PortRangeStartTextBox, value); + break; + case ErrorField.PortRangeEnd: + errorProvider1.SetError(PortRangeEndTextBox, value); + break; + case ErrorField.None: + MessageBox.Show(value, "Error"); + break; + } + } + + private void ClearError() + { + errorProvider1.Clear(); + } + + + #endregion + + #region Handlers + + private void BrowsePath(object sender, EventArgs e) + { + BrowsePath(); + } + + private void HideMainForm(object sender, EventArgs e) + { + Close(); + } + + private void LaunchBrowser(object sender, EventArgs e) + { + LaunchBrowser(); + } + + private void LaunchBrowser(object sender, LinkLabelLinkClickedEventArgs e) + { + LaunchBrowser(); + } + + private void ShowHelp(object sender, EventArgs e) + { + ShowHelp(); + } + + private void ShowLog(object sender, EventArgs e) + { + ShowLog(); + } + + private void ShowMainForm(object sender, EventArgs e) + { + ShowMainForm(); + } + + /// + /// Responds to the Start/Stop button + /// + /// + /// + private void StartStop(object sender, EventArgs e) + { + StartStop(); + } + + + private void ExitApp(object sender, EventArgs e) + { + ExitApp(); + } + + private void HostNameChanged(object sender, EventArgs e) + { + HostNameChanged(); + } + + + /// + /// If a timeout value is specifically set and we + /// get a timeout event, just exit the application. + /// This should always be the case, but will be + /// a bit forgiving here and perform a check before + /// dumping. + /// + private void OnTimedOut(object sender, EventArgs e) + { + InvokeStop(); + + if (TimeOut > 0) + { + ExitApp(); + } + else + { + ShowMainForm(); + } + } + + #region Hinky lookin radios that depend on known state. Could be a source of trouble. + + private void RadioButtonIPAny_CheckedChanged(object sender, EventArgs e) + { + IPSpecificTextBox.Enabled = false; + IPV6CheckBox.Enabled = true; + } + + private void RadioButtonIPLoopBack_CheckedChanged(object sender, EventArgs e) + { + IPSpecificTextBox.Enabled = false; + IPV6CheckBox.Enabled = true; + } + + private void RadioButtonIPSpecific_CheckedChanged(object sender, EventArgs e) + { + IPSpecificTextBox.Enabled = true; + IPV6CheckBox.Enabled = false; + IPV6CheckBox.Checked = false; + } + + private void RadioButtonPortFind_CheckedChanged(object sender, EventArgs e) + { + PortTextBox.Enabled = false; + PortRangeEndTextBox.Enabled = true; + PortRangeStartTextBox.Enabled = true; + } + + private void RadioButtonPortSpecific_CheckedChanged(object sender, EventArgs e) + { + PortTextBox.Enabled = true; + PortRangeEndTextBox.Enabled = false; + PortRangeStartTextBox.Enabled = false; + } + #endregion + + #endregion + + + } +} \ No newline at end of file diff --git a/CassiniDev/Views/FormView.resx b/CassiniDev/Views/FormView.resx new file mode 100644 index 000000000..4e1ac2245 --- /dev/null +++ b/CassiniDev/Views/FormView.resx @@ -0,0 +1,290 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 147, 17 + + + The host name to use in place of 'localhost'. +This value must be a valid DNS host name or be present in the local hosts file. +You may check 'Add hosts entry' to add such an entry to the hosts file for the duration of the hosting session. +Adding a hosts entry requires elevated permissions, both upon adding and again upon removal. + + + You may check 'Add hosts entry' to add such an entry to the hosts file for the duration of the hosting session. +Adding a hosts entry requires elevated permissions, both upon adding and again upon removal. + + + The host name to use in place of 'localhost'. +This value must be a valid DNS host name or be present in the local hosts file. +You may check 'Add hosts entry' to add such an entry to the hosts file for the duration of the hosting session. +Adding a hosts entry requires elevated permissions, both upon adding and again upon removal. + + + + 17, 17 + + + 696, 17 + + + 586, 17 + + + + + AAABAAEAMDAAAAAAAACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AA+V+QDGiDAAj7euAHsfFQDsxn4ATuv/AKrZ/gC7iH8AAeL+AJpRSQBJqs4Az8jEAHO+ + /gC3w4gA1axVAPnqygCNTRkAIMXvAK+BVQCVvtkAPqH8APTZpwDXsp8A0en9AK5mKQBpx78A06Z7AKqi + kgBw3/4AqNXFAE/D/gC6wa4Ax5BjAIk1KwBiruMALJXkAAa4+ABDw9gAjs3/AKloXgDGm5MAcKu6AB3n + /wDu7+4A6s5iALbS5gDOlkUAfs7oAKSVYACzb0QAo4Z1AJpLMQCeucEA4bdtAIHBxgC4xdAA48i5ANy2 + iQAhqukAVcHLAL2lfwCzemsAvoRNADLM/QCpgTsA6MqYACmY+wDw370At5dwAF2z/gCoXj0Aqq6kAAjN + +QCPqaAAu3gvAMazlAC+4v8Au5pOANDBogCjVSQAkTodAGLZ/wCV3P4Au6WgAJLJogCqxaEA1KZqAHiz + 1wCgb1IAr6+UAGXo/wDFk30AycSHAHfN+wDUqYsAqcrYAES95QCF2f4AhSwfADjK5gCOxOYAyrV+ALGa + fAC7flkAosCzAGbH/wCRucAAFLf0AJNHPQDCztsAvIZtAF682ADawnUAsohkAKJcTwDH3/IA1KBQAMa7 + ogCZsKoAoWo+APfgrQC4u78A8tWaAMmSUQDLpJwAmEUhAI09MACSzN4A0Jk6AK5vWQCw1/IAy5huANW/ + lwDpwHMAzbBlABjL9ADbvKsAhsT0AKV6bgCod10Asod2ALavqQDqx4cA2K96AKRXLwDIjjwAwZGJAODE + ngCbXDkAunpDAOW+ewDAhmAAcNT/ALJuMgCe0/8AhsS5AKOoogAluecAosrBAALY/QB/xf4AYsPNAMOo + iwC3hVUAppmGADDD7QDgvJcADcD3AL6gdgCW2PQAiLfNAGzq/wC6s7QAorW3AKtlSgCaTkAAwoM3AKqD + ZAC4d04A26xaAM+bWwDHqoIAbLa7AMuchQCsZDMA055IALzNhQC0gS8AV8XZAJ5RKQD45b8AZbn+AKVh + KAC2cCsA16+UAK9xZQC03v8AtX1zALaRdwCdTSIAoFlFAKyPcQBMvOAAsXxDANCgcgDXrYMAkTwkAMGA + LgDMkTIA0KqiAKp2TgC0eGEArqCJAMfk/gB3ws8A0eLyAK14PADp0akAqWsuAMKHVwCtZT8AxoxFAKm8 + pwDitWIAot7+AKhkVgDHxcoAzZ93AMCviwDAjXcAn8G6AJRFNgChVDgAnWZGAATL+wA/xOMA16txAIEm + GgDOnmQAtnM8AMq3mgCxwaYAizMcACSS6AB62/0A5sugALJvTgCqXiUA9N2zAJy6ygCvvK4Alb/BAKpt + RAC4uqUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAH2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABGoPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISEhLUavxz + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyVHCwtyl2tzN/9ikyQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+SGkx9zzuoO1jwd2J3FLRIfwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAADQvxrD0e6oQxdDQ/fbUGL9qkyb3kgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI+pphc7u + 7jtDF/r6wPpDhnHM8kBMmxqS6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAB01WmXsrKTuzdDERHAehcXlTht + IUbRTMMaUX8AAAAAAAAAAAAAAAAAAAAAAAAAAOOS+cNMTNED0oK1wMAREXoX9+gm2E1Mw8PDGlHQ7wAA + AAAAAAAAAAAAAAAAAAAAsX/5GhrDw9ED0jf6F3p6ehER2yGpp3fNwxoaGvm/0O8AAAAAAAAAAAAAAAAA + AADpf1H5+ZvDTNEDtTeQF3p6ehcXRVATqehGwxr5+VFRyfQAAAAAAAAAAAAAAAAAACNSv1GS+RrDTNF2 + N+EGfBd8fHx8fIbt7L5Nm8P5UVHJyX9kAAAAAAAAAAAAAAAA7/R/v8lR+cPD0TDudgYGBgYGBoeHhzuj + 7In/pcMa+VHJf3/QZAAAAAAAAAAAAAAAZNB/v8lRGsPDspHSmJCQBgYGBoeHh5id7Eo4PsMa+VHJf1LQ + NQAAAAAAAAAAAADv0FJ/yVH5GsNMz5N2kAYGBgaHh4eHNzdX7KFlTdoa+flRf1JSymQAAAAAAAAAAABk + 9FJ/yVG6m5fOkwMwmJiYmIeHh4c3NxBeSgpK4EbcGvlRyX9S0AsFAAAAAAAAACNk9FJ/kroaQCLw0dED + dpiYmJiHhzc3tYJyEwqho+alGvlRyX9S9HRkAAAAAAAAAGRkUjWSUTObGhxM0dEDMJiYmJg3N7vS0tI3 + J6EKE+ZGl/lRyX9SUuluAAAAAAAAAO/QNX9/Ufn53UDDTNF2MLU3N7V2MjJCvQO1G6EK7ARGpbpRyX9S + 9PR0BQAAAAAAI2TpUlJ/UVH5hcPDTFh9AwOTA9KT82pniE8QVuwKoSe33GlRyX9/UoDK7wAAAAAA6dD0 + UlJ/UVGZ8ZtMfTvf0QMDAwMD5vUlKw8uvOwKoalbFBozyZJ/UsrKIwAAAAAAC+9SUlJ/UZKF+RrwO8+R + ttGTMAPRPiQWRAI8PUoKCuy4RlEzMzPef8qwgAAAAAAAse9SUn/JUTMz8c7PlRwc7rbR0dHRqllHR8Eg + QaEKCqGfPnm6mTMzSOqwbgAAAAAAbu/00H9/yXC6z92FOxzPzxzfst/wt6zBwcFrU60HLKEmS7O6tLTe + 3t5IbgAAAAAA6WT00FJ/yZkiz5eF5c7OzxwcHBwct2zBwcFrU1xcrVxBDGj+M7TeSEjq6QAAAAAAZLH0 + 0FJ/sN4iz92Z5eUcOxzOzs7Ot68ODg5rmh6trVweX9azM7TnSEjq6QAAAAAA78pSUlJS1ZLlzxzdYM+o + O87Ozs7Ot0kOog5fmh4eHh4eX6/IM5kYSEjq6QAAAAAAZGR09NB/cPhgzxwcqKioqKjOhYWF5VuioqKi + X/b2BGwxX2Zo1N6KSOrq6QAAAAAAZGSAyurKcGnEYBwcz6g7qKgchYUil2iLKKKiY2NjeEZGHTYNyN5w + SOrKIwAAAAAAZO/QPz/V1XDEYM8cHMTOHKioHCKbGkZmKCgoKGNj/XOS/nOKaUhI6up0ZAAAAAAAAO/j + xQkqg13ExGBgHBzOHDvPzt3xm3MVKCgoKFRUgcu/f3+/SEjq6uqxZAAAAAAAAG4/P8Uq57nExMTEYMTO + hYWFIiJAGnP7nJycnFRUq8uWf5KS6kjq6jUjAAAAAAAAACPHxz+UcBgYxMRgqKhghYWFIiKXl3OvnJyc + nJxUVKbrf97qf+rQNTUjAAAAAAAAAAApx8eUxT86isRgYGDEHIUzIiIiIqWenJycnJzi4p5af5I19PRk + NbEjAAAAAAAAAACACQkqxz/nijoYYGAchYWStJkimf5JCAgICAji4q+Nf+p/9PTv6W4AAAAAAAAAAAAA + KQmUlMc/XRiKOhi5XZLJ3pnektUdCAgICAgICGGzNUiw0NDpdAAAAAAAAAAAAAAAIwmUKgnHxxgYxIqK + ikh/f0i6yYNoCMbGxggIxoSzykjVg+Ox7wAAAAAAAAAAAAAAAG4qfgkJx7kYGMRgYBhd53Bpkr/IhMbG + xsbGxsY0jXBdyjUjAAAAAAAAAAAAAAAAAAB005QJCQkYGMRgYLmZ3rBd1dWkL05OTk5OxsaPjtXVdOkA + AAAAAAAAAAAAAAAAAAAAxX4qlJQqGBjEuefV6kg1f0hwOU5OTk5OTk57yIODsQAAAAAAAAAAAAAAAAAA + AAAAAMcqKpSUihgY510/4zU1SPhze9fX19fXTk5vyINuAAAAAAAAAAAAAAAAAAAAAAAAAAApKirTiooY + x8fF48o16rBdDa5v19fX19d1jm4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgkqKn7TCcfFxSnpsXR0xdU/ + jlXk2RkZjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCSp+KgnHP8UpKXR0dMp04z/njo4NLQAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvH036UCZTHx8fjdHTj48qAAAAALQAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAALHFCZSUlAkJKbGA7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD////n//8AAP///8f//wAA///4A/// + AAD//8AB//8AAP//AAA//wAA//wAAB//AAD/8AAAB/8AAP/gAAAD/wAA/8AAAAD/AAD/gAAAAH8AAP8A + AAAAfwAA/gAAAAA/AAD8AAAAAB8AAPwAAAAAHwAA+AAAAAAPAAD4AAAAAAcAAPAAAAAABwAA8AAAAAAH + AADwAAAAAAMAAOAAAAAAAwAA4AAAAAADAADgAAAAAAMAAOAAAAAAAwAA4AAAAAADAADgAAAAAAMAAOAA + AAAAAwAA4AAAAAADAADgAAAAAAMAAOAAAAAAAwAA4AAAAAADAADwAAAAAAMAAPAAAAAABwAA8AAAAAAH + AAD4AAAAAAcAAPgAAAAADwAA/AAAAAAfAAD8AAAAAB8AAP4AAAAAPwAA/wAAAAB/AAD/gAAAAP8AAP/A + AAAB/wAA/+AAAAP/AAD/8AAAB/8AAP/8AAAH/wAA//8AAHf/AAD//+AB//8AAP///////wAA + + + + 346, 17 + + + 441, 17 + + + + AAABAAEAMDAAAAAAAACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AA+V+QDGiDAAj7euAHsfFQDsxn4ATuv/AKrZ/gC7iH8AAeL+AJpRSQBJqs4Az8jEAHO+ + /gC3w4gA1axVAPnqygCNTRkAIMXvAK+BVQCVvtkAPqH8APTZpwDXsp8A0en9AK5mKQBpx78A06Z7AKqi + kgBw3/4AqNXFAE/D/gC6wa4Ax5BjAIk1KwBiruMALJXkAAa4+ABDw9gAjs3/AKloXgDGm5MAcKu6AB3n + /wDu7+4A6s5iALbS5gDOlkUAfs7oAKSVYACzb0QAo4Z1AJpLMQCeucEA4bdtAIHBxgC4xdAA48i5ANy2 + iQAhqukAVcHLAL2lfwCzemsAvoRNADLM/QCpgTsA6MqYACmY+wDw370At5dwAF2z/gCoXj0Aqq6kAAjN + +QCPqaAAu3gvAMazlAC+4v8Au5pOANDBogCjVSQAkTodAGLZ/wCV3P4Au6WgAJLJogCqxaEA1KZqAHiz + 1wCgb1IAr6+UAGXo/wDFk30AycSHAHfN+wDUqYsAqcrYAES95QCF2f4AhSwfADjK5gCOxOYAyrV+ALGa + fAC7flkAosCzAGbH/wCRucAAFLf0AJNHPQDCztsAvIZtAF682ADawnUAsohkAKJcTwDH3/IA1KBQAMa7 + ogCZsKoAoWo+APfgrQC4u78A8tWaAMmSUQDLpJwAmEUhAI09MACSzN4A0Jk6AK5vWQCw1/IAy5huANW/ + lwDpwHMAzbBlABjL9ADbvKsAhsT0AKV6bgCod10Asod2ALavqQDqx4cA2K96AKRXLwDIjjwAwZGJAODE + ngCbXDkAunpDAOW+ewDAhmAAcNT/ALJuMgCe0/8AhsS5AKOoogAluecAosrBAALY/QB/xf4AYsPNAMOo + iwC3hVUAppmGADDD7QDgvJcADcD3AL6gdgCW2PQAiLfNAGzq/wC6s7QAorW3AKtlSgCaTkAAwoM3AKqD + ZAC4d04A26xaAM+bWwDHqoIAbLa7AMuchQCsZDMA055IALzNhQC0gS8AV8XZAJ5RKQD45b8AZbn+AKVh + KAC2cCsA16+UAK9xZQC03v8AtX1zALaRdwCdTSIAoFlFAKyPcQBMvOAAsXxDANCgcgDXrYMAkTwkAMGA + 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 + + + \ No newline at end of file diff --git a/CassiniDev/Views/LogView.Designer.cs b/CassiniDev/Views/LogView.Designer.cs new file mode 100644 index 000000000..d509bab14 --- /dev/null +++ b/CassiniDev/Views/LogView.Designer.cs @@ -0,0 +1,356 @@ +namespace CassiniDev.ServerLog +{ + partial class LogView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogView)); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.scrollLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.listView1 = new System.Windows.Forms.ListView(); + this.TypeHeader = new System.Windows.Forms.ColumnHeader(); + this.CreatedHeader = new System.Windows.Forms.ColumnHeader(); + this.StatusHeader = new System.Windows.Forms.ColumnHeader(); + this.UrlHeader = new System.Windows.Forms.ColumnHeader(); + this.PathTranslatedHeader = new System.Windows.Forms.ColumnHeader(); + this.IdentityHeader = new System.Windows.Forms.ColumnHeader(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.headersRichTextBox = new System.Windows.Forms.RichTextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.exceptionRichTextBox = new System.Windows.Forms.RichTextBox(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.bodyBodyView = new CassiniDev.ServerLog.BodyView(); + this.menuStrip1.SuspendLayout(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.optionsToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(805, 24); + this.menuStrip1.TabIndex = 38; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.clearToolStripMenuItem, + this.toolStripSeparator1, + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // clearToolStripMenuItem + // + this.clearToolStripMenuItem.Name = "clearToolStripMenuItem"; + this.clearToolStripMenuItem.Size = new System.Drawing.Size(99, 22); + this.clearToolStripMenuItem.Text = "&Clear"; + this.clearToolStripMenuItem.Click += new System.EventHandler(this.clearToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(96, 6); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(99, 22); + this.exitToolStripMenuItem.Text = "E&xit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + // + // optionsToolStripMenuItem + // + this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.scrollLogToolStripMenuItem}); + this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; + this.optionsToolStripMenuItem.Size = new System.Drawing.Size(56, 20); + this.optionsToolStripMenuItem.Text = "&Options"; + // + // scrollLogToolStripMenuItem + // + this.scrollLogToolStripMenuItem.Checked = true; + this.scrollLogToolStripMenuItem.CheckOnClick = true; + this.scrollLogToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.scrollLogToolStripMenuItem.Name = "scrollLogToolStripMenuItem"; + this.scrollLogToolStripMenuItem.Size = new System.Drawing.Size(119, 22); + this.scrollLogToolStripMenuItem.Text = "&Scroll Log"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 24); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.listView1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(805, 436); + this.splitContainer1.SplitterDistance = 196; + this.splitContainer1.TabIndex = 39; + // + // listView1 + // + this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.TypeHeader, + this.CreatedHeader, + this.StatusHeader, + this.UrlHeader, + this.PathTranslatedHeader, + this.IdentityHeader}); + this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listView1.FullRowSelect = true; + this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listView1.HideSelection = false; + this.listView1.Location = new System.Drawing.Point(0, 0); + this.listView1.MultiSelect = false; + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(805, 196); + this.listView1.TabIndex = 0; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + this.listView1.SelectedIndexChanged += new System.EventHandler(this.listView1_SelectedIndexChanged); + // + // TypeHeader + // + this.TypeHeader.Text = "Type"; + this.TypeHeader.Width = 80; + // + // CreatedHeader + // + this.CreatedHeader.Text = "Created"; + this.CreatedHeader.Width = 180; + // + // StatusHeader + // + this.StatusHeader.Text = "Status"; + // + // UrlHeader + // + this.UrlHeader.Text = "Url"; + this.UrlHeader.Width = 160; + // + // PathTranslatedHeader + // + this.PathTranslatedHeader.Text = "PathTranslated"; + this.PathTranslatedHeader.Width = 200; + // + // IdentityHeader + // + this.IdentityHeader.Text = "Identity"; + this.IdentityHeader.Width = 100; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.splitContainer3); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.groupBox3); + this.splitContainer2.Size = new System.Drawing.Size(805, 236); + this.splitContainer2.SplitterDistance = 289; + this.splitContainer2.TabIndex = 0; + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.groupBox2); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.groupBox1); + this.splitContainer3.Size = new System.Drawing.Size(289, 236); + this.splitContainer3.SplitterDistance = 172; + this.splitContainer3.TabIndex = 0; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.headersRichTextBox); + this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox2.Location = new System.Drawing.Point(0, 0); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(289, 172); + this.groupBox2.TabIndex = 0; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Headers"; + // + // headersRichTextBox + // + this.headersRichTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.headersRichTextBox.Location = new System.Drawing.Point(3, 16); + this.headersRichTextBox.Name = "headersRichTextBox"; + this.headersRichTextBox.ReadOnly = true; + this.headersRichTextBox.Size = new System.Drawing.Size(283, 153); + this.headersRichTextBox.TabIndex = 45; + this.headersRichTextBox.Text = ""; + this.headersRichTextBox.WordWrap = false; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.exceptionRichTextBox); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(289, 60); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Exception - TODO"; + // + // exceptionRichTextBox + // + this.exceptionRichTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.exceptionRichTextBox.Location = new System.Drawing.Point(3, 16); + this.exceptionRichTextBox.Name = "exceptionRichTextBox"; + this.exceptionRichTextBox.ReadOnly = true; + this.exceptionRichTextBox.Size = new System.Drawing.Size(283, 41); + this.exceptionRichTextBox.TabIndex = 43; + this.exceptionRichTextBox.Text = "This field will contain full exception detail.\nNo more ambiguous HttpExceptions.\n" + + ""; + this.exceptionRichTextBox.WordWrap = false; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.bodyBodyView); + this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox3.Location = new System.Drawing.Point(0, 0); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(512, 236); + this.groupBox3.TabIndex = 0; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Body"; + // + // bodyBodyView + // + this.bodyBodyView.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.bodyBodyView.Dock = System.Windows.Forms.DockStyle.Fill; + this.bodyBodyView.Location = new System.Drawing.Point(3, 16); + this.bodyBodyView.Name = "bodyBodyView"; + this.bodyBodyView.Size = new System.Drawing.Size(506, 217); + this.bodyBodyView.TabIndex = 41; + this.bodyBodyView.Value = null; + // + // LogView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.ClientSize = new System.Drawing.Size(805, 460); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "LogView"; + this.Text = "LogView"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + this.splitContainer3.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem scrollLogToolStripMenuItem; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox3; + private BodyView bodyBodyView; + private System.Windows.Forms.RichTextBox exceptionRichTextBox; + private System.Windows.Forms.RichTextBox headersRichTextBox; + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.ColumnHeader TypeHeader; + private System.Windows.Forms.ColumnHeader CreatedHeader; + private System.Windows.Forms.ColumnHeader StatusHeader; + private System.Windows.Forms.ColumnHeader UrlHeader; + private System.Windows.Forms.ColumnHeader PathTranslatedHeader; + private System.Windows.Forms.ColumnHeader IdentityHeader; + } +} \ No newline at end of file diff --git a/CassiniDev/Views/LogView.cs b/CassiniDev/Views/LogView.cs new file mode 100644 index 000000000..650c844cf --- /dev/null +++ b/CassiniDev/Views/LogView.cs @@ -0,0 +1,137 @@ +// ********************************************************************************** +// CassiniDev - http://cassinidev.codeplex.com +// +// Copyright (c) Sky Sanders. All rights reserved. +// +// This source code is subject to terms and conditions of the Microsoft Public +// License (Ms-PL). A copy of the license can be found in the license.htm file +// included in this distribution. +// +// You must not remove this notice, or any other, from this software. +// +// ********************************************************************************** + +#region + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; + +#endregion + +namespace CassiniDev.ServerLog +{ + /// + /// If log can persist, then only stack values in the list and tag the items with the RowId for querying the db for heavy values. + /// If not, tag the item with the loginfo instance. Memory usage will be much greater but is better than nothing. + /// + public partial class LogView : Form + { + + + + private Server _server; + + public LogView(Server server) + { + InitializeComponent(); + _server = server; + _server.RequestComplete += RequestComplete; + + + InitializeList(); + + base.Text = SR.GetString(SR.WebdevLogViewerNameWithPort, _server.Port); + } + + /// + /// Not sure if these qualify for disposable + /// + /// + protected override void OnClosing(CancelEventArgs e) + { + _server.RequestComplete -= RequestComplete; + _server = null; + + } + + private void AddLogRows(IEnumerable items) + { + listView1.SuspendLayout(); + + foreach (LogInfo item in items) + { + ListViewItem a = new ListViewItem(new[] + { + item.RowType == 0 ? "" : item.RowType == 1 ? "Request" : "Response", + item.Created.ToString(), + item.StatusCode.ToString(), + item.Url, + item.PathTranslated, + item.Identity + }) + { + Tag = item + }; + listView1.Items.Add(a); + } + + if (listView1.Items.Count > 0 && scrollLogToolStripMenuItem.Checked) + { + int lastRow = listView1.Items.Count - 1; + listView1.EnsureVisible(lastRow); + } + listView1.ResumeLayout(); + } + + private void clearToolStripMenuItem_Click(object sender, EventArgs e) + { + InitializeList(); + } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + Close(); + } + + private LogInfo GetSelectedLogItem() + { + object tag = listView1.Items[listView1.SelectedIndices[0]].Tag; + + LogInfo returnValue = (LogInfo)tag; + + return returnValue; + } + + private void InitializeList() + { + listView1.SuspendLayout(); + listView1.Items.Clear(); + listView1.ResumeLayout(); + } + + private void listView1_SelectedIndexChanged(object sender, EventArgs e) + { + if (listView1.SelectedIndices.Count > 0) + { + LogInfo log = GetSelectedLogItem(); + exceptionRichTextBox.Text = log.Exception; + headersRichTextBox.Text = log.Headers; + bodyBodyView.Value = log.Body; + } + else + { + exceptionRichTextBox.Text = ""; + headersRichTextBox.Text = ""; + bodyBodyView.Value = null; + } + } + + private void RequestComplete(object sender, RequestEventArgs e) + { + Invoke(new MethodInvoker(() => AddLogRows(new[] { e.RequestLog, e.ResponseLog }))); + } + + } +} \ No newline at end of file diff --git a/CassiniDev/Views/LogView.resx b/CassiniDev/Views/LogView.resx new file mode 100644 index 000000000..4b40ffd6b --- /dev/null +++ b/CassiniDev/Views/LogView.resx @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 175, 17 + + + 267, 17 + + + + + AAABAAEAMDAAAAAAAACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AA+V+QDGiDAAj7euAHsfFQDsxn4ATuv/AKrZ/gC7iH8AAeL+AJpRSQBJqs4Az8jEAHO+ + /gC3w4gA1axVAPnqygCNTRkAIMXvAK+BVQCVvtkAPqH8APTZpwDXsp8A0en9AK5mKQBpx78A06Z7AKqi + kgBw3/4AqNXFAE/D/gC6wa4Ax5BjAIk1KwBiruMALJXkAAa4+ABDw9gAjs3/AKloXgDGm5MAcKu6AB3n + /wDu7+4A6s5iALbS5gDOlkUAfs7oAKSVYACzb0QAo4Z1AJpLMQCeucEA4bdtAIHBxgC4xdAA48i5ANy2 + iQAhqukAVcHLAL2lfwCzemsAvoRNADLM/QCpgTsA6MqYACmY+wDw370At5dwAF2z/gCoXj0Aqq6kAAjN + +QCPqaAAu3gvAMazlAC+4v8Au5pOANDBogCjVSQAkTodAGLZ/wCV3P4Au6WgAJLJogCqxaEA1KZqAHiz + 1wCgb1IAr6+UAGXo/wDFk30AycSHAHfN+wDUqYsAqcrYAES95QCF2f4AhSwfADjK5gCOxOYAyrV+ALGa + fAC7flkAosCzAGbH/wCRucAAFLf0AJNHPQDCztsAvIZtAF682ADawnUAsohkAKJcTwDH3/IA1KBQAMa7 + ogCZsKoAoWo+APfgrQC4u78A8tWaAMmSUQDLpJwAmEUhAI09MACSzN4A0Jk6AK5vWQCw1/IAy5huANW/ + lwDpwHMAzbBlABjL9ADbvKsAhsT0AKV6bgCod10Asod2ALavqQDqx4cA2K96AKRXLwDIjjwAwZGJAODE + ngCbXDkAunpDAOW+ewDAhmAAcNT/ALJuMgCe0/8AhsS5AKOoogAluecAosrBAALY/QB/xf4AYsPNAMOo + iwC3hVUAppmGADDD7QDgvJcADcD3AL6gdgCW2PQAiLfNAGzq/wC6s7QAorW3AKtlSgCaTkAAwoM3AKqD + ZAC4d04A26xaAM+bWwDHqoIAbLa7AMuchQCsZDMA055IALzNhQC0gS8AV8XZAJ5RKQD45b8AZbn+AKVh + KAC2cCsA16+UAK9xZQC03v8AtX1zALaRdwCdTSIAoFlFAKyPcQBMvOAAsXxDANCgcgDXrYMAkTwkAMGA + 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 + + + \ No newline at end of file diff --git a/CassiniDev/WebDev.WebServer40.exe.config b/CassiniDev/WebDev.WebServer40.exe.config new file mode 100644 index 000000000..600cf2303 --- /dev/null +++ b/CassiniDev/WebDev.WebServer40.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CassiniDev/app.config b/CassiniDev/app.config new file mode 100644 index 000000000..f34808b6b --- /dev/null +++ b/CassiniDev/app.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Content/Black/editor.png b/Content/Black/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..456f9c51871269e844af4beb056bbf8a7376504f GIT binary patch literal 2873 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 literal 0 HcmV?d00001 diff --git a/Content/Black/loading.gif b/Content/Black/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1079b7a965a0956ede6840081a377367f8a3b1c7 GIT binary patch literal 1093 zcmZ?wbhEHb6krfwxXQpV<)~s05bafL0ivynEo&94foQ2>F%ZpB%m$(u~hCt*bplQXSX~>}nM4B9uiX4)X90EWj zz`-HFzyTyV7#M(vf#LuE{~(HDp!lEL&ow02*)hP?NY8+o5on;|PZm~I1`P%skl`S2 zGO#5&OeyHFn%m*A=;90+qv`I;iXwZ0=7uYZXwDV#UiwU+hpW{^$?(>n%=#nqcCa74 z+0iQX`+}3F(=QhhL4IBrb{>8~7l9T|4JHN+7ET^M58gf&Mg~R=w!S2$*>lUCXZt!L z+sXvAlMiTXxWg0!6(OnqHMZ%@3$|;41Uqez(qp8}7hfhOPN-nI~Q(RikH*2N`R=XlVc6pg}cq}~l!($N> z{%hWEmF&FzOCSc<>3cUlF=sqA-Ea?NES? z5ML*o;3QuG-iPc)i`>j^Ih{Fbxg{ZB_MWzNCyQ+wa@wzyRcdX_E(ibhsUEMGd%b#r9_T)IB+tZ=x?9w=-79Sp+SSI((H&fgSSlU zr0hp8pU4RDtoXU7&Ot?}s>F}Cg}1V)R6wA}Pgdh?{FI=wE?~*dlVV)AoE;PR z+!^0BSatEaOMDUF6gYAMK*>C7p0mwL0%2!dPWa< XSq)JE-V&znV3CQOh5YTFjttfSF{3Q9 literal 0 HcmV?d00001 diff --git a/Content/Black/sprite.png b/Content/Black/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..04441f514caf8ca6879ea2180075a112f98f52fb GIT binary patch literal 3660 zcmd^?`9IWc7stPrnQ>3kAVX%1F_syF8OF#yma!!JmL*$bO(l}CZy`*GERjm2LP;fC zmPXPoZn|wDq?u$XS|&?&9{2Nlet4e0;kkY}=k+?*`*Xdn^SYLEF5B6d9fYEw000~` zKW5^vZ|wkpr%Zrv--9X&QT7dzVd~0o3<+RFdSCDdXnr9+{#f&K-lzN>{Js66Lwo$G z0Kf;>SsgcZ4VQU7OZl#&8bKsdsZ>Klnzpt!o`fuhKt@JJii?Z))%-5uZ;mMB{Y41O zlMD(9N={CO!C)PZKpz0Sef!qW&+q#YEi5cDK znN)2hHI%cn^F29Pb#?WUk`g&NoTQ}W&d$z=qj`V=-r2&UrKN?zU}R-wJ>rnwzkl!M z=Js5Tq%MJ4=i%Ag-xU;Up{pw zWU{S|P3E66Q%97EMB=!a-riM!fDq|aS4N>wckbM&QzEprwS7GW#1s(h&tj$lApQZq zy1M!YP2=(7$8Us%XOHT7dU^^72n@Lag@uKwsi_rc^n!`@C=X9YtD@O)(t@?o5&$%t z>P1IKGc?sNJyS#=5E^ng0)e2cto-K98y^!BVPRn`R@%tONKsL-5eDmlLfvt)6Sk&f zaQK{)MMp;m9*_S90Q4AATwEN@f;{VLZKtL-r>DksFr72hU^1D9A&?jhCYel{b2N*2 zBxNNn?d$71MeKIhKA(i@JJ+5N=iyYLrX`8N+2jwC`b18_GD#o85tQw zqH;}5O>J#09#5#OtbFw7(d_JOZfRn_k9?$f7FD=I4J0I(Muo82ReM53CTn^`PY zXt`v3gXG}g;8q;qnk44!?JXf8L7`BJhY3l^$f{qxOkqC(4ueI=O3#DAFLfwv6{U|ls%$7! zQAs|jMkz!>BCQ>(LsorhX3%bTto(!GprGLSe5HsSSq_IIE+)q1a=*G*8oNmT z>N)rm3Gxa{p}ibO>A?8akG{K<1QJf}+T^{-EE8o{G$;;WA3I+j z*&G^jyQ9);uY0`>F)r5VhgCUEb50j!Z?+T#hlNkImc%y1I_By1zmSXUk(B0gzHDw6 z% z)3wa>R`Flquca5FH*QBQ?4-G61y(GhN&?z{HK9Wtus8-d5aE#w4do4GHVLJ#gQtbe z_vxh}+xrn0S2ELY*tTV8nTSsd*}VSGBH0M>WUbel!s&rV=;=wOvFko1HZ2s&H1@;7 zL!qGqC(mohz&8)rh)fGPF^#ENTBT-W;m`p#2n)&mnckgKknoR`8Hkw((RHI0!&F_r z%4!_pF1F|-Sm*IQSptoNSdp6yKKAEKIR*T)NxQB^-_Fz3*OW#_ewpSWM5j_-iAr4O z>g62Eo0d7?WvH%vX#kb;nvm1DBUFkei<7&*r3OYEeHH&9G@IpJiZ1(8_eOgBX1Ts& z+6w<-SR?X>`$fyN$RL={fXaJL0tX#ep2}U)FB==|RY?ullkC2s?m`_DUYC9LhKPIy;&<7S{ zYW{ZN7RRU4W~#Fi>;`^lth;t`0s-@VWX|$GNbKi-Blns(O=$6zmXo-6Q0aK2xC!g8 zFA&i8;FO$MT^_MQib#!yPG8ufU5AKfZ`M1L3>RMB#K4NuMcaq@-A+BJSA!asF4zOd zBQ+y5H6kKAA?krK?loyr5A3Sh1BqOXsw>E!k37N!%~^YuN{Fh#`uh6L_U|a`bWgy_ zLBaQL(^t1L&3Ub-taj3NSFaznD{b4NEkvFoUcX9jXmqb3Ig@cP{D_lT~ILVdWzks{_}fLSk)Y#`x5idF7k(x1JlJrv zxHb=r0byX9=gIEdfF;G;TWw2<%^McNz_0_F9xh3Oo4MW4dfr$z)pL4ov}@+=N=T}v zRMj2$3;6l&@YkJfYqtpkouKFj@4bk;53D^X*W>j5_tO0COZR z6??I>V}VD;^=`aoSeJ7m4rIRV&F@`)MV%CKdo+Kcar{9nrqY_Pw8Tv!T;g6&L`7*R zG{?lpE5|6eTN3f&<98l%4){KzZ~f|6pow9nhidSxe9gZwIlK>^VrM%oV2sD(_ zj9a_#=g#I+s{7Uft9F8bPLn4%lMqvNSZpHA&AqWJxNf||Ic&?JdpU%xNB1WNM$SbW z?h?ZGlx|EmskLE`wZnI2_69yLuk&Yi*zG#pkJyD=D#3$mOVw znZsiRd%Y5{gQ@tf^!S4b*0WnPK>=sxY2c-|=9q-pTvWYwd1kBcUA&5i!SC)uoL$`Zz#U)K$JPqd~WHXGd%94`-XjQ)dqwgWf=P#^ZT5 z26IQu3Q1mQ(bZo$UbL_a&r8AyT3QQHqu*WZN?5m9JFThx9}*_CU(FkvJLdD_2&ZG# zJo#lhR=cv#CFehA)ue(;)p{#`6_%(a?xO!zbBCtnRfv}OM$S8OuGF||-sfGbZaI!S zHF&)bR781j7%JGG#e<7F1j1S8kBZ9A3|CXbZg?e zpD^M*Tuz?!coCa`=1zNr(sjH3NIJUFl4#&}KIF)X{}Gbf?{;k1w79Vxa4w? zqTKnYSBQW4P*xWzc#@9}xi=Ost)~1I_x9GtTio#;>c+*wA%{#C-}+ccR@Yd%_%<=Q z_>!o0V0g(DCUd_{aQ-$~RHL1LJE3;CaPr61C(J9?#1J0A!)J0Zo+{N==CKzhiC1I2 zWn^Vb6L&p4rzRT041M1BL1=8_vH63q*^n*dy1pwvyF&dH8=|`{^h7$Fv(^EZU*DqV oCQ5zdrnC!+{ZI8|a&r$#2G%;)TEbw=f4W4#+|gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Black/treeview-nodes.png b/Content/Black/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Default/editor.png b/Content/Default/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..311414557f9a7191fdcf1985221119f538099bd6 GIT binary patch literal 2877 zcmd^B`#;l-7oSU#2wgPmVlj6KdqRcWZ=nz4X~gr43{5goq^XU^ayOKSGDGe&dtAm` zh78R#=9b7jlxr;I;hSn-ukXL{egAOI`Q@C~dA;7}ea=Y++#KX&ATl5jNY2U8)&m3* zOWTW;q$T$3LfG}?J*OOHhm1mm2Sr8u-$8?{0>cB)P^U2eV6+F?Kk$CU0NM-$k^liN zo^~7wZ006A7uh%n&>2x{-0;y*XyrRDz9v-GM zdTnl$a5$X){(fR^TV6>+M@I*NKrl2k#NtT+mi%Wl*$Rm#<+7};t;fg5{r&yT{0fVz z+8P@hM@L7yy1IZQK}<}HXh#$j6x7?>tD~bcG&EFD#v~+VO-)T%c&0=|M5Lso%+Jpo zSONlppt`#H>C>lPUS7st**-o#7z~C+qbZ!nU-GR@d-`Gz2ByIB^751Cmyjr)*SO!f2gBa_LdZa5~B$?6{t3kx$gHU>$9wCo?y zo7%FnvV0IehR*nV_wG?Bl!b+b+S*!IS63Vk=Ni^tR7$n5xa?xQJ3iu+z^gdnP9*dwP0iW@h+&zDOh*92{gY81nM+3Sb3N1rLSdDM%||@#N|0 z>38qmkr_NgC;yR=5g>*K1w&g}TA-Hr=H}+Cs*%OTMWIlH4Z+XO&RPN}1p_P!gBXvv9L`oov0)siOl2m?`4QslOi5Zz?&4% zS-jh++`^I?HLECx_$dI-BQpfK)qEZR1wzPBQ+(`0Vpwc;6Kmkk-B=n!KqAvv-E4j5 zdsQ`c_8z~7##|1?}k_5G;w(Dcx5hIRKW`+SW;C2uJv1 zCIF_5`w<&Mx(H-lzV_mxcTPzK%>YQJ(1$ixmui??6cSbWcUQ@)YFrvMr-;!v^(8sC z78ODgEwQF%=GffvHuk%`5?TSdoJQjX<4P?T|NS@{E~U^WKj<5)3w0l;}#8JnZ5@ zfYn%A!|WsjDh|5ZCZ&V`x`=t{G1-BE2E9}xJ((%Y%-spE?WPBl$G~7OsPA#y z*kCU=?wpK$tE{SX-7cNyLZK?b_tP|$;0dm zQ~yC7&sb7PjT3vU);-nty+l<|&HYrb)uu@vDEvV3A;E%P@t4(IilIX{<-bKmc!+JM+4UEcLb% z@Wj(b5(}*x0;z^CaJqy66r`|5j>3aI~nk ztWb|V8Lq0u8DWZZ#=XxlzxqCZWPrJ%QCRw+XW+nHrpB|@C))ZB>PIz7#*%{- zWb$PLf|B+L?RN6zG1>%;l-=jP_6*F^u5o0RP{4zfBC;#2FUHI(J#zUqir;pzB)e%}%@+~ei->%^hY)AX_gJ$Cq8 z`4dX^DbvCb9M0|fKPj0O(}+1htx7lWvxQ})`|da~%1-QXYH~f1<5`I{#CYnI5dfIZ zs%}AWk1)sM4QgfepkJg4QLc$S^Tgj^t11}Ze7X7yk97up?;=mb1Pu$dw1#kE4^&iE zYTJdrE=?s$P8%IMzF1sap;YkWy3uu?@%EDuFSXd)5?zf{YJ?;^9;5ikG-BT7%4r;# z(mizh#9Ete0$H={A%7BV66;Be17mSx``rUb*rAANpx@!IdyE=X{G zfK!yCB1Ry4D*H{mtC4$HT`ar1zeH7D?xcs*<`yO$5_ePMOIQGs*8KhOs1NATeW z%%$r0%Z~-*JQ8g=WU6j-S`+de`&bi0A0kGu6r`lpDb(&Wa_{pseueW(y z%LiXV7>PwWXJ*|HD;s6$5DMUPtyPQ-LRYoqXIR+7C+oijDDOWf%}cCWLl;b#U+?(U zxJatEH4M7iWBAqFdO@gWeAdz~CedV7wj>F0I9Q_HKCsj*M_5+mn9!i_=sU*H8RT#t zEbF%Pz!loX2UOIbKo7{mT~lGUoY*mVD}wVg*1Fg|lwWQ%oTY{SSLc?~@sPZT3WDab z>U}x43KRk44?4G;BOm1{*S>n=FDQHD{x0o+Swwt8=kbRN2VGLZo@u%tYFRma;v@i5 zHTN>DvNN+p&zRjdHvP_KgJsX(iBwjCDj5iyO!lU7J^HHLNp8H+ep3%kT{PBIY`A5| z9dlgmy{L0j;>AO+pG0c-&Bi}fO}=Z_$a?=#Sh)4}hc5+kh1LeTav<6Nt=RVJohtAe zUG;Rj+hYiO!l>=6YEn68`opFyu-!5zbxp9NFWqF4xRE-^uqt@Aw}h*oZ`*X{4wsw? zz~A@w_MT^z>B)++??~{)@uv`NGmRhfFbFcy+C63aIzoT^9l`-~_3i!rHtVM@*0TA> zVwxWyJhVIhR}eGNlCOJh?-P5eVu6bZ4XxgPsgj|D!cQ=pv;wuGca**}i+<>B^H|KS zY@{}8`&CV_{;_l4?b0`VH&M}vh@xhk z=i!{^2o!{&QVa@$C@8|FLKdUZxkba&#Vpx;Nw#dvo9Qlgw<~svS+eOru;=Ev{p9=o zeWRif2-c)SI=ldwot+&YAHQFoRuA|HRWI{ab8 zU*t1Vx_0Sb^GqiFFHFjlH9>0QrywJsC`_Q9J6N=hok#$%)1W{X9b8XTo>&|j#wG^Hv$l%1)DD|t?FF^()H^lcD|S;%#M zr*ajr!p9as&f;4ozkYTLd7ljZhw)D=b#t)@ydI0B_%#%bffVI^U^i<*R0L67M8}(t zBm24Pb7WO`M5ch}L!oojB*lHnU7vzrV9aR5r6rm$#pW0G4v|_2E;bkPeT$S3s^;~L5LBV4?$H+n_uLm?;33e_BMMBd)#-)@?4_VoSWlhu<^k|*|mgmKspU3!voAL z1iS4f7!B7l(rC*)+4__E2Ilp#)X$|-!Re`#2RU9t@B5%E!09B-!xj}oH-xJ}zy-Zt z+#^IuzDE;ccxi4sk|bE-bh;)bF)A=$Gn4%NxWh3i7j~ir8JgKnGSaPd`*UP_W&tDh z5a?f0W`27Crr%%5hL_|mO7c!#7vy1e%6p1eLyKLI=Vp@}vXEJv0|n}eavhrOV4S#2 zw~{P}Hik1Y;;5<$tkyK!R5haS(o@1c0W6j&ITphyCQX!x$!MT(VMzD^J*A!_mp>FC zGuRC7(uaS(1xXI5b}kbKqeI?RoEoy)AhQ+n3dnrgnhx3OvV0wBwj^-gKoJ?zSTCMu zilfppFc^%+tL1?}kh()%<-XzI&Q&=Sn#NU+P)va8X*Unz_tT3CdGT3v+U4VC9)ths z>(Q9s81dX_Kp!i??0p-hP#WWmPr&lL&vCxn z?YSw@Bl*%NQdA^NGO5=14x%Jz|b(1bV_#( z2ty2=1DCb#TKCg^|AP0dz0N)#_W82+mvi8{+UgYdAKwQ6fC8kUqJPV}06>s=m*{r7 z&rAK{mKeQMjl2xp?7d)C9(KS>TQ_SvHqgIT4tDx>RVzAOdvXfK}hCsQy7! z&Cbp)EiJuz^(r_xI3*<|S5GG-BqTF4b0Y0qr-~vJ3f0%w$EeEGFi$;ruW_4QjSGOO>viHV7kk&#|rUNSN=5C}wDTYF<;qa-)i+1dGbaZwU4 z&z6>QQ#C3gB4SqmjfaOvcUg(Oy?uOq{IZ={TwI*LzyFT1z0jS#yVqsyiBP!6O zu85Tu!5C@b^i**MYHLaoU!URhP814NUtizc+}z&Y zUR_dD1{Q0xGx{ASIrlzI_ z`ua97n9YrixtW=Txw)Z%ft6eL7Z$Lan`UNa*Voq=0Knt%B_$=Bo0|av0r~m)CMG7Q zr>Fh>{aagG1qB7JuC7N%M~8=pI2^8{qhoY*w56rx_wV0rZEd-^xhpFxS65e(l9F|G zb$NMtgM)*Cfq~iC*^7&dV`F2crl!-=)BF4THa0d33k#Q*mwtYJg@uLT;o*~$lV@jV zMMXuvzP@{Vdp7{k)YP=IvvY88U~X={ySt0UVl4q6BO_ybd;7-Ue|~;`ZEfx3rjp`oUx#?8&`@87={7Z+AmR_EvEIXO8$fBp;&3qvB2RaI5d(a{zFumb=$ zUS6W2qAL*H#`^lPq_`hYXhmAuPd~q&>gpLC^>qWa&9|>>P^gjat~3+lD)`49bjzl^ z)P|yTN?3SvQ)7aXVsB5+p4^LAYwM1x%F&;h9~I;ld|dm!e;Za;z(BPA%86nX#8-6H zmVBY{0fFrmld^kpOPu)QW&Q&AeV^j;y=h! z85=R$T5-jHz`Ue`5E~mw+gdfSk?}?F^V1{C3A@{Tl<1OgH6pfFyxnbI;y>&}@RvM9 zmOtrkTW2F9P<((EdNn};Tv6IuS%mX%7sr1XSE7SZ7*Ex(kzGpIS}lg~Z)0z_BKb>b zk-`GDR)+B(Ku^goxo`EM{AX?~4o}GlXs8Jknb|JLPXb6FU?oy}Rq99g^Clfr-U(XN z_Wm+#r2B0{EB=^UPjG{sbf!Fv=BIKir?c3bY_mZSIXBmr0$pMFV~Ql6Z=Mf`(36%J z5}V@vy6%JX396B$kPucTjZn5pnh_V=ea7!hPZ}Bf_LGKk$CeJm-KJh#5@F43 zrY9r8(49=~vxhIvm&CSb)q!?KPt5Bkl;3@zlM>Bhqd#h z>3w&76#z_Ye!QebT4dnmUCXHk$vivLy1Tk8+D2o7yq`H$O0FY9hl|M-pSw3u z$b1`;$DK#y`DQr981bk7DCT16VAb91B7N^ZmvOfKI~M-Wi`B1a3tCSQxv!aWBdySD zf@b_Yb^Ga*WM`Y8NN@^KXO!*v@atAy*M$GsjxW&^?;*((&)wm?<#ws}D=Ses1Olf|plIEN>bv-UO!v=9)~|oj6%7 z;o{16Iy#?yPR{0vQ=i+WBJWTWWhibAO-qgGxRsGA6(*5xD`vC%2{V_6K@p zIg?U54I#?cx_%Gt>GFx3f83(IQINbty_jGQp5u8hZB);}ME!gSp(_c)>8uh3XjUgC z)4@AbHt~vXFm_CvbK!L=3A=@2hWsYbM0h5YrEdw&S8izL_<| zcxmFTQ=<=51q22@)R8><@NuQx16gFZi64kI^IjSH7V(tCsX~yNKafCti%d;gEBlGYa zAx=M3&);3|Z6#sC*K#{2^%L#Vwv5XZ>QUj%jAsj|`a#X(NVZ{7(ndu%a|*?ZD5{3Z z;i6EDw0ZunX11du;R*-mU>|#6nF=yBzLTb%^5`}Bx|Pj8;M}7}$bO*_R%Qi~#-sz1 z%pmW7&5?}>V$O2U0`ej2-8(jSKEY3%KaXm5g6TSGmx@Dcbgv_V>a!{b^u-bp+7|&$ z)daXtar9)EP+7D!hN451yTq`ZdkhHEF|U`ZIHkz&6_cM=A@hzMukaKM{2ir^nZnLD&&% za-5|=_%|I%#n4SrRAAukETokapynMuPEGic;=;oxb4w$A-X-l0p!484Vv2d*@?VZC zLFezI%<@hg@DJPQwDwZ(6CbK6G$`E(O~oosj3@QBb1*j*!i_z8+Cz1f62(;85**1u z@iJx_{PR>jq1_7YfPwcc>#{RG4UB15ri`Km3CiLgIoW}Wp;IpLXFb_()6j^=3Pt&W zGa4Bs#if*E$dIGJI?7a35>9q1l-asaqA1-_Qsk>48Ezc?ng@}gsBi0pbxD~(ur-yR z`O>gS7#*K)D-D!zF?E0)STpSvpb-dy1%3{^iCvIuMlG#vUdoZ2-99wx1CG~cDJ$_s zMO90_{U}74j+r;LS}GKQtm9ECJm}EKsBd`xrQTi~L#+-3WhZmAy@E3D;-z`rM8)-_ zaz?yr?`(h?zB3W6B9rCrYM38~ym(hREuoi>jTwcCgZ7SaydyK`ynEB4 zLmVM%*k#T8j@0moHk)D-?}lQjkTWN22d|#9BU2>K9VA4ueUNnNPpZMhoSXEiE(A65 zJtK=ajic=k#QD4ZbBTV0HSADP% zUr$T#A7PU;p6zv0!UyN*vqVl|5b54^1$ZXs?4MPZ5;CSj505GcnM_m*;T3|Dba6qo zf*2D0V;PT|t&Cm4Y7@x%inCIAJLn1Q*Ys#jm8e~yCJ)O%Gd1oCXsadWUuA!^kEJcc zC;KwSPB|t>(Gek^_@v5>QPJQGh^|*ggWq}X4ZM9vOy)bXI_v6xvK$2oJ|d#a41mYO zB%a;zlXScM8>+ZiztX-T*wRZ&nbVw2enk@3dXytrMio%KU)NQG-_EcIx;`!A+cm8_ zkO#gDk$t}E5qaBjh<;r&f4HmT*6@%&aPzyVU_&TZTPJ&7XzJ0Zg{%J()!Sd!T|1Wh zI(#=LtKAZ2aw{+ix9hf(3nACVH>g$dq3hj9gdFPP;3kZE4{u5Go2HeJCj2iUdr{NQ zvMlr}kLj(#0r_?D-h3e5dOlKM1sZC(=qqml5YG)zl}@Qr-&}X^Na8Qb)GN5`#pSH^ z@O1Atd&gO??>3s9?uNtWYL7Q%699)WPcq zUq9oIKi|~tZaqUOdatcEx2y}tl$ zn;5lEK2kJ;;(x-fu^aSrzz_Z~vNsbWhzlA0NnNh$d;PJS9Hf-}kChxF3e~nM16zGR zxzlw;pTtJ(dyNsOKG(`hCenB!h-*DB-gJ6(rZ&=?Ed0(gFe!oF**LWIB9XU{p@=?L z!V`y1h?V;gR-?-lR%)Z%(&tDwP6m$2vmxyerKAw}@-Pg>mLsMk8HC&$2;rFF&oF-3 zIUGtv2DJML&f^!4tkSzJHp@#ZC{$jPbSeaWTFMb_65{52?)0a=BVsBR`s;h#z)k>1i)Bt- zw;}ff2ifX|1_w$Q3Nl$DGcGJGBhm6efX9CKlj@?1ZX{z!e?J_Jx-;Qt-QTaNsH kxIIY!7eWC`HzW+eC_8&X)coh>+xG_mscNf~DO-m956CRSIsgCw literal 0 HcmV?d00001 diff --git a/Content/Default/treeview-line.png b/Content/Default/treeview-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b323892dffc685d4767212cd3c15d9623765a70 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!VC=DUpSb7ET0oQ?SPbIiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Default/treeview-nodes.png b/Content/Default/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Forest/editor.png b/Content/Forest/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..a4bf2d17ef570645c072f5186948e6af69a1d329 GIT binary patch literal 2978 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 literal 0 HcmV?d00001 diff --git a/Content/Forest/sprite.png b/Content/Forest/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..87320dd78c8db4acc4b0aa9bd289106477331ff7 GIT binary patch literal 3749 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 Q#xxCBTiC-|%)FBR4RQ-lmH+?% literal 0 HcmV?d00001 diff --git a/Content/Forest/treeview-line.png b/Content/Forest/treeview-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b323892dffc685d4767212cd3c15d9623765a70 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!VC=DUpSb7ET0oQ?SPbIiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Forest/treeview-nodes.png b/Content/Forest/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Hay/editor.png b/Content/Hay/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..0af0168e90740851a7373786a92003bbb21f3860 GIT binary patch literal 2912 zcmd^B`!^GeAD&`qZmZmLnFy2IqRE|@(P+&?3vDiQdoh}OW^5}-#_E~{P6iaKRxGjo^zh(e6mokjuIe65C8y>a6;Il0RW-g zeJ(3{aDV<4c6DoiDUcjINp2AYQY=0y0ATAM;Tr&P3d08mpaby!@sSe&768CO01An5 zV05o1K6c#L*hnpp-rn9`d;4YDQ=7ZC$6ly0^DKj$r!YGz=uLB;(QvPNhj(B99UdMI zEY0LB3i4*Ls7olg8^L=3{NP!GyzZeZeNskY!gxGh!6Yn%qjk535!m7kfk2SWKtn@A z=1PM7O_B12P}lGwT`Zc>!;O!R&(6+vYmqFT^YyRyqcexJ;c=8wPGx1K7yC2{M>*#T zeek-o(ALj=nI$^3zTU%S{H#rb{5h|66A5aYIwY`A6K%GFK zXlu9n?g;h-N=iz$zKn})KoW_hX{vy|t&7NVG(zPw2MU^>r?!ok&(F`Z*h}sn?zXme zRf`dqdw}#xTH=I-6|SR;S3oIYVY^j~&$(RkwRc9_^ZERsL?4$VUc#7_zP>(f8iVcz zY9Rarh9FosY{nGIy$cvSY8ExBN9SHEXv_)>3`E)^g~f!@r(B(HD-EsJX3V&f#~sXV zV49j*HBU*`M@$3)0eBzsU>i>=4#x$Hf{7G{p%We=4-u0Wx)}R}&lgZ=bYc+2r(cf0 zC*aI%;cygO9K)kmf;BEcHUc50$<+^7#2^-(&J}Qobo!c}a|({eXK}c=PPLF8{qUR_ zGgq<&hJ1-(I(Y$wK((%BdiF?7PfRzC6%-8Rl`RBu#<}h-YOI0A z4pw{egXk;0!2IzD8&iWn`t@<1xabjBK+R>rJB}~Qh1}v5(}^JUU524Tid&0=A1k{w zNYszEf7yP=rQ7&7>zT&Ftf=Qwrx9t>&J2#AYqG}uo{VSrvA)?RMia;2^tqhc!t~B6 zIQnvNR~44whYO=+hXFL?^GQ2 zJmx5$p%z8Mp+uvELqtaoNR-Kqil&tVo-(53b->-y#)Tkv+d_oMkyMbddL{)t+TuR< zRE!-W)zFP?8PrdFzVMV+#@->tT>o%HBgJB=@uy1p%YPIyUdI0rJe(c@d6JgLCyhj8 z_VdFca3nvY=+2v1Ms zbiT4y{txr9-RiB>soeMNl>sIS3h7f~{jR)wXX2YnBThK0CP9~W)TE&xk+jzb>*uBO zgvK=6dcvZ6*q?UQW-X${w|injC)cIYP0Ihy4Z+{49G-8!1AvVYkgb_k%zqru-Zirm z{g7=k0{v`L^mFmlnY$nJ9XxVRJsNB%$S22L6oDN2Rn(~E&p<#kA07}oJZ2pe6S&g` z2jizFz3de08YL*-ZT&N(Hs>m_w?XTD<`NP40fuMgazA*VON~1A$nNK=gqPjBx-`RO znXtGtmbKBPr9TB5Uobk=WU!U091QNR`ECZz(v24iy8|QQ-swG zo>LZoP#bHG)aY3jD9Z@Tzu5745x8lWQdm|VpGrCx|H0BpIc#L5)-TO*9BdsUiZV*Q zr)0G;jDMUd^*FyJkJ+T()bfY`KOJDU*-_PBn3EHX*pZ&H(r;^^pb;u_eZpW&)e;<;1ya{SYfHyOnl!KC`SoCrrbVO)|a@h6~pXSsv>13mW|AaqCg)(JNO3OUscIgD4JsVky zO!C>8t&@>C$vGh-Eq5P+ZB0*mL?K6x&4$0$(>jnl;P@|zxL4)bFj;h~@#({IUT3U8 zDXH}DTcV^wya|wA7cc>SbIrhjtFYS_h9>7^bu$Cw2+GItY zj!<{L@RdCJAo{rEi|&b@X6RGiXuxti*q5LYqNH^6vu3pxS;x|Qac*Pa_snkzpyKY% z^x8=ZhIvyskgy=6mOX4*F-1po8)zJ@=;xTm_+9rC@^16dgSW1+cLVp-2}6 z9UeUa*t@Y7xPOUyjt-R$zgN4I@;pskSzIwsR%;iU-slVcC0nGseT)_RpvRkft$ zl*l(ASAC1|jro2>Net>=XvIG5pGaA_nE_1NL$D&PL}wGzKuic$v)E-l#CVm>_Xo~G z6cdlP*sAC3C?p$SJA3K&@#8JrG0!{Lfuh1GE@!)_Pzqbp=q&3l-WF!f0*6c#4nLKE>0UQn9`luTNJf+T5+CF~p%F37?$vh6+nP34r#QcL$v9~-sYro2_ z)160aW6)E2*xQxjEz^ZrJ)S;5lAa+_=J`n_I2y<)`yw#BVB7iqIY&blA?8&XKpB-~L z(lUI6gcU#4>XHEx-}I$4&H&0w!1cxJCx+e9p_xpfzqAWpEYmWE8oX9M5gZiFY@lG= z2UG$)G<2vBD0vSu!w8`ohJ<;0C;8k^GzaY(Wc#X;qCh#pl?KmdX0A$|SNqK;FM9K? zyd4Y~JaADR(6!PF&%Gd?Bw6lLR*Wz4iniF4S0TSjs%zjdWCqsJ~D3=rb*YQkZLyT{X) z2D0})UjM8wEq)_3+xPbGXpJAn*5Nd8;w#Z_XJSQoo4gVm%7_1Hex5zj^xfXU;Zgju zj6UlO+v0Rv_@=z7ao?oL-qGFwb)?P{nDD`u>~yTDEOFt&AB{8Kc#ZdsN_W2`T>g=FYD=Mr{@?-sH*yL|KH zUR^%-{O+Eky+_(R&S(iOQ6z}X&CSy0dTFz?UMjAa){CV=p_DI_a)tGLVLg|Z%jVZJ zIk{A>n8_7WS-E6JZZT7wPsz2s zH7Bq9Y(6@h=W)J&E*G22P0h;jv$-hF^<#PErsdd}oIjTH;A|9U`=_(qw7jx0Ic_TJ zpUQfsvUXmMiDlSWhKptVQyF$Dp) zb)0mcwD-#~{mD8`j^P%iw5(j6e^Kk7*LvpFo;kH$YF17B?~B=_BcZ{8p2NpOEiN~y zkRHf9S5XuJgj0UFJSL(Xor5@nLoO^}&mMzLM6XXmHKib-k`^uwhkzhJMJ?dT4?aZ7 zcizRppjeiSPn=93sthK_f^53JT%+NK*p74qeG>*(((hGZpHK8(z+79a7k8WVKgJJx zoel{2!DKY(g_b9F8)JrA;~ksz*&Y0MLaEr!b#BWwc~){wjE@bAGcXhhMPP?ooB$Sr zA@Gta<;-BmJR+_TLR-72x{CO40x1{xkuL92jpEDEaEo(EM}7xf%Tk;oakEWyl?j1n z>pkSwY4YfRjcEkeUZ|pJjbMFjsx|1Om%eQ>ZrsLyCEnZ)^~M%zf|pSI=^;@#A7x2h^=%`HsR7yiS$p7QC{$3@nS)lsF#zLPM6}@ksC|R9z-Hs;eRN+apA&KuJ9NHFWpsA9v9U zVcU&*YioD|y%LHGxc7_b6bF`uS`)Zj!l_Jvh z0@<74RToWN?{a+WZlK8PoHGYIzrGIMR;*HrV{HOW5-L0vZ2uW)RMI~)JPbW-N4uc> zr8N`^O8R?$KEJ1aIIUN2_g%%eXk0*|b-J4@B0A9t^);0`Fqwpl^%RuT63%Fx*-4VP zM!z5^6ymN=P>VK!F2SKa6miXMHaEHqij{<)xq11@HLzK+IV27=zaI(p;SsOHflu^F zjFW@lYjr-vkGF6VevRFDwuUyODatI(zs`o2tS-02I%sXE7g66qsL@aw(CLJWIs&9q zLS3;iBOMK88k!b}&v11TO$;ZHwgx80BcZhAlK$*iXeF`Na07<>((zg&4zgnJZXt62 ld-R&E(TtBtn*?DF>{g~xV2eKaq_8n-zSgH}_=U_m_z(3bFIWHo literal 0 HcmV?d00001 diff --git a/Content/Hay/sprite.png b/Content/Hay/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..541526baf17746a8ab2a9b32aba6fb0ea0de135d GIT binary patch literal 3719 zcmd^>`8O2)_s3_(+l)PAiI7UjGS--;5t1$55t6lRgR*96ge)U($y$lAWeeGbu{4IU zuR}wjnP@CS_9@FyGN1XJ&oAHaIiLUF^ZMo9bMJlL`#R^foJXSNO=DgzaV`J=z-wx9 z-HK%`0RUhj2OG=dQs7r-8L<#UyAbOD&k&Sr5E7v85#WZDHuZD$LRukRJsv+CLLvYF zHh`tMjp4+^1f5RLod_ZliTU~YQ&Uqe0Dy0rr7{Y#zcYcyx$YGJATly?b#*nhB6NO!zPPw})c{uKps>-8Wkv!l8^Cvaz$><9_IPk`aByPk zsoB|C86^Aa+SKOeW?S=XRLE^)HP417R6UlXySsaEq|~T@lL-JE9UTo153gg($Ye6b z?bh$#ztCtjCL^e|wN>1T4XGw>Q4e{ZfE@6-!VC{@XlSszt+}%LX+}Y|xw&~6p~gI3 zr!AA-uQiDIS$s_?Id`b(V+1UBYIh8)$_%=PvFfY>PK&lB%Mx)4O6lci7P=$oV2 z^)X@D&ZMy#hvriOzGfDY9MiMiS+8Z&)6+d43SdxYo?1$!C;NQ0)SIJx7_wCOBXv5} zQbsF@lQe^4azF@%m%Ka-8s+7J11)yZsEJ!jX!tqSS-ZHnST}=5i0?j6VHauRTidg? zZQvh2=GQmK3E@B?d zx!%=TULh^eh*zJp|5k@Gk9YS&eO&4|UGEvMe;=r?Np5!G2Z zQ!6B@&vg1zEe-`%mQu9<=J)e zlc2XnXx|dPxT5>7U-%79G&r_{hd(t@7e;U$88_d9nM~G=1HiqCKe1j9AjImXH7oMJ zya3h=$OYCHB4B!5-zJQ_@s-mlmnI3JC;ZdO-^hPb#BD{L3nXX+;@|{v`xNR?Na{Sz zk|3QgWMM~;RPL06pO3Ivjn+ek4r+Whfs(7~w9k*-Tk|a6dK2vKsQoB(WPPXo&fKd& zM8nkhPL}M^oc7^QiS6GqD)Z+H)kLMGft)6KAi?yQzhwTu3p1z}41QsH_Wwkw>)cUN z!Li#eP`dIcdq+$gK~7cl0J;o1)8j-vjp2?IWF=jpfftrR+ucsoTchlmu24G5M6pV} zR7GKFZ5;m|78pyYbA!@_N7YcEmBjD9*^Gr4rJ*m{+q9&^T=i=1YPV3#wi&?Ll+PC=sCwa)i2rrD0#D26c2Gt> ze&SuT2K%W@?u(1Ng}!($MfScecJOL0ujX5}jo{PX@E+Xul4$_3;sXeiHvB-ga4)}@-*0dR z)l7}=Kei4H4aI9pCJkIXM%}YPboj|qFZjPWmC`R2HIGl=F7Q5Z?y5ByC%u0B zD7NV;D^t*Lygk}1E6;WLSMFTn+;NoWk$5{kBpLpw+Ot6W1>Ne0`v5}jwxhQc@6A@H z+C=FV5|80k;{Y)ju7>IFKMwGnKM4CfMf+w~-H(SiB;Ohj$ZBY4$i>%`SS|%=E>3}d zIQ0wG*Qsq4+zIB1dv#$t>zNj$XmHuPpYW>eyY;U1t!B5xlXCB18+FqL`LH4q((YvT zg_oNrk46Le1OsA){ob0(o}iUdvj#jW4{#zdIOgJ)t8n>j9~+9f%Aa2?_3`oXM@ph1 z;hHCM+usk!P+XULf&L@2f6CBvK#qR5`p(4GmhO{D_v1XXgsx``N8owA4UD375nE&3 z&q5>3sE<^`@HU>HfDa>bjic zZ6B;jJ@N6E#CSO~u_vT; z>r+S8pjnL8yJ^m5*O9jsbPEgr%t>)J(qfxD>~6D4c5lpD z2VNP3mvs(p82s^pl!}xnXK#j|Rn*^&oRKPA)Yps}+9;v!P(u6q_4r<~2`zHka|Uga zUN%%%xeV|_&e#)Jh2h9ODo6r8UlthBGEnTApX;2`-w>;fBwYiN<*@d(N_+()w4AMYxN3i<77H9ce#wR=;fch&X|ReVaX^ zdg`=(b{1ixxyu=z99&sd3Z0X0PGhtmxIFN8mv0(SqNr(=eU4pH=60w#;;pPi#OZ&M z{=OoHhTchkbU)_yCrVCS>7Y`=sXBp|bavK@*E+HC8i}GtjE{(YHAy-eLznA_p~kvIB<* zE|%_@Bm?jOk3%DmzG#knmf6xy`!6L8cQ?#@Eb)-cW-_NFKu-ZIgmGeek}?)1ZE9AC zbfnFXLZM9)_R6D~%i&8f87h<47gzGAv~hnqWe3<-AmLvf3diAazxP#c0edudMU+3J zh-%;64B?Y(Tb?VrI^di&tiNwDbHF?(I7{RSbKjGPGJl#*8Wrw3~ktR+{Wh)-=XhfOU;6~;H5q9@Z z;C*h?=Z)70ru5G8%6IE2r z^k+k}txJ0N4(y)nGEO()no6cV;}1mC46nAoGYj1ptnf(*g$IVUBC__rOOE4aRiMYY zdsJ+tRQocQJr)6!kdlh>$*IR~NHN5#97o)HFRe+PIJeDKOho!z+xq;n=wyTmPkdRf zP+QAESvm#(+Tvu|-@^#;V+2F9Fo$tu%V3LqGnyxn5$4Rna~~ZPFkn^n8yP-1wIpNV z>3Ks37FCpf`*cRw?q^$uO6}X#0^Q$Pf1}^gTia~e&Xku*IWKj1K_(}>?o{npjtq|{ zgAZDLDOkwJOn{b--rN|A9F)BK`EphnU2xRa*Idjm{_1E#ICu4lZgRbA&;BN5y6#@* zgU^-3T*oO9lG_LrHPI+~Ba2y11;?hjL+O5_>{Be5;a~1P5p^;+)>u`v q6%;%VVJ7?sjsC-7UU%y_RRMcc`1|u$P{}M_2ACS&yk2|F1^q7=Ps%<3 literal 0 HcmV?d00001 diff --git a/Content/Hay/treeview-line.png b/Content/Hay/treeview-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b323892dffc685d4767212cd3c15d9623765a70 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!VC=DUpSb7ET0oQ?SPbIiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Hay/treeview-nodes.png b/Content/Hay/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Images/img01.jpg b/Content/Images/img01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9987db9f0d82ce5a1e9abf79cdbb41ad805b4432 GIT binary patch literal 1714 zcmaJ<2{e>z82)DdnK808p+@$o+|Wi!r7@AUEF;rZ*^MlXHPtY(BoZn*lD8`@6T}bnbEP^S$Ri?|Gm1`M&48=M#1b-+`4DCgvspfds$< zK0r7MaK<6-zBGUUC;-4wxHS$Wi5~uL6yQ-0cMw7@hyjQtAmIv$gfpD}1%!lPzzMYo z2>lO47J*&Dq8y$^Ll9a7jY9vzERFnsA*=^DEKmc95CR8~I0S@42pd2yY#V__z&4j4 zia??;STq7AP|&Z8C=w%rg-~e3N`P4Oi^Pciq!9oK;ZT@WXc5(I(z3+BbviOwTi4wE zr05i*j@4v5{2+WOEXDp*!0W?7swgyO+bR*F?KHGsiF9_$3Y%mn#eP1mVU+AVw;>{USpEkZUIM47wb@W6O z_UpFm^j^C{Q&y~Q+-}g);!CSzT9&`%#*dub)X= zsD1M}#0_Vb3h#5b*lcrO_n@a?lk&uX_-55I{(Zg()0dy8c`KXpdTxD{WPhh$VrNny z)9;g#OJq*1#VW%RSWwVVR?}@(=hiic?!EG{_$j!JSV@Zm`X&+>SU0aX)h_)wp|aY@*IpMlU9@_+Ys?9 zja%vC7PCjEj#l4xG)Lj~V+XP6maW-dW-%B48(B0Vzy}J!TsUv0J3`SU;)m18{wbYv zna(|#{yzqM`=7E#B6w+*U%eXx8r9n=VYN05Z67J8(zJb#z9O0HO#{iHKxZMi5w@vq z4Sn3(o~WM222lLQ=k=29niZ4bm5R~DPE8vD2)#BltZvQW?sI)g{qyW;-xtxG73F-@ zx>HU-B1An4@8)^qSeG=3*A*grS*zcO-P~MIAob~ z*o`sfc=@L1bP_bBNMC<_UlF@RPYwMf>G*7vVP1TFn@uGby3adlN`0ayXe!~cIs^$# zS%V%Kc7>)pVv^-WM>*5V4(jQ%BWKKl!sMylZ9#mckqXj_hHu#q+|XtRN>Il|q{&(w z-O%`lTgJ5=rry}wlmQT68;P29x6%qEr~rvEN|VQOzqS2~_#^+8Nr?mvZvM%8ZyD~z zdEThMf;ywLtP0#3JHqSIbVm53(qlE$p|ayF%$lpKq3!^Uk+4f;ri?`F_0xhLT9OpG z=2|sYgA-R5o~EoSLtrK5hg@(tA&}|%@UhyNT0?1%dPqrpRWFE@;)dlY#2pB|`kS-$ z0c&#gvDCiZM&4D-H}|@Nd8-|4D(AE;9t@4Ckm}0tCQW@i*;-$kyDO;UTbM0kXoGji zZQ~o*qa2sXVYxxNJNr3%aMmx;kdJuP9Na+B9WPxkfS5jEw?Upv)=DEQ&L-d>5l|E=q7a2wC^WUzJ-R)A4#8{BuK@LwO3f&*)0UweS(RK zy8bEU--BsN6XUh)d4GarMBdOsfwuPrkBf8?-1TqfJ7NAfkvU9$6gMO=nD1LV$w@Kg zy&h;}l8e;HMZ1~SR+m#}PT57d)kc>U?eTVgb5L_`>v-}|P!=a^pLPG0e5WeP%4E^y If*|bv8+A3oLjV8( literal 0 HcmV?d00001 diff --git a/Content/Images/img02.jpg b/Content/Images/img02.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5200d6e17b8f9f13b7cbf11c7b22278e85d0c153 GIT binary patch literal 772 zcmex=>$7a2O#Z0)vV0Stn92TtVl9& zCHNWt4=@OFFeoz!F*6D>FbOg;3o`yc!myBmfr*(B=t>0OWMbxEXJlYP6X#^+U}5KC z5?}y&lY@gFp`MY6Sy0hXh(&}|G%-jx#FR~p-LY_?kyBAqaIwl1GdB(iL7?xMIhc5P zVHPnm2r@A%8af6h3JHs_uoX5s1r-@jHenTI=a5)vw8%L)xwu)yCB#)s^8YOc9-#Y} z1epaH>={B2uP^DnZgP+BWvOz+hQ-v7x8I_jG^dpFxeB+qWN9RutP(O@ zRGs$j`KntV7ud7=HN5C?+%0+Cq3iJ#fe%yK&b>Zca!Fd_#;?{}>wR9moAkz4O3~op zG)a{mA68D0>PX})_*Z=WjN9MC1s>}o9~3>{6h5f7{mOg$lb28b(f2xX=#S$U**&-A z`uy9UY&DyBu`6^1lc;H#^`hrbtt;*%i>q=iw0*nlTgc7!*9&KdYPSWoGB`1`Fmmzj zy3M=e^EuUNk)A8Bhonqds;S{~=A4p}rjN6njYYue_Y+>PYw}cWVANEZ*|21N!NWbj z4_}}Ri5Whw(`mH&iiWM-JsY1MLKNze})YQm(Tj=&UW7FXjYBEmu=tQ z=Kp!0x;f|C+B}I@tFm=#r|tQscXRHR?|Gh4W-oR5EkiTYukQZvSWB zgnOF~?5gP57Q1$`?EK*NxJTKSR-4~FuX|l!=9D8Dj|~eW-~A2!wLR2h>I+BDY3u*r F1OR=c_9_4X literal 0 HcmV?d00001 diff --git a/Content/Images/img03.jpg b/Content/Images/img03.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a8019fbd345496a39d4802f03d2bfb1a762af67 GIT binary patch literal 8156 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 l-e<IB3v#5(Rk7KL8G|+!_D? literal 0 HcmV?d00001 diff --git a/Content/Images/img07.jpg b/Content/Images/img07.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64f983548ee2d339197ceb5821bd3c3a2b042fb5 GIT binary patch literal 6462 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 literal 0 HcmV?d00001 diff --git a/Content/Office2007/editor.png b/Content/Office2007/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb258c4ff36c3570eb20b12af932ffd83d51509 GIT binary patch literal 5132 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 literal 0 HcmV?d00001 diff --git a/Content/Office2007/treeview-line.png b/Content/Office2007/treeview-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b323892dffc685d4767212cd3c15d9623765a70 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!VC=DUpSb7ET0oQ?SPbIiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Office2007/treeview-nodes.png b/Content/Office2007/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Outlook/editor.png b/Content/Outlook/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..2f88b4a47aeb49c09fad94b872b2728676f6aa96 GIT binary patch literal 2969 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 dHDJ#UEXiL37wvq!%bw>CM007`J(ARm) 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 literal 0 HcmV?d00001 diff --git a/Content/Outlook/treeview-line.png b/Content/Outlook/treeview-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b323892dffc685d4767212cd3c15d9623765a70 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!VC=DUpSb7ET0oQ?SPbIiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Outlook/treeview-nodes.png b/Content/Outlook/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Simple/editor.png b/Content/Simple/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..bea6d33a0ff8c7c1b85504e3ee34c0b0b8ce34ce GIT binary patch literal 2927 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 Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Simple/treeview-nodes.png b/Content/Simple/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Sitefinity/editor.png b/Content/Sitefinity/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..57a0ca9177256da530290589e1ab9043ae41c544 GIT binary patch literal 2806 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 literal 0 HcmV?d00001 diff --git a/Content/Sitefinity/loading.gif b/Content/Sitefinity/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c4d61eb1ebddd4b963a82224e99db35823a8e32 GIT binary patch literal 1282 zcmZ{jZA?>F7{_mI!Cs2DUEd&ZNojZc22v?qcYv8?+$wOj@i6XyEj_pX0f@WrLL&W6~$fbrqCU+xmZeF5!@9ibVP6mTaEUJ z(Lv)5y3o#IwA1=3T5k^;t6225pwi}L&~I*TLjSXrn}Tvn#UY~TfF;k6%jGb~lrMP+ z2@rsGvsc(}LW!S!8?J2{#yTifNgf~bn|?lSgYwn8YL3fiR+8JoXNxjLpN#+HZ_{`Idy>t->ZZ>p=`UksPDHh}rSqEa}K?3VXxQ6Pa~J~i+@ zDiQ(#>>Cx{^bt48w-sO(yx;`SAQA#OW7s#&f9~cXAA#G@7<@H zQ?vCx*37w4D|9!g7*>dECN&yU4>WAEK?4X>VG>RqU>8|{{L_1|90 z_fPfFJkK|dFDg2@&3jjyTR^K5uO=lYsWb_NN(C?}MgX7ehWn&vk~olc03ZmD3kH2~ z!l;kr@wR3leANwX22J*>9gDv`ou9*e+8;vp>3n;RD!}!uWL>Tfym*;h(Bp5c%nJK2 zlx#@SIyK*4cZ?s#HcYsr^-MFtPdo?odIIs0=3G*WB=Sh3DR{n*3&hEX6cK`VB?;yP zVh4?5A_1w4Yq$#`n}8=1YA z1;+JSWWRcBQOhbUmoW0FFx>4`IdCd@{w*OIlh#*ky*$;x`u7EWhS)O zgmnk^`qB8lH9qgpY)md^9)udTsqKwaN(w1!q4KnpR;|#JCWAsj>XiDh88>JKsS%KC zBE~{{!l8-ASG@plnap}tVmP0Xz-*bAzxRGl(aqI7@yNWAzmiy9g7q9&g;uY(AJM3; z)u_6jqvaaVKk?((#W#h*T)npe6?uTKftfopcaPOYnN3}IPPSY|_7NrnU`A2iU@)i^ TAR{%HrBO@<3FVhm5%ku-ZEmSR literal 0 HcmV?d00001 diff --git a/Content/Sitefinity/sprite.png b/Content/Sitefinity/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..24a4b0f3784af4ead13b6245cfd62187616ad324 GIT binary patch literal 3046 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 H5$JydRPwT< literal 0 HcmV?d00001 diff --git a/Content/Sitefinity/treeview-line.png b/Content/Sitefinity/treeview-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b323892dffc685d4767212cd3c15d9623765a70 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!VC=DUpSb7ET0oQ?SPbIiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Sitefinity/treeview-nodes.png b/Content/Sitefinity/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Sunset/editor.png b/Content/Sunset/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..3bdf9d60712aca2a3ccf9bc0e4ebff30a82ba4fd GIT binary patch literal 2958 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 literal 0 HcmV?d00001 diff --git a/Content/Sunset/treeview-line.png b/Content/Sunset/treeview-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b323892dffc685d4767212cd3c15d9623765a70 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!VC=DUpSb7ET0oQ?SPbIiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Sunset/treeview-nodes.png b/Content/Sunset/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Telerik/editor.png b/Content/Telerik/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..239e092e69d590135698e88754cd63342bf709c6 GIT binary patch literal 2842 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 literal 0 HcmV?d00001 diff --git a/Content/Telerik/loading.gif b/Content/Telerik/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..23580e300ac4357f6ca7df95fa46faff1c7f841c GIT binary patch literal 1202 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 literal 0 HcmV?d00001 diff --git a/Content/Telerik/treeview-line.png b/Content/Telerik/treeview-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b323892dffc685d4767212cd3c15d9623765a70 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!VC=DUpSb7ET0oQ?SPbIiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Telerik/treeview-nodes.png b/Content/Telerik/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Vista/editor.png b/Content/Vista/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..c66c631ff1a7eb4d24d1385b10301eab49142c56 GIT binary patch literal 2906 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 literal 0 HcmV?d00001 diff --git a/Content/Web20/editor.png b/Content/Web20/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..23d13e030cc24268aeb5d1b57250ffe42e33f5b7 GIT binary patch literal 2984 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 Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/Web20/treeview-nodes.png b/Content/Web20/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/WebBlue/editor.png b/Content/WebBlue/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..fdc2239ebae16e326d5c53027ef8c1e0e0b528ce GIT binary patch literal 2998 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 literal 0 HcmV?d00001 diff --git a/Content/WebBlue/loading.gif b/Content/WebBlue/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ed7d0c53b1b1fd8b4e2f66014cac225a7c1e371 GIT binary patch literal 835 zcmZ?wbhEHb6krfwIKseS*t6EKWvOAy9K-54njkbqv$#jIc#39rk7jm@A_!G0CIeBi zViXW%D+VP?f>4yCSCFJvl%!LTq?4Bb5Lp3{)Bpef8Bl@Ze{Mh5kYH!W09PYD17=2` ztm01=R#pZn1|5(}kTV!qeHWZuuOS-Ndg5{o z<=(teB6iNyY?sFwTMkVze0PhB5n(C=0~^rQTtHLp7fefy%ACib(Dx*B*-O>S=1|Mte%ZmvWN0)EXLvkqt+@($n z)Y4{}b!1e`ngUW6vWT!GP@PLEZ1sDLgN++&JP17*Ve07v>(UX0v#Cj+G?b{-l z(k^5xcQi2hrAL-TKwI!+4KkV%i`~7apK}A zTOys>WVCFW3c~}_O%WzRnpdlKrYv8dC(gYr%_#6yf(R4HwVY@v%^7IuEQ1Lek~3Vb zm>Rb6t(~~QKxh89Llbu1IB_iFLCcaw*()m@W-RG2VG<2oH)U0Z(Zwj8DBovAjNyil Oy)7nl?w+p5U=0AX!4;hV literal 0 HcmV?d00001 diff --git a/Content/WebBlue/sprite.png b/Content/WebBlue/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..c144ae14be7c0ed6adf25b8b2edc5dd69e355251 GIT binary patch literal 3616 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 literal 0 HcmV?d00001 diff --git a/Content/WebBlue/treeview-line.png b/Content/WebBlue/treeview-line.png new file mode 100644 index 0000000000000000000000000000000000000000..5b323892dffc685d4767212cd3c15d9623765a70 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^!VC=DUpSb7ET0oQ?SPbIiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-gsAB^V_~neL#w-B*-uLKf}}Q23|nkRZkbk zkcwMxP95ZAVBlaj-2MMj(~rx7MeBotZfaFN`)kqncxa&=D_JENn7Z#Oubr{sGth$! Mp00i_>zopr03UysrT_o{ literal 0 HcmV?d00001 diff --git a/Content/WebBlue/treeview-nodes.png b/Content/WebBlue/treeview-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..f498056630bde2eb861d2d5cc257e92582bc5436 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te3?x6cUONe-BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%aR&H=xTd6}q^70vjS4gB|(0{|Nk>wKgH_^uT7z226kuFjgi zNjpK@+D6T~>`m0oyHmqkw~F!c@x6O%TlPlm@ub+q-7?kFcV3>kDS5f^!v_x@TzfEY zu6Fu=&wfsJ_Ul68Z*JsfPJeS_ruEH}eX*C%*|175?2wPs>zddm2y_mEr>mdKI;Vst E0JchFCIA2c literal 0 HcmV?d00001 diff --git a/Content/Windows7/editor.png b/Content/Windows7/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..18f9f0dce256fbf40d55a46c5ad60ada7103639a GIT binary patch literal 2913 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 literal 0 HcmV?d00001 diff --git a/Content/Windows7/loading.gif b/Content/Windows7/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..c5463250e5709fc153e305742539ac5a8dc0b609 GIT binary patch literal 2076 zcmd^<|4$p|9mfxB!h<2sV;2%XsY&kvlX5^)8TSxGMokQ}2Ox5a85MNvHwz)6=X7NgYNBsxLANNc1`?3+^hmdOe@FKF_mF`<#0YK>`y0AqbrLGfr#DpsdnVDg)DLoXVh7no6c& zDut72oXk*(G}NxiB+eEIlt??&6ijGJQ`sVc)U-oMLNx)^BvR5?Ndh$iR23;IRFV!k z2^EEs6O^n1Ma6Ow%L$+;SXPmoa!3h>q(V7KNh&2JpsYYyMp6n(2`s5tQXFCeWnG0* z3Q01Q5|pT7QF8@K5*8ICCV?a)QAMKc5EM#Ku#kYFLf&>M{5s{%F z;fP8_WE@d|AcE{wt0fdsVOA21$P}-+h)%DpM(Ag^z+cq0zZd6 znrmW^heICCS?J-Rhl3slcovFV*O4!ZST3(-0$u@ zU+H6iG9Czyo67a2r0@O9`Ev#xL6D)(`hZFQPA-6jIw4eA+fFnGxEWocxo%)LZun4_ zXSQ|t?Z2Jx-Uw2B09jpfqc{Kg*RCHeSerd?A^b$UrLd(TdZFszWO1x){+XkIKD<2e z*=#fUg?0Zjz@=w(UoUhyp-~R~=&G~Jb7pv~=0#z~;^)QDOL3cToLaxNB??K>%70Gw z=jEB!9coT_=Jca&TTTsq)Z^V`iib`rf5P)GP3iwyUj#M+9DD%y>tKa8 z#p9F9(+B5z&hJc3O4EmGnxk-^SEy`Fg<^X3#fDDvtzq4^q2k`oE&eDMGM@a(e$H~P z>;3&>^gr+X!q)WeJqr`OJ$xx17@4LP`!`1`1GbZ9JvNz9Em`!BNxgdpc^Bq9jjOTW zfccwuyENo?_WyjP^8;yh<@KDLjp$+z=$b#YWi$3JKfdOo&xcFfE!79Dg7O`AnGGJS zd8X^S3;X>4tP`jKb{~lc(*>WJCe!|pj7!H-!y?mm3 zJ@5Ngr>lFQ;v8ixIegJ5zG){nB72x?>}+;BuF@rj;9Sp@wiL7b?L#xq30kgwRa&m2 zKpFF_muR_e9`Z&<*g2}^vD4l$;&$?QoKVZdc>*TrIJSW@nO6=&jM&7M8}z3_*05`iDx^dU|r= zOSi@GRh5n&D}9)2!8iVvQ`uZAuVmNur9qEx@rAcThHW>QlDp##!Kv`zsI$sk9(~LH zL)%|Wi|#;qL2d1x^`(k_-6z)u|LudNd+ncydyaU;vls1S?^(7t?<;yEw`qjDx0XBi zNU8DsiSb#&T?EZ_r0=8I?vU|!J1R%W8*ZIGY_brfYbG~u#7r!1rQFwxbh*TL{|Elc Bh)@6k literal 0 HcmV?d00001 diff --git a/Content/Windows7/sprite.png b/Content/Windows7/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..27049258a2ca02a9e3581d3a84291a265d3dc78e GIT binary patch literal 3203 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 tG#_^*qQO7U-e0%xUyR8U-aFL_#JdIjCef2*yZ c.Add(It.IsAny()), Times.Once()); } - [Test] + [Test] + [Row(0)] + [Row(1)] + [Row(2)] + [Row(3)] + public void register_series_with_match(int matchPosition) + { + TvdbSeries fakeSeries = Builder.CreateNew().With(f => f.SeriesName = "The Simpsons").Build(); + var fakeSearch = Builder.CreateListOfSize(4).Build(); + fakeSearch[matchPosition].Id = fakeSeries.Id; + fakeSearch[matchPosition].SeriesName = fakeSeries.SeriesName; + + + //Arrange + var moqData = new Mock(); + var moqTvdb = new Mock(); + + moqData.Setup(f => f.Exists(c => c.TvdbId == It.IsAny())).Returns(false); + + moqTvdb.Setup(f => f.SearchSeries(It.IsAny())).Returns(fakeSearch); + moqTvdb.Setup(f => f.GetSeries(fakeSeries.Id, It.IsAny())).Returns(fakeSeries); + + var kernel = new MockingKernel(); + kernel.Bind().ToConstant(moqData.Object); + kernel.Bind().ToConstant(moqTvdb.Object); + kernel.Bind().To(); + + + //Act + var seriesController = kernel.Get(); + seriesController.RegisterSeries(@"D:\TV Shows\The Simpsons"); + + //Assert + //Verify that the show was added to the database only once. + moqData.Verify(c => c.Add(It.Is(d => d.TvdbId == fakeSeries.Id)), Times.Once()); + } + + + + [Test] [Description("This test confirms that the tvdb id stored in the db is preserved rather than being replaced by an auto incrementing value")] public void tvdbid_is_preserved([RandomNumbers(Minimum = 100, Maximum = 999, Count = 1)] int tvdbId) { @@ -86,5 +125,26 @@ namespace NzbDrone.Core.Test Assert.IsNotEmpty(allSeries); Assert.AreEqual(tvdbId, allSeries.First().TvdbId); } + + [Test] + [Row(new object[] { "CAPITAL", "capital", true })] + [Row(new object[] { "Something!!", "Something", true })] + [Row(new object[] { "Simpsons 2000", "Simpsons", true })] + [Row(new object[] { "Simp222sons", "Simpsons", true })] + [Row(new object[] { "Simpsons", "The Simpsons", true })] + [Row(new object[] { "Law and order", "Law & order", true })] + [Row(new object[] { "xxAndxx", "xxxx", false })] + [Row(new object[] { "Andxx", "xx", false })] + [Row(new object[] { "xxAnd", "xx", false })] + [Row(new object[] { "Thexx", "xx", false })] + [Row(new object[] { "Thexx", "xx", false })] + [Row(new object[] { "xxThexx", "xxxxx", false })] + [Row(new object[] { "Simpsons The", "Simpsons", true })] + public void Name_match_test(string a, string b, bool match) + { + bool result = SeriesProvider.IsTitleMatch(a, b); + + Assert.AreEqual(match, result, "{0} , {1}", a, b); + } } } diff --git a/NzbDrone.Core/Libraries/CassiniDev-lib.dll b/NzbDrone.Core/Libraries/CassiniDev-lib.dll deleted file mode 100644 index da133923201c3f9cd809bd52471bc1673bf0da5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118784 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 z%0A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 >P^I=P*I$TqcR3HTS#ncZ$#TDtvT z=bgyn&|CP$@(mIZz77e2-U@Y+4R@^5F+Y@|=9$aZ#xR%&VTAP5K$%qX45S7sBiPGY zJk&^R2Y{yf2^cT3^mFLQa-|YlbO_s6n>Hr|5_D<2LuY2YoHA4qEa|*FZG%1xi!HQI zQJ-YJGN+?Lp?MVB3wUdRsLjJjtb`s9FGSfvp%QgdF#}dgHIJ%TufKww2q8-ELwIPD z*|i%RCl`y841jc_ZnB_YhU|#hM?~|~0}5?$u-fzI_6kKXC}bkRg8=xRSY5!cV{+96 zldI67&`0f7^Ju%tl4-K(&A*a~p9ZvbOt<9dE&54D!%%cnGH#lhA(|nmIF0*d$U}Pt z=15?zW`O2Vu`P@9z>ts*3W?v$^dPpsZiY>k=QnE4-}rSq8g~TRe>;Vo1ww@#F(WY3 zC2SQDr%oJ*`V(hF-0lYl@id;qX;VRvqN8HVDD< z%!W{*H$e&o!h)M*tDuWQ4DrnNhInQxMB$&^By=L0PMFdmR9$cf8!8GS#QChE9cNq6 zMI}jRL6?9#unnqNE`7x_ASf7wwm>S{L0XY_la+lj(2K}Cvzw54W{XLD-o+#$aWYJ5 zL%{xm2ySi)rN+G*Gg{5~&f+Gl=KRHW5rB4&DJ~ke9DVm%Lhk5&yf~WR8 zeJ^-eQxMaEiHwn+F%Jf_#Dy14!Ju$OFfWqWG#Q!<4pkydgCzJtEyAqN(`IS0M-Ga3 z8y1WON~Knz#;lj$!e$}YD1ybclV z$%1bRRkYKX*a`whiOj-;UJH5@s3`1>LJWpJHj{(|po_+^2l`dug;wGx$X6HSAOm(X zsDwVV)Htaf!Do$AcS zsO?_-KTj9BMTss|e6HD?X3upvS>W8os1%vDJ)vnAO8-1vb-$9X+&vHa$So_>TgxpK z8*kQ6`b7w5Y2-1eA3)X51O0*H$4vKc-GNneP zjKCr+cD@#D(29D127MrRXFV9LmW_7aB~L6@-XR8R?hpyu0D9TPMzXNmFa%2aj-Y_r z6A?5#ROb6HOc@4@&@n{A9qV4nFb0A!JU~@qO$fGcF69~(5J5eH{Y@NA*Pu`65Gs>* zqfjU`_~Svty@r`IK0?lg?Q)xpf?Fnp*sLw1+ne5nckG1P5%4lahoLCzobDykw6^Gi8 z$U-B0^Y3M3-YvsY$FS7)A3Sv+FEux5ZS9f`Grxb}Pn=-rBjZNfteg5rVQvmF2!gz>K#U(s0Xo%ptBh!a=!mSeqPt@ES?4Lo4+5*aX)brAY8-D z=8<}ng~asWiOAe=Ko?hyEc;iDU*r{Kf$aZ>ZJwGmD( zqF34oXHKtbBb<@$<{v*N)yr|eFn*E3&*5q5moi$%L^ip>f0a>Z?+g5|&&y~t7pBQ= zmOq52G5EA{0)F`%rc^B1N+&Ljz^Y(8p4oj6c>N~l69i5`b7}T*tdHne@sPTPrT}=u z@LvY3{82@`xDsm=mxFl;lHI+;snQV3pIq@xJT2!Bhyb)XFqBuTKvT=-MnA=L6&cI0 zr`-F;x4GirA4;IE2p@{v_@gaejOG*m(XNn>_cJ9E380Nv*!iPx-ZH@Fz3>7tuaPq} zmqXKxNBSgnYV&$2$EN}xe~u>QAmE+PT;TJ%nm=)a%(Mp%FYTO@@9EVN9OLq*O`?dy zqtM^Br1xLe<@jiP>=J|jd@de(bCkUk;CaE9KWE_^5|~Esa(>(S@HyEg@J@&IVDZ{M z;CU0DXUVYlfIs1349ra%*5&!*FX=oOq7v{f6(>{hM>Na}{v=Z3ULP@zKj@M!mE>~} zvOtj_;*oCerlvA_dCVmi&xC7} zr)`yWfLKSPfsYTe;xjy)J{)VCXCMP-gL2*Yr)yn9t?Orin5OloPy$+u#5u1-v`&XU zNR;gi_}($t&EMCw;jmSYZd=?y$6kq|*LH2B7w+mpSC37nq(3#%`cH1szE@l%yKs}1 zCy$^J>no}1_)&5kxJkQ8U!j`!)2X4Zg6569gM_l{w8@iBiw}H4j}`xe>Oc7%o!$C2 zoxbuTZOrOLrt*Vy=G_-){pupJeQ}f4)s)ew(wnsR@J1?sJ(Fg~JU|mSUZmcOzod4% zzoVh0=V<<^Mk>jEmX57hNVfO(QpDv(x_12<)m2WUogaNgm2V8E>6Ks8n#CEk%{q+U znVCz=f76#%?m0|<+?7L~!^dcMSv6fezK1^BIh*cYe}&QypQI1gx@g<9$#mf5k<{1O1+l;K;L}v0qt61qw(87z2m8_zDQ~J=cZHwr@g+|)9 zJc+6gucmj>@1+HgM9{=f8fo!o;Mdw!RCHoBtuHI4kKcWcrffS)tE?%sY11Mye%(lA z3tyrWM`uy~sUPU$lDSk;agK(4aES`R>%!i5(SVAtX#UZ!sA9)-+Oqsb+Bf}aT7766 zWtBJ5f<1?*^R9YY_{1POQu!(EpP56??mtI=IFd_SUop_?aiggGiyQRus?l_8-)dU6 zc|8?B_ZWS9ego~^caUz>ET``@FPN9$?rGz+cEA5U9n<Q#0+yI}?`c=TR6?AFnT3;I#@denJd5^bNNr;V#-Q~8%SDgQ_n zoxX5`HcWYxuADBRlF2$cGHWbtFviibSBF!{{@>As9TRDFEo99whRVw-=+xW!bZFCD zIy5hz-afpS77g!D#c2cRt*m$oJoy8~9lc0r-+LZ9bvRY7G|*1Rqg1hLIc+)oF3pYB z(!E7r)3i^2q_0k{qOH~>TK{Yhs{ec&y}7r7HtpX?iw_>A^*O_6_ujQ_^alTS&|TU8 zt)%g*Zv0$$4ZDw@`-e2l{)<#6l8+quZ0#RDJJon@&53^jOXMmFPkgCr;JSfNeUm>i zzw`D4=wJWbRUZs5J$-H6(5^#=e*5X@i9fDSTv40wPr>i0GZj`|yEbrW*YCeS^!?D8 z&wqGhaN>&aqAP8uaMqZXY~8wWU+hq|`p~qlT^A3?xjX)JVrh7Cn>1Z4YA8)iJT3pI zV8@|DYW1|P-+q1Hxsi#brASbH{U=#$aW#a8mzDxP_WQ2WrcG0;KfSx;cloDE!^6WH z4*n#;6<2aY!-`Vi-x2#d!*}gEd~~Ohuj5O@8yb?6Pt^Noa8Js?K1lQ|b2Tvq7fSjmndF@0uYu2oR?_8bTxE2{CpK!UVeG?d} z86Ms3B}cCa*Cqm9%pf*)-$x&P6x*{nxYJkhOSr%( zDOW5__^(&TxS0K)4`zNw?Evb$e*GT*K)&P7;^3=+@oV=oe0@C|q~Pu`TuDiBB_}r& zmX;8Jgm*kfh>Db-f6`>@O=4UmEzuX*s*E z{?_Ax+jRQ@U-C@n@aPjou9S+3dqn*0uct74QDH;)Hv_8{>^!|NN`CsWdv6~W@aUi? zgM+W`j!%w`j;?i8Y<7$ATL2GsMo0gpvTCtbdu``wxb;sz@x)vviAswIV&Dl4mC#MWwenML?<<2H;N(joh1^!D0>ggU9A8MZL|=GyL6pD(*~ zNjp$m3Abw#%)pbEciXUGT(=3o-xj_7ax?t(3Y0gcrsz_Y_VbLYbpsi^a@UBE)gcp> zcVjnU)A8tKVa@OcgA)a?eU|}B*0HNBEG)eA%xbs^fB$=+x$lIm?2l{bB-DB7F}N%0 zDr}~s8CosSuUn@rEbP7{d+zo9n%a?y~@iMmBl?W2Lxpt)fPr~hg-W+guifM zg%sJHx~$9 zFV&(&<#FS~kYdmHq7${tYKv+jM0llAzbz(Vb9MCnK^U9 z%FD|xR>ah89^Y}JRZNjPzfEu=iz+g5`WaPuSy`_uTb$0anz;GtUw(4O9k2SK^?hlt zikuF{#+CKz<#akLoEPIR&!6A%L0^zo&+W_4Okbp0R9;?w(doQ+vBHh`TfrlGOBre# z-0ii+?N>*wF#o()%zb$JL-@Je=-A&euzim%i3? zd&`5OO67FJ#|xKV#{T&xet7u<1R|dhm(THy=bQK`@ttRce?hX8^}dOZhZdyXQIb(=WCh3_XeX7`%nLhpT1oFY~ABp z&$D%XJCoVKP{tm}n1g}1nNHieK+Fnc^65Y_9az4;H!x@?tWZ^z?+nNEh809Tnv1S~ z{qCMZZ^ucmtI)heA#iZxE3_6MfX@zm*t-C3y7C*C_|JE`2OsbcVk|CN_5q?P@~?Pz zNY=&m3VL17$PVy12otYSqDt^CgkJ4L*?ZA}G1o=Q3wm{lekf<{&4G?K0zf8Xh2N!D z0A7VM*-RWv@ofhX1D`NHCD$?pB$TmIHWb-c8pVfgEykzhT1M1aLJB&CMK2f=Fi(o@QnJscojy+j>>h?EQUfkPsDEM&OTTQ>7cJSyMpZeZa&o6p=!>W&W zAN%ZuSH1sFeKVS`IkD!a-=5#~z0Xwq;c)2UoljNoyZwPnzIpA>KlbvigH2^0`POT% z&V25duUw~<-SR~Jl%ARA{jqibl*c~)&`h)ZEg z#hwaga2kVC0qp4jXV%ZvgEN5Oz7GLb-3S7PtH2Nh45X9N5Cn{}0z(imFquk25ccy2 z@Dm2BOWm7|9^sxI^uYCoxp0#?_Gti$XCpHU9_m3%U5VBl(PG|stqRr(I;Q4|60_{n zfmV1L`dl76P-?YmoYgvMz`XHRF)*WHrsJU=WYV5jG*bv4&xuZFI&)GwR-~RY6^z+u zOm2&?Ar2~Rf=rlS%-h8I9dA?*vWmR`rr&jb#Xl^0$(d6B;4}MY*o@d`O`>e9A7=n# z8umig9iKov{`SArKH^z4RzKMo>`V>2>B33&Ty_JrufQJT3t}_%HOw{avvGIX*g|}| z9TB_<&~666u--))WhrK_h41(4v-W#21&Y)&SW!bk>@~h1(!$V#t&Acx1}_t2o|-E` z!0;6qf`EavQyPMRfjvwy1OWqirWk^N;V&=*ISsMgjIm?gVSOW)dHxmRvUzYmBiM#p zV~rj}G8zr#Mi8<0ow*1TnLP(sh3>K!K~m{$@OZrT`@nkD=V>rJ_7b44Amkd35uI9T z+8To2D&AM%j-_3lJr_z?iUGD=g8(q1dbXEB1P=1pu(1aL-^Zb|mjTyhm-blUaVrZ3VQ zD?iqQ=d}8nTcYy!y0h9Df6eRN4fg8s7x5N9eE$ef5&x zF~l1?3g#HIY50tW4n4RQ(o?kHI^68_0Eqhr+|JA(nTBRukLl4WJktvr8zH(5jkWtc z!A-#HGrKu=dx0ubF1wG}YJWnmj9dTuG%Sz{Sa%->)<(|x^2k6<^o_CgoO!!o)Y&;o z8mZ{%!HA3vi_XYyff*ZXm%Ej5^1fh{jx&^5q7_C{>7A}zz0WH{Fzl^pTA_Fz`y#e; z(G}R?F!9?!NNu~#~tdYVocqf|Azo3`Ab5)%;f7J!uSSK_S^p}x5^E*>E=Mi5z zBC}=2qZ)Q5qCaZQG+pMKkgA0AA&i%>+N9iKuXf;re3KH4X|(5jF&JkQ z23@XoK>u3Jrx|pIwo3ESSG7Z$pT46V0Z#f`;QRHwRzn|gUEwn5tFDJ#KI(A414wzJp6c24!Wygq6W*e!6UzykvB5O_%7cf8!zRsK`x zx0cT+_fc;-x4p7FRX$7~MJRl9pYXp9XwWaqJHRn~Gs^u`=R1NP+W~!)^o zs62vEzfgGvBJi6^wtQCAoT};6TXk-gkG@gGy*yLJ5itC}1*g-0NRmYWBF=wPP^EWZ zRtnT+p}4YT*|1O^sut=NhngzXqe6LUhEOj$)GVQXPd;RcmrfIE24<6~IYQNAR;%a~ zY7puYEu~e{ROFCGK|KQajKJ3gz9Vp&i}?)#mCoI+rQqD_-U;})!0)Z4nTPf{)Tbfy(m{uM95OFmCzSHDoYM1(epb+4p_HtGK3gKIqAw~+ z#$H8VaVQ>p6&)>U=ciNV7i~_VnL;U>Q)s9}RzrJBWHt0uiEJ8u%aQGMwPCkt;7!1Z z=cyDOM_sBY?-5rgol5-<^{i_ZD6VpO#$JSMIt@G2>yS;SQHT1OYb`SK8iz968$sRZ zP<8ILG?Q+3s0d^;={|=#-@Tb;(PtfMi~C|wUvj7f+RdgX9cmcuX46rjjuMaPG-_MG zo*mV0a+_FJUl&T{%N%-UjQSu}!Vku%>uD~%qbTqFWj7P@0Hq9%?@-xopiXh9qh)K6 z&odnA<+6>S0uJ>Xw3|m<0&zRTxDC{Dp^nmQqmky*eur8l)B_H+*L4?UGtc672WY49 zN$kt39qOR*0H_-r>LyTU()U3H=vMCn&tnv%pF30()IxHhIAd8asCt_1Pzg|rC<2P; zgm#VRDXjY~4t2e!ks4{MPzUH1&jX;+4)q|Yv+1BvDuSp0up*!IFnk(Nr(=RE&bz@< z%~E`_olU8{F{8XAh6P@3PPAUFwBl_JW%|fdRtc@FKo*tmv z1>P(0L4l75d_v&U0*?W1q~`^`B%Id;z6p4Q{s4FzX&Uc!<$wXI7JQc0=(|RnrLFUQ zSgX_4=r?N%wJUwMYZ2{pzPq&ucFNCSujf`BqTlVb(ks5HZPYH&pVhXa)%Sq!2fk6; zT=7HA1m{&PsSQ@t(nf8#g88g7OZ#$#Ti>l627kBoHB0+#MVmgN8I?=*1KQNewRAu` ztFjhwDd4r@XFKhvwDlXc%PRALcID;zEbXSstMqod6FSxOP-Q1|)1#Fi(r<^(4S;)H zH|W*kb2mLzc@Ls;tnz;SUhTEYhX7AhegTjpaIf}@%E$BvHO||uqQ8}1cLjj+9`TJem`)%}+w#Gl|dP(aAyq0=B*8wg7JU|!uAHWJeNC&k#feYyw;0x&p zV2FBYt~-P}?rLU;>Fh~|z#Rfd1s--W|F}SMGaeAQOyCZIqXO>{ zcv#?Zfm9~?0*?zMLpTDL3H-eF@7h=O*Ypn8psRv3?4Ywf9e^tVb6ILRWNTsMFJG9Qqbqo!ql5sPaw9}i-RNm?_ zN9=rV6RTycjA}NXmvvfhvUcaKZ0=;Ol<8h8n}yl#<>T8s%^m5xH@_fjWjgY?oqZ!i z6TMRQS)n^&rE|&L$Vt2C%b0Pi&&&*1IW-W4XK5`wGY71Vc`IL#E0dl1{(g(U1uM-h z8FOf;5Cx}k$YEy1?LzMm4F;8ir;BwEgH*HGJCAdSZCbF1lAJnbCP>YN;;e@15Ya;3ZO9~TD2&jc%EK{Q7O6^*tdl_!cl4T9AyXJftjCO5 zDT%qlB(@pL%&D~Q?q6r;R_sk?b6HX9I=P5jZL;Dvfa6UFMtuCpv` z;WDWwVY9ZR5X+&IGj0H^J&xh%kK^%1U2?J#N1K)>vqOk6m1<6Qr@-06 zr!mExtvlsx-83vmQo@$>O7dD|yR(}e|3C?58Xx18xrAGRa zxs=tB!&Bc_9=lb6z1+&iGsz)VohGN2CM#v`6)am+cZS6-LKI7;aBdW(Lpmpd$%F&{N#6cbLB}@sFlrh;71qqL|7i@e*kS(l3 z)NvuF^i@G+XU8$vy2Ee`Ic0RgM6VUkbNLWL-H?tahs+dp7g27GlP5#nh1yuGj3=^O zSaao!${%M5w<+Nut-0tHHV4Hyr;4G+3D9HhLHWTA6}H99q{$w_NyQ~drf;X2UY}X9 zI}hii3@=SGVW_tDz<`yJKE#xK`M{*hRt9U`yxQZ~J7rXTE87Yslsbx?`bM3_)Qe`+ zt#;Y5VrHzil0(o=jPP02Ig-QDbJC%EJ(tOrIVhcULd7A+(q(YSP9s>nU{hGrl6ErD z#fY$VRnix>X7+e8r*L+19TYcH@jRBkwb|wkAmx0^$%-Gne4M7^7GAkwH)?KTXl1Y` z!2&|2f~xAwj?xplFsfp@W;rIZ^P8CwvCWlimg68NVzwil=t@~;<|Nj53rkr8y!f$+ z#FA+Xlf%a&+}UIAvgA8v`8w($n+Axi4jRIrMQKV<5^#V5c-P3X0JwWZk^{aEZvyw@ zo`Woa_d~t3fkL#7R!|@44D@zW9xw}y0L6g!}x zVatja9I*HD?HtHecoC{43*Yx||B`rk{UcXQ{piM@T%9NH#=z@6uIIKc@jiC>w#~Dm z$FKE%;k@lvR)61j4jxzf-2qMWdjh&vGpl9}7@BVQ@$}wb20j=@b)7pvH4B7X0J+W$ z0H|i6@D>^Yt)`JRYZmB+j@v?a5Dj1hzn6fPZq(|AS9Bu=_Y?8LjF-&_x4MOmwX>+U z=3F%M!bS%k_h^9Z#0rMhBcu1=`3$*7iEc&?8ae>zO}!lvJSW0~7LA7I-*{rllvTmc ze|P4O+ugY{7i|6GmC;YtUAX$KrfZ&kBmc^=dShPbnxmh`3DRidkjU{tpgMd? zdU<-H77lND1cSHt8dY@2Qzf;-t7gaCM$PE4a?;_|G5ixN&ti!FnmJ{dXTQH(Blp_g zwHrAuTFnB#8_`+lM)LU$(4)^wTGo0!EB=wll>o(;^Y}%hKE1p+yGr|DwY2NAS zwK9e`dFE;j^zGG=ylBe&IcR_s#jV`qf^K!ooLaAjrOX$eOxBG4LjB`m)O1Af`kH+W z^xK(0Xx)mwz)G%khV9I*Ky#=iPyvDR6{-)_^Udx z&9S;V5R5MjG=;;_#-?y29Egns&Nnl5Hf0V6*4V?Sad#ypPKeZj9U2|DNXoAZ@P(xh zU+1z7ferZ>&fqoH$hqNgQ#8z1v`ud9iVBAphtUCFO5W1c(j1L6N5D`TjNxPTw^?Q^ z+8;|;v6e{0vSQKJ7Avy2rM=&3Y3_$YJQ9yIN5ie*aDT)!o1?9<{^n?NTePJm(Hd!Q zZ;my!#UfUJ%t}O~@wP;JtJ&VxZiVBq#r@$(EFNpITHE@=u`u+TBaxQq;{L_W2`g;2 zFNRh$-XD%eTf+UY*c?s7+WXtX?N-a;#Vyemb8)K`ZE9<33O6rqTO1CzwwRHY*2PwP z*owrX&53BU6>e%ao1*ciCNtX9+TYgF(%xjEb=-_ME$)vr$675QO)c?QJRIq7kG6*s zi!qAD@%~s0uAxKx7zv5MTa_SQLFV#a)u&JA6kKPgSL}^j^3|(vC%(RCC4He+_)RxA zMhZ|4Kjq3{f8W%*ym#-~%c~!`~w@JL(;SO0mKl1^&G@Uv7K~5@7%=$47%zE^St#lu04Gx>1ny zqfp}O3~ALTrBE6rQVN<}^4QQ(*B9I~;j0Fpa?nyW-(*W~p<@j-U*Ru`nl3E%vEx%0 z>_e&URrsBNHa3#wu$ZN|_%$@n??Rh^ zj5LFEE>@o_Wwh+gF#O8kEoK1kb3)XD`wA3}Iq@?A$mQ7vXxOl#V#of3@n)*%!)EAZ zq_`}^tO>TlV;`P_8t8M>*>VPV6LBt%u;6QGQtu&nkis7)8IQXM?FXbaM{5Xi;u#sB zov_TmznjPl;4M}h@3R7UYsE7Yg%!pk_;A%d0(d^`@d(x24}-G?)UfoDMQm_*;Odbv ztatk3EZ{K|@_;FhXK}9HYb@L3otlbk0+oLp-WQ`$v=M-}0ep8z;ClsUMI1fwj1*^5 z<2O^L~4}*wHN+R=rwd4N&e*FzaV43=@Z5Th;{`>W} H7lHo;oOu#h literal 0 HcmV?d00001 diff --git a/NzbDrone.Core/Libraries/NLog.Extended.xml b/NzbDrone.Core/Libraries/NLog.Extended.xml new file mode 100644 index 000000000..3838cfbe7 --- /dev/null +++ b/NzbDrone.Core/Libraries/NLog.Extended.xml @@ -0,0 +1,432 @@ + + + + NLog.Extended + + + +

+ ASP.NET Application variable. + + + Use this layout renderer to insert the value of the specified variable stored + in the ASP.NET Application dictionary. + + + You can set the value of an ASP.NET Application variable by using the following code: + + + + Example usage of ${aspnet-application}: + + ${aspnet-application:variable=myvariable} - produces "123" + ${aspnet-application:variable=anothervariable} - produces "01/01/2006 00:00:00" + ${aspnet-application:variable=anothervariable:culture=pl-PL} - produces "2006-01-01 00:00:00" + ${aspnet-application:variable=myvariable:padding=5} - produces " 123" + ${aspnet-application:variable=myvariable:padding=-5} - produces "123 " + ${aspnet-application:variable=stringvariable:upperCase=true} - produces "AAA BBB" + + + + + + Renders the specified ASP.NET Application variable and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the variable name. + + + + + + ASP.NET Request variable. + + + Use this layout renderer to insert the value of the specified parameter of the + ASP.NET Request object. + + + Example usage of ${aspnet-request}: + + ${aspnet-request:item=v} + ${aspnet-request:querystring=v} + ${aspnet-request:form=v} + ${aspnet-request:cookie=v} + ${aspnet-request:serverVariable=v} + + + + + + Renders the specified ASP.NET Request variable and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the item name. The QueryString, Form, Cookies, or ServerVariables collection variables having the specified name are rendered. + + + + + + Gets or sets the QueryString variable to be rendered. + + + + + + Gets or sets the form variable to be rendered. + + + + + + Gets or sets the cookie to be rendered. + + + + + + Gets or sets the ServerVariables item to be rendered. + + + + + + ASP.NET Session ID. + + + + + Renders the ASP.NET Session ID appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + ASP.NET Session variable. + + + Use this layout renderer to insert the value of the specified variable stored + in the ASP.NET Session dictionary. + + + You can set the value of an ASP.NET Session variable by using the following code: + + + + Example usage of ${aspnet-session}: + + ${aspnet-session:variable=myvariable} - produces "123" + ${aspnet-session:variable=anothervariable} - produces "01/01/2006 00:00:00" + ${aspnet-session:variable=anothervariable:culture=pl-PL} - produces "2006-01-01 00:00:00" + ${aspnet-session:variable=myvariable:padding=5} - produces " 123" + ${aspnet-session:variable=myvariable:padding=-5} - produces "123 " + ${aspnet-session:variable=stringvariable:upperCase=true} - produces "AAA BBB" + + + + + + Renders the specified ASP.NET Session value and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the session variable name. + + + + + + ASP.NET User variable. + + + + + Renders the specified ASP.NET User.Identity.AuthenticationType variable and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + ASP.NET User variable. + + + + + Renders the specified ASP.NET User.Identity.Name variable and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Writes log messages to the ASP.NET trace. + + Documentation on NLog Wiki + + Log entries can then be viewed by navigating to http://server/path/Trace.axd. + + + + + Writes the specified logging event to the ASP.NET Trace facility. + If the log level is greater than or equal to it uses the + method, otherwise it uses + method. + + The logging event. + + + + Writes log message to the specified message queue handled by MSMQ. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ You can use a single target to write to multiple queues (similar to writing to multiple files with the File target). +

+ +

+ The above examples assume just one target and a single rule. + More configuration options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +
+
+ + + Initializes a new instance of the class. + + + The default value of the layout is: ${longdate}|${level:uppercase=true}|${logger}|${message} + + + + + Writes the specified logging event to a queue specified in the Queue + parameter. + + The logging event. + + + + Prepares a message to be sent to the message queue. + + The log event to be used when calculating label and text to be written. + The message to be sent. + + You may override this method in inheriting classes + to provide services like encryption or message + authentication. + + + + + Gets or sets the name of the queue to write to. + + + To write to a private queue on a local machine use .\private$\QueueName. + For other available queue names, consult MSMQ documentation. + + + + + + Gets or sets the label to associate with each message. + + + By default no label is associated. + + + + + + Gets or sets a value indicating whether to create the queue if it doesn't exists. + + + + + + Gets or sets a value indicating whether to use recoverable messages (with guaranteed delivery). + + + + + + Gets or sets the encoding to be used when writing text to the queue. + + + + + + Gets or sets a value indicating whether to use the XML format when serializing message. + + + + + + Buffers log events for the duration of ASP.NET request and sends them down + to the wrapped target at the end of a request. + + Documentation on NLog Wiki + +

+ Typically this target is used in cooperation with PostFilteringTargetWrapper + to provide verbose logging for failing requests and normal or no logging for + successful requests. We need to make the decision of the final filtering rule + to apply after all logs for a page have been generated. +

+

+ To use this target, you need to add an entry in the httpModules section of + web.config: +

+ + + + + + + + + + ]]> + +
+ +

To set up the ASP.NET Buffering target wrapper configuration file, put + the following in web.nlog file in your web application directory (this assumes + that PostFilteringWrapper is used to provide the filtering and actual logs go to + a file). +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To configure the target programmatically, put the following + piece of code in your Application_OnStart() handler in Global.asax.cs + or some other place that gets executed at the very beginning of your code: +

+ +

+ Fully working C# project can be found in the Examples/Targets/Configuration API/ASPNetBufferingWrapper + directory along with usage instructions. +

+
+
+ + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The wrapped target. + + + + Initializes a new instance of the class. + + The wrapped target. + Size of the buffer. + + + + Initializes the target by hooking up the NLogHttpModule BeginRequest and EndRequest events. + + + + + Closes the target by flushing pending events in the buffer (if any). + + + + + Adds the specified log event to the buffer. + + The log event. + + + + Gets or sets the number of log events to be buffered. + + + + + + Gets or sets a value indicating whether buffer should grow as needed. + + A value of true if buffer should grow as needed; otherwise, false. + + Value of true causes the buffer to expand until is hit, + false causes the buffer to never expand and lose the earliest entries in case of overflow. + + + + + + Gets or sets the maximum number of log events that the buffer can keep. + + + + + + ASP.NET HttpModule that enables NLog to hook BeginRequest and EndRequest events easily. + + + + + Initializes the HttpModule. + + + ASP.NET application. + + + + + Disposes the module. + + + + + Event to be raised at the end of each HTTP Request. + + + + + Event to be raised at the beginning of each HTTP Request. + + + + diff --git a/NzbDrone.Core/Libraries/NLog.dll b/NzbDrone.Core/Libraries/NLog.dll index cd8e7d651d2efd4545bbff36841b48709ebc354f..8a27b27f388e3879c8fae6249668de3815a0a509 100644 GIT binary patch literal 368640 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

>gAP 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 literal 300544 zcmd4437i~NwfJ9C)l=PFJu^vXCf$?CGLt|;(cLpyh9&G_71=?SBo19~#^jh&w)4)c2k~^%;KOb8c02^<=see*gFT_zz6iz31M0 z&bjBFd(PeJ*70j^vmDE^GWT(^o_^G)P7>w3kzL2%en=wTm#+y0O1kBpA$}3nXqm62B7@Q)3UlP3;2@pZtAt_ zX3LtX|2Lme)MU2a0p2qt4BnrJAg2ENNyh2{RwLiMscD_!BbG%Cl7BhkM<+4M8e4bq zb?b;{HbwQ4y25w*--uvaKW6>CvJP+@e6E!z_PrG zv&^w#g>q`W_QY(UPJo2niak*x5|sHFjZy~UltF+|`Wy`o@#_~T7R)77>0f5_rOUF4 zbriz$T&FRgr<-XkkcT@V51;g^0Sq*T1#SmO&}%HzJlowxJnLj~P3nZ?iI|A1VD(c6 z(=Jv~>u{QFW#T$4o;a1*Vz0cWApy6vjH*b6q$;Nqu_s=@ui>AL;41&8(156VvHtq3 za$sgBBL+w}ZKmwHuNv>olZDHmfBKKML6HzA0*s$? zX|tC>1Ithhk@-u?o6v)V7bp4g2hSlr|9&cj5UU@_rs*_^+G=acr! z_Tb_B{CFXyA~e1ElDiQT(zPY8xZKf_J+UX53=*Fn=^E|oq6KVgiPg84m4zMaE_@{H93vW$$@6Qx7C6mikp_tJ+e#Gqe?NkS`u_a(Q=1Ld*ZJ%~sBV1E2V_*p{kRXj((vaN4c_x2KEnJW_V zo~&3#MsKtZ*lP8OjN&#t#daF!s|uaRZ*ZufL00Hb#yXuR0xi}zt3H?NhmqQleC~iL zgnGO+R+^^zxf6=(aKYtH2=-br{1(D7k@_#YEq8t86?Sk0Ij+8h#;e(O#jax_L3nwh zZ*!N~)+^v42M=~|B$-F;fr<&0$8&ZmI0{&${ycuYNqV$b2wl)pa%=YXA;&1}Hp{dJ*{!}lYk)r5B{m6@ zXn7*Pic3#G~p(W1j9ZDZqhk!nwsO~Qvo-( z0+!fL#y?bQLTJE*_EE|-p2DM8k|s!Nt$rkOw(ABCJZ;z zG!~`NmST%nbXgYuv1l7v(E@I*tK#n=g2NGbwUSR4b4O?R_z!n9=kFIgV|jmzhsw*WKQHQIUl6cFd(3rcd+xjbQMMBYD+#7jx z3=;zolWD~z_JrWAog72#2|>E_&^SK07DJ=36iW%FjF zl8gOl&U*R}W~?E0e-knR4KnF>Q$mR=R_duf-!PwB9iu;+L8TDNE1zn-`lH$ykg>bj zoTe8uT9I6Nbx+P+@i1+pT(`7Tw!eE@4y{;%(4H)I(_E3S%3CkJ(dYrb>a}!)iuexk zRk(zr?TD{*3){*mKNa38ey@(vcGqW{zRL5gvglCk^G>(@W5`0EK3*Of|3n_*9A;57 zbq*Q;&>sUdAij=>g4CT+0#nRC|nqUpGkwM2UYi| z;EN-wOy5jB;(&jtr1aD8--oPeJY=m+p78@xaQ`@REJvMuo`0GATqSV-N`3>-GOW1e z($ey|ZfSFHInk~6(;@vU2#sg$a)Uuv#`a$#nJM960|ZjbWXr1y6wHntq_qr}!~Y!B z6lMj^mVBASXl^i=jVB3W`FnCc!(lg9e-*#$MHd;jm^x_y0K*ak(17&cYpEM8S2P1j z%#&2gn0Z&#(uB<>XLM@?aU3<5h`uZ z$e@hAF*mqcQZ#gpgcjK9gGDz*%ThZ2GMYwOhM}Zs2o0kvjH?>e;$FKEiU%wMg?@TKT;&c zqUYA!Nfs}}{z&0eQXv~BO)^$(+8>ET_D2gMws!XCmc)fGq>$|_9(9+fZr1OCR%1la zVuKzf;&0@K{_9xu3X5J{v~>#Q)L%ma^UT|M6x<0Z6Ffk8bZ+=HsvSY@1L9vtGnnp# zE6{P;o56)v7V9r1$*V4*zYCrKon>;axZXj0c;@&XQS|*pqo7imkfjZetXs!sxV_sJ(ZS={RQM-2b;89CLpgNH%hg{^p7r^Pnd_Wk&0l9N z5`QK2e<{6>ZcTp@{)T%444PY881bR}X(gfxM6Ae~mgXPO{QF^5taK4m*#|*2Iuh;) zBT=GMeS2r9VMj2em&2C2oI@jas$mYX(|rtxpXjnq#k&L}3S zNIsHPAjO7O{i!Lc_W+PVu{yuG{sxGRx^;%iZUvyYtOSUIRiHSm1o)x|cp3tZfV&yO z!!sg{Q7(jze*?1yQwwlk(k#(qdRLNkRVvAh0g@zfvJsu^zzz}_?j0XYRoiB1XA^{F zU|-SB6D3aRJcvWqRQ}2nPlO-6g+j5m6^uI0N#UhaNsdzejr_)H*wZ#&Ih}8Q+iZjB zYzx|Eo0HBqoNt?Ns3o7*Hs4&6&#i1XH4Ga_KX@-S8;wlCaM2Vlr$k`;w~?d1UIpOa zDi5{YMNPoij#VaJi7h2noJXm=ubLS)&RbWfw=)_0Ko1sKm%gSo=^RY z{6BxkvGbciE51u+vg*6uu7IHkFxU1m-sG6qGMEOR;PrV9scs4ySyNYQzP&=FX(OcNvp8Mv8(5=a$%r4$rcvtSb>1rLl1N+4Ab&*g0tShHXg zBn24{8j2D~6~q;L8wJ)Z*aS&Iab#LY38V@#Ffp#ES+EI`f{Z3jK?$S^zE%nftXZ%L zs?6OaqL+E*&uM*`XPSl$Hd0J_%y33~Ow`^Hcqm+|V6pIC{ZteiW2E}>VxA1tu;bDn zJU7wy90>#b_3<~tA05i7?jG(9o=SLt{vN8oN9ynM_4h>m6%{r3rq$EeMB_fEF^WlG z5nxOnW&fQpVEgaqS4P!KV{@Sa0Lx;41^_IN0UCfk@k>j1GGL)T_i25~t`6S^*93SW zFFXwfb)*&CO0;5Ra3N*H4%z-YDC3O1plOiKBtJrSbPy!sWjodwB*_{(BA)*)Vg`3l zcKE>Yk=*dX<8$rd9@F&UjBf0i$)n|YJ?%=3#>3;MgPOju2W>t=n-AwV(Zy}u%)3=W z!w1fn$i>_k0 zO6u90o#jldK*~JEdE8ZW%d2Gpy4Zcor7OP0q)__iHMGV;=_hlv*>owTkaYq^uilbK zpR3E=CuVjrgb*!#!X!C#h9RTdgyzyWT8fyI#op}kFVL$B;T5!6)Zw$bdZL=4_QYmUo}<-y}V6PAgMQs^7F*$!J|qi|Gt@pffCWb+qe`c00pk z<85htcRCu_92qwsN7|&k3AtSK`r*uSteo<0tRnhWwx|Y zM*NlHj4~`%!^KI5)#^!HlXuL2h}PL4-AdMZ8q)IY7D&q{YdP_n4l6J?Tv&p>w_?;tAhckO>D#RdN{%4CDL33pM#os!Vwe~E-#O9EqAkKK%~ zkdSXlU?A%)?$7vNBZcL&G_tpAQn&vNN$PG%x<`{-|8YrjHOcAEmilwm{$jS6+w8GT zxmD8Wdi`wq6ti@rU$Xyrq7m_i=s9sxEHe!t#FJxy1^}EA12h2O1u;Ma02s2EhR^^2 zbk_hhu#fHN%8`#)&A!0C$ai;o!$yoRh(a~b~J*6|CUABG3Xf>zmOK}*qxClmBvMs{6IIie4IV%PCgJT`NXD*A9E8Lz^Z*@s7f3L7!ursr|wwELr zTn1KM>2v&dQy^bn-J8$B;I|nnsX&7F0A>+aBWS>TTcZz1RCvH{$V3nQ5ivTmELm3c zM)R5NvqeIsO2+l+<=#6bc7yzsDaYO~<=}+p4uMLuT1@BL({ zKg7@ab8Hz&dG!zS(-5M@G{E@e!^HgGP_@eI0`GbC8_|IB(E)qaND0lwAisgC4=j}j=j!5>MR)#Wp6@pyck zNAL-La;Eowf18(MqdD4}sKkA3mQ_30^tG=#w*Oo3>dA%LZr!y3ynbnUpH6%;-MZaA z(>5Gtbkn=?ny5iO37N*3NGG<{p90`ND`Ht|Pe?+5+wkh25ip*EJ%iGw^I$<5;_O(e z8X*5!0DL@R)pun1K=V_7(VZiC7Wv;9of*Co6$wAhPyKUXTpxak;9$H?;xHx2=(Ik- zvEW~{ry5?+=|_bJ#p&o2jxc&GjEWxPh4lQ9Tk&k^2nr9r08|c4$=>+8DO*)O3gNTD z!eb;d6De@&AgTaewHka8a8LD$T!1g)tU|a)Hht!8OFsB7WP|~EnuilUKS|Yrs4F`; zl3`mdWjdVjda{{{s;wYfcUcTZ@K?!eMeY6CbbCu(yXNtO1b2IpRfD-M8;keSyJ9>0 ze_yB1CS1!ozGj_%rFHsclG?FO!@2(lb;?+;q{i5(Vt6U|{grSOwNAIR&X=`yj?D#M zk=6;{OCDo`O-0OE#NZ#a>9!@Q76?C|WYjt#`;31;TJ{g7Wgq?{rp^Akw!!{Z?l5bK zX@j}e8DZQ884F`&jS9cV<|BT?O>rpIk%F%(=ks#`0~R>Hn>;O??*})L9uUVr|O!hnvO`Y#hZ%XZQWE1KO7^hNZmxI_B_GV$F>4%?9S$X zB8M+^Y$yHa_0)5Wde*-#{M$`ldaFm~4JX;4gy6NN(PpRAwTEhbgXd_Lz*Yh=UsEyI>6z|U~91V&h`(>dZW25Vk6CMmX{eM9P z>%)TFm!8lad>0ZKWy`D1WNNVi2K|L3!6rv~5=zT|u4ng8fd~2bzsN&Ic@P<19E(f? z0A3gaGynj(87XT3z>8vl1^`?j0OQxc51-3LUQR=xCT+N)+oeqF1V-$82%zAWmd>yT z8y8A8r*Vwp}c0iYNDK3N}$n#DTle{n!?45Da~mYECVmE#OOP+sS ztYd}hkUb#^mc6aU@e*xTnIw5~G$xyB)*rYs822cc=Pq-tfAAa^ zde0Mjt`6hEd+1?i>_C^aCq#Ulv9TwF;f;7o8~^&(sA)o|5}UDFajRL4f5;hYTYR_R*_`zGk#>CE)hoeKW~lxLZW6JYBzY_N7`EEp1%YxbI))N zdXqX`QvWI1w!Vo@%O7LcpC*4pNJP`lcp*XC(bhfHeFeAA>1NmQe??Bt-TXU`C0OfK z0Jq6;Aw8(iiyCIFqt}`_-}o&K=}AG1zGRiT)qv9a0KfHL^W*O$$@SkzaHV8Hk*-3U z)t6}iKo|ow0H7WNGyniiG(|KZI_OxK2-&PHDst+#FX)5cLa3+8AoF(w3fW*BV6?YV z%QC?EJ>cmEnT+yG-DX*P9$@MwKJh4MFc?Ah1OCCF;^^i|vscG!MB$;d!Io^9*NFzh z(=^O+ETOn1I~1O;0JAlxjUxj|!MOmO{2}wbg*oPKe}Jh`8=qkIYndp=ZI3jk&&xYd zGPlGnS^I;_ktOpvSy{eQ23)h9RI|4or%ULvi1$;&I5srARCvpm!%y>cWTC;^lIKL3 zLgOmrqus^4sluPgv|fGmozRqjPVi@7HI~n{9>ISQbAtcmS0;c2|HAL+PaT=!p-qlv z@b{8B2mdWeYpW+Y!QTiC&tL=F1c$~r5h$=Z<8$oA{(hQUaO(1pzd!NnkjYUVM}*So zPJKDQ!QaW{1b7f{^nTRLoaD3avkw z1ANb+GQ9s`YEk*WD%-7G>AL4yC*tKZpWhvHIC7V;sjmPq7to3;aOe|to}Sv)u-+7$7pu6t-Pll z{=ONTYlr`A#(M2=Zcm((-RJk&;Q>i}l)NW5W8}RyiIMjdTaWJOs8RRcXIeJhOxL|u z^E_Dk$zJAtv0y1rUWk=(QSeuOY!eRe2BUUwg@zv>YKD8*Sl0}rvSpK(7dPojt}A3@ z9C8OV4uOVaT$Zr}yl=BAT-h5>F)?_I7j;g_5}mfX$}U?D9AfMqiPU8MJ44hz1L;+B zwmYDqZ3m=}bZ$(L>i97yizuj~+dVofypObuRwEbB1C39CMeEEnEq1ugIyk;uZMvh( zFjJ6*bc1e)^FC1&jd*kF%V5W8au(SzW`Wi!srTTf^FS*HM|f3F&NPIB`V0<{a_aun zsRS67eeXiq>k;9SN+FfR6RffYzbV3fD?rxObhhQWY1d z)Ut+}vJf0V!N?8IFm71)76f19cz-=*UaWR(xi$B=W?%b3mt`F$G;f)PrqL0AEYU37-}qBdG|uyVN3_IRoGx0uX(FNfTA)ML< zGIf=`Ae?N}eLK;+nKKdj6usLE*p^uD zocU|vZXj|6d(yxq$_ZN%Bk{$uxQY@;H*WuJ+>85W4 z^TFi=GE&oX&a+${b=FF(wuyH4XWe2pkcF9*KSTae&Nop$&UqF&Umy%IyN#+byEt2` zG22vw-QxaIslUv7&81>_Gy96sn})CE`e#&Oc7~bcOVx@qpgN;Cqu8_jSE;Vr zKUh7zIH*0fe`ay!)V|t3r?zi#PWWX=8M8T)*!PoIZ*`9C7H9frL4fxFi!(D01)X4s-(1iKG+uyyq;-imo&)V> z9sWYI_8@Z%?6B-%#eIT3=I}4VPcE|h(iMUO!OgN|m@7sR|3yIHM~1WTG6SmASNipK z`Z@Ee*mubxgHkv^xh<^hhP#_UgnK11qrl!kq0XA9hi)V`wm-jeGsud0l>uExtZaWK zA09z5(;3+iz^Nf@;{f};{oqRs@5N$x&z~O|-V=mQWJs?h92?#(gk!_|5aHPHK1w(? zyx$~j4DaIbkA&yNMp#Hhl#1T0f?DDI7~@;T!jV}X-TXtk5rG(6}$665wWa%UFVFEVtfI`z>2V{?De}8=9mKp&8vAf2d1+AxyX-D zUIT6|PnSPcMCxX11>jl#5{-qY!bN2Adx|~SkS)a?vuMwHmyGWyi2HMC8PWg!*NXY? zDdy<{(Tis2LTvxhb?ZSIxIWRy}PsuE_Q}BipyP%GM3eWWXBP+?68`$onS? zt}}D0U&PGMREEaU8IJ!1C4G_wpgo6LHK*+Q{UJIXE=B2EhlrzTV^ zD5u$A46L<6_z8q$yiK-PFr;#}lk+c-YWA4suAAoWp}BkFlQ+%w-koaRjx;~UU%I^? zCVsTEcjSA$qE`z44!JEjjYB}sfUQ66==%#Rr8C2ZF@fPA$)?-$9$QZ~TtZw&6!IS6ure>?K8bPc`zGE{ozN*kXLq#u9-nR^=h!V;qMZ@`q8Y~ zwc++As=i`hsmNw-pLRdGa9Oy?Mcm{JH`|U-U;G(SUheq_Q>@?(OU3*ayrj%y3@Zc5 z3b?ML?-uj%Yz8@NXWnR9w?OL_;?_O%I5_3sYxrY6W_^V}Sv$+%;&@niUs>0;uqNW$ z6wXjf&Ldb8!0zKOtqYF=e|}RJ#OLfakn%Z45Q%(_tDc4l{deVTH5d5%L z8xBt(bIVTizEqXr?CHp(S`4ovIeL$94h7b4J2t&<{s5`b!3DiFhbf;NTrl%KC;Sb` z#zC>xHY?1`j&Vhsfsv1wlZ2;UV;w8<_>4@iE|j)lwny+{6J!lo+?SmR_T!50l4ptNYG!e1?sl$GY>!P=x}|kMr#5t}$~I9~-SM z^f_5O*W{RD3n(`FIqvy!wwG9wnsU!ik9EXJ`UZlo69mvkeWJSYHYH@FZnZPF-h~a- zBW$jWpuGSi?A4B-J3>1iY}fXRjM`VFRSg?5#`Jpad|dCmskZCn2ZBW;Nwx7Yj-Kl} zUTG(Tib8cp))*Aqan-CvM+up>rjHUvW49h_?jB~^B4edbQ5WjV&|FxIG_+}RjejU) z)s-<%D1<9e7-LRZic()u9m=V#ZRU9>$zxJRx8)qQyc}Q_x1!4?jtNg)OgW$wpABRj zX?zb0zgct2Xd{iu!mlaG5{dMStm?xV)Z;|z;ovc31g9F&Q`y@>@NY>i>to@#6^niT?mbyJ&OL#H*Cz}MXfU0g1#DU<7 zDCJdgiUwq@$-H}U68!RxIJumFaf9nkzLK1-z7t+!YxFWHU#hH#-eZrkHS^2mYw4=^YwQDX*@>eTUa>s)0zm%|R zUQg$ak(etOStpEu_4P4U4FGsU4A21eb*yCxoklx4*DD=Z^-`5jk-0s_ssYHnF$QQr z+Wu>jx{Wpo zN*gk+&^CNy^n6qFyhENt{+s0?{eBU&UO>Gj-wX$fJ)bd&r(w1!WU8_)8(mcr*>5@D z+cy;7sp7~vAnVkmytzHjl#jP_TwN3OxVj|1NKW2QH}kz7YtG^rm(ktR5?qB8FTrA1 zftRegHYMpdXXkl9EKsd(WWZeN2z3ZV(Apj+uN5kI`=b zZAe(dQ$U*~myGKjeGlSv>bv#O*t&BdUK>Dh>^mZ-Q1oUbZ_OYgkp=W7T5BTRym5-+js^n*?O`i<;h;JLRLt`D@pIxoCM<} ze15a!UQ!YdEK_Ce3k!IzhF4S0(PPPI7@Ml}YIh^cc5^EO+$g4KO>*X)0+mU!H*La7 zNrBgp3n;G20YvJ|?LBT>Owo{)RnCM*B7qlh9_*fZTB-UGgb+eMvYZ1B_Fj-dlD7qikyYD# z2~H~QA1MTupdTUuMOPNJh$BY{Rnd_Hp?Rk0$T2{IWBK8&5q`&K^Rfuf;qBuEUU8J5 z?Nzg-I!n*!l09)E&&Emos2O6qC};I;>jU6BOY0y-c>CA^AoKs%@^=+~D{*s{J=*lnAmGDd-XV+BgLwx@HU^sgQNLryg*WTse;GVB1=_{1|w{Em0uNbZ2?&%);LWP z1{G1++qO8u86gxYjNW6*kk~8H=eZV$(37%ds(p!Zt9AeVabKDcT(tgb9_#7T#s<-A zX(M6ObIWUvBx+Fu{i_H@!Oc~VQQsW2?8u%Xe8H#e%A1jq4ykOL@^6UvD<5o%NCa_p z4s?w*ggE)mFRK*#)M<&)3tP@!TW7=D@b>yz^2kkstj*Ctz@@Ec@H|I&H`iyn!C59% z>Lp7vjE%Y9aRdqVR0ndw*@A7Eq~KiPflWYn^6e5mk7yzbwJY zQF8iUBq&yFixkJ-WZ?(0Plza8UXOl7@&du?Q*bHNw9F>RVq%6ox#TiJH7O7 zo`#h8bft+LWS-)pQRj;s{I8HF*v5|+9#3skQ#9NEJYbopIr_r2Ox9>ew^Ug9AZWn& zZPI(6`V^5R5u%?08D(m0%9`!A3t^073sG(wDarj4a@YEu+Ds0MMF@TjXj~9Xh%nuN z6<4n(yaUe6n>prSa&+5jH%IaekKKd07^d4LE*H?{WJc(1v&=~}Q&B;G$YIYu`)v3u zDC>Wsk-15RHk}7s)&W-U(bm}QL?wK{HP)33;dtl9wHA_k0rDz)PR*XfNL0wq8>D4b zem^Hxf1xx0`NUo`7qTuC`7$qkltib_iXW;Lu+ZYwhB(Q4DFOeRBoSsr?KSSFzN~xu zPYA4ZnZ|7f^4}ufc$YN#mG*=@nLOw-V2IC~A}wk1`k+a?ToM&oWi2mvJO-8<7Ev3{ zR|=)m%9SsgoKj@5!kk+!y==9it2mqz5ScE-h{ozqfo8*f!ptHkQ~wUJq=(VOrmi9b z(J|bEb&<%x)PXn35`5|1`iMzbn~73!g((o!8hL4K&AI?-MvD-{ffyNp9v`LOMFIy^E_i zn!d$n!_c*_e?J9ezUcY0iB}4=nfMC%N86786SsvMR<{+kGpoS)#1B3cv!nrx+y`QS z2DoHwu3*NB1@q#-dSy5dV%o_G zUP89s{2b$R$!N)6wd@2}N##O*xEYP#`Z|6%Xra`D$Nnzn}!a?(1)AQyfa*m!Jlt}1;z0O#S>}hU=00f6RIdQbNDBqVRa4``Ez2C z$LhO*W5dIu1hE50DLx!4g$4k8BnD^zz(-?%1^}?!W^`Qx06rcAGys5&A(KM`06rN5 zG=P+3{4&P#g{mVgJ9z7s(Gu9RU_B93yaKn|@Ns1m;x1Bur3k^;G+B|IInVNNXkCJ9 z>GZf*z6C`GWMUr$SCKQLJHhp`=ZZ_-)pPtBO!Kb9m^`|DSdGSZj$ZDA8Nrr)2=Opv z%E_st24tjxzD=XaD;H+Ondz=ilF<092$DgmJcH{c>t++-Vt7zH+i~=$=mt`vOg9i@ zDfMS@wyIN$>9ma#|Pkd1-DuXx;EWrZR_m?DikUKSB#q&kTu6`UqM$NWAi$MKm z5ZeBs1cPDuS;CLISmkSPcb_j=UO^WBmHez@Ts^lTqIU-ZUXKKctNaJABDFj(I2>5x z5#g@f_`EzOB;p1=!1+i+6!itG&ZC4k*6Fy*)~wms6H=;{rxITvP|Z@yqshGEnn%tW zT4e0D=(6~@9r4H&{+|O)@M^f@_8(()1!?0kz$v7$&);KdjI&$j7}jM?c_GeVUs!Q5 z>r(Zd%gBz_K@1aa@EW*CRyDY&ON0OoL;Fyx@5Gq4nWwy1^<3m9qbrr89Ng}uSX7g3 z1F4-2M_-C}^?GK-32JL(#N59w>ol~zb-BvgEYC3C6=7$BJ-~Q1`epNG&z^*9BX&5B z5j3%l$RWB|P)vN|Q7y9%`DDUkPe@$7+0?4VGCgH&TrbD^Iy_vVJaEy$?lK-Q4c`3} zmXe+#$ZF%&-J^DUEd&{?3WMu}K~^W5^wMqnjdWyRdqSF5_XP*ErP)7A*t91^vwHKj zKBOu^u5nQnNtkQmzmAftC z?s}rc>8@Xan08kUG`s81xI#MJHBTVFcFo3@gJO9+I&pO?T- zTA2q5kvh+9ugzpJnk?@UpkdM>Wz2jA_^tw9csTta*=yW-9uhWJFqn^o)HjNP);IB6 z;Nl(`bh=e!z5UfHX1tz)|^kt6Ss%VGJK(;2qn-p&44Szl%$ zq1y>=r371x-A*aEji7V2aPdz0@!XB_U_ZbOUPqG8$jq(n6kYv3t;wbA5YL%E0{#k#+ETQ1!bjZ?|C14cclt^eIBAG6g z%-DJHt|k5N)ZEp*B+%Io$usT-Z59D#b-gRv$XwlR#1w7H{cPJvF{{f!a*l{C>FBZm zJI6g1QC8RNTc5}DnL{Wpnc~-3qW5P1U@e;2H5>LBINxEt>)@^)3CAP2F?%%Yn3v@% zD<;2+j@iMRsEhO;(Itdv)v3DACW9BenIDhazjE%#1`@_u;o+82d$8h`$L%>4cW~Su zs?23(_ZBj45Nyd%F~YZ!r_8}y=icSMc+S|}GH2|QNn>|<(g@%GEmJ0$%QC>Q)`2U$ zx3!7w)CQomGR->3nTBrN0@N3c&X-QLF#G}KobVZbQ$^%9H_zNo=x$vY>tOUk)e+`3 z6EiQ6;yN$TDZ%U^jm=4+(s{wKftwdiZUXmuv){|n>&-}M@uMo4Wb^778- z4QP%{OlK$Dv;!7%@zL+scP!?k&*I4&GYaPTI z7%fBiz%DM@leLUnEtU*CKx5wv*&VAH{D&R_?oE%~EWHGdw%Ele#eW z?asI-mn)NBL+9k)pxsF|c?t^4&a#8M$T`}d^)H2dkAdcby8-4np73^_y-hc!>ragB zZEob*YqjxX(jOK<|5~BnR1NgC-GJ!D$FIG0!Hb)+~IG-1@q><&kWf*?`t9cQ`mMB=)~#q=HWBadXZ7sLONGa9Iar1V2g9YNICE28Boy>JxC;9hFh_!1cBGj92M<~OQ3n4^qDj{?DV|mIydn==G zQ_XQN!_7Vs&aL~T!S(mV;A{deWE^vH3#2Mx)%&x+Ie{!4^SP5*FgLC0n=gZ?a&v`Y zr1G2tK;=zGK!&37*+}KnAJ{NDvBVmEK|Ho`^vu)Cplj~=c`qfIA0>{lw|Zti@`=;+ z2b|sv4&}0z!+_!e%2wrLP}0>+G`n@TDJsvR|ItZubY;YyEmuY)x?8p`nKZgPR(}xO z8>H*AycBP-{F_8|3@AQK#zXeY1UBG%j6}4nI%cTepPD#i{VNbv>%3vk9IHRJV`Xr$ zj#dnBK=F*?%d+7XSC5#Pb2n?q(;!d%{VJ|tgc@<2c^N8wHV_U01rPCLSTxHCK0s)+ zPsdKZZZ02uka#|;BN*~S&Kvzw>p|w!JgLt*=vZ^KO!g8UrfA}C!&nghwN!|S@k`}V zYCJAtVZhDg!wk4J0N@)jKm!1_#sCcf(4y2$*5^*)IVmzV7!wm{5XS$+u+pSzz@r(PY4q%pGHr!eEQwEZjEmW zB4*~VC3pQp)PEp@O3A-Je%Ajm@%l&jX?#nts4k3?q`Kh0M&$7_L9jE8cr`giBcy-G zzu{q{5BqRdLy(x2Ofy#AxqjGsPuKM#yJVg({K*c2JcEzIF_RDpHz(z$Z|1CdyPLjw zlpQ{f2G&1DW?w!NNWT!9+k@xbAh`9Ogy8}66(*1Ep`XJ!o&U{fR8MYrWSq}0_PN7V zbLHd8M@Y^27;?9U8b-he1UMqjeCfXK@L~gXC%*${xuFY(XPm3pTEMNq>J`mm!&kRv z?3o_Hg6YA#M9yp~Y0VEQG9ZpF9r&R=d_Jdh%R zi+8%1t{ex^#`lE2Js}VOZx!2@GHSDB={~quYpF~3TK^-#y-;vZ z{1D2XJ7Pg?xp{c5`2?7qb^N<2mkmB4s;xPf_n?asZAdwD(Wmh3-$_O);@>6DYwU?1 zkvuv;!W}}n+>p2(+>=VJ4RAA?rk0}AEs`qZ#f-e~WZk6vDWcvM4D3q;Zzu1z-BK$6 z;Y*Q&v1js%CNE_kfJmDCpN+6#Yd7%+vKOX%yN20#N_7l(8Vj#JBMMipC(xGKCQoS? z4bW0QjsY5wvBOF5D*w1Nnew$cTxubuO;nHln%h5Ul>1vVNHm=xDj8*G5m*^2`|lUN z%Kn2qL|J|sv!DS0KZ^kx0D#djTx$T{MCXN1TlMK7VS{~TdD{L1`uje9{fGJSs-y_a z<6ZY=+G-^)*FDg8JpYsEK*Xnv?+*kw8dseB36!JnoN3tRWROSRQQP6%nVVVd88G8* zpxGVAF+J8E(HhNI{nKRGAQ;goBa86Uw6gzkwf zH^U>^!zYYg&gx#J&Gf4^4iOQq=CVFjzn-88&AHol;bTeDHD8M81NtEmv4BocNX2N`AxQc z#h^vZ?~jx|N6n(>DGq1AA0h7l8wFE&1eS`XFq{AeRKg1$X<|)a8=Eldm9bb9k~`*# z&XiZT&E$gV6H|-4&Mdt8qmV3^{lS$-P|hq?nTdAvMwPptI8@$qVs4&#mGu#nCw`;q z2{9MZ+f_dz9KTWZ4B_~Vs;>FXH>ze3PF`gdv=R2AJ1cA6qIwHWQEYz0p+ppGrdud7 z>_RiF>UCL0J&z&6`r{%;PCj_mhQPkk3cFNbUu}h*Ca^EJ!VVSK7h7Q*Ki%$rsTDRS zTnzulJnGABye6Jg3z=TqJLChrMuCC<0&F!zk90oxW*C2!w9TNI>B&t(!@YO1vpVeY z8*m(g#kJCkg2Q3%TWDCXN@t(Vy{YEbC$pw_xV*IlDwfZR+2N6~0e*e6JDi0;uSjQ3 zv0IKaag%DbPx)ebX{{7tf7k5tn)r%`9dtWyF4|A}mmJFR{O?e4TW2GU-$)JUU%!j{ zkp=+#J_cw&?AHm9e>HVXwmbZ9f+wS&ppzqXg3A9A`0-l2rSUxy8@~l+yGkWl+Qotk zIO-8N8^)fp?!0`zcy5-FGwd=yD{_+L+tNxLWs(houkh&Ewr}%do7D6sd@-$;TsI|O zbIY1Q83F5C2i-bbazs5y1 zAil|`T-vt&ghIPwTaz)ASQhy}VA_Vo{Krownd(p-|2I(`{ySzw1N+k=za}MO^!17V z{R2Qd{IJyi&l0S2D9rQ!79shc7>Nd`-ali21^{f20U7}CYz)u<00!&ETWP?Y%I%6_ z8jvGFI_hCv%C*XlWnn|P_YqE{dvKMlaQ+RV^c6YA#xr~hmV+lW>_zv>yK+#9sYLj5 z(!yu>nfyE41m6Oh3;!WNxyxW+@*e`_R2ooump!8&NDRKCfPeC>oJihs<3RIe)+jx@ zK+?s__Peuq3yMOMe*>TYJwoy|S^xV4E;BCk2Lz*Xb1ByxIrrygMa!o;+AyS*ZSkba zb|#STGX_5dh3)?r5~%GS)of2tX%^#apAn$h z?&Pb_-7QXNhPi*Y{;Fs}lH2jsJ{7>OK_?gJs z86GwBd;xO=)AMa8wLpK-gpM@x{;~<(zX^SMTIjEu(6MITe+N3U;Z1M0E<5|uk$*?< zXZjAbE0ZjidS?zVTOED(LZW9kqk8s=rq_SAV@kHNVK5WRU632dTWeX(&Y8S$Z4?(IZ_-PvO(lLP?yzedbG)p@qxrz!owOgK(lQz*&2 zAy;0*7VshlSd7><>-cN+>R#KQNij1T<4B(5;l1LeKhW;l@2Yd@&q~=`b$4#Yjg+*= z6&|_GMi~tX_TV&EF_&HXJ%@eNW*4sPzo90}34o4}k<1QsPk?aF`%TC_Oi~{lO$n zLg};}MocCNfsb4uTsD4S7$20m!}BSI2qq6lshEJmdw z$jh6M7z;E-Pk+Lbp?K8SCs%`5eXlU^JA^juE#=7IvSud~U~CDZeoWTiPnT7IJ7)dE zbXf%$XN`J1Sf2r^-8IES1RlO<8rW1`rM$tK=*U;?-Ka7D{&+~EkIE)PH?F>C`P{F_ zW5^$qN7=_1s>aNS<*flUW@Ze~0LQ-z0OXkNnC1Evj*f}LAw z1KYoccA|ng9;_kmhKifh@@yVw4Qx{av)yYhH&x&>?qFrvy;qP6&Ti|g;Jgi-VAGOa z749?f`HU*pATUjloNK%)B=-=jQbOg5hPRnE7PX%TVZ^>R2v@noEMqYl@jQYfO&oG)GUg zMDl0B@8l8>HBo{QU1QS#(k#aS4FKpDfY`dnssHOlrcOg(CdJH4*~lC|>&{$xcY#2O%7tOpxQ3k6P8R>|Y2=kWHKe=;R&^Z3v(IpoZl;|qN)V1Vq2E2#3qh?=R` znTGJ1i12PPVGY2^?lC|E=h*&gaR0>Q(zVX~Z*U7mO2r79Kqo-sEXfW1l#&;WpH4A208S`5$tfYBJB0kKsl zQ=d1AKA0BtFNOv9;seVrUtN$_NIY)=ti4!R%Vf*v5xzpg#qihkM^}G!PQ+z}**aqh zui*<7UVD`%t#B#XgDw(8rA3eADOx6-)jw7OBHN7aU1AHPZ)&n}<9==jR3DeC^uwDov&9PXT8aRp@3P@1Z)1xF)6nO)Q^q|S8 z@Y1-j2Eeu~25109Zp7GZ|9XPz4Ww^HUGe1+qUCWp4eW!!Zz9FtNDt(k(7=HIO3BDR z%>Y`3z+X+2E&JC-#aG0|H2@#uF+c+V4vGO9pzUszqAQ{=(cdN!8nXVl1mv|pxvgP| zY_AUg~=bNRh{0APX zpES$CF~1rBa7YZ$0Dx67Km*@pHw`pS@H(OE-^nkx#OgDK-5tT?X|dX z;7k?twelrASMfK_-|_rmv8?Jvw%<)v`2;jSjQqUDpudDokXR9sWlW8RwhL zT&HVNme}E6lax7T_sOL6AeZ;UgT@FyNI1mhzQmpo0&0EKS~LzP8f7rq{OeGP#$i%P zGk)n}P36sEzh%$w?;w&p;mxXJnMQvnkbohu9LxP6bz+Lht~(2BqrIFl5o*R!mU{BR zYshOHC6`$F?0!CC~}sQHOq|72N`KNG@h-;Ma;7 z`~c?h85jeyC!_*;OR!1h8=ve`=m2QPlF^}EdFQqD(5}O#iOysH2CIl8TK8XMJ@zZJ zyd>khp8$Ug^;VI1WvqQuB;70DNh*{@Bt6;DUPkUIkrZ;lt3(J4;8hrG!Kg4?3W+d0 z{;D}XR5w)at(J-m9#f*o0JBS+Uj}JP4*A+VK1S454Dz8O6~okWFv&>A+y6u(h1557 zqH`N&&ttarvByo_v8&R789g#yLs?|3Gy=miR%+1|hY_=62_7bUprRBvre`F`FMf>E zHP&X4A?GnTw9fRMb6LTo8{U76j{-ghbV+V__i=7?{{rFRiSeV% z;f2!jK~6PDgVp~XTOJfZmMzH(K4Qf`NnX(#|I-BIER_FQg@{BXr+fxB{uHYsUfeT# z{HC2^Hf;8H^U?z7y4k_%4!%g}WPKfmliM1$XE|yhu$W-rA&G(&Ld@N@@2NmvOym$*i)auZ?7s*Kkw&CWxSOa zQI2(c!aBz2=d}e@n}b%d0L$&OrphdGaYdzTZaO>7mJffiPBtqS%miiah= zk1mQ6m1cjQBz6IKUyTFU1VojJC_#*?dw?%_kbtFgM|&Lq6EL!5B}`k*E61>zOt_*u z$ClQ=MwWh5w#-GIAC)lc{6#LA4ZcrAF3&7_=D_*N8>9w`vcDH_Hy78Qi{@7^&*=i* ztUhzQ+5TJKCBF3vdPcENNsZ4c_EF*bzk$)w|AB{zHki4v zmJ2A7&HpXjM0)^YiUiHFWR9j@b(?H9%L_=K0(Vai{q43kz~`N`T_#}9$t$y#5wHh5 zKzJQfG`kRvFN`-r<>0cRA$;(0(ewpkIrBn@>B2cjdobToE^oRDEF33b3soy_*S`+& z;8=dLGrPDVMAq3iIq>4>{=i-E(sD?$2Scl;EB2Gq6>Qr|Et^ssn-@VwVmX@A(xaJD zVH+PcYo53GTv=}85IRgUt-Gbqdex(uGD>ByzFsP8%hEv-?a9^_=W2_xiv!uC%;~TC z;6QdWHScVSR%O9~%T89?D#8^Ha&L})?K0R*Hnn%jh%OnqHcrIsGIshra**-RNn)t6 zy>e?zhA$@jVqx_nndTRhwTLF@w!VBZ+1Th6JaJ0Qd#09}Z%}ZqNK)i8%1SZ%jPmTt zVJ6+lIMLSrF_G)2{|?^$uSDFP9CN1u^$Xa{Y5j@+Wy&~Ob>mR@bjH!Nm@oRwK-2Lb zMKOIHU?UCnQ<=u;A`QpiDtVZDDzrO-W_;;fBBaxVji}D}GVAS9=Lsq6)E^;Fi3J4d zl`?xv3Y`)2t^uxIQAUok_3paxT(nyUBL=Uz2j(8ZtNG+LX&n>o5>a{?bLUzPjm7Fy!WcBb8!$ak1 z4oqMLPsYv-5#)oqP9R4Rw;iGm`7<0(khlH(Wi(oC&+z8N80cFx`LxN&mW#YR6rTbF zp$u9^?`s{m<)WjFFMwH&HkznhVw5q?3LjwOre!Fyq}WZPnD=G)0LL2ZkPK0qTd2>u z*Nk)Gc@kQc8R%wq_!PzDT$kLU(AOQsWk1oDyM6RuG<7t$%luRt$MJtIkBt8-dGuxc z-{`a3|D8O${Xb~b^?xbP>({`lxh~?z#QVDafAHYi8vma>MM=+*W{{q&0RZR501W^* zF9v7;!1*yi0{||F0UA)7<-@({>>h5ILduK>Pg^fRb$;r5AV6)>068w!{g&R!%%=G*=@0OlGVb2kOwv6?tj>R7Pr zT;RcHf{7Rq3zyvF;pwF|nk9N=NAr_7pG0(5^zMjQ?`qxlEtkqotvu!|mqXR1&Hn#D zb5z2&TspX-$1b-(<^UONLP}g+qIpfHyPaXlsApe&9#tRM?(i8F-8Yv#5c$U!k-^QC z-ui?x%as1F0X3wJD@1-zL>B&Zo@>%fX8m5W$##uh=Q0wnAsWD3K_2yC0cdlN=|y=P zWUq@=jru}Kc%kIfPXsnD)u66qFeBl%U+HUE9^6Q0Ph3u_W9|o_U(anwJe9BrWb2v< zDC-rHK{}QO#0JU??q1QI#pdosd*U+k$X9V*#Ix|!D@6|Fh5!v{^fZ4S^n=|%-do)( zAM8#bz9M*WxExi822{*OIMU2eXgBmRhP< zTVzQ4^F`h%h9dBwf<@Tej@`#Qz)qcQDZP(@YX)*t-c8S0;d;X#4Iu5Q_bQ%B9vT8_NS&Zdw zur~q9R?e}vJ}4S4qh_Z*0?c2)59^5x1e(!(P;yrirOsHM$xEn!KT{&H=U`#?Do&Pi zh%n^g4@jDfsT{rkiJ^J1{%#KXFbrr&1}=@0?Cy5=JwWR-Xb*WwN+>&*>uWRyJq~Gd z394lfibIN04FRe57%~*w6+W0K9Y!y+5#!dyOHzAlQw#UpOO+!MLu+myhp5i<}TBgHjQwuPT>^K(1H?v;`5dZmKa?7 z81m7pA!eQGWca6gSGzn63t_t!I{UL6XwEBo5pKdG1yz<@9%b1TuyDL9J0t1rA(H9xfErx~t zwg6*6{u-95azaTyn!Dnn_$#KnlcjdL`QVEA)@PRY(z515$2kT|q}RFr!tL$LWH;A( zjy&^xcGBmM{nO| zRvHbX_CI)s6);(dD{~3cW;quE^6sDk^?1V5M8Et;(f6%Sunu~y88?aD`N|U}Ece5) zfnvP}2{jAFeQ*azAydP+cfJn)Ko9M77;&5o+SXU6JQlZ zDJ@?Xm0a8`Der2hGesBf<&xs-DK2B)(O2hn*+jp&uAfb83gO_DG=s54l|E;Q=%1`1 zF*vr~EAnG4&1{d_6X-@p?g?GTGrA{Kg65u3&a`1u#0tHakd9>@28WLCv;-^E_&&WG zREV6)-zNT6a=Jn82USe+R=gV?P8H3jFBm zv3cEc2E%%Qe0KD%i!mXboeOF-c`f7iYzv)Wp(y5J^KANvv3>*5tMJ!}>nK!R<6fd7 z!`yMkt4erO^DurxERgXz5w)yb=QQ0rG&$?~R~q|wN^~q{Y?a(Zg4gUy3@#5lQE{2 zb5$PWY{F{Y6oDSR-~x0;WHK^?^h<;!7e>i5C<$Zd*r_k%`dsDW>aDV(uQG~j@xP6$ zC>HHk$*}IFM5AF{H`cfzaUIr~1Rd5j6R7ce$si)o0Dy@Ypn)a!_Wp^wfHbr&30<9p zu1P}ICZX#jgje?Og5l`qKQ0N=6YKs;V9b~u|E;Dr=3un}^BI$j|2Bc2KnBgpy;1`i zzn68W7Fed+z&6ME<}p9U4kLh%3=d?a1`epcB5|vMi$27}{ei`CIn`Lg(wx%qjd}*UyZQo|SXo)G?swGnp#9E?Yv_y)ewIrQA zr6p-_tR<$OHT6XEpeF`p(&%v?iL6Mgo@g2LM9U;aVtE;DG<2GJqGiw%LnmqIm`=(b zOs^+e9zD_WN%5FwXFbuf=!v17H1LkJQ+8lFJyAU9iQ-An?7+h`da_rfCpWh0NgABe z69w;}C#Gzxo=iay>xqKV6Dg9`lXUi!o}|I;^hEQZCkAEG=&=l^)e|j)o@kk*NGz}E z^+d~{Cx%Ya&@r8z>WP*|PqcheJf_)MPqZw0VrVA~yd&+M=!xP%PZUprW(OXo(UZL+ zJ-Mk>PtxF&o+x++Juzil^<)ZySWgs;o=B0jo}{y<^dt>#rze^RJuxVgMvrAUt)6HZ z^hC=fMPhkPuP0gtJu!5WhK}j%R8O=#dZOi%;xWz6dZJ~~6GJ;`;2ml2L{AhCdZKs| zG&}Gxjh^fi>B-Am^&|~W>4}1O&=XU(RZpfMi1kFl=!q0b>q$C$N>9?@c6y?D&=Z3) zY4liz)9Q(qK~J3ELgPxeOt$H#AL98bVMo*+jT2Ip1Q+kpH zx6>2NgPs_aNu$RyoK{b?40@tvk|MFZrq>fKgPs^VNkhkUcB&^@9zD_WN%5FwXFbuf z=!v17H1LkJccLeX2R%_d37Q>v*ila$e<_N>&gXJ@WPDkJt=z{-Iqk@VRc6#2%#}r2 zowNQY`$)FWlD6w##cY@J@zdtiX{G;PQ!?K*eP;hJQ}XE^Vl)w&jLVqWe8f+afy?CT z4B78fR#}{ACdoL|k#|0<_c7eJo$dXNP-~^L203@>0+QthR`6wD7lUNo0g(9c7$gf2 zfW%zKAX$k3Bt0_*$&v&hX@nRgYZGRngsmMeL#}_Dg_vL|t3~Wxv)UmXIdaHc*1lw{ zy(pfWL<!{N&UAbw9k|4KBs!N}F&NQMD&w&P;6S5)u z9PCn5BBtRsZJ$|NnrGIQS}n5E?5eu<*=8NCwUC(Qh%vDRiM(3qaElNdOMLM|+(bDs z%GeDlBepiR?zM1-buUwfQ9_eJv9--LBV8M1OlH>I5;K+9XTzY-YE!4ANT$`Ks~mQL zPK#CFH99S3eOKwUSoU3`(_-3{PU6c=8_n5KZmn%9=PXn0!@I94=cde>&9bZYXtDCU zR*x1lzpHdwEd8$0X)*P?N~guz?;4#JbHA%}S}gvq(P=UHyGp0U>hBtz7PGH({(qon zEgoRk>e1o?c2!<2USQYgw77v?rPJaGc8yMpD}YYgM(g@9zCflKt!BNwFVHf~Wp&ND zwNP7MkfyV%zCg?13#P1X@6;D)IedYZON~Qg!#yazMvhQPQF0*i0}onzSL^g+xr47gD=p1rPe}ieLU(l`|oqR!Cd3Epw?dWv!1#Rhc@CEJYbn*qd4~#F6jfGaT-rg5z8GM269k&*0 z>kHC!cGVYX8GON%J?fqM0xgFx&~m%z3tH;bv}+xGL0dWEH|6(dpz1+S2LZ3)<1?EH|6(dpz1+S2LZ3)<1?Y*->sa>+OAkmcbY3`HvuzCg?23$)xW`hu1^HSJnQ zU(l9L2Vc;RPA6Z`mQDv>(2hEH|6(dpz1_T^*@myYUDqE@rs-WO;Ye1V<;Yc15)7o_RzsxQzo z_<|{C&35Vwv>d)b%k82sXsJ`vu66VUZRvFI1?}i`@&#?_bnpf3=ydW0T82J4Rc`Hk zf#$~-X#S?m+WLaF_2}RW+SQ|zFKA1rgD+@Dr;{&eOQ(Y`Xh)}$FKA1rgD+@Dr;{&e zOQ(Y`Xh)}$FVHgo3O(!K3)yazMvhQv@eM7tN4sltJ)LS z^7eF)5qGd4{mMCS#b?HQ!s~eh)v5oIqqyt!{HS9c%^8ySbBv_^FmIdpM{!uD@@Up-@81kQ)#46VM5&nLv? z^?S#!lev%`9Lr>f#>e$V?%M9*hvCQ^LeeYb4D<{oMV7;*Nf2m0Q5?bTFy~f?g#ik>|F<(6h+pr>Disxoei*TBB+4C(rh3KDrV1| zJx_%@1B#?2G|XaL78bJzh*`m$!+B;oGah=LC<-VUmIan2=O7rk@Bdy^_4M@2&J66r z-Tgk6rl;Pk>Z;fOdi5%HRW`oo?+RxcKHkQLCitSh1Y5+(ZKrCm+P(9*=_aeS>CDuXR{^qhIvghszj>VFCidW70Nvl@Nu;`rl&CRNxo;-EUX-M zd?#O7fv(xCKJek~Ncg;r%F)F8Je)TMywHc>6?cQgj$U^W7au(niBo*ZKI4a$_z;(U z|AuXIFQxCgQ@qkqsDAlFZ{D}U%Xgfb@J}5!O@*PO6zt&G79cD*c|KwU`vMHJ7iC{? zgm#7nGzyg0dIC(S;Ux;$UPNW;4R((Uf%0b>H!+>I>r8Sn-c<-aLv`>MsheA zg$&Z0)&&wKBN!1O7=*mC>ybz$sV4)FFKK#xe)*=7rdQ_|ZzgGaZGP$IlBQRdFDz+# zU4GfaB+aj?O>H*@q3G?UC&8pxtw958ii5Jwf}u*dD2lC(@iA z=|uF9se3Kj1wp4sd*Em{?Z#xs)!0d7If*7j*pcOgQQ1T((Q+N`Jcm1<-DR}>LM7o* zc#hh?q3kGFK=U1`1LgOU7j34%4p@-!n!ye*CTIpbz?i5R>;U6F&0t3h=*b_U1Mfng z;_jPqA6%3T!k|z&m26sV%b>JGabII~T)5HYV%Z zRCG8+?ukWp3tEigJu2@qjiV8@*90?A@&~UxpOlUs8HH0v(vV8P$J>LprtLwMSn|jb z^B6p69gCaZ6(<#&?Jpq1I!V7HJ1ET;k>>lH=F505-i`(zVSEI)VZKUl+7t0`!PDF~ zG?#a|qkV-w;Lxw*-YdWCIE2qmYLa9gPg2lMgV=4Thu8W$y!{+ox{isE^jjxTI7$Vl zcy2*(oN<35DBdkdK4zT+y6Y#rbIASr4cLKKdO$PS0mg%x!45F6W1LhDc7XA)X0U^7 zZ8Gm=gYA-l{U?xW;-CqykO_h4c|PovL_9w>ys+Md<2m~PgBlb8waw>e@E~hMn~TsU zBWFNld^B_>e$Z}6<_*_*J!`N7Oqtykp)Ty%2vb0Ihr%_-Z}f2358)h&tpL%U%a0(r z^JM%6*8x-U=;%lAa_0G9kGvaS>B9(Sl|iQh0rv2j7r+N4l8+w5`&=lW51lC@J+QsZ zMer$+r+(sru99zEOySkj)*nF>-~@6$#_$sI>1h55Kb0f{6-V=Hg$f;CM(BK_erM2c zbMssIGhcBRN^+6>SuB6(tT9y|9tLc%qf(Z+06gr7dnwY&>*B}eFqAfzPhc&vpm3uf zwXqndvA7&T1MH!(Al$uz;{MPTcN%uVLHi(pGcl@23W~c<8G46g=*R+EeABfOD~EwQ-a{388QJ;)B2y62R~OWK1S@OW7>w8KnB z&x2IRN58aXVG102%R=lgC)=Z_wz6o4m#ZPXYA2ezA#A%evn|9o%wIv2qqJlZN=JaXXv!h?z-6fjROh$RAYIzu)yy0sV4}u7HHqw7UGyo^nQJY zK#xFtLV6XMYBBcUdmgW4^#P*kMU9#mwAVQAd`G8(fV>uD$r@~@XY9?J09BNoBuDB< z5Cz;2t;Jy{$bI$boa2+vm+4b|c_GqAj~nSjLjtoFAT)P?%x6(0k0cTwH@5RxrFiS$ zZQN?zMetz5(cr@%gSj{?!$i9?fX%8X3f|njkoPyNMBM0Q>vvO|drCwbHS(CK8?ZGx zL-rS=`~|#fagJhRdrY7!{Z3LmMm}JGLgB&AdfdOv;7o9w_>3A@XM)}ZQ|>){zR0~+ z=Rt-Te3Qvw$GXMM|-pVc{rQ#NbLTea-R=?jG!AGoE4HECo}e<)4{X+ zXqn7gx(qL_Ug&slc4{6@sBMoO>jR<3>5MFT-0_}S*ws5bfPLtxbu)YE6vW|0y-kVX zMDU`nDXILpSN<>t+D$PrI*iF!dL$KRfv4j6uK&X3%$WqzAHsHmPRUNo%TC9MlWAG$ zA+fTPnwkSIGpA;Vp^$q1MHtoI#PvG8SEm5 zW5kIUd=;u_4^0>tmB7dZAM?Gpd8jx@J?J1B9V777GnK^*@t1)iJ-9BaTsaQ8iciE| z?<^6kD>l-!0)%aQhe*NAiObSPH0~y_ou`!L!YiaKFk0N~a{vCrC?7>5KCIx_aSiTK zH{)iSD0d~;LLK{7CY56VCrOqnStoh9P5cG$E_)w?LNrj4R6&8D9VIv|-uXb;2NZ&Q zSntr_hO>gwK+Ey+vZ?URK>NIclEw)P6_jAA*Ut*XdQ(9HrtbCqT@OE@FCo=d1)`#x z5>ivyDu!}BZ}`k4Kv`Ib-9;s;WV{;_3uieg`wJ)QkRdSGL^_wH&4HDUkl{9^xg%4Q zk2cV-%P{=(ci3T~IpI%rWNXl{9dw=mKGpSwiiJg1hEE5e5>-l{X?544Srg0+-Y?Sqd)vh4J9_)?hrPkuSH3RK%W$>Z;vI>39 z&pXJXmsmy`Q9;$8QjV((GYe7~!LcO7L{tb?4uOTb@D+sOT9X}e|LRNVW$|Z}^`qop zrHIPvkApD8ok3LvmH6j0q`^1kTc(GEq|KPPpdV*ghU04YJ0C1t5Ck|4dP2+af%AmAJQF5aaiD`&5-1W)kTa3!&rPlp;% zi-LvwPPQmQ!l`!}f_OsKRJSc!ieoO@<7X8>j55faL=k$iDPcZp34wC#U| zy#FK}{1|bOP4-sMi{W^!3Vv-f4{w~6EaM`h$>&!DaHxWV)d68JRMHeb#ofz3VQq$0 zCYVxSPYc1XAoz?FM$r%D{#1)@7Q?qNC!_2$5&#?K;z5FrPPS?bFFxGKS3xhHl_b&1 zqZ(PFs@q6RY5!qB(@=yz6?IF}Uf<_BJ?t1vDLPva5|_`!QQKtmfcm4y0hc3KubU%u zaWfpof?s)h2cNITV>f}K45tU0=|{52s2Q5JkJq4oAr1 z6ukJ-83<{V6W_w7;E3u7MAfx_D{K)wCM^f{gT1hAI32KolQ2!}i5tkk+0xj(H$bP% z`23x6on)FK(h(LL?zo_G)3w(V~xH9qCsEDiLhTuOeV-@5w^h2 zFO7s03jK{6z{X3!Ct3PrVLx6E+5-koo;>z0T`s4I%0nl!fX~5 zM)iuYbJ7kr7u{5Uh1zR3-x+RSXpAWZ?aOZqK5uGRK0Mo5NH|^$r#P%xbEt6=$ALC>EGT6F34xUIs)on*7_oPl~8hntw zni=KyBBhCg6u)`!Q|6o3qDn7AODw<*xt{R}f0r1)oIr`ILB^hA)pJ z_vKVjd_HWE{|{Y)C5O{dP|h>VT)<_N%|vI>JeHkbQ+NM(a+*E)ehlu`9>|5Ja|^gJ z#K=C@Mv@gHFBHscZ6Zp0Z4L9<=JeVg=C#A=wKL3X7g1;=ybs0X)(|_8!f_-J9dAU* zk#)KLCFDK@F}VeW(auibLfkI+p;jn0jwtZy__e0clRU=O6BvI>dUyTPh@co-4$BB+ zz>-{}jLzDm5#=ZF>od=wXr!lP*>Tbto&*IY;I;U0O`Y76VO~!WrNkadsfNUU#4uCw zxMBVQ_u@PZRFOlTU`1yindgASJfV4t_9utSUp6POKeE%j$|sNTnpZ<%36B#grv7^7 z0^Ngvc^Oz}DPBN60R00EIy=Casu}D6hcZN?sSl%qq&kV(0jdo!~TEIVW|M*1$;fxML}*|M^E;`lk(8|v}1n)dvEq=bZwGKEX39MQ?&iwe#^Qb{DAJI{ z^`AzQJL7-R>Bi`3fGqetBFeYW4+)rKAa$W)uaC~|)WH>6zH7djgEVCXFecnFFz==4 zWS`+Qq<9D7RKxHHog6|DF5$Hmh)$%Y ziVkx80;8Nq33PCU=&3v9<~^J^wa=G;{{zzY8hd>hTkw^kl^Zb82`@rcqUDRu(lOKy zK?e!VS3W}?E!TjBCTSo$x#&uaOQ9(mNH>5iHHY~P;HHj%tc|LUMH5pG#X4Rmn+~SH zAs(u0!SbsIQ`Jx*B1c0$P%;?}wdB2d7eWVN(kIokjVAj3LC#akv@fUqCS|)b!}P z8Rjiu$yTt1ia8K`AK4{`4tV8@&q7rm7=IE{#TuA=pM~l^K&xT810Ta2g{Li4{d9yd zMr7#_6|?{XX+8@%9!O8gw6zdV`YMNp_3fK7A z{AO}EL?5QoBjPX>9Ega(*-62}3$-@Wuq;jt(dUH7@f1V`)iXptF}sHcCsWEfGcpfj zDId)K^e!3lSIRHXV-EO&S0iS5zAtbM+V7`We2}zs8|Fy(mSp;Zmi_!(x<&$F7t5gwx8){{g+iR3@1x zNI=C|`FU`hnAf}wj0(~{OuJA}IzNp_^u?q~J`RX67Ry0$WDv41$)Y{<82NPGTc_G;6MS{mj+X3JmArcNvs2pllzE)yB4e(QXA zSx+EVxG#oVKE~z48(a!dQ~_ZF;4C1%e4Lbx=jfmsbQFE5tTqKzXNL`u`>jh5X$ekJ z+=wv6xn2y4!&nFM*h*Tvz$|hze+Cogl3q6-`PnmBs;J|v=PFFUOA{(iIgd1tZ8DE% zegyZ~_^<6L8B+t8X5l|8Dbe`v$N#3_wZwmN)8A#YPKHuD)~->tLTxlTuy+=OF(1V1 zpjCT6eyAZbn?lg!8au$4qZ#bD6Q_+%LQtGFN>7Bh2q~&UIu~yorw+Nwo&=y3ix7ou zA0na8>9Lln=BM;PlAX0QW{6`H{gFji^?JHV*X40eFAN;B92 z#$sYnTcr;$m_v5MTR}W8mbWE?)eiruqDL;F(Wy_HJa8Fb> zF9VR_k!GzHf*oM2)(m!lu|_l40mfR*U7fU!X{*a5~y&0q%@n>2$R zU~JY5c7U-(GuQ#fR?T1s7~3?19bjzN40eFALo?XHeXhd+;vIxFpIL}mxHe$W-!$_n zD4;o=fCWkOyO^D)bI-HNo`w&))TEr&GjO9pVWQ4|7EYRodk(+p_T19&-%^3Zfehhurmk{p+fMHY+29nO}3~8RB z1dlb$SMZAy!VI)0=fGKp@uxtJWVc%56$0m}P!Q=Zdkxu9QH7YKZg}auNimo8h?~h$ zH(p1mvcKYHQr5~Tcgk5DL@e_aYsf(ADfdvm8s!vsaVz zt)0v{|71EDi?h`~*+K^kl`y@jKSwUdvh#PAoU5XhI)@!2^@RF7G){_nSCoTC@RqW| z#{w;D1}L0=?Zrg2IU8;q@8&ZXzyY2)i+}xj=8tfolh4np`E+?cGS}m%?!Oms z2O5%?i1; zv4?YT1P{{OVF8}!aci&j4WVpK!(EP5L!18!!e^nk5wO06voPSL^e7+C#P0&i$6zYz zh33{sRMY_@*vKZD_QKpz@20)ejXa-)9#X*DGGM-km{MAHwtgek@>_@?V2;9##=eut zK8l5iGbi9J?oN9STkj*h(g)0JvM%F?)dE|zvs!qQtq%}N>PA%~hcWR7ssz>mO@(g; zCbYcf-{DHf;fZLA_&|OLl8c0QZyrj%>N??xkKn<$VhswlTzVcaur7)EMVE-fEN%0W z#ZB;C1bLIOFcIi<^?S{a=~1tVR!#ur1WN_Kg9lcR5(5XcV#jhcOTGs$m_IvBGoVlDo#D&#a}EU;r-|XHKJ0ACPD(P-kPEOJ*~z)tzT9ko+2@ED zy%U`MXig(%R$g|KqSCCatR|DQQ?t;QB_LTYcnJl#DzEh~-3HF#xgc6yb! zpsF|vi#1Hl=b=W*^5=HUz;cyz6IFg7+h3HFm5%;Z3f6I?T3;a6tR`62(Il%$Ru(Fd ziCJjkW&5f!aZtBJCJ&ULNV;V~kts`hBLrg1&Maz)w{fEp`!L^OU$c+pM*ve$@l>qX{6a8nte{Kxn}mbYvG8 zAb!X^njayel2%@GI#L79U*act0x~>>OP2W+=rl|PakwP5V3-d33=d_bo=z=gs{E+= zRfy9_>0y{YQW~2ye;|rvn2u0OA%k7bjU6-n$)&yI1AGv) ztSM1<(u343&+p9*L6RhZ|4r~8)=M0T|3!_1XW~WDi;f6h%)fcTtNAxGID&tD!Mo_U ziAa%IeFfskNV2LilADbNhJ%}pr5H)FKZhfz^P~;Hm>QiekN4r#Y}q)g5D}==HOWig zf;YFIXvL4LDff49x0P)l^O*}an@of zIVgy|(lKRDUQn{xMU8l=hs}7hs=zs1^DN#~jy{EkYf!~O4>7fsWWu__M9cL%EkxxM zQ6TL|rg(q4oXg_#Vgd9re&;8U0mWydlS?mTm_LDpV$8))y1zKh=g-p>iZ3Y-;>o%N z9w~V#imJl0H<)b1h=lVpl6%51V2X&EkY4Lwh_>Vg!<5u`C`^HDLwI>D$Z|Y~K0|j29>7+`(l^Br%Vv{sGV<3MP>mz@d=Qt>NZSkK&i3)swRfJ>tUzr%yaKiC1rUd>n}cee~-cOLrfyv_yU46{jIw4TUR58!f50$V+QDk5Fqk zNAROYIf>@85Y$(|>os9~x-Kb1%d7?>rWt4lts+?|z7oU-W0d7h!Yq0K$d|M-__G%N zm?YpuJgMMH9uCaLi*i4h){$?+v#and4<*1HE=8m$jQs1B@^jl;E-@*ah834od-<&Q z;mS%b`wBnShYt70><)WW*GuL+NRjPt;x{q=5U{3l$h5LgK@bA1{QTjJVJ?FVsn$%0 zY3+oQ1!fGSm-Rh-y3X;_O2qf@=GLc(h>pr`>$m9R6|7Rha2!L=qNBCH8qqwbzYwBz zdUO5AWx0}4jt5)=9BP3>4r~&}@Lb;x6u!X1Q)VrsaJG3f8|yZ2k!W?Uv_n)@sNKIBvXo8d`T3*@N)t2k6bTw#ixExP z7m%)k1jRae(juRf8guer(wuxHFwL>1BM>YBt$BgEi#3Q-)%j|@HEWr5I+QGc?||~U zG(m?@>6ef7tH_TEhT^vuZQupu_;`jW=_!X8sf{!h@vkMBUqG5P5m$xAi1iW(w8y>H zW}0MPNtyXKV#)7<`9oFf6&ZT%I2&>q1k0_lsN z^(8&U+5;5Hi93y!r%C^l>HgwL9d*l}{Qj4F6`v7X-Dq~b&GM#jgE(ax@-VQ#bqH|HQ8 z<@#%0r#ollrzHb~@I|W+PHHE5;>QPest+ zqI9Dr+KWnb7B$5_li%z~VbH8?3eDi>q(~^FdCqm^a&paHPF_Rro_x3 z^zOGr=fj%)Lf%+-5bZH|?}9gG@i|mbg-SLlPM0Tg%h2eu0}QWbumg-F&0q%_X(44X z%%2gdY)(&smXSteQ8Hy*FYJYrG$L8Yzz*aM^#}im-}PL!en&9YDU?jiN9Uno$*dod zp&3QFsn$<$VA*rK{9b98JNOmBpHl{7WthS6Stwd$EM!@0DO#T_?E_@+X&Kl7hF>$- z0Y-{uu!HsJ1jvZW59MEu>v<4;aeKq`(l4f1h&Ja!I*eyYt~C#o=_4`l#X0{Xdy^@A zru@zET0!J?0h!X@BtX)nLWB%00z1IS)C_ij(MU7cfg!m@6m{6zJ&u{mC9h-|1ZAW= zXsjP(2N+qJ!453ZAz?6^(28V-e>3gR4ltT)20OrLp&9G|<1o!&2e6~Ee>{FSForD= zGe+{!(cms*DtL7i>^)s`sImn+ci#5fxAq8V7`eBeA1 z<8@fS5WEC7!&(4_FL)(67s6?nha*^U0_f(}4FJ5jS@3=kl5dzTD3Vd&rxhLM@ZblO z@0;Z7vlbyXzqOd6x0c|Zo>GRE9*qk4culvp6im3Q@RN}md>x4d->2KxxLH3UXlk%U ziKdq!RH{rsieeE56|qC<@o`LHRtl><+U1z}q6!_g^JH1l`a>?Oni56d27ROyxwFGe z?CgMbkRVZv0!vb`4z6D?VE}_8Z5BX!0vOm9|mS?l`p4AX#_!Omns3~~;C&WHX? zN5J%)uUT*pGt6tDp|q%y*j`Ie71J^J12m-UHu&6v3XLj%R699lcLbs3Y20nhH+v9C zYyXmXJ`PD^ew$h^6|EtgVRnPR>}ckfwS(I{nHVj*nmzgVI`bI%#rd1`lVqMqKgs6t z_#qW(tKW|uV6@W=c62q&lMvFPOegV)@LH^2+Kcoe|1mN1{YC&mJNOXBFd~rXELwj5O1qQj&oW=Kcw18Ei7X zN3#5Q3zTo^Z6$%K>JUD-*e{eAEpDN4MY+5UMY)yxxGAeM5_ZS@vc~(WxowNC9GVmJy6t(NxCjjxl7yX%iv`GfEb;Zw+L5^8*pEwOGr^x2ZKCPeazH}SrUl5ly1F>cl9hqujQGOsD zU)=GMI)4hUfRjYJhnSPTH9+qT|)F{&&_MkXKre*JR?} z(GXgG6VnH>l+8v0mBeDci2=VNSnRwBU!W>6ucbG?KvgMSDHpJoU7^uUqrncX;%ukJ z!#?Z=Cf=T?z%YS;g^@|+^tf$~nbQTF;7!DL=`WsYvJ%YYXaT ztouD08Z6m)6~wpgt}zOWE9Iwm>iZA%G>ae`62b1B^t4AtYRrUE^S#fd@?40F#UV*P z=AYVq^Dy@pF2H^db2KvzxPnK*B%|CN9e6QAm=@COg3Bt{LordQw}6p651^-Q=;< z^GEC8>;M+j$ELL_+?FthA(*ynXF}${=pJ~$XO*G!(E3}lVP4)tuuxS+O7ptrj~{@B zMI{BNVH{4qY#UU?yg?;>oKBh@5dC<~V28?|H&Ld3LH^_ff-`K@<;BPbtwY8roT|v> z(&N0eW5(i1!@M4;Slf{vdcS`{k7Ea%sJaJ|z>ZJdEqber(LIrLs(h>V!M#XF&2`eW zntTY;Y`io%#VSP0lKB*7RouI0K&QNGf=H*E6G>p3pF~R^?1qDgl-4RaP0{QWyUaB+D@d$}GBbv_(9;v?6{tRBhpqv}VaFtRa1I-z zCX9K6$l`nlj%?DQib4m;$Z3WK z+^r-^&|Ro+2N$ijJINDro`fh_PIiECvSzSD3r=M|N&EwH{SLXjXk(3f3IQF8Q)rBO zf;htn&EN}A1=-8vs_IGdAv=KiKzxtgR5h&qXzj4qZSay><>%T2cGBi|JuGN+!2mr5 z^?Z(0mFZRi??41*KP0VaN=pTnb-)xz;6Pcv&t-U@y@c~j1Sh*r?*yDFZP;~s26mlZ zi%|X^fuvn052?>S34=7%t~BhH!aaDO_$Al=|}+SIsK> zLE%RsRkHFarJ%D2I%-Xs=>8Y+*y^kFD4q@WMCM9MN*mH@Q=P&_1C!y!Y7Y`^YG7mK@N(kb93G>#J=}Dqh zD>$$R+AEOz47g4{S<)tk88(4eS*hrMVJ;sZH8pN5>49D$PQ=<3yuE0J|0m9Q`P4F6X*9BwxF>8!pN&b|3$7VG7LDK z1}*4y`@HYwuX80Zw`xoGq4SFdE_Ggo1D6&Ktm-gunK@`#`$5%wE!U1}FgpyaLICF@ z(%p5)qVE@Oa3;}bTx8@`=0J+JV9@e*gI3^bTe{M|K!V?X&~kH7HK!6L7*e_Nu6Z_4 zzy0=GN&i`377kc^{-`+@kNN4MF+W{6X6^-J=9#5ch_g*;&5@<6aJA-(-8Eo#99DIH z<-7~W;F^o4E*|q^=h6l86}k;suyq?o4d`#rFTZx^JDcL~zp#4MW;D6v-=1H7>0~WJ zoUI1ewj8{guQe?P<67McS82`r->lJL)$gfg6pxGwN)k8zlHp4b+Yy7;96n_2VMEr* z>+m7#4j;UB*yL(gEsA+v@gINvT&Of@tULZWNVo04Dp&mN zf-4bulVRHsb0ceKhg;UK-@4n5ymsTx9~OnF(DB#LL%D#cuK3NqbC7Oi{B46Zki4|tBKTNuVX4)K>F{_1G)FOM2OAv1i}g_G9)_WSR4{0nQgHxF(^ z()EwOiM6BE4I9^P+GR(M@_xdd>l#}-_c8t`__PhK${x1)z3(>Kk;75(`r6FlyO1f! znke!U{t@`poxiudT z?mfTS@k1fo-naph0~us43SC6}te;Wze>Mt*t99{%;p;I>K6uIQiNLiw7&(V#vCg3&U&?>}Or}4e`6|vn~IQUAs>ly~4KA za3E&X1*jKhE(nYN4^_~$R*cJ#1$cm>zxY+@lT6nwsxAzG?L=yE@T z7`l|spR)wZ8p8gTuG&^QX?~9(bC4HxU8pAN@?!p+j{Rr-`Hs1>7h_#O^graq?mc_< z`$AJKdb|gWOG=1#R-FXHw07g;Y)YH@DJSE9CH~v}6z=+h zap>>A7=fiLH;sQ~>4jq!b{aSjJqsAm|LoOc*rL;KoO|<>g>#l*8DgxzUw{2=!fQ*r z3|{E6HgQQdN9gp)ejmDibzagm$?$Qbbp_~Dx_I={i+|pYLH8(sXnk1^FLFH+mvqU@ zwiMM--nV#c$zk)Qz^HMYR{`~r)#c>FZNH$*seR3k zTc2Ix$^dk)I+rG@Hb_pU>k?a5j<~l|m#Q?m>Qqb}M!l(w!F~%T&N19whb*376;>AR zcz#KY@U~Y7bJh@vsuYQ3mctPkk&sttT!IHEh>2c|t0iD($3DG9b2HTfc{J>z@}Bovvti*we^bDi>+^rLYY z*M+`bVZXWZ>d7I^e)HS+TTsw%LA!nn+u|C4CLE3b*fPt8oO95|F?2)iMn_9e z=FW^C3Dbvu2(vqz%33}0GZyE#S@@cMf8ib&ZC2jDaB&|g&f|2XC+YKheS zcl*oLj3-MTl39*uMZeqcg%@d4x?<{#ux?1yq<&bi=D^7>N8un9kHV46=)%Of>|l6g z%nMOQ(js4Bzvai!Vq|Pi&TTI*w9whjVuf19Z+yGG!kPfzQ2dnX`xPjMnAe zKlxzA4j%wtkM>5y88@6I@9V3CRBtU+@U`=FKE3W?Ik+|~T z`tk}OsU^1s#-M2Qi#y=!TMSj?oa#l|RNayz!mu#Z2FR1}N@fhChpwAmiev4!?~G-U zobt0F;(4w*KOCNs&M2xkENC zbxh7i27~9nGC;g1)z9TlJHhY_)e7@x9->zDU8jjS--R3 z#`P%jIYTy9)rO`=?Etnz$`3p-7a(f^YR*NJUl<=};cZ)5lZgD<<|y!?HbB172+Y_< zpD347{r21Mmp-tXC*$^2e!a3Hmi!pyK$m=<<%j08=IpuW-8j9%2d1v!naUm6);`G3 zwV0HDSxo$G`4`!l7}Wv&vGIr5k(z(Oq_vprh#Fopzgf5?cf?jL|MtZ7=YYx&c_4qw z8#Xy-v?JdFRaM8)>ru?L{09Pm*q{B;pGMa9cf)7QBjqoBdJSF^C0)tCFXcBb{?5k3 zew5!EUyfriU;c7EDg_i12#@6r4PJi3|Rt6Q(k1`Gx$bpl$mfxBYV^4m>N82Q-p z%f@pe^{@4G4J}?8y5-r=;~31*uS4xgb6}>>MhbzSnEVjNmcOp{13Cqc&Pzh=hoMhG z{w@6fvl8hnit5(ISe@T9-d_%p+Nd2KsO?VX?xBY*`11q|g zui6rGJYmC@T^(-0(ibH;IyI`;@=6t2QZjg5BJzhd9-_6MrTn2HFerZif%l@Rv(24kA*jb*T$EhmzCO$|GMONsZd<`Be8OF<}BON%-R67^`!1S`W6qMQLqZ{OxX|lrT2_ z(n79@LeC(&`R=nB-WGjhUK3HSy$Mdzr zq!_MQ49S!W2r=qTlJk1MBL=OEFTXZBHpnsb-wtzey!i{4{NK#q&}LXI&v~g8?{W%B zPa8>QXr&_NZZQ4SYS4<<@?-u>+Duz8f;XoA$dGa8@0{{)+_J0ZEz9*Ro?cPO6L|!+ zy!6zhoQ337k+rP{Esra|Q*!A}MEUkuS`N8v zgJqWMQq~OC6(eGlvRLFrhl_Aj|!P*-%%w*flZXvkpsYo#-=bT%@*3aDgihJ=)T@T7( zcG*UfZ^17@V%STVfU16-FbB&V5*w?_@T`_x)v%GKGO8rEJr}lqY2})&od!k8rl`+y zMo$sMUh0vB_bHgCklIf@dbSYhkA`@CY!>;>YPc#c;oMCUFm+;v+ zB7u!|C*6~mM1TepbgMF|w2@3KHFOCN5`DdqkL~mNNkq;s5?b(SFGsZH3_0}5Nk}fm z-dD+y+>i$rVV!EE{PGnh{k1A_MRFk{bHw#J5@e^qGMMYxM97YV7L0v%F@}<&3U4!4 ztl2v0^`#e7{MfPo4>4EW*STE3VV~+gcoxiK#Z!ytRnhS-hyMPn5U|@|%ArceN$ML> z`hJ1_{MESOkG^G~Kl+}5{to^Am*G$?dS~uzdCAXQx*89l!9TvY-A-KAZZ_ezX-g^&Z0(o_^!JUboME;Ek&J%fdFz z*ryC%vtj$FCl_@t-Jh0!B8}bz!#LXBszbpY1ldi9dY8e}J;78CP_UALi$*-MaPbQF zr?qi2;*;;z9Al}SLk^H^bw%p{JPN#auct0Y9l7(L%np3#_{JACaWS_8Jn`Q0q5+A1 zvsM?3`^wj_hcJ&on3kGjz(3AKU1=J)a9-h=LV2;T;?*-eK6jn)YLu}B8*|(7*>|f^ zYU-I>;*YyvcYqecIW$b62Urs1gmTJ}BaXZ{xEV2E@q7PVW#b&xfzh^uW_B2PrR^cu zwR%S&EcY=`_h`dkVF55t?TW#X7piDDGa_+?sZYor)?$2=7ZrKQEPvu)Xnqvr8TN3* zVnH1h|ENsP2pN@Qd{X8z+o*$_3pYHzs4o1gYqu2jPjskx|J1-nUMoBqnMl~9AxV3e z*(2Do9SF&n8icoF(|Hj}kqU)2O*$hEY}EkUzGP+e(ZVO*rG0V^(B($nt?+KF5y(9xbnqSE}SLepyk39cj3^cD1Rr7i1Mj;J+mMje5bW>As+_26F?W# zdiqaJv%2myC+G_AjLMl8&Wv#90$Zd5XO7OkIXeDPw;I@Q{9_>RQ207v*Dx~LE|B+? zbmWLGATcw7Y6rVsI1ssjX}BobFGSR>2KEpCFz`b)tW)Qm$ZOleut&w*F>xQc{e_d` zn$UM;md*>#2xqNf7l(+lVD|?btVVFH@Uiovq41YF!!4XJgQL|xguF5iA#D$XOJnYY zH_RQe_9M(!?@vNG!iy_H_mGWJ8KFc9&xI%jVgIzz_0)mGzb>`c$fK%NZ|X$erSJ@U z7?K)ixw}Y$_t3t1IwKHgC=29r7nKo?T(GkMGILq5bD_Zs!U4iR9{9G}v$avCCIpBJ zcE&sk)NUc`|PhGnQLBkWwTEs~uJ2O`#fox)W#V`FpuXG7GG#`Da^ZnDS44=mKa9uT zPPF&>UxWWbX_;*mb-^AEwY}9UIqbEsPKVx$)eafjt4ikr%1&5DTztn8Y~Z;+a7R4z zzleWSns#0~FH}a@xlr+ZLR+-`cjAwx=5-U|YylKka_B#-fsMSwfVf~+P#=b z$KI|6GEp1+E@pk&pR$vSv7PHC#My!=QbHH!?6Hd(d>i>Ng^z^V{`^pXZ^+-M$}d&j z_d3hPpvS6X9Jb<;aGywtKk#v(9ZBvt{xB5?g2;;Me4khvw!$Il^-({4THZ1->IceyQ6gw=Utz zF=VT4*>Lf=71-IVF6bJB5B%lCnQWgp72f6E5Bz1E((>?f zk?L#fZU2G4t@du@88?PK4C?S*7v#xA_FZkRi!gd;VC68&YL>5UuyKaEGRwvvD8{ zS3cvfia=~DwD0(bs$B^_;~!^-pSbc%{3ZCx;DqmP%>XJ$!vR;v4%+7rIvk;_kw;B1 zOK*$q%!`w6T^W0eS{uFkJ05*U?&KW52<#*NVbw0OSkB=#6#lX?X&amfjMZc>Jk&d84Ik(jx*aTx>{KK-Kt|E{){&guo*3Vqi5c(eze2qN8t}vH7WyQVo z_G_D-t^3f@1R>q0V2_aghv8pWEwC^6M^}E#Q(rT&0qhUj>awj8uJ&%^9e`tZJGz|P zm)UOV#rG`(Cf6LGafZ4w1^7cPU0D#d2<#L7$V5~qvdw85AFLi}5d5QpPu523yhgrG z%x&A=9~FOD1op4}FY`{f`KfZ3mLJNG1sm5)T%5RUQA3`7>oVZ) z(tHM=tc{Jl6Ikqtt+yPk(~&=H<5%-z?fMv1nEEpre|5%p?1oT+`mgYhru+?szXV@5 za$IWf)cGiAW4}%3W#`NIcjBBWP=BbS#sK_b77{T*iQpf#=H+FpY6)fi_5ZY6m+77q z8+^7o5o+&1o&eWdhSuS@WK!+^9R(5<(tTnQ{&W(7%mTG`F6xL-V))lt^CA^2TWSdW zanic%E-B4-fp4oc>v;%yKK_GtDt2A1uV264N15ys)KLRJ@(yXH#y_kfV<+8OCZg%PfpOFt?&Zo)PN8!ZT;y$ia*xUAnPxtNgG*_I!AF#kU zxQYN(0diw`Juj0u{*ldoX?z+Cf9}{a{<2FI2EMKKPUJQ0*sp#U4x7N0AKVmsi+&eS zktA(qe*el3zl*a~e&mBrPF?s%P6{M~e{AD}b(?)A)?5E?Tdv#rvB6h5&&U(t^1J|b zw|2%oipYslRQHS1*5nV_^wm!df`5Dylok^BtN` z;71^j!zR?#H{MZ7Q2}={SFPXKcI2A8p_}F{i?!ju^O2}-ssGXhxmrQo3RTCep%#dZ zeWz0ROA&ZU1fjBbC2y@agzAd5w#A6jvlfE)I^d zXl||7_^;l+bC)Z?K9Rs5u(176RX|;1p>gq#TlqE+{wsKF&8hsL81zZ^eyH3sw`1F|4*aKq!zV?pkLh(zqa#-E;bj(OUZZ-e9Stai2X z%chPrJ2v=x(uVJ8Q@(la=6dNWa>sgxPKdMdZ#iQ1j-B;d8fWXjs|w~X_(DsA62m`E z3`d@+MjpFI&0MxLnK)j{;sj;*!b&VPdEO~o-dRi->ozd{?ho+*jjkCtCZgbKJdT( zm3p<(fg8HIZExIw6ti)05g`17HG6*fB@)%dIWGL8G=bE*pjhqC1R9_8h&2GakA!Qb8Zr_a@?@rlDL8&LnDep>%!%SZNhqZyy! zKR-RKUj0)PjjtDM&g1h{S^w23nOp>*{|$@3Y=TCgj!#7Y!|@L_{u>^DN9F5k`Do+6 zCw;`8Yo4gD+26SJ=aLF}+@U<8l=0V9@PWaf4tA9Fud@qQAN-;G4Xpo>`17bHk2A<- z=bkQOH*DJ(>&WT2W*=)&{`|-qbfsk$hxEUp@dr3@yI}uY_+y;m`=zmt%#I5_0z5ly zovc<4;cvr*_7Bp95Ms9)f%fp?K1^;XMPc!=ms{W0M z|3&eRERUNb7-u-h1_^|!q@y~`Hf3xv-j6bU>-~{k@t~rmY{|z$#<(z-fCTQ5U7pK?vbGd&l+?*ZU z9s-|g6RK9E@=N3IG(HDZ{~3Q8PsXeYY)kC%XK8=P1i67i zDfQhPW7D?X#iKWdgYUNdF6GBEjCKvD|7a+}Rzv@z4nFKJ{_ZAd{n!7TQ0ba~-`-=) z>TNsgH3*M!hJH`3i3z?O_6fCopaTtsf2i?acjL2u_=l?C`s3g2X5f$SEL0I_K77OM zW%V6rcxn3jOe@sjv^%_*QWaGy<_?7_v2{nQ0kAGJO z{;)z5-(3@PQ;!gpn2^v-f zxE4R73aCH+U2d+n*B@Rwspj|J_a*{zU14x|?umD<1^9BD!LD%K;Hv@8Fz~SkyI@4a z=)Z0J>stJfApX&+U|9ty6I4(9VW>Nl5&pP3-n@GKmU^u{K&Fg-eGRS1rOQ@(YU+oX z9q#bjZBD8A5CF^I8xDW>%%jWr{FmU5gR0vNUjfByZf*E-UVX!*SdD;mW9$2I>M|(_ z@@qHl#Ciq|JCxszd|dGH8BY6#!#}q1PXvDo6Hx`og;@4NlzM*uwQ1|l{6VXZ9bHq; z{TcAJUGIn1I5F2YhuS&vg3ikeY9Fcj&;fjg)*$%TrTli!3&19hf9xutp7<|XvAOx+ z+HV%r*YZ3#Rjp^xu&ae73i*)Dp$az~{4MzU2H->a8UN+=v_JCuJJ+(GNaLR{{$VCa zj>S1!LG{G{U-Q=8`25NQElgd(W-Qv=boeG)&z%li=fe#?b+u%r?*t#8A-5kK7Qgdg5P~N+-@A`qU~H+D=khn+W8g{1SO( zb|m<~-yBh0Z~KFRO8Mnulr<-|R__b`v5G+b_uohy>d26Ry9oRT@n61Xd&?2)Y@A&VZrGEZmzT2kZna09 ztM=NG`&Aww{9!poY-JzHzS~=-kVC^x2FJGc zTJ7E7WB0iZBbL?Q{%L1nR&4TO_t|IUoP9q1mtvq|%{_p$?I@ zwyPG76M5U_V7oa2pLZ&jdjJ;JTmKKx{(F>PY{Xne;NauGVau*gH?QV)quqw7%b|9m zM8}FR+T{rfFE6e38|-~Yu?=ZM;7{L5+p~>zDgVCeKjR;z2pnYmu|>dD53U55(wM}! zYs_OI4}BThv%tL_Q2qD6jcaY30Un)N3mxW50vqG5HX^na z-eKxtbKJ-Sd~8EqG@`1W^{;dP+Zf8fzxcb0z`?}-$7NfN7`DcVC)_$aqM+>vskfR!o+hqV{;Z+SArt<*bfjntGE}RZiJbY>W^&iN@-F$oh^j~G1qar?N z_y?a_p>~Is`}xbJON_hP_TLS=6M0+h`9v5xgQKDFk8OGCqyLm~jzPJDga6;YTH9jq zTDz`?J@Mx(;EK2*&fke) zbEMbGb=ylu)=1FyCkYn8U&;HvH z$|6?(^QU6t|I07GU3^cqOLd(j=g2zy?(}lGZH0Ft?*t#mV3iDCTu=Q!IOk7s5umov zfyV#N*H$`lgWH8_Y|`~CD}3l^LR;7F%5-9re_InFR+F|8M4RXf=2h zn~1PO!Ca`uC8NO(n?nZ2MjmJI;TXh*!2h70|9f4%&tI;~{%qW`tLH7tSw;2fVCqOs zw%csIqasgeE88AYb!}%9?2*XxiL|RaS&Qmze-0}C^*{eQD*jjn*Y|;CQbqOMbsVQF zQ|csT4(dpv=)6Q8-}2x(gul#=XFslKRVoifjXVWd9u_GZEivvgSm^FFHPYHRk!SpC zI$H}5>HmTiTMDh^432#+EgZJ34ngYF>PWZq5q-Wb8F_ulBjCdhf)gaM`SQQU)u#c)Sf<})tB7V<^MbWpUhlSFqrlal$R?bBC-QHA}>2fYz{lPN_A!> zyKT&+Lm|%}O|0l@E%<+H|5vTs-o0$8{!&PnT_dL~IeW}vEa;N>+jrPxyEr%< zTr>#Px-Ms6huf*`~J9L)^j{% z$KY_t4>@h*l^AmAh?Gsv;mW16B)=Nf#K2=h!wWVJbvX_+{xaRLTu@)LCXfrfxKZat zQ~*Ovoi8Dd1LrWN(sr%za+NYKCsr%gT*zziX|R{ChCyB-Q^)$Bl72tbm1X6UglJL+r4tl_M-lY zHlp@BUm|jWJ~WnVDu9N*B1?oDMh&kt<56&S!Y+%Lj+|1FiE<0gu4E6O&f9R63|v@M zv&qKXWlA)j8N7onvIIg5yjDHhuL-sz7uw54GVb===<7{ z-#lfJ3v(yAX5)_IhR?SHA83a&7s4`v8%xph!Y&~D;Lw;;OFmNJ4;u0Sv-{BbHEXvy z0grS~pS`Ylz=5iW>&j49Mug{u>clA+qZlid7tR3W=B`sT%*oCiOxV?14_Nr&j5U#f zM{=H?x}xZyXMq$_XM{3M(m+LIhf-r3+o%rvS?wUq{{yhAHMfiIf1^4Q>bf|ef4{cp zK{P~B%Y`E^+}WWabyl5`ZUy*%3Um9Vx(!+I_LsGFL0uPr{idCj&n)gZaGo8{e}f}D zQ$h&a{Qm|aLo)QAKk~7K%WAjQ1#(<|?fUI6eY||&eG5(87j0{Tm&k!vHyiM;IL95FUr{a3XL>ADn22L*=9T0OR4VzudID z{&Uxl?)uYRzy5og^94}<*7MIqbdB-975;lfQ{3_Al|Rn=7eA~$r+h)tfW?LV7vk#B ze~~$0aeKbt04e#nA2(vb)PL2UGIEX_2f)yTIdB=~%i0dY5<9G8S=n~bN=#N_f(GMA zGR%p=dFa*R*{NSG`F{TD_rF@wdeCw#Zp7l=Blvrb3vOHb{em?!=dYgeQ_WF>=a2vx z3h2LZ*(%z?u4>h$!w0Rx$58T9&GsW|maX0jP!GI;p_*8D3&7C)7J@z}oHh0%eRy#)S{Fx36Mfk46=64vd z$h>Y&yMasX@YzE)Vo%7W6c?>uY)5aaMwcK9YkH#Hf)b^5$5 z2!pfII#sOua3-C(M&YgK;m5tb8UcRaySMklbfjY_yo|r^Y^OYb9AAyo#u5IR&(~tV zM7+yKGwH1ne-{o9JdvAHp6c2y>o)C#@4V$(4-an0#sR@YH{0R64x5MUMtB=fgv1{{ zRX(W_n`+Xx`Pkg!FtJpao%>(9Iiqe-(!k?<~jweLFzmq}M>psDAuSs#D9 z##t8j&wc78=bY+68Kb{+{J)`V$IczQcRsr7(Zop>LvXL`=n-v33$X#ek3A_wn@dIp z2MrrgMj>wh&Le8NfOqL7V&Gm6m)bUGUV8Rv@Vg0gpHty?>JaN%3XDGk1^e=oK4_WR z62vc_ZX%CLxDd4cPXLbR5MYj9h(0Molz_Jrw1wYhJ|S=kFT#)^p#Km_j0F8E!n9Dl z_wbvF{}d;p;on01j>Z2h{7=Gvq@>>1C%R-8X8Xh+_=~O+;l;pAJ58d#9T^`NZEk zk#C>Qbg%AAPi^9Rau<@YZx`ZQU5NiYyL)%-m!B!d^%&D5Q#{zCFgsJc*5lD0KGE!G za?d#WQSft)rTdY5FX4O7V=0EIJ=Y<&#V5=-!6%+M`QDR#qVuUF!^LNva#p7J=$t9% z_{8XoDaFjoH(llv_x2)plPf9aJFh%1H%}B?+x*%*(W!6qYa!cUdf(>d6lTY$xubmI zfiZM{k?+GQ$-U@yN^vXSGw&dG3E$7)`_+8Eh3^mELGiqL2R-%a9hCY)=5M=WW6rrA z-d5yC`F<7O@8|m`xcfxYCknHV5aXV>{)r>R z!?Cr?qf3i;pvXEpy>5hMJW{Y;H3y2!)X)L;cN`)I7_?@Wy z8ZmXTqOwIQLiPuhfspxl4)p;)=M}BMX)NwyDj-gUZEh?ki@zbx#^MYl+E{!Bsx7E< zIpkbWSt3VV!hYM>FGpO)RJw;k=8C^C)lN}YF?BLid7>{&J?azWk9A$M}f7UCAB(hZX3FfoRuJ`z+G z-t{h~dV)#?HI74`!y%6p4}%h7AgE?Q<5~8*okJFbN+Zcow`GW~;_n>tWe$0i_>g7! z$e?#PPf_0~>Ld1Br>Ku90bzLW^`wdm#5DG60V)^x{X{8>?w|yyx#Ag6XDf-{oR0zh4DYe-Xbj^#G`L;%boz1!*j%vfni#+mnoxrlaa^ z2HXqaZY*Z9-*8Zr4@*JiiV>m{`~Aj#BSdHROG_fZ>%}RcgeU;j4AiL}(#X!BQpG4x zxops9#-K2Sq)EV%Auko!ke0kBiBS#4x6&h^LvVWa>%roX3mQA4;Yc&r{-EPbHpvmi?X< zA2Ic=qCVs2rYq`mPbHq4oxB1mJS+aeetSW+^1LMGdPoae`Bos-SH)sZp*tF0si2my z-wDdEil4g#R4dP`qQ(*OHL;HUMzY^)VuQo)uVNcg7hA*PwT3?(d8S;F}_isq+<;ZqU15 z3W`EDM(JuS`ZD#dIFhNGK(!O^iFO7Roe7|tiBCjNP>sdo9P)Fb@Z5`_270E6lZ|9h zA0V~ip0CBZ>^GDBz82>*RmGCc5SOx?TNTxd{X_~$Jwx zQ$LCEOicszmS>)rWKh}sDP?2IX=tZEY*5KDQa7fgf_lWD5|9PzOV3jAB2(>|sur&^ zbplg0;(ewrVyaer%+z3}R*TOKYS-U}hI_JDCuXwWqwKd%%tq=$yaTG4*d!LP-?!|y zQ&CHq+9j5--xj8R7S$|uMu4Q=Eo#`W9jGroyTvM|j#boZrY>Y^kJ!M}V5SVu?@Zm! zl-J{dn2p60MI|%!22)9%RHmjYDvhbRO!+<8poCbjs9g5*q>(HE&k;;DQ&cOax-pgJ zY0K34iYj2LjHzr-H>Soh)zotwghTHMR5Q`ka{~KKXTQT0wUDV+p3~TGi=xh8Dm9&C zY2`V~OL=>E`qAk`or5@0RzRI+wDw%Y)Ci{9crIsZ5>xFwS2FbmQ>LdMQ!|+A=m|2l zN>Mj4m6}0ucJhp3%4DjG=T?^G%#4dOQbkwKo$wRlDp1YDQJ(QE+4byqJSfVCQJ`)z zPV`J+>Jd<*j8i->c*!b0lY#bzagOIbj^!y;O>q z;5nkc;5cjHcaw3k=WBlM7pDH``Ii0snPk0tc@{C1!&HBdNTOI;qO+HZdZbkn$>R4pXfaH9wi&wr3-H_s2X{9OoJE%R((y&D1rD zTFKN6pw5S1Ex*y-jh<}O3^m-YWYWRcK&7IFlhoUwlDw~Yn)v9A{sAh*`>H3Gsac@X zz3+QEF|{02WA6u^6MPiQ77qD==R_aj*|_nOjhe#mOb&Sjs8sQR=RBsmGWD_Nat?VG zs3h++PhX}k2bJQT?YR$>5Pd;46F+($=I5>l)zrI)DEL*f-%igWe(pX{N#0)-^*X2& zuQ1lI-`|eN);JI z;r)&VmEvt=G-B#hP^Y1W%jW0)$j>z~nzCO%Q0IB`K~X(+L)P6{sp4>>ou4p!3RIG} zmC=z?cnj2UZ)@Wyj%7NiW}>}u7W>t(U!kIYRn)m0OOqxPODE&c9I_p#+r3?kYnVC~ zRH``2=+D%dpoV*U7(+OPt3Wjq#~4BO8_s?`6?HGD+r1|kH?!X}?02Fuim9ngon(w< zY9@y~#kiZ}TnVa~_=9mTQ+t^@izvKp<7|raLQq~Hc+{O-`i)6URWNml@c>gVGj+M~ z5L4eW)!TT4so$8o%6N>a*Y2WN`WTa$I__?wt~H)us+6g|##2CEhO~(67ZF-EJyV>}FDbM3X-C|5->T;$k zj1QTb&eRy=W2WXYHP-lqDgR`8?l$8yrru=gPU8!vE_#CeCK%Hl)Fk682lasQHB(Z~ zhm3C=)Z@mt4r+=q(?LCL{J@k%{uyI7^5~AdjcABHowp6WsUPz^o-A=i({pjZq3K1q zKg9Q`O)r6aR@2LHUk^^}|6}jX!>X#j$N#hx(l&3(}V-3o3kS#!RHlgfJ zkn>UQDSI5!w=us#xnAI>dpYH85TrSKw_F7{Cpca%3}mnJJO9JaLCE3kGRQDiy+TJ3 z#_Ct-3YNwBoHeevL^z!jDvsw#Y11H`lr|gXQz)N7xdP?$AnUQ$D((b7`zos13!oIl zR!Pa=%HM(K=*qo#RhCxyim1x^L5|1sGmuV7dluy@C|^Ul6XhP1AEW#N|CWL$gx!#gPf1)O;y@B!q|%u`yoe-IA`&Z@gP$p+rrUfabyyB`y_HW zq>n~U09jCVI~-|dEZSL#v$Sd#Am>GpVeC@1YmmNPP4%9r{tKi-s;hKp6*wxeqUzfr zr(P9xOfYN2b5HNJuknkSl-3#Lq!5)ZTVBaXlz||_SdSVLpj3w_oq( z<1@8YZ=9)pL3-wJXq}yQz0K=f06)>8O18svSCok$Iny(IZ5`#|ojS^!P8)Sq`r#a< z4P=e$UUvqvIIsz1ZBcHlJ08;S)cq4;E36w}arQ@af)&UX*UJa_T)hdaEF=`u(Y&gy*klksh z=KrUSl+R0zR17l~-C&K_p(( z2V3S3Nmz-bv?VgEL>MdAq&>*iO_IUBT$7<7do~#ba&QyXV>6oEV9@_4t)|b} zHjSF98dXjpo7i+e$o!_KA!kc7Wq-L@eQ5g=aXWlDdp1tZw>RT<`NH0;`BBKxHs_ju z136|3)x)76!&r+J<3aYo^iYrqX)_^*vn-UGTc~)(v{bWwc}vwB@1iUO8OVNWY5J+z zsO;OcQgTo$W%G5bFv$M}(`6q~IngK^KT-?wf53D=Yn5Lf<G^(;Tx1cwqFhDWgV3ERg?!h zC~xO5-MphJJFw$guo;1AwJk$$L)z2!4?C`hwjV_K70L@B1KICrUmOW%wL7VP>)c6s z7}rVFxCy21|Eir;y)8Sd>&=0km3D9E*Pz~*F3P?~7nL&-(|X&ShdH9F%I}6!`&of$ zb)3@MwI|N^x_$t0)(ul~FQyNpEI@e_wt)1wE8}uWO)x7;6}>YzD=v z9#|Xyy#Ir<`hC~y;Z3V zy;bYB_g3EC?R^cj5lJfN*(7x=)4jbnXuF)4kRvN92p>;?90O^*azk#Dk{AlG<@3&izQ}GN!nSt_cl*drsMj1F> z*~g&lhf?kBIh!_Km0gYU9n3$A(tm=QEp;axhZ?(0P%WJ>L3vmlf5aR;Qq?A^9@Fzg z+hk2trQSgK>BI{5*>C4if2fg9Qc{9^aI70lQZ=qYxeKIc#$K9qKO`ybD$1KE{{Weg zW=>W|-f|$}ta9?+(w-XM!JIE9-wz36#+1(?f8Z3=4-<#nhIHi|>8ez-=_+z{?&>+$osRi>`+5(x zRcEMckQN~8v4JzxcISO&c&JMI&_KHCc?B)^&qxXNoTs^Fs#=zy+=8;$zbDRLW=;-G zO8Wz)-z=3b3(}*FoHYY->Y;3cvL(t6D3d`tS*MH}@C3SdMoU=Mq0W4qZ0)R$kkeR0-u@l~uKrV&#^Y zex+Cp%Hu0lny*!7O3yFdQ-(9=GSvftAf1fQc{u`BHY`(e$TAK&k1kW5CobCpIkT6& z2C{F~xBw^HK1&@zo?ohFh_{D#o>P9*k-`(Ljz1{7K0H>5$ZiZWZ@y~9nC#+K_szNi z`Jd1F732@uzk~cZjlpy7;xwF%!(PtGK3bzn9Y$GzIl8R2f4@vsXuIyEVe57^Q_;Q) z^5=OUfYkYYvv$Cf@4i_LTX=d>=l9N0o(H4so0S1t9Z%n^S6X_~+VYF}%Cc|PX**wA z>M_!-Q#R_3hru#JO9n^4R-ows4+@UL)jUdffHw+`rZqZ>S_e0URXovQ$~KEl4Q|CO zcAaQRa4+V|(!#ZFRqz0K?!K33bMOebx3jT|*6oCHZnif<)8XI=@B}wJQq!s6Dex4y zEzzCe$Kfe(bXBFxWd0!;u=a4hO-taprTTf=P?kuwAqSrOYMpAsORR!TstuKiblb53 z*xI1r*BAy#ZQlh?fz{8`_8RN})~?EZ$fDR8O;-7k!>ks&h?H*C2q^^miFA!ZzJirg zw~^*q9YS(|?jvPc$swm%9agiNsw2x94iwD>ARSX0qrKb5mFLpFVX#wU>?IhCUTW71N0eDSm|KikR2y#47!Hw8=`KdE5cdM zMWVi?!-1|6%_?1uH)c197M89BbdM+te8w`Px^B@{@EOZ|iS~l72`f)@6sb1RC8QQa zcaVAzl?YYkQiv)bP1MAqL+gX?ahu|J9D9l=CbTVY!B*N7&Rek!L`^~W2z%Y8aNdUH z5w!wcTlR@f;k-RNNz@K>9oY9ah4W7A7Ex!=b!G;x*T`a>L&JGj7DyBix^AqJP2s!; zi$=<1NzjIPwpuNV!>w^D@5K&kvd)z$g0%q0G_fDb%;rh#a!s^kKbM)y`><8DbYEL# z7Xz(B%3widSMX$|fZqW}g|gYauLhQHRs~&Ob{Z|`!%WWM{n!Ov4rl|=Z4t-DAS;h_fT{Whu@t0yrs^BSHY4e|JDBZ7Qrl4u zAIuKgln3;=P5XEXJ7v=$K9v2S$$F)1As@zWAf;PxlsyFWJCd$_IJ4@gsCDhbSqPHW zjbIhLbR$?Kl8$90t8LRcK9a?0vW}I##7D8VNa@zavgd%hA!(nZ*?1&f-)J_~OZO<7 z?WKE^%}3JpjbV$uEXS~wUY29vE|6-2wj9e|LQ*4^$H%fawayAFm(9nqcahSqsB(Eg zAKB&d_;_~2rWDChPGM7C=y7i!&$5xPTC+Oy}bx68~`Rpu`u3>#+ zdHgAsVADRH!TKYmLu3hJA)AAg#ky2j%%5S4ZR#r)u@l;o^{+5gEMbcqsQS{`m_d8iMY5c2*PX4CS6@@y)SzmH@gJ*c_q(l@5s) z*z-gqD;0?KY%9??q_>HtR{8>T`9x1t%HbQ>?v~1DCVQsR39*4)X{9KgZLIVSQ0gO^ z_5i)eP7oaedWprg*19jj%SJYe=t89;wvjC-x{8#Gq-X0!wjW9L;5D(4eQ8q;e}$cS zfG*n9#dwANuE|Oc>uGFeMjNc%8WGk9$PX#QniQ4|>yUy-H#aN~s4|kS{Z+X0sLH9@ z#~ZJ*dTkYDSvSL`7+YB^5euIM)CwuX@(WKlwy};#=~ig?QlJFVMTD<2USoYp7ahI@ zXejC8!rw8rvoWNL56=ghOuFIWUl^~m$4QqO{w>ga(#?i)JJ@2M?CLEZ6aQFna>UpDW3<}aiZvm6OIGyB2k-&Zyg8OO(GQwoEvx0 zUR0b%*cc==?m7HZJF?9YKRb$P2T*~n+aGbq@fn-zRjv^387sB&Vwi<&rzY!Sh>!U> z+e36CBmihX(dQ8b;tTdE(S?W*^9y#I=+}sH=27+yQo7}gi~#zcbit8z%wy~tQI$vo z=#D11C)mLJlF5!33)~xQV1C6yh*|-iWRXPmA{&^eSPW5T(4ApzkS_5ikvaTZmO{Em zA`i1~*+HaqIKypfehYWAJ*~~*=UK&0NY>5BN#=Rh5b1zVK-Jkm%}Ezgbv{r#q;#uc z)ulk)N!PyWB=b8qS`$mGnhmsvXmHgH=0$cI=>Siyy4k$Mz9rrCs(JhpyH2D=?0c5q zS+`w{*k!i5i=ugKe$^aa#5#7>^bAsTH%-f`=D;e|D?~4V?gw_cyVh+-THZs`9;67g z%w$6sZLRbJTdj34?nlilY&%khRjb-&^C$K;Qo8j>wKG5;kS+;y*VxCT8wg#eDgN*MM}4tS6>Pg zM7oIZQ0K3#Jn5pt!+|16*R^_qxWj4_B~=eG@32NhDb=(2UDk?dTJ=1jh@QH>#no#& ze`6ChvFEA>n7^@fqSt_aXRDC(5%wP221~V}eJsCvW9L1#hv-c8L*frsueZ{vt$(`n zPZp;MxBfrb6(Y6uGyZrYT5`4Z3%-yjIwBnw!#qbcEMlS4!8a52j#%z=@~?>6fKKvD zNP6q{;ddV(2P`7j#TV-@_-hRF0;lf zPCveqbT8L<9cUfta%V5q&UD zcD=?)r;E=ZGNZn62J($WVNn;HrFcG3qo^O8aAlmV%B8bMqSiY@_&Frq6Qy|(QWh&w zvy3dw@7PpXhVm%9c*|lDHN$yX9&1ySEXM~SX)hJ{Xq)nQ1%Aw?ma-ym)eobF9&9Ho z^Vv3amEn9h(mc@hmXSOfmhZz>3^YJiRe6 z?7+7X{ZZ=;*@^p&)4Jf=xv~piNYtSA8?rlhjMuu3wYSK4-kWGx?R~N*FF!%+X4O9F z?9G=W=_~d`{sK~l^+xRinaDR0?WuhXXa~|f_Hpe~GKni6aII#31=NSw9whB^2*0Cs=yNDM^1!xRDwd(#B2uvo<$*-1zG1u!k*aSP zk3iBshx1`thdxK}u@BH>DyJeF!5=45k&WQ67JyR`8^`#Wjv3YsM?;zl$Xc&LL%iQ zl^-NhUM6yDlD1S{Ch@jNdWKBm@knsxSGOYQh7k=ynxQS(xVoyG@{z_eE3c?~OHSg~ zQKx6!RDK63%gV27SW|h6$;#HFtA(WNo66hUx-wvyh;+&4+q#j~G_K!`z2x&l-6A%P zPa)mSx&>kypH3vBFY#%74pC6F(#<7`Kw3uBAX@p{NE81w~IIm39GrFNQo7X3bu6vHp=Ix0_MmM#d;N6hU@$u2EtvNgq zN%h1KpyArmC%E2ZD~)d^s#Nb1ymeAYbhL(|TSV1RC#LGi8q_O*cNhYQ;_Bsq<>hHg zm&JP5n*%6-f2TV$p42%3*DuE~0%UN(Q4w?j&|-mjMj)SYyn)H`iG!;?sNrrvp= z!KAwexF$AU5ldWCd9!vjK4T@MX?RpLbQ@medyw>=VI$AC>6o>VpF-00y~6JisrokY z(Alc(x_3A6{zR(2O?)Vlu5SyUfTZi&!lxtY`nK{pUY1+=BBYhp{FsJ5TlosDvzEm) z15&lAdG<*C);`<#8r13I<_=qz8`IaPn0~E!#(cxpseXCWL;ibXQheUzFQOL}ONjX< ze?yaXET%xb#dC=+#e|q|@qM=CB%hu9b4@I!;VhqB{47z2hK-$XV-0C+W#xp1^L*a1 zsei+zKI+{ywZC3jc~rxdK6`DN)-ass+qAIZTA%$ktq1zprgs}|@Hu4Din=coseUPF zxZURn>J)w1aF@@gHmSB3*mNFr#dHPeGky!(pzn|u@}MVFr1{Khl*2#gZILppz((0X zU6InQ3XSrB5=mF1Q4#xs4)x4Y2+pKtl%Csm8m zncBacNh^;bAeAHYS;LC zpvQ@l8(-oV`8=YLjn4rsCYsXtC!b4v718|0H-U19RyF?J=X?G#(F=`lTi^5TM6Wh3 zVwd^bM7tX2ip%^1B6Vag;vW<31ziy@Bs$)hmH2_5AiC7p33NddyWO}c`;kYdVQU$W zZ3=HU&L;8!y2=kC>2dgpA4ZzTO2zt@_=#U2st_Ao;%9E8Gx+H~yTN^t)HP6-5;u4l z(j~6u;4NN_gH~mk>vgbkzRB%1|}rGZnSJ7)PYyEGg9c8lK49qU!=hS*&H#7fS?*9Y~q1chjvU zfHQSeybRyMT`p6c61+(a)cSz^uEzHP-Hx;~sQ?S+|%wF52mZ7;$# zS$CRc`F0dhNa>alw+^TQ=}N|hIy;GGq^lSg4%C)(b>d#~?JT+ywTRmSl&Fbyk4y3C zB2tj%u_19eyo-1rNsnz8aTqDf`abS}Zx`{o)>${>jsU4B;V9$Jn-{UJHU&RGQO&b? zvF;J1ljubswY!RQNUG<*^X)1^S16yl=evv1NP6GXL(D+ZZ@1WNCJO$niY49pti>51KO}vZF-asN>DDHR z(M0NOCQ0NXo#U6GTpzKID7a+~PZo!f=D`v6jF~Jh6RACIUtwjb`sT6RnBRTX8`{las+z2$HHzR(vpPg)YUGNcqA}5( zmPKrsXi4O3l`DpcjzmGNviWckPZZWF4`=|Au5X0cjg-miwDR{GC0wgj?Rw6S5#^C| zEMr7dP1d$nL4IRIYogt)$^vyE%7^;Kie5yYL49Mz03==CIPnbW;-a(p1hImsU34DM zIxow|M4{HAMfBbo*@UA#dw4``;?OSB5;aq$_^OF&PE?})Yo%@KEq-iP|q#j3R`mUMRH zk(183wC7X(83AwLDUDhW78G3H?7KWK6>yCa)#A8J5TXzSVfu!5MR9rwxXT4gVbS@VIaP2%T?Q^Y2uyt_tDf&J@Lu`Vl@gh}|Rjmy?jTbYBqTA#Fr6XydFNo!K zIe4lrc9G@$HU(mX$Rk?aCdAwz4iIev-HW1t=v~mgD83>(2=%=rz9l*a^}Qr66P<-} z8^v{^Yfx^ZxJ&dW=->+sFX%DyZyRF1EJ`4q^C{mp#pe~_k2KHvHDZL{DAtlkut14?Fz(Jah+&HyAX4$xQC?6Z4X zVgQoXZ5OVM=##B(x5RIUh$h+r^rl#Vq-XL@u}l-rx}D-VA~oxFiuFj^=PvP~SGjk@ zAuruK;)ItjSDbx-_{$ilb+BC#%N0IE$J^zKT;V3V0J?WYS)yB@dskE;Qu~niL`@>K z4|z|-AnC~V2=R)lLDT!fg{0fJSA-(z-rXyjYaJdR_KJ2y>iDo%bSF~BhYv*(kvcwn zC#3v5pfUDW16g6P{R>1oyh1AVjdA`M1dU& z#HV5*QDxA5Dl&=cg04WUBWeb^0Lx&>vnb<*;*dbSZCUS{}LAgTlA<;}IS167k zg~N5!8+>RH`UAz#(~GOlAbKPCc*p6Hkd6iQSH?kj#N zDibXQ-IwAXlJ3FdB7SReFP#v>k+klFSnj3!TCCQDGvsTro=DA*uf-N3HA7B`H;B{> zIVJWWX`iP>xoySueIo*p^c?&~L?CI)Z$u9-%d?`7m+q_>3gq*I7lBw(Sn@`+>ngNPtf=WaiU21Kg9A4DS}Ro{Rt(QPPqOKc!=cF6;Jl}J4?x-H%$QcsL-i}#2^x)g|C z#YaSuT|&%X#StVu4tGS2*Y&8Vez_x>Bk8`rE81y-qi-RboqjFiRpb{Qjo z6U&iwYkwE3kuuqlE^qqX6E}1@?CU?oZx4{q4&5)OA^SLvI+9x;Cv<`g=V;Naa0-wToj%Y6U z6vle5a)zqz>V%QEgD z>1!^_;BTm2%CfAo`F=izk0y4uYrbCzBgCdp{Ctf{NC)_jT??7NQ3L4`SJz`DjSfiq zdMv<*CsNmAE+ZL9Uyr$rX+-LJEYMhml+W*URg^{K(@l|zOYJ9uyY=-6G*+Wd?-|_2 zdZY||ChRsg6RFm^jW>vDbSs1}GvyM+bUOsJkEkW+f{epNok16597Q_7RQrMrpEt2~ zrfLr{N+apHTiU4n0L{>39qD$`ue6bdly05q_8rjEq`T0qK!h5ZM89+kF++_tM56mo zer1doiCo=p0&OL#*!_3Evc_9PQQf(JSz`}Tqwd+foRLq|wtF7Xr$jwLSKj!NXdLLu z8)uR7nd<8b#-6u|+gHIjy;D&-%YbqfjT5^Rsn*u>uV`FG%Ez9lWCXqK(dF^VMrEXx zY*~+3|1g8SqjZ@pr$|IUQd-V5@G8Pm4 z+2b+)+QvrYp7$iL^(Z(d3@_4kd5NV#(G`@({GnONzTOHza zMLi>1>sW8l)i?5q`XY%vs)l*&Or1sk^^HBZg zQbS{eSGh*UB%AVhBO}eG1ku>YLQ?mIxA-?PUeh|fCW$k46RB&GIO9Cg(fD2d&5a+B z(yepx9{~M=q_*P2{w<8(HL+{)V`NLim8V*i1@CZt?%&F&Y10_l+K5HccU;;S@ksO7 z?f8@aZH(PWx<&1bz3(e8x+mHj2W|2#+1@yAQ&7oH#$}trOLjMUet_kyr3rAK$moZZ zZsjE8ir&UB(rrsPZ6z9GiQY{(4>X17V1kdCWXvY|A|U|iDWcN}^-K0KmJt1r5XJf! zSwwddvU#%cJdx~~2eg?eq$j+;Vw@(5Lb^cI2rT;=SBZX&Xk4rVgOJolD=Cw(@4`gHY3ptm}%@LdOFb;sL&>Nz%1iiqLqm` z@V&aLMCxhoY$J3(*2kLFFBdS|=xkH2c*5vwQx1F57-dsfz#LX6@R^jc#F(SWnw-?r zSY|9hO1I`G^#NK=I(6o;+*nOIb>^|$*no6^sdox9jXgx_eZx%S9+H|N69ZNlzDHE; z=lH>-9KO;BMaqE4UURH8qBY_9(kdes=_#UkAT^g(^jQ|L%6OD$3(&L1TwM;|Tgoz? zLDKInWf?0;_felU0nZt0N%vWwi9j1kx3_eGSZ!=4I*PQL=n~RCqB}@Oh)RU2a>t1( zAf463)HCnZ#xjTyp6>ZuQu+FG&(^~=08|`h{8?eC`Pjsr! z;eeNnbX#{U;1%OJo6ZHiYHYQsskzPAYg19c>&8u+ehqlbh$!&HB3y49DK@!X?-}cC zs^t2>xL{K~*M6hgXS!TWXe-xYqlHZ!T%Q<;HYK<|HRceNO5Vo{j4WH1>?$<2+XPqF z#(tX`n8%FMHVt(hH(Z6D`o_CX8f|Tw>N;i2w`s2HTVtvK=JwXW}tZbVHX z>K~2aHg#}aF&?)m!S$2zGEq20ea+Zo>ylkR8^>(Q<2Q{TZE9fNG8|v%`kICgb^U6@ z+BDwvn=#I&sjhp*Hk;{p%|7Q5Ox(rjAm>g?E0 z)ET1g?l^5z2UicrFE%B(5*!syXfNF$>Yk1mqRtR?Z%0>~@^~M|Fq;~f$&T4J4R!T% z?67IPYoOzTO;cTi9T6vW4V^>hx`sJYY+CFZ>DX-3TGv>|Rib!^`Z0&&Yh5lrw1X?v zQO>3W*Cajgo^#Bz>2Sar z$5xw~nmLYlY${~y9behBK4636Cef_qH(f6|R-94wrQ@okjgE~-YA>AYdf9QzrVm}4 z9FA|4rP3X7z3Pau>9}jVW3)}@TyHtn*>u(Qj^l_;w_Wc#;8h#)A_CucMBC&W_@QIC zO{D|(J673LIq;xkuT8!sk2tQ_R4ec^N9D5~pRs{Q9q~3j5_sG(-==PXUpsc%loWWz zaoMJ!f#)2d=NSA{`^E-daCEh4df;WpY@5;oe{}4yX=&g!$61@Q18+F|&U?JP9C+Ii zYt#0?yN+=-y&L$4W1USO!AH*uZTc(_KBD`b$IFR8X~x)eA<)+xP81V*j+Zo7+jKQB zz&v8pt-wH&UC>@)Lhl6znXxuG+@a<;n_9|p=6aj_-4)DZHift=o7P2-m-6m#GtQ<+ zcchtWQ%!d@bG=P5?kKa+rl#&%rsI;wOB;7xGuEa~?t11pn|iuq%=I=UyBnFuY#QQj zVp`vOyo_=;GvjPZb+<56ZJOq8Wp1=7-QC7KVbjy@cBXaN<7I`rqZw<{YIkRIoJ||t z-OTkiZF2W8kJ+@t-P5#+JYL>*_cr5f`oP`COeJaxW7OB&Xw%iee&z|AZUqi7{eIA1 zn!*?jHrv|da1S$Q*wj*vG`HF0?;dTQwJF3s)(ra567APd8mxJYL$kXPIqn>g1kn&akPcdycuyret@zdDf;O?)hfWRgafZ?hLb| zO{wmu&Dl0hb1yP?*p%*GYF@DEY4>t7=qHbt74DU0Tbow9pEYOLw86dF+-B1z_Zsu8 zO*`Bq5U!2O~*o2V6x(MEHJO;-b7HZRz8D{zw;dR=>I1!MH88E=!r zz1^H|Q%m`Vx!Wdx_gm%_n?l@go0Wg|cq#ARZT7Y)(*2&f(59O1Jae~AG48$QWt*D1 z_nGByc)YZ6?>FOZ>g4{|gb(S!F9W`o*3*61+-*~``-pkPrXlXn%*wxbEJwLNH+$QZ z>ON*Jv}v0AxVgusboWW~x=l~JPnnf(dc3S~e`ChmwAy{voNvM*GnpbSv z;l6BEzUA@qw)+ROw@n|oubK;q+QArIGxykZHSoH5-KJZCH_V9J+Dkhaqg& zJ034>+%D$;n>xAO&gC}sbO$^0ZAx~RcHXgRh`X$_)?JU6QSS226q{1rm7J?=n&u93 z9<(Xl9pSuZ)6?#%&RV~DysU87a1O9(wY#QsxlJ3~b)5M&ZE{CD@7T1%-N0GvcaN91 z-3^^7HhtiZb*>`n3}e*PdC;b-fz6!vY`PWL+!=jOd+7{g)XF*9CWpJNbDd2sWd~=W zP5$mqPRAdfav|=n&RCnuySqEb*%awcaIUwhrn{H3(54u768zba$4gUpvNOh}Htzn; z(KdB*4|J}xsi!-|S!h$Td#KZK-{WP7dxSIArcv%u&T%%Sy2m)z+ceER&UwtHboXOU zi*az10bi|o+C9-3Ytst%6z6E0R=cM;*V(keJ=0le(JdDv(&SN%R4a{&_@C8m4OMK|9z=h5@o9+cJa!#?y;a=w4Y*S0Q!m0jm zLYMP*uX4KJ%XFGT+|N1Hzbt4f@6L9@za9`py4N|k*;Ld0yz{h8G42gcKZnP%srw~o zE1TN5UvW;csgrxNbF)o7-CLcfZAx~(=5)b#EOqTe+&i3YZ5ri%(>cSYRQE3DHk+oo z-*Kw1^y_lz?suI*@QqqcPrLUx+uF3k{eg3eO{?7>Iyc+2!JY3sZPO)nIkc>RR$8_c7;YqK|9eaDU~Dfv*pG z)}x$sPC`=e{IqeObS^~7!23O?oXe3`S{3?Q{FL)Kq9~;2k>**A`xdcN&R3AsH?l;j zQ_e4lh69~(I^cVi>KRy@zM|B(&M2auKdt^nO5`#(V2s! z-*@`a`7%-#+*7So>PP3BM3;fCIMsJrRT~_M!ThT86Qa<>GC(JYY9-bz^^@}gQH#W0 z0Y5o^CW=qA_%-JrM8gwH0+oR8uBsNzNUT@tx-*36>BPoBRcvZe>St#?qLqmb{)@9Y zQM3ArI@#2r)Gy8?o4S>{=^SQL&r-LXsWv5-y6t?@rj$~5oQsLJCXOogn{zeMyHMY6 z&W%I|q3yppcOdC|)W12Q0rrYy52@95+58^q)EC_*l`5vz!Lv&Ji8}Sp$a{U$O5L~V zXy2wx$URttzVB_w&oo(oz&tbLS456}xx$cViG2GNF^9ZNR33B=`7=>%(3$csQA^O7 zQj}CZpJ65R+gHjdOArn2cL1mq(Re5)WjUfWC?{nE(YJN8xg}Q-t?ZWv^efUl>-m14 zl=6}HkNVWJcL_m%ROUl3jH ze*owd(VhNxOO=%05m^K716?5s9dNf)fV@c*0lEPB2T}9@XOK&pF5UKK1N?zpnjo^^ zpg`HxrpiHX*;f`tWKWUV0kA?X=eL5?Jy z@>xMXMx=aJlGBNl&&qNRk@6WP7Z53*;c}@atM|Z)K+lqH*ua#aaG66i8gy0UMz3;J zsLOj$XFufGeV{isaPW9I3ndULe40O?f~?Htpk4@)w(O zcr6K^Ou+5v&cHPRwPX;H95fLqf+%E=k6ByRCyE*r0MweO1?cL?c%pdF)sZPk>ixew zURN$88afD`I?LCH)ar(MatF~k(AAU2Y>IK$mj--E7xpjkY$=Dw$jV6RY~rBhK{0X% z(NlwRcoX>{lJ3tY@+%~L{A(h=B~njfn#jvY^DXu6aZ`DnNUgMQD(@iaRUb_yhcD*B zzx!Gz2Nj5B(g!Ks`f*T**-W~T^jeNMS&m4pp?ALTxlE?R%`ICpjL8Qs3N^SmM8(~Jdt{nuATgmC<&g#w3pXydOfIvY+Fv%kk6As zcLjBn6Oq!{z`^xPc9P49CW6mS@;s7WfznCddVu`PD=!Cp)asi~GMGrMN9iOhBk7|> zXE{d`yf;|LJIe(`6&f7^T2A!E-~!P_t|q!TIK=ECHxS(cU01n<$dM9ac9m}uxl)Q) zH~B76m6Tl3O@2hw2z1@$Cq&&r*IgbX8kur3sE0gFG&SX0po>Im4SBr0N~G41$IIJD z^Q`$Pmx2=HpF~+HSAc3&!2V>a=X=WQL~2xe$sO?D9cqvKEmV&5^Pvk=m+8%8^LvtklpvK1xnN(&I2%PJ4is zYqIJOZ5upVt|n?dv@_5KqMkzw`J-|R(Ws$^fZilhD+b5NcZt-B!7=h9BK1wKvGNll z^-Zp^@)*&t5edQLA%7*E82%CvtFC)V?XzY|i%9LWX39XKa>EP6ELn!A?(h(E zmJBCqGrW*LE~ALL4?hIdfT%C%X3J(oqd_-Ywk4Vlx+i2;q72YIArpz71>KW!Akjw9 zJt;>Ly#=~CastsupqnG76R8=JCg&jO8ImR!BF(do4)1BC%jHCuhW7!=M!Lk+m&@kL z%|z6}(6;N1y5J;B#eT zmqDSqM-{Q9G7c%-nlLI?ES2p@H)~WjUnaYe?wL_}KuJhy zKVQg}%Ng1d=WeDfSx?mm-x-4UmNI1sk$P__Q&vK{KhYTaxCeBL6;?` z5Jf$DJ@`2}o2bd7w}CDbb$k@ofXM4aNlI)ZZWfjux1KnC#i%1=d*U1*Wm6RR!I8nNHMx%)U|^lhc%aipg#zp>f;75NPke1lRjo7pDcBx*ml zbjWLRH&P}`99uDDyY!1y<_(?br+K}c#(n+`M@NuM2lBA45=E9i(kis9Wg++)+Ops(eG_QkcIk{LD~;-}=x zHofC_T7F{Ft&nfzWlea;^PId+q|QUm$-6{;6MGuxCGUVWSiuwf0F@w8=P2JvH<3C= z`A(KYn#U?mgs%n3CP@0q=A!IMmTHVH%HBwNj4sL)B;7BUBuohS<(thX#+CeD7E-zP z6SMhcd4j0-#5|yLL_~GKq@$y1k={0cl--C_ zeLu<(NP0$Ik>ekrshY6QuE-~dRG(du8APgIuF9oEs$Z_k=ZFF(6^NhY3q)a)Ld>7! zW+dJAYw`oF!=u`D`LRuT{JJcpaw*{DXL*8X0(kjZo+FwKx*M{HXc6dc$Qzo_=P#0X z(xcg6@++l(kv>GtCT|0B6RG~ZDa#V6{=6xx5Ve^M@Ab%1^iYxRQ5dP!|;oydMB`S4MZ$v=ZnyIl3Fh2~mGt`gi%X zCM$SK5&J`C5>=g&EB=sch(@NIFa4){k!WhlWuUD@jiKCqxmy$KIOX-A`?7j>tbxT( zxmKE4%Zb!?L%DTCllAPBEMIONBib}&9ne`MeGgt(<$EYEdap06D5MK`j$&Aikn|Sd zuv#GLndPuL*tE{qVI|wdLrrU&Cd+qf5wonFL}jMt3d_nPss=hAYd=vt(D_&eM8l?@ zFI~bqMKo>dWuPLWr=gs$b(?54l=HP5@v05;tW8t>Lj5d1q;zZdR5wsCl5U^BRgp+t zxs|jMh}2Q7q?MwHADXIY2hlf3EJ62@x<)T)#UZ7$U#6bp0ai>;90#1AE~~js>wH~S zS0uG{ydD&2&9!wo+-)tgX`Qdz%CadUw3M~MrdpxF)_zTvItvQ5J|$9TL7~=hqK~H) zu`<>-L?@=@iZa&sL`BmIL|N+^(Y2RH)qOlQydG55 zicMCey;QSW+q8jKvywGgzfIr5Ygj2n=8Ww?j}p0NY~fMXM51z_i?U{E!f~%@&9$j{ zXiaN1S*q`U*0$CYsqcT*wzeVZIZ?;@1xa6N)U{aO;yCMCr8HR+p!T{}IifVEy{;8O zv|>h=&}gd`Qo6NnMj}uwlB!`>P(91hU-{HE)VBhWbWhZ`D%sR9w7wOCq$6u!ZL@W7 zFV=e7rijoO>xd@n`ivsh$T~*EX6A}UmNlTb=NnsHkaT^qRv(*cg~nP_G+9k%7O`g5 zY@&|frJ3~iD=WjM zhM}#j9Z0(Ek62f1+7;B=8jylL$VSb2BD9TFSQ)yL=2AQBgeEpPBZ{@NR)!Vp+FR>1 zu{EG;Z*>nZ)^)IwG_iL<*TFjGrR!*2Al+Heb+k@<={i}ntDqMawcs4@WUY@V_SxCm ztcjgj5XCxMmm`aHU99VxSdWD{tc#UYwOH5HO3}p97QV*1TIHuI9sDoL(zG(&t>HxK zi=IBmk{U6%-)ikf zN@oj}V(grmPq1##?DbDzbQMA(4tK-s*5zNA_b@ zHjlS@Xu`Oi|0#%^`<7cLlDIhtim$Ix}MgF2k7hr zbXgON$&O+@Em@(sTrVp?6PpRTUe>CL#k$_sx(8^RCiXj6_O>>9=@Kng3Cpo^Yob`9 z^(X2wSv9!#n`GU@JHdME=wsc}#7=`{AFC{0BWPW+6`_fZS=W>$TjlT=r*(a;Dwelp#@>hI@B!9EO`ywR1FS5) zg`>}b)_P4?ZlJYnP;tKuvYyifx(2NVSvv<8>r$*en%D%0CB zmVzyUw1HaAR$=~&u=NP|UpVT8wtSA3Ut_)Bd&#Sqe+P5C)9UM_oOxURRa%0jVE!Nt27ep} zrHXSn<_pSKHvgMB#r1k3se`d?Dx+fC2@?MQ5@TqNGSN#8M9ZO=FwvqzsT1%p?!;cRi_7)Q@ytcN*OH6tE`Semr`F~73@vazK`jT|2Ew)Ue!{7Hr{^z zr)@lmb=9w+ys5O7f?dY6F=4wB zMXA%1G3_mBm z>-NgwPbd%mAmN`}y*&I?zM2&REg$sb?NiSj^_^AtpJ^{y9n%lDMdzqFELeTC`Jbla zpp<7D*B-P_9c?@GsiS&0HoZ4fHiC^rv*NTzTRdK>y{g6&=u=1Xus0pg z*XZ*+T3+``n@_6Rb$%eGD}v;#j#oMk(~n?&JjxW5y48`4$l*U+mGsWhed0Z)-dgW`@3Mbya~5OJ zHYyGOLH-|7Pz?W>&)G#R`#v1A40Z)e71mWAns@X_Pg#}Yo%Yz=LJz-V**~IHDL&^x zDVU#Ejy@Ms{if%hU?HgWZo7B7+8hCvwLuEj3@zKEj7QnmORBj9v-%i(gWoJS>2FCB8`1Qz^>7ycRl6rDUDv~<{z>b!&By4i z0PFhap8qp`Pp^7=D@32F)dKfs2F@i1JB|4&a>0JY^j(yHH9z&9Q0=J<+HdH+oZfe7 z?Y%TLuXGRl;25d14!xh`%ndneUr}uHaE?Ap(KZ#(Lscy0?OE?7^pU;z8j7=eXc>#8 zysuM=XTpEG&T5OLI$$Y%bm)xf;!>V{wa!uX3iz*a)h_Sald#kP^p=8YeU|9GZ};BD z^_D&k?RCC)TF-Ou7`(OK`8w^boq|5qIe@{^F%oZkZ_9_v{*~n-^hw*@|3NwvsF{7j`<#0Y{@ZZ!3wa{=V+T!S3JZeYHS zP{(r%bCmS-!(B|PvIg~xcZ;;oVkxNKbWU+uPk*YjEEo&ibLzV;-Z{oxb>5=#O*o%a z@&BFHNk<3oc>YORU+sFw;GOeu4F6pV=W@^r@3uH79(~+Y^UZVKKK*fZj;CYO?b7LI zdaE}6eaw1R=sEmdlCsxFMmO{or*k}g#4OJ796j}n)n%)Ky}{JEu7lOWvN~Ve=%b;I zrzL7Tf)sQu=^ddu58+JxbED@<(_8DE)@RguUiC+BI<3c4Tk5pxbI&=C&KZR<=(L&- zaGb^S0dISi@AxnGB)v=NGs%Zbsk^D3*`@t^=jeE}|H%-E$)0#99+mHSApgIYa7l0`_+f{x8D1CH7g9JuW=sU zOFw+1(D#s)rDtF5?M?OPgGUYR|7FN`uvbBPO8sZP$zJ!;YCp=xflt{UEcI8%1@C2|K_~3vu8 zfhSqecJaXK$M3OSdM)Ko7?plPs^|Pak%@R#e;3RCy}h>n_0W(=BY9IEd z?-=X5-1?eb%gSi4wNa23wCX_LTmCEihyDMPoQJ)|V(lN}xF{)@UR|S~{_A@VTK*IN ze`TXvs@GQim5t66IW2wgIGrZ3O9A4W%p%mir$$9_`0o`6_L& z!qSIV%@M#3RrdppAi_YV=1bt%N>GbH9pu>#k#ZH@sNaRqEOmcEn29!t;Uw}pmS^D0RBy1~#1S}=*JG*H=;w#&G%Wfov12QhkMDM( znosnb%%8iHEVW**0g`QWELyM2IjR|s=lX`L?P{dTR%6u}_-$8Zpk-O~P-g zIuGs_;FB-&@SBg{WsomdE@Lt97plhi1+WgkRcem0N}Y#awhF5G#yyblf!qf9LHr(3 zrRoXw0{+-mwrYo4JMcxdTm3~98sDp>_!X<~RVIE@@yk}H)W3{V(4A6W0jC19l~*mm z`%tB7(lGqBIJ0N}yNxua*`S*Sj$?ij=rcws(+Z{+GQE_ko2i#6{$g~0e6xmWGizFy zZUeo2U@ItMQACSy_xzPAQdKuhPis>27FH47lQ}P~M2#5dN-I(oH++S%>W4o`Ifw1% zu>BminZvGCNO>@A4u>#@-=|xQH)r;xwVCs79N4`^%`1Ejd=>b`>XsYojQytP#=oX5 z=5T6N?;9TlPchc2>>Hm3|K8PKsQ||nV4DEDu7k!(U#C7TI007*r$%fju7IL&R#ds->Ljz z%E!ibj&ZjtDO{1BYEX$8R{l*3jlG=fhd7p0Nq+H~lr;u=txF*#F(DZC&RFYF)g~O5`583i!vzuyN#E*_WP--+=p$XuZHW%ma8+GtkO}} zWgIX|N8y`s)>)ZbGn%b0Z~6`BS(%Szv>=7gpnVS8xWFp4#%}ymMyWM%c z;l`t&?u{RVdN=+Hbk)Z1GFmPAwiU&KZ@5|X7w-(~hKYD1=zt3Q*yK@J(S$kRk7^q>jZ!8@=Nxii3lEI&GF1}&<6X(UoZQx9%{g`Gj&1E{q zpuSLKP~RyrewF*2?RB+v)?LQy>Ya_bnI*oVKsZxBBO?5Jj~w~tmSwE z9Pc_~2x4DnyqWh%<_2RPLf*{2wzK_i^#-p1q&pOkr%&T{tY3h;;Z`ztQ zNxit~cIXRpn;rd3D$jl#Q~A`b18x^(_4W(o7ioITZ?gAfjYQq9icJQ|kK@E}|Zw%lb@nbg-7OD?D!YB-NI9A+)M z*08Th=wGXc8n*McEXsIY&EInE(AU+apxM@y zO6e_78Z%pstGCdIv1!XUL)UT0t;X&x_MB|^J=>ngA=DU@{u*veHQd_A*^X@aA}7^& zcgqPiiET=4y>D(!?QI+?u)6g&hTQz$lnT~wFkdU^)ors$Ep|I{VWsajY5d=9<`%wU zZbpd}=k8_wX3o)O&f{h-ncdtHHk%atLtMX)!P1S;s8wHx@b5M@KwsSLG4nr#7j}D^ zYyXf*edmx#eP!<=ZYF<~EwPp~c!tN4ddo-gZKrL}<&0owEIQ+sa{v z{h4iRhMlnOp5#BHjbmw5?{E9qXg0o^Fj+Ml#>8F2nvGP@Z;=Gg%B|0X_P+J6!+t{EDRydy-+<3mC(ZM=oE&zkL9zVAE#W8gyufQ|KbeDX z#fZn_$(dYw>v)7Y)1ulx)1scTPR~RZ_4EvjdOF(wt*@AqR555STbA19-+K4(-gfV; zdxnqUaI)>!-TLJ4Qfu3-&koO4yKgt}1p*?fesBW0KZd*HIoTAXisY`APjyPbrZ@Xi}e$HJ9;#!ArD6}Gu zcfVP8+mR9F%+JA`ThqOqV=3pnxa}8>&K&8rQ<)r4Ew@b`*@keOptO2i1^qLIVSDhl zt5Q-8T0a~x2dCdSat`+n8a?hdsD~afH}EKzt>|xtW~=9K!|1^=Rw0(x(yA;Pr48%T z+iZCUjBm2@@(im6<4+U9AD?&9GPmDlG~0V`U!2!$ADsTKgTj0Ueiiv#j%u|p*m0L}KwSyf1Io*^U^elM;NA8ccKl})rNqg`J^pqp4If>Er$S8DUbj;Vxv{Xf z(f!V&-AZhf>kYil$>3FPZ-n-Yk;Y+WGoQzF9MegxZ{e|})G@{Xj8Vb*7NqU$q82s2 zeo-3^eCD0?imP?@4 zM&((9aIEwi4mrSKu48(@n0HrR-a6K=V_zHC*9P{rj^kR#DO|^;cfh!E=jibPPJci` zqcy;0_SJ0rq<-m(OmFk=i-_UK8_%xeQ;^HOx!Ty&LP{VHyr0Ce2OXaL7MN$n;fT8;@+gjlb=BeA1cB+w7G7es(I83_GnK zGVD|`y^ZCUz6~2{hyCnSFK5ECM|v(SU1_ez4WSgDVeiWLO-e!EfD|2!xkJ4i} z{FiMM=DW7fcl{YN_3Zh7?mLFVq_OC_$?x(Eo@(B^>EEeiIQ$|Gzlg&hW2g3$ZGFEB z-`uzUyX%XTZ8lon88&P8RVgJL{x(~$-TNn(*m*9qQ(HA`BjNhGjdm`Et$6pMjNZn~ z-H%Vowq7azA5u##*~a!ZJGJL>4kv?W*g1CUUsZN$)r*myU|J2QrCX3Se0ZH`xpUo2^JY{Hk{+8ph>iGH;E&5{F-d4!~<-`$-4y`26d+%LMRJJs!GH=OzG0u8AU z=w5Xn=&#j2(1+9`phwu|9kw~jHW9Wt&NiR0&1dR6SbnMg4T?X!Wpz_OC_Cs+>I_h2 z^a8aR{Xn}JX`pA~FWh%iXBj!5{fv>I1C6nu8OAxFS;hp=T%!bZBu2(=YK$=p^w$QZ z_925(`&)xj`}UOZ1WS_D3d}PX;S!O zObWk{HANd}D?XGy z3rO*1i@cuY%E1SL-|JA^q-52E400$w2^(ZJ4I;OQya!0_XfKfb zwTb?q=nnxY{KMp)di}uTBA)zswRj zTQCR6{aoZS;LrheBMINYNbDAUHS4b)83Zn|J{;66`t`tbP#=Ut2kaRcV)uUz+Qagr zBf~5k83%!6M>urApGQVmpPr$5QFwV77I5f*v-8RrEAm`Gs{d-17vu#+UeB^GZx4|A z%RwNA%lZv@#~8OVQu;|IcXgJO190eo-FaCe=dgVKC_=JxioT5Xi$)QWz5@7lkDVi3 z;$F?}D@J)mznaKOxz504ZO`fShjN&;gf@Hu^|9fkOu@9i0jslv+M2Tl6`s4~#Aq zxeQ405e^-&VYFNH&4TM$fBR^{ef@qlx>fXhSpS>Rg!}qEGde8#cEN+J|NCgdp#xrK z+}H0L!M8?7#I8f|7~2gPa{@@?hUzQ%01h2+?idS5`Ah{;IS^7gWC5uha)3hzRE{Cs z*RN)bQ}ku5Upt0yU%wm2xI|yg`rF5>2U5Q~D0mF`yTSL5A*6CS0i^U;{Yd}Z7(&t$ za(aMNzIlw-4|D=4J*9#b;_edJEm#ete&Ypx-J^1FQ1s1$EkFu4Byy`@Snwe5cZ0th z8xi>!%f0dmDSd>Lz7s$yr}F*?4=JkvQu%pFM)=J@N^gtEts?IM()#8E@atY@jWN#F zcBw!rk8F`k1=kby9$wfg@*a^1`}Rp2*Dm^lz|nnP8rLE62_U7z7$D&TNzN8I2bhz( zq^MNnGL|Z&@N|3+9O4DRLQb z=fuBHaEV;a^0rAqkwb!eSigHxSmbuWh+v1{G2qULmrgO#B^|(>6DO9W0&`N==VyyP zhxHeflmRK7>sj7jvKL76^g+=d0#bWA477Uh%RdI(IdNafaUj`QgLM100m&{GNcuA1 z&WVqel#9Mb^vysjpADkl1Kc@r+tj_{-Y)Kk#Jxl0W5AsgznE%e5cZj715!NMKnkx^ zu#DY3)7&Cg11W#aBClunJ=0o6ZWlbr`ae%Q#(3FuYcR#LetI^L!p~v(57WySKcDUr zy%%WpX)O$j+$`9_`o{}HBDV_e0q&gG-`U3QhYQ1^KPY&Z^&b>QL_Q{Xg7qg0@z?~X z#}Z5hT77KevP8}i%ma4sv&(dfTqalnwEA2$u3BU-%U6wCFLDcTP@n6@5$5#SKCV^t zdj#9qeb+cba&H&?LBYf9{@ZbcIeiX|>k$1hL1T!dUoc0oOt4z8S#Z5ztKc5Nuwc93 zLBWV%hu|?mBTM2H%ofZMEEOyhtN>Q`yu6r@#v8Zjs|A|{*9*1)X*_Ecd5>Tl>#rZ! zF7iRa!@#e5+%djG3RVE$ zvp+DwC9)Stc0rL_L=K7E2K>6myA#?)J}h#F$R|WLawT3Mg_jDf?%8irsp#E;Uf_H7 zoJq|hx3GNaq*jsJfK;#TA|Gb?`hguHXAjfylnS~9y+De$S>zTV<+D}fcEJuoW4NRj zNdB@#&I7)P`JIr`Q7ZZhmaiY^64@>26+I#O3yQu)^dXVkSS}wG7Wpuc>?0zd5O*~~ z(gpmwM`(O1knFNVpC>Zm*FB1-I7MH<^0X-}K<*c!Z(|w#LFB{0uY1g%LP+6ui2elY zca9_^y)ja!!wdYn$NVYHBDV^*3myhi`E`hFlqYl@j8K&jtY@oB6~${6}b)go_);p zu*mI#hk;-B*griYa);mv(WmC?{DgoMPgpP_s0y?`OVBA;D(Dsr35EqDf~rvacL@ds zLxN#J=QyzwbPEOrn*~FHt%B`>9fHO=I-G35QbD(1vtVl!i?n^aV27Ylto3feX2Dj$ zcEJuoW4y#GSSsiiY!+-4Y!~bhG$x3DK_?+=$ZnB?A~%a161i36u*mHqcL=&B zO1=bxg3W>J(pf~|t>f*pcJsrKJ0*e=*1Xv~oC1)YK}!Jyy}HVcLXTLr^{?Sc_OHB6%BG@6QX6f(^ z!7M?ipj)t6uvM@l>ONchZx(D9><~20lk^KZ1;Z6u9}x`Cg^Y3z&lA0%sucf%PC=Jo zL{QDwcHsr$Uoc!HvY@(1!V?S%h6KZc5ka*`>;>tIDl|Vt1l7gjF6a^r3OX;*?k+*+ zWg-g(1w(?kyy5V(1Ve&hLA6-iqj-guoq{33uwXiyb2C>Rn93q}N0K-+BqQa(Z=hXo^os!`k7 zfMk~?axRd@d#A`QLHc_;WET`UB)C`fVUZ63$$vy-wOYrM3nc#=1Z`_X7R+6%Whao^ zkKiHEt0t|_5$JyH4x{ z_X^sAS|0>bJ~xOQ64}kkQ*w`jS1 zqsG00hkz9RaglACw0ka)^fe;y6|`;E?lpqPqw*Hf->mVF;Bg>@W7{g>3YG&&zd__f zQTJQ4-3CG1HjxGQ-m2xA+cX{$i~!g7-Z>Jlj4@^jIt5*VLBWtRn93q}Oh?c!h1Dd-Xm3Wfy3f)St}&utKLKJJJk>9Zh5k=&i)PDpxJ0+M@BWI~cd zf?>gkARd6y731zmzc!H{5BFd~S@4>`UpL8qWgFen%j3=2jC z)qUb$&?)E=3<`z>!-A0nmPCyDSr`hCnUYv zC*=nuIV%Cl-YGI6m!DuzFeDfjj0obzWu0F^r=UwPC>Rn93q}O-NUQcQ=oEAb1_eWc zVZn%?dRY7mIt5)o$|oV^Czybw4~a}jayS9G{KP#Xdi5JAMV<3bJ{*E zsGb-9f}z9WE*KHSi}X4kL8l=7#ZQVqC>Rn93ue8f-JOCi!JuGBFf14mR4+?>f=i z!AMm9y7sT$kZ=T@f-b?ZU_?;8DfWU+L6=}qFeDfjj0obPcwKISLBWtRn93q}OhU&X(mQ_v+C6buQ51tWs$ZSgPY6m$s&1w(>i!HA%GNBl?eeJ#5L zgMuN!uwX<`9Too{XmkpO1jAAJZ`wU97!gz-ihn_;U`Q|=b&p8+f-b?JU`Q|=b??yj zLBWt!-5e(bzJ)k3q}OhM_QjH7#55O9{O1C z10z5hSJXemUeGBR5mcXOcN>uQpOF*d?^E$7=oEAb2BY#nwOvpUuf}t{F2SIn`dq>j zbPBoz!-A2h{$CQVU`Q|=#V@pbM9}r6*b9aP!-Dh@$_2Ow&JuJ91_i@{k*NE(+CC^4 z7K{jHeW%@>f`=?a@84}2%N-gIrD(Ku)9ABq9e6E%&G>D?Z!3OxSlb6~OuI8}ciOMg zj;7_OFG}B%eoy+I^lEEWGJt%8X;h>U1rGxGm^yHvd2QALHD&x+Ky%}v8f5@;6 zP95BH@W8=YgC`HZV({+=cgq}=IWzOB%r%)$Wp*1fddMY1ZXWX7kS~Yy&zhE1nYAqI zx~$zrx^>NluS-rEzWEW?jpZ$yMrP)_!2ea?U{$2Ku**%Bm4ZU#a`k}ub`qDG*4#t6ujIa;`%&)yat93?JFH?@ z<*BEN(A2)o`@EOAw4!?SM+wjA~KOCMiqHu(BM9qjB zN8B^wsS!Vo7&UUv$OR)W8|fOkbmYw=A0GME$j?Wfkyns6EpJKQ8KX9i`gGI}qxz06 z7+pSk>*(%d#*C>Lb8O6yWBQC;I`-)`e=Ry$q>3HIJ&Q*b zmlRhOw-+BRwvX>Ke&+bV_>JSYjdx7=--MKj{U$D-_{zk8Pkdz3CzEM6k~cTf52l#i!;Hs!l1)g|jo4walNNuOFa zH8Azsshg%gK6Uc6nbYP>TR82uX}hPTOkX$s!RZ~-|1te6XNhx$^CIU`XPYwA!wO&5 zQ>IflD{lOP!(4QfI0@s;BC!daHh*{ngoO0R9hD>G+?a2CHoR zAF6Uxt{SC=tI_z5&={4c3LzCi8n4Ex5>>3ohru<$N^_ z-^-by=E1cRt`|dlIW$+Q3zbJzsio>7wM<=x%Ynt}Dri?Jw`x!;u%fNSfv`_q1I=~N z1flsq99dtl8r6+(xk;^68`afnGc2~Kb?RnVZH3h>s#)Ek)~h>Vc^52qs}^;y+N46T zybl(?R=25rYP)(+?NAS?+p#FVL+yw46R`fh+NqvYyVM`x>nU}QdImoK2%qin`MkPc zy`UaYhY`X{s!hF(P~JmHAH_G1j-#|cQIDyAs>jt=2;qB#@B>0PrJhy)hVTEXKPl5V zs4U}<>Tdj5^)X&hXX72bLB@-CFYP6jZ_xLVURAS<*Hi`G2tD6;LtS9Jspc6+RHgA( zwZM2=RT=N7i;VZw#m4*Ua^tA_h4F#9(um;OOdV>O@prY{IHtVDakawuSk)SzsCwgs z@)_T&RmLghHOJbRg42{_@Oi zu$hxZVP2N?5AZcv6oQZG;cPb=^c&fvIh-@krqt^>RiN+Y(0fN6IrX3?bFKkB#r%uL zP2d}IpJMtC&`WyGu`Bh!umzw`3|j=+KI}@+&xZdV)Edza+Hb^R(CiVUIW*z~=vz!* z&zbK~DkG0v-_5xU{D?dXXKWs&XL?=@G>y5pgFZHjG=Cgrq$u^us53y{X3hO$$zI3u z?bs90pPNtRpiAtHd~*FDpZsb*vw-+yjdp#xAhjEwCM}!|+FD2@_CO)$tB^|mS>|72 z`d7Ajzilq|Bn*D_)OSFyn@Ya6G7U|oSRQ5ibNXv7s=<$@ljWyO-yTIF ztaTFoKPTt9boiNge!Z0V_X~+?-adnP^IU4rg)=ULO`_}IGIFhCda|5yZOkOveI|#% zd?wSpnN%`Q3|o&7Zf1=RXZkEkLj_YES7JJEoJIZd;4CiB^N99jn#MHyJn}o5dEL4m zJCEW$ZyeFYaLOwv{TnJMgg-Iu&iTFid@h0W+mNcQ=acKb7m(jSFyF?!ZfTESK(3W# z6wc5l&6!+C^x-P3hT)@82w>*tcM%}l3Mp4|iOq>@6ISD6L=lFH$ru1bpcDyD1a zQ>q@HzXy6a;z3XqEpn7@8O`4~e9&}R*-(dQ&yHEdUn?LCu2wu1FC4dn$W-T| z*D}h>kY(gLoas2GB}`{CePS5JwQw2L_-o53zwa!gkaZu|BipO>6wb#??LOl5Sl7qr z#u92UYex9U?+SR0A&GeSllm92`mvz2E3!kM4%$uKWOqQ{0%~C8ngV?`(;Srw4Zb)C zI$U*!ei*2M6>SgjBber4Rcv5wOLPp@#3t6bM8{%nY^r>$k4>z02Y?nLEv6cWnDJL7 zu}(Izx*Y;va}k?~)h*F^DhHZMrk5Z#6Kh|hS0Xk;xtOlNYTCrQmuNj=!wQzb%=8tt5Smv(P4yPm|EBr?WrM#d ztuBTBGp7H-F2PivGyOtc0sWUuze4$$>Lk;juvakEfA9d5i8ZzdHva=fH!zlg_A1JaW^jknpb+2(Z=pN%<(7i@0=zYc>(EE-1Kp!w30R6Sm2HIvk2wx8x4};&w z^fBWR@Q)k&L7y-l1^vD8IOsv+_pm&~^v}itXr5#GyzvzDFMyiru<;D|7eP(+H{)5* z4~=%v2=+;)>M))I{k!oz=rQb+O!Y1HNrw6k)KouVzl6HRjtTV+YN)>E>)`t^?PtCT zO@F4t&9|T*28y0;z72i^DEhehF8Dl9^mOxm@S{Num2Z9kek{`h^FwF~LDAFA4)EuI znyS=127U(9O7kOV<}qDu{sa0oOqP63iyFc)2*q{3}TvXO@}^<=?JS7 z`jMb$KUNv|QJ`o))=cnYK+%4z+2He;7Fre16fiy4x&ZnjrsJ)-&=-SZtgtGov=)M&&h&iiB4{oEHPwaI#o!l!n(7kkQt+2Dz1+GSn#({9b)|I$_+Kz} zSyw{i1~u^o05|w*P<)Zvss_Il)KtqX5BTMvrt(_Lz+VMwsuh+Od@a*@YXvlQpoa2W zb>JJAHd#Jsu4ej6YZdg@f}*use(={ZU2io)vw>-gwFdf|m~OP1px?xFi**h3n?Vh= z+qxF~E>J_=V_gUSZcsyotY+}{GQH1Q56%5de{Ee4{R2$ftQ(=<$Mhkq1^Ne>K5T7* z{x?j2Yi)u45m2;kYb*FaF@3?>2F+nmQ@v{42L3frQ@w8O0RILk#w+U%@EsU1U+dz3~IAI0vkK1sT{Wb;8U2U+8%|b8z|O1w#UI|gJQK~`#ty^P(u~i4uH=G zHPkrUQ{W4ko@09k{JFMgL5pndpvAU>pyO@NfljbJ54zfZ7<7&OCD66@zkoK`Uqv{Z z?5~60$aJ&)O=z}&n(AizTi~~XVm7hA4gP+nzqY>%%>zu^?C(RrkLg4951@Y#6t!dj z5d6bTAF+2p^IN9Bvmb+gKhwwTA3^^()8E_w0sRx87{}}W;)Q33QZa))*FuQ;0G}s?C1ea z2GdMOFX)Fb&35#LK8xv4M_=f3m=1IFhdvh+wdoiDzL4oTjx=b_1x0N-27xaIMQu6; zgP*{3l4A%o6PZqSWP_jL$boAKC`KE{Fz`-L%yfC1~K@By} zF&6w>rj?EYXy!9r;1~z}g`kG2a-0i(A=8T-#n3DQHPxk#3E(edy4W!Zn#-A9;g|yb zFPOR2k+RXuP0USvh8dUjb^WT1N%=I;K9y z1<=%k8fukeF8Gy98yuC;_?b33E`&b7bhTq4^lO+lIWB^JEhuJo$Hm~UX1dOCDKytI zz0Pqt^uGi()HcTz;BR4itK&*&ZUe07At{f8&tf_v<@eAGXF4+F0Q7mFrW%#<6li|RGtd+;otW}0G!sCv zn@DK~KZ)s-l!MTeFrAk29Q0E`(SK8(2S1%@Wy)b_=7XX?ro04x0n@6Kzd*B)>E$V} zLcbW)RMjc3gRcQK)$)`#!F!pmNO=pIt3a_^NqHN5JyUC)wW|^w7EbJzqw4Si$sUx8C zF_S)Fty1Id-+)fEe`f{NzwAF)_n`E?0Ueq0o%Nua-_4F)>mR$@ap&@5_iwCr^;7rn ztnZbx*H)~lXY{ggGgIEH0CZNbb3xDRwFUa~d)dLy>9q|j?nS+3+fJ!VV0lVi2Fp`w zajyz!egVr<$_2|)Y6)3xnYQhMZD-)tEK^nYdalp>v`f-FX|-uhY2maN(*BwDb=tqv z2BZ&3Uz}c(zAAlfdRzMb^aJU>L0bp?YEavt>cLkHUOo8Q!7YP#3~n9#;NX7`HZuEV zW@ct*mS$d8kMjRjcNZ!f3Q+Y?m zoEUR*%oSt*Z|s(_1^K1csoCb}l>o%qni zPbYpg@%~9qPdYg1FOxbZ6;IwYdEew!Q#Mc8KIQo-uS_W~X(+k6q;~42X`fH~ZrXpR z*^DXHtp%8Uj1=32#aR0oskY0DE!>xNw=IKgGkVxoL&i5DZ8sI;=*Z}83o-V!{Q+2R z^tX|JTaf+^i~a{Ib@#y0I3creZWR4zsBE0oCFm$HwH9ZrU3H^QW9Q0Cwo6}_ap8<>4x$r{QiUAe{s6= zKl~JS;Rfx*`PTAPl<)`2ZbVS>e^)8EUF?S2#Z=>Sbq0R)?+kT5mq&NOzJh}pZMgIG z^`(5Br>=#a4JTwfkY>~9kJCXwF&lKUIb1Josk zj{m6O-vy5ge#&UWUz;I2n`*Q)u3^Mkrrp_ zo({p!C7v$?Pl~^j68_gBe=YL2B7ZC4ekNj(1+Oi9)4B~`F{s%|gc zQ+0dkA#x9qdx_i&GPRdpsk*)N7JYBg_ZEHMRNX%N3ua3^IfBE)-!KV(gvcXA&J#IL z!p)O#M~i;6=tqlw9OB7PfwX{S4!Ih?fYlGb(jk46Ib@&hvmvX&KV%D}U15DVVxKK{ z#J$3^-NRq=J=N7 z*VNXkQh!r@b(ya|;H__T2fV&|?NsKgs{_xj=Xq*ZdK&y%Sl-~P_ci)UtJ#*_JE>gb zv>n2qx!O}7sHk7+Qx)|APeZ-C7RqIw29@YGqjBj{sE~phF9kVs?aBs^-=B~Waq!1& zO6zM9%;H{GyK8kGX0EOFtmFj79Ot;3e2szAd7I-|?WsMjgBPiGpWcZxGS6M-Ii1J3 z$bfrUq7zxpaQi)_fk1;9-evKO&GiJ9`)cAwvD9ma)5k?#5(-C~`cD(c zJl|>aU)gZFaOb-l{K!F4IkG;Xz7}|Dx!Ih)oZ_yPXhQCQFTrP(Z-uAcdo@-5a(6?O zkL9YSm7aKc#8ss=tKIe0o`kX~UAeN{SLgQD&+@MI)KoSGRyGFWnJ#T;a5o{XD0ft1 zT#ph(i8mrCXkirrPu(ncHB!~2$~{ZnjkST(c&VVut4XkRor8xB#G4?gD(d|KcWteE zNv#JBUh@qectRbJbjTpn5raF*t54 z@dQwp?i4sBIi7QJzND^pX04|V-BK;^tZMW&cxq0Q;RTHt4eC6V3)Mnz-O5@|JWy2M z!hpMaMOA~l+H(=LaaFav!Q-weT~_b&2fWqs=n&OuGd#;%iwe=rU-JoVm%2!eSZIg` zsO1G7KWa(o-kfND@p2EBG#Z3oLLk-5RgLc21Q~sR>Z6Ml^^63=+2v)NKsCG8x5Qmr z?sZG{{N$JF62s$4w18REzSj5}R_Gy8=PEkbsj|j~1{8G_%5t_RK)EjW^04V{XezC7 zuY?BeW^U8W`o=ox9KxarMF-tj7nCTZzD1%EK<+%~44(R$Xt_pHke}#8#Y`1jzic6X zwVwG6zG{q9i6&^)31M|<;;NzyH67sSVvWX+b`)r6LV$BoE#A|G`SY<+WHdcUUMd!F z7Ignv*tl|~uOZ;CsK>0}uEj8+DlYPS{PE_8UQtaBWFK!O3!D6C_4!mkzIqfs^^{uf zK%RzpJLcI1L%?c}jFzfmo+m&RxscNk%{tGLvC`~h;#U<5ebp;G0o6&}S&D|EEqStx z_iC-2+0a0}ii1M&t!+|O)hjy(Ik)Mw{x7QOVpqB3Do=G_c7uE6@`csz`g$~nSVdhF z@Yed(e2mpgeGPTx7!+yPQ}a>ARDfNo0tvxz9cYr8(N$Q6!HwE~Y@x6ap0$NvUEpb2 z=&9vE(Wc|I#Dj#6yvp6M%oDiS8(5Cm(DpIRdFy5Ts3@1HsIy?6?i9~O4YlHWvA6!* zbM%N4^HEy2#EXiKCOO^|xbpNsp<5QMVLHo-`cJvHp^KI~il?i#9F4z=Ay=l130<9{ zQ|Hg=5u95WiK5cyQ0fEzF6Oh{4NEZ0micOR;YPEmX4h1AHEs0PbWzDPbovx_wvCq? zuZKE2syTWo)K%+SR&+kiDYVc_cEeJSrp_dX`emmn%DGATkyTU|@AH!E=6Tl4@z!^Z zhH5{#W>I`J=v8zrDAAuLx#B|YvP()XZ1glV&G$4=hoZH~>08YL&oZwcLu41v3zwtw zoTeBSdTUpE8fv}EmIpAV*LthwKNtzOZ!sa=eL z1HHa;LaBr3X|1!~pD*T^R@~LgJzZiJM-04cJPp+dqqFa*^L%$r4d#y1J1+37ti>|p zXB>Tjap#`isj9(SckyyG*oBy)f5!Vol+&M27e<_!_0^aFN}W1Z}kv=Is- zsxJ4`dh4ji@H$O9%g95+-+5RtVNF_JGt1|rRRR2o4LI!>moIGe(VU$SQbJGVJq^Zq zKSGHwr_u7ec1u~wMU#@aH-mL_nxX|8#$~EcjOR3K&a9`|fp=_Tg#Dd16R5xnkysuz zh?(oI$AHCNqzBLTU@GFZe+AqZc&a^^cpJ)UY1o#w6<06xG_3Ykdnlx+rKm89(PoJ{ zHV-&)&X4)iy)wavguM`(En0B%*hzE#Tx#Jpr&-U?2}pGd~{LahdQm zmr3?8HhO(EJiCb_jngx+pO3cZcpYEtSt8XergJ@Y*p|fv-cZl*t&J&Y*GnssSi)pK zL^^H6LziCP#g)BdA6@KyV2Ra_;B z<#iwJx6rsSX*9}!s$CNXQW+H!QqMlM933)~Rb4Vs+8FT7s%`Wy@9a;Xv!LWVt9hZ^ zSYMM6=`57s5^VBjH~1P?YCY8cr{f z^ew~;iv@E$pLPCfA7-NXbcC@)}39?7HnsHb?M{Q0^<^gb`H$227oB#ic| z^C+CpTcC>i)i{V!6{U0#D#r`V)1X29K+V7su3pSAdI=}N$D{P;^F-&ZPAn*-W0tRB zCZ<$6jaf*80CrFaxd}UGYV2x$117{8Pt6Qe2^N`HwA3qFCCE-F(R)QbjZ3JgT7^kw zA<`>HuLupn&?=l8ES=fF3^hqJ4w8W52h;|73Qm=x`w|u7W;ePUY83WnSE6U=snwq- zkPB@gVjDkl?WFLnypqpP(C-xZihAS|dvi#v_EQ4RbNiQ<(YaMgG?r;AuDo&v3K;!; zme*5Tqe>D3O>&KTqvOGNT57R#mOhzZ%@ryc(S2Srq6KlO@*xD8_msHC6 zY^*pNT&-NpNfk#G9xLMiw<`yGS`#YT(>mxvOm^y8cu5wCsiK_5lBn|r4Ob^n>Zxmp zs!LULsfG$1Ud5}R!k<|D75+{|U*Ydm?8_RkB=OJl(6FFLm_yqMwM1W)pb^aXdFe() z;mAA6R@31gH?xIwSf&pIso!yj_G7nER_k%&q={Uqk7C{KtwyLb^{oj`a(#Ne9MjCB z-nztx({(HfunlCkssZa4Zq1&h0p0G2AtFLNv(}JGrarcEpbcq6f|D z=pB}xklBV(r$z2Nl(qyh?iyQg`Z;QClb|e#`$|fTxW%oLERurL!}2*il+sx^o!H^D zmF69VDNZwUJoU>UQz8>?h$ssQVo97&iZ<>PYcUBbt|!!bf{LQzHjtnrv#vUBS#g`B zh;BhCpCa0z;%S8}mSH!j3vwO*njwGF;H97WJ_lIQBE zKN%28qDghvMqQGMJlRCiz~Z^`O1%b9(K{A32M2I!Hs2-SlmG%QAZfV})kVc>+zM9U zQe$o6)u6W?W1b`n%VSbcK~Z?TpZM3GKh0CD`!F0+k2WNs5#MCJP!*3EzD^2*4ALRo}5E&Ir_w%&VD>K zl3UhCqhLY8U%0}%lFz&Rbl#=rdps*BV5~3Q9D^$1D5GVQRCC&y3gTy+PCssT3RIsy zabdDvmt0b*QMzz#hM5b4Oy$xFs!YASuE!!Us)*)`PjBdEfy*}`i?h59{=odkdQ8gv{Y5&^Y&*|uVS3}99 z5R$bN2G;2Mi4Z+`Y11U7K3?}UP=WYoVHk_$TQ7H_?p!k^lJ}(IERoD7J4o)69lB)u z=M4PG4oTTfHtCwpB#USzMk_5^NnKJUht6mXoi53!;1f3axUi!FFRiVOmX?0p!H*$? zE-yR{h)zx}upMZc?ZI(KOrdXuqbD8Y-bHhoaOrw7R#EZO1|-Bw^@x22HbHne=^_jZ znxi8)+LK^2OY3S@(&8BDuE6DdgJ+i8Tib{yhqy&`QIQpTH5PKQR-GV{E7oxO2@>`m zmuSt7kqH;~bQt4NI%}~NUrFbPlB%gB9!;`aES4mv&Y{LHarsFQNoRm>Q~gRWP`LT? zh+kP>+Y~>OKygv_(4Ke|871 zXxl5TkpOW@7&}O8;?WL^0-w7E>8kUsj-E1?)lxy0H)4;=$CL>nVb<{0VD+Svi&lWi z9IC55u)&PsNBzciI4(#`W>O*kOrDeSn;3{nNDSq&5_5Fo0+3rrl9DWO37Kq}q%7&` zH!0O6UHv3kbPWP0+FhcqmD?D6_lYlbs4C{W=>e4b1Wo)wqPP|7@W>IKN0H5B*>bE? z;_VoPBOL|#8uV!m`W*H6uIdWf zaFL-LQpD^jo16i(*^+odlM1ke)0(7?`=EA=Y$a!e(}lqlt#KZnE>ZP}vC0?UnMIEr zaV4(sqXk&(=%?CU%UwbjMpU9gh#lPWqDiL2=yQUiBRftYtx_n6m_ROU#A?mSqJWq3 z(dWEkvCukH-zB?iquYyUY>94h4>VFY1UU5=&(L|%@gxIDrC1X4rc<755KVcq3;Re? z$Kq05g2rQmXq!|ZI@hK3O*CPw#px-o7S{O7W=6Rv&Z~mKihAFgdfNEv5fRNt4`kA+ zI=Rqb5!KV)7*D1w^ffkMl}(bcbKPszYA-e({OFno+nxq5HC(^)HF(ib`S~**W2sR{ z-RKz?S2Z$3Qk~MxjfmJY@c16Jj>WQ=hOXrVAoU6`x&e-_bjx_@J4PJFJx` zdwO44+NOVoD$B>vr2k&~Zo#Z>_f_bJffI~K=S0^+)>Tyz5D?DaWBw8-R6C z#wC8ev7-#dC0R<5x1=>Lk{T8ui*!O91&eC#Jz0(2jMlQz0X<^4Y<2l&C&71mkQ z7daGM@ZphBJf5R)_s$mric~RS8H#P5Zw+RkHHsh4rMa4WD(71dyHW(vBjE~v^s)$x zDZOeY#R5Ek!j?FHriZBcY?#8Y@YCEyOG$Rd7F;hDsq5%UB?cXei=aOC_$v1=j4>;l zQ0}L>AdB7)Vsyl1Ss>x&P?F8hP+^7NDY>zvCMGi>iJUx6S~PszKVszzJqJ7A?WG58 z*YNXAH3<*l&aB6SS)9W-2T!{2^uxPqE>^B|Y=gFd28*Q%c_AZtx>r>$<-O$sEM;hJ zj2+-10do6ROu+RX3%88#OUizD9cZi=Xj8 z!}hrAWQ#E@o)331Gykf~(nXcm%PPM7Q?t7yD@h!ZcnXs8LP=laka z#;WDmUh3BbmLlB>PZ(g?!6hMQhI$Ele@#TNt#9{L?*IozK3wDtz@4CMO9C z9cmqT=D;nD@wD!`Phx;h^eakKMS#XAE$XE*rHGzm!0|Lis-FnqKHnvbPVt}K4Ntpu zjaQdH$C(sgLR=KJJkCpvP1q8RN%bYp`pAisy|Bv*2oxUe39us74} zom^Ew@2qDu=@rpzPe4{Dv7H8P@8TDvzIr^Dj)(YYTYDaQE!szUqkeJ|-GdH(^^Toy zQ1#%ie&*59B>k)g4?QqY-9#Nv1{^GH^dqd&R;eQDaTd+%KFnP8HF2)Wr+H~0T6cgy=OGNCBh_CCl4Xflqb1Hy?4qD zU*PH5qnU$N0@P3RR7uAd0eWstrDN=_ptJaOzgW@r0IUa+Sk#cDxRP0<6f;3Be0up5<-k*tP8#g|Qc}^p8c{>V)hkId)FEiltOV^Qnt0l%CBGM&=Sw+ z(T9#$;OF+xGUzoMIvJyW=@0m$vVLU1P2B;5y1ZRR&%!O^u2oHg1L`3D*ve9RLa&pC zYO!;xr+VzH(L=1Hn7f$p8e&n$D^f-aTETD@_&qjk6%xBwatXS<{1mA40c4pw9-r@F zVTg-4Ea3ER3FU{gT*QK02cq{5I4tl5=)^WUQ&ukIwROM?e|*PW;g``Y$z^tIpp)ll z@fw;0-^9y~mC=J-lK5F=YQs?z+NH@LTjAF)0m@cTPOhVd92O#rZ3(%WNkPZp?i$Ks zLbiB|6+KHyTpBdclZN~x1!|L)fb^^#mOKcFmbdz70`fxK7veB8!HBm2iOGo{gez`I zotnoiy6&Q|@z@w%9f&==RZ%a)7MeG`jzllzC>)P>dP#2?T9Tf`cr+1~v{(~hYmR$4 zyoy8ZEm0tB(*kL3r5qB?3fT?l4F8L z>`vnerG&>WBq&!gfn22JMPDQ0;j_!!T7DWOZ_X0@qvmM*pzR(zl|&;+N@mm{x@CyP zoD^$k1qa(%6^kvpqvW?QF(C1?gAFQxjQ|d*Xp*N_HGL~J$8=_`dnI14RDSnT4_~_hQ0pb+4O5c;5;!F(*}wM7 zi$`oQDKs3CHRxA=b&rTjmQ^%r>-PhS&=5FZ;w5qtPfd*#VUv;3wQ z%QT0gkw}U$3HjyqRqA{+2Fg@Ddb_E>!3- zf$|y?Xs+z!rzGl>6mgXgm%94B4m>Xs(LzmZK!UfhTR;Ilf)DKjNRlYFpKE#9`eicaTfuv0aSb#;9A zsUODCBE~2xVy&XU<-nSTDQZ%j#;!VTSA%+>>m*7EJq)EKazpFjH4M2#`Gm0XK4oIC zBqq4xEy_e!61$9dk1|IymsDynkbERNNk)<# zBv54IXWfvAB)2YU!Ig5f2%|+74;YR*;s3vd(X}ABaOj0j?nqQ2+-X@ViLptEi@C@c za85a{ivs@3JPkg2F%na?F5#jiJw=Es8~*%&-nhpla+~1`1aQ4WT|hf`Qs99v@tTyR zl0?HK*O)(*XvXb|Yg^{4C|@E>QaDiqO6n|Z6Jo^{6H207lHaHUPDt0Nr8wXUT)47Y zPffKru!spuV@D?x%RCy$`6~icJ8_BJ%Dwaj8V_F6;VzLNk}F;s!rh22#VAjDTIu4_ z55o`yK5d+;Lv-nx4OaS_bmzw+V#)#w7$?wECkex_YRb&Ab8-dcJIlNF&@29yQ`N05zXENy}O^j23r1WUVYI;c)_j!22m4nnT zL33LWwnSr+e{rUC#NLi(e{l(mM|o{J$#=|!W0m)(brZyp5uK``k1yM~eI_a>YQFE0 z)ixO<%9tZLsHDirAr@}3YeE=Fj?t7RhJf<~Tslc2q8l2_v-xOM*g+PN$9qp6nP8I>{{-6S5l%LB&1bEgX6&eF44up2$<3aC@kVzWT108kEs4s*=uf zQW82lbD*(z<+-TiQb~+W3MJ;k0W75Fl1u&bapa|ID?u(va7+p&!A;SnIEJaZ|F6Bb zkFoo_?);uRZ}$#|bIE&Y#&kR*Us<#z#v(Ptnc<5~%BDz4WK4+?N!ik_ReIh?PBfeu z%?w4-mb!OlB*0!M#k#dyr|SR;pcFA8FPy>#b^&^kph~f6ZEU=7QMqdaN$V6by6HAR z+}#w(Za?31p6B=b-51JA+ueV;GCqTL9iDL*9m0z286lg8`z(0|F;e93+x1!MJl5{*FQX)Lp8Y#o7o3a zXuhz%(1pAj^&GcK4XaI1FeY(}6$ryUQloyvZH# zW4egfD|AN1CU=jp7I#Ko#^tgMA$?T?-8>)5sazd9b{GO{_X9 zbP*@fKicofFu};e`Eh-wOOVe(U9wAlT)Z8(ps->$z4VB5JFJwTx>lt@Pd0QsKF`HG z(PQg+N{~md!;*crDW0xK#|iAb0sM+>p2t#H2k=sa6%%be&bc!Wyi`+f7kWt%NPA2d zu5;OuFmnn4Qwk@9+;@6yc3LcAemxJ%>ghzfJds3jsdVA0T>zGh7H8*zq=adfXERQ* zXic$6J*?zraCQSM*)2u@FW&XV?OK)@bD5oxcitH7Az0HyFj-A*ft1}2sU{u=&3)>$ zuTCnHyA+mLg{`pMXX&#Ym=-C!nQzmycDOg!NR%TnL)DSo3UBL%qT7P@>b;T`B0_}s{*1CDMzUkgi%%U83LL+Q4bEMU#<6v@0TZIIvwmZz0Q z_U&C^gElHN63`N|l@T+Bev|sKyACq!)KAv5*qlT^C^Q))rBrBom45H53CwGdL znv%-PYRqa&F)n+gv9?P{V6<9uWUM1=mWh6@OK5%vk>tfSDO}b+Bp4wLAK{VpE>)-S zmHwNMqUEwB;L@_q$!7OHc6P1< zXE+zmloo625?gG0XLQ!|&ZyQ#cg7c6*%1r0i|vZjY=TKvD{{Eqa+M;AW!iB0T{xxy zXs`-ifm+KCD(mTWH|-bwHk2l)8alWDSnw;}cTGeMeO-H$eMAi69vq#=@|rvPdaO`w zXQWGS)`rf=*nrLmueKvRZ-rgsnfhL+gB5V^M{IZ(La}{=T7zM+e0BcfA{(OTbg_f_r=8eWir}OSKGxvcU^avag40RaZ16vy~(UbD>+F#5fy!iSqI-Bo^)N zHEo_ip_qShf!o%7&ljvOaf2vQ!3Yeq0xF5$D-Lfk+3AWF)v{>SgeT=TQqR4LjaJqy zhmy31DIL;7pR5HKB=E?k?VyDng&d;wfxoQ(= zT90T85_mW!Xyc+WOKycT0YxOWt-y+I3sS1Qe3R+3q}{@m{`}H;tO&YW&zMcYt61+; z5gl7Y9%EDD?e%$`N!9g9q9s@JT6&MwfiqC-R5M$A-VzRm-B@~_;|zc<9BTzd2N%(S zOTncxq7@3A@p*+ANIDbc9q){5>2pVPYrA#I(}u6LRT94AxMz(Bd7X$|!kz?Zf&Sc? zN1grimD@Kbr|lTF8jV>>_dl8ptt>^q(4*-0_|%5D^Uf2s1?u2UDz>Au(g9*Wyo`<% z?FpCv=pYEa>mX; z%szmYFr_>7$QdqnwCL#cP;Ir%#FJBxWL}Sba(ZpeZt{o_NnVc?;AbG_SZd}~Y{DEF zA|1CJlagUF2c+SwCrS8ZLF|lWcXJAI-fnCjb5N?-uVl#*#WC??=XqY0;ikjRStG7vNWAvLdsoTzv0&$-X%&Pi|e4p4QA(;bepEj1*+%gBvC1v zO08PauJUvQbR1Z+@yeiMnKb=6uxvE7AnAwVRATN^PB95&IyCg-MvSILKA{>I{5F+}bnL9&$LSJqlZmzGthglAuF_2%OBrDykAN)I@( zG$%HhdJB7faXMbeB0RPew#VF*Ewb+5Mp~HdLgSt3-kD@O(-+CLGq#;}J5yxD*%{SB zWZi|vmL!o5I}6H*vNNuYn7Tl&g*bn10f|!IZ9*g4&cqR~G8(>X3M19K#wHr=OwdN0 zoe5$KGNSBEQ6$KY*zWk22vY3=^0t$?IB68IDHND`h9#k8#ErYPgd|?vGHB^e{|uTb z!1-M4X@Zq@EEj?}@7VStK+^Y|HJ!Y0?$L1aLg05{Nkncl5R*~Mfk?5r_AqfdHPB zyDHpaid>k@R(319`4s1C6T5%Ro30&I>NKkn2YpEf;A*o zWf$ISZE-eT`Hi`a#oVG;+8PqiPuxucZB4BHanZ3qBx7C7eIAGCyrO&iV`S#VG#0aU z^oOXFtRpVV#bRDcWRHQ2bN@SUf{Y&wx<#J-C+p^TjPtY#Kg}kX#pM-~H+*%(Q+I}| z*_?{9_UbFYAnLhHu*!UjL+|%zAQY8(9CNG=F0eB+ip_IR*2rVj(a}r0gV-wUj7n8> z#Hg`(LsK#>svG6X6l*6!tw-@ZtKT!NmbV0`UopTWd={NJ#lz0mQ`)_9gOd-sIF6k) z_}12~kdEdQBjM1N(hF1RKKAJzIW?d)2=?5ypHw#Um< ztF=3mUUQ$~l$Ap{i>MBdU~-+GU$XePDs}f*7rcs%AhJ+H zzLo$}pU$=QQ|J8(VYYISEbvdl$q|KZ=;5bXUpqi)ds(`6yfbOBNgc6S6?QbSYl)!^ zDg_V}i{|!L%*Zy1KA?h+iPrKab*UvlDJ~+rMol%PX$!I}naq5wSVBj4j?k@O)a?k5h1vD+@kY7qmiV~3Q>dgh#DI}qGwBx%rt<)vsiV4MmZ~GTwOlXB zL9J&toYgpdb3Z`MJRJoV;v$b+=WbKGWP zqi&DuD6S)2UIaX~Yb__1mX~f{XALo&)zPPgEAdIW(DFbIoZQ~GkrZX;X5HA06l$wY zEU=2h$DK1N)Na_dO_)gO=!I53F9l!|lPzmbTsbV;qm<#gi6UI0l^ztvVDG9bTfg+8 ztJ|E};hzmiI?U|%h;vI)%8MZ?T~V24Gi~6>cMGDnGC9plK-Dxio;we!JzGAc{0Z%cVC-ki9*Z5OKfmNv7gUxpU<7CN%_7t>FvG(r284J z#CrrxDpZrXnND|9XymQ&MStgw@yg+?vBd6tae8rFqjWH=>%toork{`3c7ryv*$Hw0 z;CEz$ZMwG18iDMqo2u2g=)7&$04q|PIJwbr9eF$pGY8aemI_+kw$01XcX=h-<#oRJ zEcE&{4kE;hvFWzTUT|By?;lJyBNU8Xb+nk?GADH0lK zyS#D14_u}M%kkJ>dCU-#Ixv^KJaXtcJzuF#cQ9|>`opBLsYBG zvxYDW?abSe!*mZ#yn;1(GvFIxEpt;(ya&eo@)+;+*~dzSex02;+FF>Q)mng=rPqza zjqz~fU?c>rGrBj$&K<6;bD}{T?czzN8NKj8E7zp!aJba!1>@5t3^VZWc$~oQhPkq! z#MzxG0Zip_NHA7MzT!zkc6PDo!plH zP1WO>>tN=Z$P3EZlwvKhrJIO6K{qJMiXD~o zR%Dz}=H__=KJCtmlf3OXKP{=jxV^cAB$VW6nNzgy=n;QyS->SAF8|Kzc3z%O%yzb~ z!0B}XcjOSrwvG{Ygc$<1+5#6qY6%YB0&p{dMgq@l{$ME04L4S(ie$#1jG%snBXC-w z1c$WgjRSI!pn;&ZsEjZS+1Ee~@H1-dfz_PigP4FVgF?DL({Un@DQT}W_AZq*;)*>y z8MU&T*X9{4sS*X5!er#hwPi(rd;d}1^8NPn$<5YtQVhyPr;|= z*Jf82%pjQaq!dYkIr?>r=EB&e+no^*(cBF#-b+(>_U48zKsE8GOO)Sml1H38XLn;Q zE=;r1nw5kt>rq_(+e&k&GtCUmDmEa0EKwPbc4n9(!^w+#k3D?k z^5sQcAGtPb0)$5I9ZH(k;`)NRd)ij{!SHq0nJ9!^XQ)z%$1`FR2T7LQkNfHA1vaup z#mBdnKFMQHy7%$Myry|hAU`j8y|cCBW2_l0aa8nz?xA&Vf!VmQ*ATt9^-W0i`wFkQ z!O&E3oX6Xo=h>1kzr*%WEHaH+9b!iael&LuOgrw@j;5rNE>XQ7B#-~e$ zDQ&0Fy*8`y3YYo09QjzGfWn;H=ArKYBqAMJZ@jzVv^L)BOovX9vC-bzF2x)Jt8N_U zG@g^5>GJ8&xh>PWtuS7;Vfqt&w)Y{G->>#Fq=?21fdoFut3ZkV>^_vtmxsss6UK0X zxy$ZTe%usc?UHt#Q}UrnB9C#2T`n-H=FDr8YCOgwcN|G_$fwf;F~k>i1W&rm@yG|9LycEs72gGo#j<0W>BPlboUs6Cm2$A=B}Y2P0j?jKB%<&I z_b)9cn6WO7IAcA9)b+4?(ApLQX1AO0JvXlzGIN|?O%eHH?lyM5BqjhQuBRn#LBbw9 z@RPUMU}(ikm+`r1CyOjsLqNPIq6s0xNGm(8g`G7e%dRj#Ylwv&k)Q?|+tr4t06Vpq zsrqh2JdwSQBAVa^Be9vImoNKH)yyR0xR9ui6FMyQOIOi$o-}g4`^J}91T5*jFd2H} zx!3flfL>}eB++fv_Ku|~gTKsmsh|Lw`NAA4nA}vw+>m$J6PpP#1DD-*eQ8;oy*(_c zUxGY0;EKSCL0KDOdmNrO7*gF|m>Pnm?b_VDLVJaXjZiPKX@_8%ELJhgxF=;YD;kDNR_ zvH$eZ!zU)jCJrAwG&%8d*t-{1jn%TTTZhKR#>S_n_A?$_r_d2GO$4~0$8LjY)I-+t#9Q}wl{bU7|07c{A!neGn8O2Dz2txE8=3pQHFRLR%HmAkHPsFaisOa zG!CUbiO!+3%1#$a;XSpu2q?IYD9_ES)|iYI5AdJ)=*5NA<)!S27hN{*W=)PDIhn*J zIL+pz(76o8MUHXI??8We4qS&kGJzsl60(<(52Op)>GZKn54YU`f9&CdmoG>8_}vr& z8LJTCkidzY$Hm83pkb0>4t_~py4v>khR@$%)k<;CY?)}Mb)A;tQRJv?#wa>1x@ zZ293SCc$uQUEhOLb@=jSsYViNqH_}G^~>D2!pXD6+f&`Diw{X>;EFwcm%U8MT=tt^ zJ+r`NQU#gNJL)*&a4Uo$WSH&2R*wV>X{2eLCdX>e!DffTRixTWe*TJYfXY*9F11;F zIh*GSLE*8JL35C4{ep;Wt{KVaE}J+`nxQ6-HTlz)=<IQt|= z+0|L+2)eBG?31U{)zYWfbbaC&`Oy7ROwH;cC^!T`lw&PnbJW_Gty-e?z}v_g&q+A?)Lg6u~be!n%v zCe|v5wFv+UiqSGLD<@M>CR>3GtcegpGM`b|wa2a6IoGqd$qf%k;t!QG^SGQ7KbMxH z&5{)9`a`|1ZoNZpXI8V7%S`qc$8WK@#Ffmv?^c)F2y}9l^@B_|Gw2#!vKa?Cs&(o* zIHMUViVu1d$+0)ixB763lA(X>#=@L-8QGU9+NEG-A&sxE5~>hndCEX<6Vc5iaXW894@ zldMwfReKZYUZK8|Tk5=G?Q(gkfB8W51ELv@$9 zz|3SKZf4Q-V4(2aIW0Nyy;V%j305fD)O za>GUY6?;L8O7Dne5(?X4SW0ss$NC|+1FU)3dx^#@r5A{?W@MJVCuEAVun4>}N+V?? zmOL?Gt_8IO>BXRy07J0O5ZN&D(EK!dtwm;D ziGNq>>mhL|-&Bq@uj|Q7^>qC3yDYB@T*s$bVbA}t~uGO4ls!o?1VByw(97~m<=_ccb6ZqpHr64aFv3Uvm8@;4fcZ*qq zN{09tvf)NLx8AaAPQ8JSY<@eDD0wWTWea9xL>$IVHZa>K9M5#w>YOr9_#MmCX>Ulb z9nd|v2e{BMgo%@3IV=Tsj_`XUfabUq(y)*haX-&`=Un(GA)gOp;pGsXeUfzSAP9^6 zWr>Rzw$TJuD{;+|<9b-J7;N<9Jdov7nF`}6H^Q`zif&`|sP?NNoP3nr*tZFt4cEfi znEEWS?R7p7_H`{coIOG5x5=RrSg6FcOwUx~e7Hp@%h`oqUbB`rNHfdd8{|;C)auYb z9JYlp^%!yMA%a!=I z)Y|~Er@OSUy=9GXlb-Pito7(c+P|2MoS^7quta@=wvT4$eISIP25A*eO}+c@YxG{^ z|6&M(8hwpt7-o5#Qmzud8p4k2eAUuv3kfefz7)$AWag>q8u?WA{Si;@xAxrv+U#^7 zUL)}NFb)Pa2y+bboT_OpJV^Kqtq`mguUa({%5{)j2STY|X~NJ0Hl|7!1~qc4a((D& zLN&svKF`a38N=Wu!(idNU?7}OevLKHrP6P~p}|<(AWp4KRB(SN_45BCPY`pR_NlEt z^2K`8uB)-kP;&?tq02%z`R8f-73ybGx7=lKMJW5IgnsoT?7KkRBB@dvlwQ45eWE(` z$a^e$5>!)f)~I8Jzlu+^7e3b7<16HG9B@j#PHJJ&I=HGD1OqRhUhmKtCY-_Ff4_~w z@o*gKxL3cu5A**RzK1RBnEl=l4wS})%S9Nejx-kP&y_;0;x1vh1&aNR0M7RB6D8h% z7CaEf3nuD8_fZHRZ|$o_ciJ$>@kt}DQiM}pKi4w@E2X-wdiswA`qTg6@L_&m3NMB5 z5%C_Uv4vPt!jK}jwDy0XJ#F4!i(j~CwF&;B(nb2AQF2b2#_~F$!u*tKnv}Do;=YI_^Z(pmvdSY)~Yo6@$rjoZ`_;Z8y@`Gt!vsa2Rme4UsZgfy zS>xfo>&%^TDtMNs3x`EBR}FFwg9N=|ThsjIGnx7w?pHeDfX`()&81mU{A4|Zd(XC{ zOQq+Wt~A8~Dbi@{#G8d-tz~!SfuDUmFQGks-WI_tAC0{A5A=g8Y=eTt}Q)rvJHpRER*0OZnR{yeHH9>KIc6602mEUzqh@FD2*KMHfL&v zbo}k4o|x}^Csf+$>~GS>aAH5R{C>v$iExg-h~>QOZ&q(s>&GN>IW;B<5zOv38p2c2m}EGo3zsrPK?~t? z{CDmaTmJFWjHUR4W-RrYZDcWpzO8vXaVt#t7(5XvT~gq>)xSz^(ZT~!+W2UcEs$&8 zE8dzU8$qlQ{x<)^ptlLv=yUj|fxhM^!SE6-%+mEf2WJrGv*DTWoBVc421*U*+SNJB zNzU>)m3gt;2oGsaxtKVyX67VY6sbjc&{>uw0m0hmz9MI&?q24n_lb9_FXH~1kru5V ziv1;K)FS^2J8lB~)N3S-(N_O{O2|2T=>skwNSbi$Xp7%nOue6y*{TXhdZ#k8RQJDg z*;%^UWuTw8c`k(JtDnvS5+W5FqCxRtmgvGm)pY6_u3Ra&ROn=0mJ1X~)KO=Aa>?sh zrWBQ}iKBG!qz!RS+9_Q=8LF&Ccn0DB9N+eVRQg12k-@#MNGjfk7<087i+d-vKt!YI zI<@MZ$T@GZlmI8U@cz5!2=6}`&coy$MLl~gJRL3o+e^3=76!$H&J!LcM5+?&F)g>j zDkt;PE$AKY&GRH?)|O)TG{`8iN)vwSW%z)`SWM=okx;9O2b$O@92fPnrKLzmJfUTtgSgFBh>> z7hzuu#^Mqdh>VLYP0USVwOCnX*Z1WkkWV>nV=yFDM$lNJ4T+s3ChAParwB1swK``i zuwIyRQdgvCIBQ{gM=?@6H9As36FgOiMB*j-mBJJZRdgnovunJz;pFzO~j7MqB;+DJjRA(g#Gl zk5kim+Nd(x;y?B{P${Y(_X9Oo3|$q}Ibtr!7$0$BNuOak50I-P%^j zJN5r0uV}Tk2k)lkJ`1++h#hLBMCBU>)i9WP7xtYk#H7BY*y7Awnkc69vCq?W@(1-j z9541dH-Qyfljfg%*6?)Ow&$n85B=?GW2(iUJq%tIlC~1F!89hoP8DKcX%bS;ylyjuUK8|U5F$2FzpT>am+|ox+2E- zXbQ4!jVmF@sa?_n3s$4V>U9Y@wFB5k_JvPkaONy#N;sA0Jf=JAEkY%?Z?9h zkpTGr{?-)9WMT2=uhFx0TJLj5irY_!I7i~e2XJcz<00TL8oh3G=B*LctCjP_mU_2^ zu+Tbg-RMC*x=O!PkFeZlTJ_dd8y{Jzx``9Z=;Bg_;4n-5@RsR+7c~|6Z0SR1!0gjd z!(|lI^Ni;SzL!x5h3RLECcyVWr8-AwxGztC5{2;se`UD1M4qRiBU7#|wPM3_pQKOX z%4uZN?4j|_d7~t*3ygrTzzTN0_L`&*L8g6n7H4^PrH9?!R^ChfpMl4P-Us>rG5!z2 zu@hyb9RR97DT+x{PrS~@RdY`GNT=MJO3KZRE|rB3iPyER^L^BCK&wi}jT0i%Vk7V5 zCq4&w$p<2ZJ0}!JcfKN7!FjHzMD}ArQdp+=bMz;z;~y9AuW8Q9jV8xKX?KHBcInyI z_buJ~l}=KJW>UvbPUu1ZtMfFMbEVQLHa9VPf5KF|BNZN z#h#r7v9<7|w91gUwbSt$BN2uU00ZY!;l0UhdB89@t!IVzI&V$8C?2J~qWXX$-#PM~ zhF!;nRCahSVMUVtFVKs`+tP@%)~No9s)W~)swDeJ!qa@^insR&Y&zeqO|2_8#T+ti zCmxf}J%xF%V9XnDG3_0U>qj|fP^(tq$?Ah7MOw2fAE74*Q?J6%B~m$$4nwC1kui$h zLxX3@r*RI0pC(=_L}BPOU-5p{JBEZgnw^p2%jZeSeABVc<0ILM8Iqizv{I6;>6q9` zJIsUV28jYiFX6sihC4|cM49Saapyp&HQ=Xet*@y6ZTkFx;YZ@4bHcLIc|XKe+gHvM z;&hmol<+sn4nVU-&Te1rEXpli^6nR=dts;qY;w>APz3^f|{%VXbrkx4nzGMs1?ds;Om@lDa0xOt*WEpLeHhFxpS55ALW zHP$GZ`zdA^mkd7T^1;yK_&q%AdYpOWB(uMy@bhr)OVFy~ZP8=sJb6#!euPlTw=kIUtP za6;05rxidck_F*@+{dF|vV{Da>126e7to1Et#nzv(w>(2mYM}+tv*X)lRZJkO)oLF zbjL+v5_TL9VO*TsaaELbnbGSUspE|7MOuC~AgR@!w!VvowEv1Sc7M!zC5xZiYAkeD z!ixkgQr>@eI5`Zw&!ygBc6)su8(ZkVkDdoxoN(^j3f;u>qI5SX3ykF$OfqK}PA={G z47H+9iz2yns(6KHM`(Codpd2x0>ciOKejFt?nK3qX_I)b)^weNl63tHrI{^zu7+-^|zMCp{FcAD0^)aKS8Hg8i( zuJ_5(B#e~?raiV^d&-|{e<|c4(zcdJO9mgIJ}n-F;gn96lhCGP-UJJ8QpZhfDtXBV z*(p6n$V2>2@taE6-%(TPr0dD;+Ph$;g#!KE4}`>luj6tnq}nU4tTCGda$tM!heLQ? z3(mfb&^nuI@3PMjNy~B@uP`a!)P`M^ zEDX`8wX2CaG{a~rQ|(qSl+Rm5J41NpAH4S4H=1Y9-dX$U=f)0y_++U3=fD0B`;Sk2 z@Xf*9_2%E}*%j)e?yB#r@9W=PKU=EyH+o7Vd-@xtQoT0V=&e6huhpL(G5=Hbou%H= z?)tN(dqTakyZ#=&mC#$N)GPI!mC(Z{chsKi50tTUAe0oojZbZNeVSi|?5ywHv9m;3 zD#L%Rii%fRp~^B1p@Eg5Mqm9YIS8u|R^NQRUctc0cR;P&e7z4(r5t*CYI|yX`WmI4 zk={nA^bHWzJ3!h8l(vuGO3%PZZ(va|5ORlhkoyh+J$*QPa8%{sC)DSy_49*tk2KZM z5z05$0AIW+{Z7w7PtQP=I_CQ;DzO(J@W0xJZ@y=MCXCkh3^agH4=pZLYQQxR)cZiF zP=0-Hl^%?!nT=58e@T6=@2&4ukMl7Dqju$UO6beey++OS~qHobfmVZDr<}7&^t0RqHj-W=g7{H-T|T?AR2Io z&{xt=kA4`3(5JvY#wiGf)~|}nqRW&ee~$pxgSUr3tjC_Hmr`%3)LT6Ry#iJ*-T@U; z)=x!0gZja|8~TRyvt2*PfuXOepB?(ysh^sD>iXHGpZDlzw|;(sAC+AntZ^|qlOXqHQO&oDQSxO`8*de(02d8y@-U#Q8Q_&p}O^*=-<%7E#6}dFF^H%ieh+(wz0jgK5 z5!@YUtjFlYGBEn{gC5Ta_YNo@&Awg2SC;G966N!S@|thbDkr_>n@&eteYA+A@L(YO zhB|5qtv_CfdZt43^*G^S^9}xaU*8a2zM;l7-=G0KeFL@TH@6uV*t|p8srs$Htol5# z`F0lAd^JNs+%! z$WBY${EaM0KY*>*m=EB%0dR~8)qhhhtJXKhtfDVEG`=VT+88siDh6EW2e>^u>GaNR z1lOBihcc8)fchf8xE1h#%KUoIz&4WCHyT!OAo7%9$i^vzk)G-vFGuN5i3t)5{sDVy z!*{LB@AlKq4G3G4z{Z;l55FMPwlE<4tWN1fX_#MD<|yasK&)Xt4- z5)o+1%3!09UQ`gJgagfQ)SJIkYkpg8_^igU`Hx7vqJB5OK@NKO4Yg)tT^>FR+-SeG z?>iRK{EiS<1zPG2o6o-iifpXIHu{At-w{|S1`v_|0p%C8z9SI*o&*c(uQh+a*8Br& z!1vSuwP%i*ux7(T0;}@dUgfu|$dem$SvJRVWl}^wdXva%g^kAV4zJ>Hty;^E7f?&q#G=z4`qz zL^;ZLh&3=tMa}PnNCB}4xGUw(k!{gI)OIC;Usx)J2%4~oqpqFK$((mN#q1w zdsCg8D_NbJA_k=w{%@|E=L_!nLTt^ZFmLkZY z-~4jVPLN9E{$++V3*8k!ZA-E7mZ2>^;U^z3&2a^{rUa60yrpT%fxn3?$!KpP>GDJ6 z{0@mWNu~a!d3fV3?;CTg6p#dtJKmR>!x1lB2c5p>;vrIEjmBoBS=x9JLj zhB>KUlQlK{6t!kYW1!%J+kzeX88r=1zl{7(t-;NoMw!W{i2Xv#&DS9wepO&~N9d1E zFMAki+N1D~Y|nhI&(!vy!vPeHD&0|ocUHv}(Y5%M!qxmKT!`ktibez{TA*oMT~fq; z$*Hh_&EKkTehWR|xx^Qnzvc6rcx3ap)P>D&(FJ~0lRhrP*PgSvy<)T6y}Mwz)i_lH z+c)*!W`$>f)f=c2B7C6&g}x#FzWFVxhE;hr8cmnUHs2@@e4zPf^^Irx_3hCZDb0s` zJk4p1q7+DC6d(RrXYX+$#=ZF#>_wq~4#JG_Qc_g_!NX&4PtR4o zCv1yl;M_6RW5Z2x`0gofAM3G%=BbVK+UTdqdwQy4y^bA9dr!~6Sg8a*_SUIEj=A0% z!ym883NNb9bZi>n*YBmiza6Z`j5ag~0w4*k1^&7TlGTK(>ff{kq1Kf2c5rZY#T*W0U;mkDOZh1bECJmdU9vT*$cG=Ibb2u4YM#sBivABEaS! z8k~PL0Mo_eMf^a__-7TdK;9QY2`a)6IpTjc;yy@CGr=b5i?yw}3$29r z|HXpg6Rk!5zg-t(Y*6krYJ6;<=6nd}M0UR;G_+qjW1__OfRqNOQrm)L0R1gbu8#;u z-IjfrUqgQkIG(b;wP>|$EmH8-q6*$xR7t2B&f@iTK7q?4Fe6jmm$NZ_Eg#d@(&)UF zjm~RIj2=_l`X)?L3jvjWS$ZAyHg+Q-m;zecc)a;KJAXo7GlVZIzK0+D7cQO{4}I9| z`Fr!eFa58_c0TsNH~#6K|M_U&`iDRC?Em$5Cf~UCnKOTJ@C)Dj(;GkfgI^l>;DNvY zN6&ub-Vgk%U;gLc{%61Vx!->JgWvwd@2p*ZsQ3Q=^xppEKl{i3@x@Q9{ZIe+r~mxS zzy25h+dm!sgTMQgPcNPR@Bih`{>@8g9(nc4PyP1(fAG1jl|TQl|J85q`)B{%z14?b zdHlbay6=BH{=Vb?=kNWUUGMp?4BB5pxf3gUkG{L>TmR6%*gSRx1m#_!CGH+9%}7jy z$;e?qvy_8naFx9Gh(LDsmYGS)fc;LnEFf+Du2lu`)#TWEi?VwMygs=#1uC*19N87% zx|N-kYPqih8}$ezL9+c5PfGTCViq+)RPrn_YD{fo+S2H2X~;usO>de1pmA&|;4;!! zjI~ATx#gsDFt6*@^6ygN#>-mWvB^YD+ZELKX9-h#zoa;*y!k3peGihz&T_vzh_ErX z4+zw(us>Ame-K;$1GUJPh#YDbKsRa|ze*O?RG4m?KO79bQHKG8DHSb+*=XY{)m`O5 ze5z>UEA{z$4Mv6XfymhW)r$UC1_e3jq~6$3E}M&m8cj8genz9l!iO#RluKwL<({4% zDP0)jObe=QeEof;@Ck6W6fX4)>vG7Ok8`Qq0@uQq)NO`oujxs*>5k338^2SgVWYK; zZ%2^r-By-*`8yS+K?m602(Y~lu#p{QjDoLL>w6ti1f%kxtd;v2@=6vwR0;#UtfMz6 z!f+{6X5+>6x{IQxQmt+Lqn)KNw8oWj>udXOa>K7h^eCcQ3WMC9mx5JNd?G8*Kj^Pp z|F9rPqO^IVIsmNZ>U$N&A6gtc&&p!0evTQh(hJ~*H86ZD`c`CtQ0+ry7P%N8mXOW~ z3-$tMmCLOBdkB3Mq*qGc_`TX9@|(ub3mJ~z?fP2GpU04G@mq;s8Bu>~<5;D9mTkbB zMX1iC+ulkU4Ct-YZq>`>(b_soNfrI-pO_P%@1=Jj%d2#ww^AvECIG=y=a7ME!Lb*> zT$XznK*oGzh|gEuRQp+ipo|p6%1HB%Vzev)e-YhGP@Au5G4@+M^-J|Lg%rPgvOHK{ zASSLGxl1c7?xK|F(j@0$EUe^_G^@g7{%lF;1tE?M0nO%@-K{FWYR221T_wK#k`84$ zN20Ecj^GBzz@JeJu06e@*owhcELe(Z z5SKLoJ?-*1ENI)z$R=KkvSIxtr1>>E0;6hvO$p&t&9ChS0L`x@-qidWkl?SfZ=CbQ z8|Px;jdQzTWgF*G;*E1k>WRErl*l50SE1%v6>pAEg$(&`dcannv2WG>CR8148fLx( z0Pl(U?b|3v!OZefLMks6qY-4j*j5_ZTh{1;juc5k%??(4N~v~MYA~19#z$y1-^L-H zjtvs~HdKPOnBk1kn|DAXD_(jO7AxojDuao=w_L`}G)9k7pX7!@Sd3DWzGVmp8^hwt zvI-ctuSTYQj#w-`7m#b8aA_aJ%W4ZrYa2gRz{{zTcOqQxC_uftv%B2u&1&9}FNVU) ztDrUdpU(}<5ojspKK=5~d&){nbi7#+jl2QiY(|=NoQ3yOb$#P6jUWB2{<1ByZv3@% zM`2s*qa)ijvB@-}-ornr?}yYrDy|5S?u=qp@|Jp`m0iNMLNE~02a$`v?o4Qs43Oo72!XSY^HM{2+*F&$ORq9jaTugtOSu3Q?amBM!UbV01%h+!is zNbd8gy+x<#IE431qO)n^8h7|9q_w`nZhIf#tnuAYHC!b!+-RPz@Try6f>eFdm+W4pl- z9Jw9=DqgWmMo*|dgQ*Fv;-XQ8M9hVsmxeR$Eyl0nc3LTp+15tn(t6u(+g++Oaz zCx~S!&@|2yT1#Z9(|A*T^Mpjk&Bx6eRM}o0sIc7D{JOBPilw4j+kCdR`CM&tTEaRX zafZ!#{WiZY&b0Z0<-ft&u$0&v74vSef+yR_jbA{z;G=)dZ;)6XXvp#-=CFc)*9v9YY9}0Eyvjk#qIir{;8ggrv1Jo z=C;wSZ@grDYz_&XfC~PqX0jFOY35aMt-kS!rC-4zDX&tmvC?I{i017<66R{52zpd_~ZT6EC?(%n*)ZRD#RMCHEpp z)RiB@I=xUV$zP zi<6>DUzfaBVnZQDrgq8@omf%#KxaK5yooqZqFU59o@BL>;lv?3XYILRw=;ixr1l&O zj6$bxl{KTiTIn@Ny=q~9Ask`u+g=LgndvoNJmvtFJn7v`>HZAEPvNuFXT6e4ZDxTW z4mGDI35=08zgRDY;dwnLxL?`~*JZOwPr6F>`Wah<7)_L;jUUm{AE`h(h3gl}gEq66 z$LC2+tRl40-l4MAKKV1++p8+Ba3{IfpqE&U<*>ks$WY(-BT+N${jnyD&F?U2f#9Xk zdv$J>WmTGcRj-;TOKtP_fB?S(^yUfY`thmny!G2kq2C{aH=x7^+F^0Df;-74f92M7 zMe_zqh+Wxw27poQABdVazbAga`TK5^gVSKG)e0-b-WZT~cUOgJS~#WM8c)5pN+c>Nyh2p$Eeaao`8_&F^c-SNwi- z!CGo;^e*W|lw!cT-p1AxMK`GJg%xUJrWhImy@!Wos;>?UGJJ>hE%y%%Rfj9mmsivC zC@4W}FYJ|C2;yi528+|u6-TPhuK!pKTD!(mO5SO;pXVo5tjQ{B-QKcNTX&SgHurf` zHU7-y&x2*)7vSC|SkCem3s3ABTu(-~>ddYcFo zL>|Gz{rP&shWp_SG>UQmo->In~S6?VEKewq@i2Pdp6H9ZC@(zePq{2?Fz33@2BC+NE`sR;~0M{MwH&-Iw zZ?3!-dI!;@&mS*=JDH2|9yS3;X)UU-55GDeU6b|H)t0n=9fh33Ni1iwk#EBMQiqW@ zM@Bwe3in>((VhnMYcCTvAfp?LbB(3t^~TJ6;|3E3d)I#{iomqnnyhz&4)8*Pvhbu< zl7J7uiU4U^^fx1iYDDO$)}%zB!EL_b{!uKBOjhzCVl~+$@P>8s4FqO7&Eny=62ohoe-guYGT&`}3w0v}G|GVHP3gZB%OFGrKUegThE${e zI}lO${jZq{)p~2nPcZ6Ibo%G*{Vg>6D%+2G?&&e1*Y*$i4Dn~E0g~HL_WxAQtv(h% zlPSW~d6UN8es7s2s-H+h#2We&1CKOA<87OF9u$YaR2_T*)@lU&{%h;&D<6I6Au;9s zjN7m9pxc4v)vFKPTzkk--OWp8wEj}5GEA$PWE@!(i1tv~R_;f4HF-xYW?OBmpW$K! z6J<}UNf-i~Uxaz|EX+}RrJrX}MeW8=dKO>I!z3pt-Qv|eOp65yTVKn=dI@7vEnUxp z`Urw)^}aa0m6s1A6Gc<|G)VV7GQGAidxk-ZZyjAe3*B7c@oK$o#tTjS z7JIcTj;Cg<8>?sZDrz>FMTw*`-c#FMDlj&03f}v~zL&_Ts-+Tlc9ipB2ZiNXZs@Geteqge(s%27x$LJh>RRh z@K8>-lwdlHNgD`E2gU)Pjv@WFTcAvYb`3~5)y{`+iQypaZ{Did@|0#DnBe9uU#-Gn zO!c$USIvv01Jt7IW@c64(>->o<9d-2@3KdK=eb zf8@{t9U;F6uY|u}t8e{l@9W036ou83i1tu5eLH*M_Q>&9{A^s?o~*WPgTSm_W(mLk zijG&k!dCUaN(CV2jrLau-H1jmT(Ya-I>78kllY$n$;~9J*epXTD77m_yK;7IK=P1J zIIl=o_|v}z5v3l0M*NY~d1L*`{v$3wOBDOm!n|G}6sz8AqS+;*K7Y~3BQw;Nv@p1m zUN(0P1(6tCZ2G1tmi5h-1aj=>7weBDt*@u0yzI8-6N&WMAEH>5ll}cm>!YAhK}2qS+>mX4K@fNFzo^1 zuol$zRQtE-7y4$@Y#?iUhJ9pnpU@%t5bhv6b|Dxt*7i)53CXiMp2Re)tJYeIig~1& zv;RPLK2~D3_6qqi9c}Hk;3*SuwvL*`;%Ik%ky2-@b!;*afXbk%UBwl#4|TKKvUnU{*gQ_%kBWbWMbWt7s9&<*88O zV1vGo^4lZYjEp@MIjtATP5cHKlqHjXFRETSQ8r0Cjd{L5sAYJuYrPIn1>s~Zk7FK( zSPR8eBhtr0Xe_OwrR^Gjy-GG4*`kCNDqmoccpzxmr278yE*T40^I$v`&L8t*Loln% zJksM9*4WONikdb=(WcEG&}ja_v^U=t`#vVUQrn{9M+5UEyb*-8J<%`neq}rQA2m`6 zYZ##ZA2M&9VRx4m`A|E$`YXgIc^o`rF-86<3x&V2ZL>1%tx9Q+VxJz=3kV0bt)~FJ z*0NsJylQhPZ4@=DmqyKJFrlI)5|RSEAYL1uQ}wc=Ve7S3mM3n=uXtp=DC!ya*2X7N zZ9VP#qv~7Fi7jkikM^<6>-EjwH%2jik66UB;3PrcQ?10*x299wSZJBTuVdT$MPRh` ztlV4kmM%{utl4^6Mj)jf(QcAh_Y9t0OFoVII>RSWYJ%SBYl@)VT*AMD=Fnuu)7-Put3(jJ z^L_qmg*_jb%51GcNglaz|6=ECSBig_%xd)+%)nlmX)oi(M ztFM6}^HGL!hDY2VTV1}fqE2l)%i`7b6}>`SQh{HH=-kt_32^Rxj|h@bYyYlkeJVV=2wwRR1o_ugu$%=6479>qf+8XSM;R{2eG9 zt9r%!?zu1!FgB*fztW(l9ro<=h2@!rrLJufe;XNvz%H&}hwhq$9UZ{1k5lyGDtqhf z0l=Gq3m5yi;IIyCTk`g`q*oqzAVRRgOWutGPn^Eg5DH+HY&^P()+%AQf&S%FpFkY~ z-5imtvA=PGm+yJ~d(LwbcGV1=$VLyITwb}os^_O056tds92^^)+<$Ove5^5ZyYb7@ ztIKPP(>EKRT)xRZsOJ|#*!XNIZ2T=7N*?>>P3yJwwSszgd~EFCd>L7$*Ji>hvz2`9yxe$Y~s+7Lt|ryr>4iJ4j-C7IyOH(J2^2o zIWa$WaANx4_<(rEq<1c6oJv{=l539{&8>4~51j%=I6B1Od1gzk5Px z%9sC<$uMx^QD?Z)oZ-|738 z|3>vXMk&Z~ja&Eak4D}@VgR30{4Y_eZng7EY;=ohydjdfy+OHjEsQRHS>sX}U4avC ziz6n4Z}$C!LQAyHuY=JYg`Fk+uBFj^PyTn3t6P8p^+ z-m7)_z4sHOhab}i7?f8d7cLDCDtehH9n7+Wm#CbjDTa*Mq* zOC3#av?>7)z22zQy831X7^qiQxyy?6&n{sNZmFB)hPnp#aS7&=lp@zS{~JJG*Zll4 z<>}r}A6MOi_(^=aHc59D>S-kXIc9A>AM4YlIf_qXET3SL!?f7;&xBFh?w2{~hAKg{ z+t@W|T_c>J*ShIc_jdWEKKZCPKIr{QVVM3*8thxkZXbbm_#d%6C+MB-R!c8_HlTpk ck!#Oq75==R*ZabDrQxEn|M2Jke-QY;0odSdrvLx| diff --git a/NzbDrone.Core/Libraries/NLog.pdb b/NzbDrone.Core/Libraries/NLog.pdb index ebfc192d50a34898a1a26c8384e0ca67ab5183b8..a9996beef50239c70af8386d4e78af949b0caba6 100644 GIT binary patch literal 882176 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

lqZgOg70*&xjBtP59RMP(ra+2*P+Z` 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�b7rQW)!0Pw!3&M!@`}W(N@#V72 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�z?Os7WGfw2qTmaef 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 CA^ouc literal 736768 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 z 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%0ADXzsy0NsX{T8P17s*)D>UO=Yt9C)338Vrn~l- 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 diff --git a/NzbDrone.Core/Libraries/NLog.xml b/NzbDrone.Core/Libraries/NLog.xml index 4f7c291c9..cd0c12c15 100644 --- a/NzbDrone.Core/Libraries/NLog.xml +++ b/NzbDrone.Core/Libraries/NLog.xml @@ -4,6 +4,266 @@ NLog + +

+ NLog COM Interop logger implementation. + + + + + NLog COM Interop logger interface. + + + + + Writes the diagnostic message at the specified level. + + The log level. + A to be written. + + + + Writes the diagnostic message at the Trace level. + + A to be written. + + + + Writes the diagnostic message at the Debug level. + + A to be written. + + + + Writes the diagnostic message at the Info level. + + A to be written. + + + + Writes the diagnostic message at the Warn level. + + A to be written. + + + + Writes the diagnostic message at the Error level. + + A to be written. + + + + Writes the diagnostic message at the Fatal level. + + A to be written. + + + + Checks if the specified log level is enabled. + + The log level. + A value indicating whether the specified log level is enabled. + + + + Gets a value indicating whether the Trace level is enabled. + + + + + Gets a value indicating whether the Debug level is enabled. + + + + + Gets a value indicating whether the Info level is enabled. + + + + + Gets a value indicating whether the Warn level is enabled. + + + + + Gets a value indicating whether the Error level is enabled. + + + + + Gets a value indicating whether the Fatal level is enabled. + + + + + Gets or sets the logger name. + + + + + Writes the diagnostic message at the specified level. + + The log level. + A to be written. + + + + Writes the diagnostic message at the Trace level. + + A to be written. + + + + Writes the diagnostic message at the Debug level. + + A to be written. + + + + Writes the diagnostic message at the Info level. + + A to be written. + + + + Writes the diagnostic message at the Warn level. + + A to be written. + + + + Writes the diagnostic message at the Error level. + + A to be written. + + + + Writes the diagnostic message at the Fatal level. + + A to be written. + + + + Checks if the specified log level is enabled. + + The log level. + + A value indicating whether the specified log level is enabled. + + + + + Gets a value indicating whether the Trace level is enabled. + + + + + + Gets a value indicating whether the Debug level is enabled. + + + + + + Gets a value indicating whether the Info level is enabled. + + + + + + Gets a value indicating whether the Warn level is enabled. + + + + + + Gets a value indicating whether the Error level is enabled. + + + + + + Gets a value indicating whether the Fatal level is enabled. + + + + + + Gets or sets the logger name. + + + + + + NLog COM Interop LogManager implementation. + + + + + NLog COM Interop LogManager interface. + + + + + Loads NLog configuration from the specified file. + + The name of the file to load NLog configuration from. + + + + Creates the specified logger object and assigns a LoggerName to it. + + Logger name. + The new logger instance. + + + + Gets or sets a value indicating whether internal messages should be written to the console. + + + + + Gets or sets the name of the internal log file. + + + + + Gets or sets the name of the internal log level. + + + + + Creates the specified logger object and assigns a LoggerName to it. + + The name of the logger. + The new logger instance. + + + + Loads NLog configuration from the specified file. + + The name of the file to load NLog configuration from. + + + + Gets or sets a value indicating whether to log internal messages to the console. + + + A value of true if internal messages should be logged to the console; otherwise, false. + + + + + Gets or sets the name of the internal log level. + + + + + + Gets or sets the name of the internal log file. + + + Asynchronous continuation delegate - function invoked at the end of asynchronous @@ -445,6 +705,19 @@ The message. The inner exception. + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + The parameter is null. + + + The class name is null or is zero (0). + + Condition layout expression (represented by a string literal @@ -773,6 +1046,19 @@ The message. The inner exception. + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + The parameter is null. + + + The class name is null or is zero (0). + + Condition parser. Turns a string representation of condition expression @@ -1037,6 +1323,20 @@ Gets the XML element name. + + + NLog configuration section handler class for configuring NLog from App.config. + + + + + Creates a configuration section handler. + + Parent object. + Configuration context object. + Section XML node. + The created section handler object. + Provides registration information for named items (targets, layouts, layout renderers, etc.) managed by NLog. @@ -1274,6 +1574,11 @@ Provides context for install/uninstall operations. + + + Mapping between log levels and console output colors. + + Initializes a new instance of the class. @@ -1484,6 +1789,30 @@ The new configuration. + + + Arguments for . + + + + + Initializes a new instance of the class. + + Whether configuration reload has succeeded. + The exception during configuration reload. + + + + Gets a value indicating whether configuration reload has succeeded. + + A value of true if succeeded; otherwise, false. + + + + Gets the exception which occurred during configuration reload. + + The exception. + Represents a logging rule. An equivalent of <logger /> configuration element. @@ -1784,6 +2113,19 @@ Provides simple programmatic configuration API used for trivial logging cases. + + + Configures NLog for console logging so that all messages above and including + the level are output to the console. + + + + + Configures NLog for console logging so that all messages above and including + the specified level are output to the console. + + The minimal logging level. + Configures NLog for to log to the specified target so that all messages @@ -1908,6 +2250,12 @@ Name of the file that contains the element (to be used as a base for including other files). Ignore any errors during configuration. + + + Gets the default object by parsing + the application configuration file (app.exe.config). + + Gets or sets a value indicating whether the configuration files @@ -2235,9 +2583,9 @@ Clears the content of the GDC. - + - Helpers for .NET Compact Framework. + Various helper methods for accessing state of ASP application. @@ -2491,6 +2839,11 @@ The enumerable. List of elements. + + + Safe way to get environment variables. + + Helper class for dealing with exceptions. @@ -2667,6 +3020,67 @@ Interface that provides parameters for create file function. + + + Provides a multiprocess-safe atomic file appends while + keeping the files open. + + + On Unix you can get all the appends to be atomic, even when multiple + processes are trying to write to the same file, because setting the file + pointer to the end of the file and appending can be made one operation. + On Win32 we need to maintain some synchronization between processes + (global named mutex is used for this) + + + + + Initializes a new instance of the class. + + Name of the file. + The parameters. + + + + Writes the specified bytes. + + The bytes to be written. + + + + Closes this instance. + + + + + Flushes this instance. + + + + + Gets the file info. + + The last write time. + Length of the file. + + True if the operation succeeded, false otherwise. + + + + + Factory class. + + + + + Opens the appender for given file name and parameters. + + Name of the file. + Creation parameters. + + Instance of which can be used to write to the file. + + Multi-process and multi-host file appender which attempts @@ -2794,6 +3208,50 @@ Length of the file. A value of true if file information was retrieved successfully, false otherwise. + + + Form helper methods. + + + + + Creates RichTextBox and docks in parentForm. + + Name of RichTextBox. + Form to dock RichTextBox. + Created RichTextBox. + + + + Finds control embedded on searchControl. + + Name of the control. + Control in which we're searching for control. + A value of null if no control has been found. + + + + Finds control of specified type embended on searchControl. + + The type of the control. + Name of the control. + Control in which we're searching for control. + + A value of null if no control has been found. + + + + + Creates a form. + + Name of form. + Width of form. + Height of form. + Auto show form. + If set to true the form will be minimized. + If set to true the form will be created as tool window. + Created form. + Interface implemented by layouts and layout renderers. @@ -2806,6 +3264,11 @@ The log event. String representation of a layout. + + + Supports mocking of SMTP Client code. + + Supports object initialization and termination. @@ -2832,22 +3295,6 @@ Gets the level of stack trace information required by the implementing class. - - - Define Localizable attribute for platforms that don't have it. - - - - - Initializes a new instance of the class. - - Determines whether the target is localizable. - - - - Gets or sets a value indicating whether the target is localizable. - - Logger configuration. @@ -2875,6 +3322,88 @@ A value of true if the specified level is enabled; otherwise, false. + + + Watches multiple files at the same time and raises an event whenever + a single change is detected in any of those files. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Stops the watching. + + + + + Watches the specified files for changes. + + The file names. + + + + Occurs when a change is detected in one of the monitored files. + + + + + Supports mocking of SMTP Client code. + + + + + Sends a QUIT message to the SMTP server, gracefully ends the TCP connection, and releases all resources used by the current instance of the class. + + + + + Supports mocking of SMTP Client code. + + + + + Supports mocking of SMTP Client code. + + + + + Supports mocking of SMTP Client code. + + + + + Supports mocking of SMTP Client code. + + + + + Supports mocking of SMTP Client code. + + + + + Supports mocking of SMTP Client code. + + + + + Supports mocking of SMTP Client code. + + + + + Supports mocking of SMTP Client code. + + + + + Supports mocking of SMTP Client code. + + Creates instances of objects for given URLs. @@ -3005,16 +3534,6 @@ A newly created network sender. - - - Emulate missing functionality from .NET Compact Framework - - - - - Emulate missing functionality from .NET Compact Framework - - Socket proxy for mocking Socket code. @@ -3033,25 +3552,25 @@ Closes the wrapped socket. - + Invokes ConnectAsync method on the wrapped socket. - The instance containing the event data. + The instance containing the event data. Result of original method. - + Invokes SendAsync method on the wrapped socket. - The instance containing the event data. + The instance containing the event data. Result of original method. - + Invokes SendToAsync method on the wrapped socket. - The instance containing the event data. + The instance containing the event data. Result of original method. @@ -3109,7 +3628,7 @@ - Facilitates mocking of class. + Facilitates mocking of class. @@ -3209,6 +3728,82 @@ A value of true if file information was retrieved successfully, false otherwise. + + + Portable implementation of . + + + + + Returns details about current process and thread in a portable manner. + + + + + Initializes static members of the ThreadIDHelper class. + + + + + Gets the singleton instance of PortableThreadIDHelper or + Win32ThreadIDHelper depending on runtime environment. + + The instance. + + + + Gets current thread ID. + + + + + Gets current process ID. + + + + + Gets current process name. + + + + + Gets current process name (excluding filename extension, if any). + + + + + Initializes a new instance of the class. + + + + + Gets the name of the process. + + + + + Gets current thread ID. + + + + + + Gets current process ID. + + + + + + Gets current process name. + + + + + + Gets current process name (excluding filename extension, if any). + + + Reflection helpers for accessing properties. @@ -3299,43 +3894,6 @@ The next item in the chain. - - - Returns details about current process and thread in a portable manner. - - - - - Initializes static members of the ThreadIDHelper class. - - - - - Gets the singleton instance of PortableThreadIDHelper or - Win32ThreadIDHelper depending on runtime environment. - - The instance. - - - - Gets current thread ID. - - - - - Gets current process ID. - - - - - Gets current process name. - - - - - Gets current process name (excluding filename extension, if any). - - Wraps with a timeout. @@ -3364,6 +3922,23 @@ URL Encoding helper. + + + Win32-optimized implementation of . + + + + + Gets the information about a file. + + Name of the file. + The file handle. + The last write time of the file. + Length of the file. + + A value of true if file information was retrieved successfully, false otherwise. + + Win32-optimized implementation of . @@ -3409,9 +3984,9 @@ Ambient property name. - + - The current application domain's base directory. + ASP Application variable. @@ -3489,6 +4064,84 @@ Gets the logging configuration this target is part of. + + + Renders the specified ASP Application variable and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the ASP Application variable name. + + + + + + ASP Request variable. + + + + + Renders the specified ASP Request variable and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the item name. The QueryString, Form, Cookies, or ServerVariables collection variables having the specified name are rendered. + + + + + + Gets or sets the QueryString variable to be rendered. + + + + + + Gets or sets the form variable to be rendered. + + + + + + Gets or sets the cookie to be rendered. + + + + + + Gets or sets the ServerVariables item to be rendered. + + + + + + ASP Session variable. + + + + + Renders the specified ASP Session variable and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the session variable name. + + + + + + The current application domain's base directory. + + Initializes a new instance of the class. @@ -3513,6 +4166,52 @@ + + + The call site (class name, method name and source information). + + + + + Initializes a new instance of the class. + + + + + Renders the call site and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets a value indicating whether to render the class name. + + + + + + Gets or sets a value indicating whether to render the method name. + + + + + + Gets or sets a value indicating whether to render the source file name and line number. + + + + + + Gets or sets a value indicating whether to include source file path. + + + + + + Gets the level of stack trace information required by the implementing class. + + A counter value (increases on each layout rendering). @@ -3577,6 +4276,24 @@ + + + The environment variable. + + + + + Renders the specified environment variable and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the name of the environment variable. + + + Log event context data. @@ -3657,6 +4374,29 @@ The encoding. + + + The information about the garbage collector. + + + + + Initializes a new instance of the class. + + + + + Renders the selected process information. + + The to append the rendered data to. + Logging event. + + + + Gets or sets the property to retrieve. + + + Gets or sets the property of System.GC to retrieve. @@ -3733,6 +4473,55 @@ + + + Thread identity information (name and authentication information). + + + + + Initializes a new instance of the class. + + + + + Renders the specified identity information and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the separator to be used when concatenating + parts of identity information. + + + + + + Gets or sets a value indicating whether to render Thread.CurrentPrincipal.Identity.Name. + + + + + + Gets or sets a value indicating whether to render Thread.CurrentPrincipal.Identity.AuthenticationType. + + + + + + Gets or sets a value indicating whether to render Thread.CurrentPrincipal.Identity.IsAuthenticated. + + + + + + Gets or sets a value indicating whether to modify the output of this renderer so it can be used as a part of file path + (illegal characters are replaced with '_'). + + + Installation parameter (passed to InstallNLogConfig). @@ -3843,6 +4632,18 @@ + + + Gets or sets a value indicating whether to include call site (class and method name) in the information sent over the network. + + + + + + Gets or sets a value indicating whether to include source info (file name and line number) in the information sent over the network. + + + Gets or sets a value indicating whether to include contents of the dictionary. @@ -3890,6 +4691,23 @@ The to append the rendered data to. Logging event. + + + The machine name that the process is running on. + + + + + Initializes the layout renderer. + + + + + Renders the machine name and appends it to the specified . + + The to append the rendered data to. + Logging event. + Mapped Diagnostic Context item. Provided for compatibility with log4net. @@ -3996,6 +4814,52 @@ + + + The performance counter. + + + + + Initializes the layout renderer. + + + + + Closes the layout renderer. + + + + + Renders the specified environment variable and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the name of the counter category. + + + + + + Gets or sets the name of the performance counter. + + + + + + Gets or sets the name of the performance counter instance (e.g. this.Global_). + + + + + + Gets or sets the name of the machine to read the performance counter from. + + + The identifier of the current process. @@ -4008,6 +4872,239 @@ The to append the rendered data to. Logging event. + + + The information about the running process. + + + + + Initializes a new instance of the class. + + + + + Initializes the layout renderer. + + + + + Closes the layout renderer. + + + + + Renders the selected process information. + + The to append the rendered data to. + Logging event. + + + + Gets or sets the property to retrieve. + + + + + + Property of System.Diagnostics.Process to retrieve. + + + + + Base Priority. + + + + + Exit Code. + + + + + Exit Time. + + + + + Process Handle. + + + + + Handle Count. + + + + + Whether process has exited. + + + + + Process ID. + + + + + Machine name. + + + + + Handle of the main window. + + + + + Title of the main window. + + + + + Maximum Working Set. + + + + + Minimum Working Set. + + + + + Non-paged System Memory Size. + + + + + Non-paged System Memory Size (64-bit). + + + + + Paged Memory Size. + + + + + Paged Memory Size (64-bit).. + + + + + Paged System Memory Size. + + + + + Paged System Memory Size (64-bit). + + + + + Peak Paged Memory Size. + + + + + Peak Paged Memory Size (64-bit). + + + + + Peak Vitual Memory Size. + + + + + Peak Virtual Memory Size (64-bit).. + + + + + Peak Working Set Size. + + + + + Peak Working Set Size (64-bit). + + + + + Whether priority boost is enabled. + + + + + Priority Class. + + + + + Private Memory Size. + + + + + Private Memory Size (64-bit). + + + + + Privileged Processor Time. + + + + + Process Name. + + + + + Whether process is responding. + + + + + Session ID. + + + + + Process Start Time. + + + + + Total Processor Time. + + + + + User Processor Time. + + + + + Virtual Memory Size. + + + + + Virtual Memory Size (64-bit). + + + + + Working Set Size. + + + + + Working Set Size (64-bit). + + The name of the current process. @@ -4170,6 +5267,110 @@ Whether application is running with elevated permissions. + + + System special folder path (includes My Documents, My Music, Program Files, Desktop, and more). + + + + + Renders the directory where NLog is located and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the system special folder to use. + + + Full list of options is available at MSDN. + The most common ones are: +
    +
  • ApplicationData - roaming application data for current user.
  • +
  • CommonApplicationData - application data for all users.
  • +
  • MyDocuments - My Documents
  • +
  • DesktopDirectory - Desktop directory
  • +
  • LocalApplicationData - non roaming application data
  • +
  • Personal - user profile directory
  • +
  • System - System directory
  • +
+
+ +
+ + + Gets or sets the name of the file to be Path.Combine()'d with the directory name. + + + + + + Gets or sets the name of the directory to be Path.Combine()'d with the directory name. + + + + + + Format of the ${stacktrace} layout renderer output. + + + + + Raw format (multiline - as returned by StackFrame.ToString() method). + + + + + Flat format (class and method names displayed in a single line). + + + + + Detailed flat format (method signatures displayed in a single line). + + + + + Stack trace renderer. + + + + + Initializes a new instance of the class. + + + + + Renders the call site and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets the output format of the stack trace. + + + + + + Gets or sets the number of top stack frames to be rendered. + + + + + + Gets or sets the stack frame separator string. + + + + + + Gets the level of stack trace information required by the implementing class. + + +
A temporary directory. @@ -4230,6 +5431,35 @@ The to append the rendered data to. Logging event. + + + Thread Windows identity information (username). + + + + + Initializes a new instance of the class. + + + + + Renders the current thread windows identity information and appends it to the specified . + + The to append the rendered data to. + Logging event. + + + + Gets or sets a value indicating whether domain name should be included. + + + + + + Gets or sets a value indicating whether username should be included. + + + Applies caching to another layout output. @@ -4477,7 +5707,7 @@ The text to be post-processed. Trimmed string. - + Gets or sets a value indicating whether lower case conversion should be applied. @@ -5085,6 +6315,13 @@ String representation of the log event. + + + Sets the stack trace for the event info. + + The stack trace. + Index of the first user stack frame within the stack trace. + Gets the unique identifier of log event which is automatically generated @@ -5101,6 +6338,27 @@ Gets or sets the level of the logging event. + + + Gets a value indicating whether stack trace has been set for this event. + + + + + Gets the stack frame of the method that did the logging. + + + + + Gets the number index of the stack frame that represents the user + code (not the NLog code). + + + + + Gets the entire stack trace. + + Gets or sets the exception information. @@ -5174,6 +6432,23 @@ Null logger instance. + + + Gets the logger named after the currently-being-initialized class. + + The logger. + This is a slow-running method. + Make sure you're not doing this in a loop. + + + + Gets the logger named after the currently-being-initialized class. + + The type of the logger to create. The type must inherit from NLog.Logger. + The logger. + This is a slow-running method. + Make sure you're not doing this in a loop. + Gets the specified named logger. @@ -5267,6 +6542,11 @@ Occurs when logging changes. + + + Occurs when logging gets reloaded. + + Gets or sets a value indicating whether exceptions should be thrown. @@ -5335,6 +6615,14 @@ The logger name. An instance of . + + + Gets the logger named after the currently-being-initialized class. + + The logger. + This is a slow-running method. + Make sure you're not doing this in a loop. + Provides logging interface and utility functions. @@ -8024,11 +9312,33 @@ Creates and manages instances of objects. + + + Initializes static members of the LogManager class. + + Prevents a default instance of the LogManager class from being created. + + + Gets the logger named after the currently-being-initialized class. + + The logger. + This is a slow-running method. + Make sure you're not doing this in a loop. + + + + Gets the logger named after the currently-being-initialized class. + + The logger class. The class must inherit from . + The logger. + This is a slow-running method. + Make sure you're not doing this in a loop. + Creates a logger that discards all log messages. @@ -8121,6 +9431,11 @@ Occurs when logging changes. + + + Occurs when logging gets reloaded. + + Gets or sets a value indicating whether NLog should throw exceptions. @@ -8166,6 +9481,22 @@ The result. + + + Log Receiver Client Channel. + + + + + Service contract for Log Receiver server. + + + + + Processes the log messages. + + The events. + Internal configuration of Log Receiver Service contracts. @@ -8277,40 +9608,6 @@ The events. - - - Log Receiver Client using legacy SOAP client. - - - - - Initializes a new instance of the class. - - The service URL. - - - - Processes the log messages. - - The events. - - - - Begins processing of log messages. - - The events. - The callback. - Asynchronous state. - - IAsyncResult value which can be passed to . - - - - - Ends asynchronous processing of log messages. - - The result. - List of strings annotated for more terse serialization. @@ -8321,6 +9618,110 @@ Initializes a new instance of the class. + + + Log Receiver Client using WCF. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Name of the endpoint configuration. + + + + Initializes a new instance of the class. + + Name of the endpoint configuration. + The remote address. + + + + Initializes a new instance of the class. + + Name of the endpoint configuration. + The remote address. + + + + Initializes a new instance of the class. + + The binding. + The remote address. + + + + Opens the client asynchronously. + + + + + Opens the client asynchronously. + + User-specific state. + + + + Closes the client asynchronously. + + + + + Closes the client asynchronously. + + User-specific state. + + + + Processes the log messages asynchronously. + + The events to send. + + + + Processes the log messages asynchronously. + + The events to send. + User-specific state. + + + + Begins processing of log messages. + + The events to send. + The callback. + Asynchronous state. + + IAsyncResult value which can be passed to . + + + + + Ends asynchronous processing of log messages. + + The result. + + + + Occurs when the log message processing has completed. + + + + + Occurs when Open operation has completed. + + + + + Occurs when Close operation has completed. + + Mapped Diagnostics Context - a thread-local structure that keeps a dictionary @@ -8509,6 +9910,19 @@ The message. The inner exception. + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + The parameter is null. + + + The class name is null or is zero (0). + + Exception thrown during log event processing. @@ -8532,6 +9946,19 @@ The message. The inner exception. + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + The parameter is null. + + + The class name is null or is zero (0). + + TraceListener which routes all messages through NLog. @@ -8577,6 +10004,81 @@ Flushes the output buffer. + + + Writes trace information, a data object and event information to the listener specific output. + + A object that contains the current process ID, thread ID, and stack trace information. + A name used to identify the output, typically the name of the application that generated the trace event. + One of the values specifying the type of event that has caused the trace. + A numeric identifier for the event. + The trace data to emit. + + + + Writes trace information, an array of data objects and event information to the listener specific output. + + A object that contains the current process ID, thread ID, and stack trace information. + A name used to identify the output, typically the name of the application that generated the trace event. + One of the values specifying the type of event that has caused the trace. + A numeric identifier for the event. + An array of objects to emit as data. + + + + Writes trace and event information to the listener specific output. + + A object that contains the current process ID, thread ID, and stack trace information. + A name used to identify the output, typically the name of the application that generated the trace event. + One of the values specifying the type of event that has caused the trace. + A numeric identifier for the event. + + + + Writes trace information, a formatted array of objects and event information to the listener specific output. + + A object that contains the current process ID, thread ID, and stack trace information. + A name used to identify the output, typically the name of the application that generated the trace event. + One of the values specifying the type of event that has caused the trace. + A numeric identifier for the event. + A format string that contains zero or more format items, which correspond to objects in the array. + An object array containing zero or more objects to format. + + + + Writes trace information, a message, and event information to the listener specific output. + + A object that contains the current process ID, thread ID, and stack trace information. + A name used to identify the output, typically the name of the application that generated the trace event. + One of the values specifying the type of event that has caused the trace. + A numeric identifier for the event. + A message to write. + + + + Writes trace information, a message, a related activity identity and event information to the listener specific output. + + A object that contains the current process ID, thread ID, and stack trace information. + A name used to identify the output, typically the name of the application that generated the trace event. + A numeric identifier for the event. + A message to write. + A object identifying a related activity. + + + + Gets the custom attributes supported by the trace listener. + + + A string array naming the custom attributes supported by the trace listener, or null if there are no custom attributes. + + + + + Translates the event type to level from . + + Type of the event. + Translated log level. + Gets or sets the log factory to use when outputting messages (null - use LogManager). @@ -8592,6 +10094,18 @@ Gets or sets the log which should be always used regardless of source level. + + + Gets a value indicating whether the trace listener is thread safe. + + + true if the trace listener is thread safe; otherwise, false. The default is false. + + + + Gets or sets a value indicating whether to use auto logger name detected from the stack trace. + + Specifies the way archive numbering is performed. @@ -8607,98 +10121,11 @@ Rolling style numbering (the most recent is always #0 then #1, ..., #N. - + - Sends log messages to the remote instance of Chainsaw application from log4j. + Outputs log messages through the ASP Response object. - Documentation on NLog Wiki - -

- To set up the target in the configuration file, - use the following syntax: -

- -

- This assumes just one target and a single rule. More configuration - options are described here. -

-

- To set up the log target programmatically use code like this: -

- -

- NOTE: If your receiver application is ever likely to be off-line, don't use TCP protocol - or you'll get TCP timeouts and your application will crawl. - Either switch to UDP transport or use AsyncWrapper target - so that your application threads will not be blocked by the timing-out connection attempts. -

- - - - - Sends log messages to the remote instance of NLog Viewer. - - Documentation on NLog Wiki - -

- To set up the target in the configuration file, - use the following syntax: -

- -

- This assumes just one target and a single rule. More configuration - options are described here. -

-

- To set up the log target programmatically use code like this: -

- -

- NOTE: If your receiver application is ever likely to be off-line, don't use TCP protocol - or you'll get TCP timeouts and your application will crawl. - Either switch to UDP transport or use AsyncWrapper target - so that your application threads will not be blocked by the timing-out connection attempts. -

-
-
- - - Sends log messages over the network. - - Documentation on NLog Wiki - -

- To set up the target in the configuration file, - use the following syntax: -

- -

- This assumes just one target and a single rule. More configuration - options are described here. -

-

- To set up the log target programmatically use code like this: -

- -

- To print the results, use any application that's able to receive messages over - TCP or UDP. NetCat is - a simple but very powerful command-line tool that can be used for that. This image - demonstrates the NetCat tool receiving log messages from Network target. -

- -

- NOTE: If your receiver application is ever likely to be off-line, don't use TCP protocol - or you'll get TCP timeouts and your application will crawl. - Either switch to UDP transport or use AsyncWrapper target - so that your application threads will not be blocked by the timing-out connection attempts. -

-

- There are two specialized versions of the Network target: Chainsaw - and NLogViewer which write to instances of Chainsaw log4j viewer - or NLogViewer application respectively. -

-
+ Documentation on NLog Wiki
@@ -8854,6 +10281,111 @@ + + + Outputs the rendered logging event through the OutputDebugString() Win32 API. + + The logging event. + + + + Gets or sets a value indicating whether to add <!-- --> comments around all written texts. + + + + + + Sends log messages to the remote instance of Chainsaw application from log4j. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +

+ NOTE: If your receiver application is ever likely to be off-line, don't use TCP protocol + or you'll get TCP timeouts and your application will crawl. + Either switch to UDP transport or use AsyncWrapper target + so that your application threads will not be blocked by the timing-out connection attempts. +

+
+
+ + + Sends log messages to the remote instance of NLog Viewer. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +

+ NOTE: If your receiver application is ever likely to be off-line, don't use TCP protocol + or you'll get TCP timeouts and your application will crawl. + Either switch to UDP transport or use AsyncWrapper target + so that your application threads will not be blocked by the timing-out connection attempts. +

+
+
+ + + Sends log messages over the network. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +

+ To print the results, use any application that's able to receive messages over + TCP or UDP. NetCat is + a simple but very powerful command-line tool that can be used for that. This image + demonstrates the NetCat tool receiving log messages from Network target. +

+ +

+ NOTE: If your receiver application is ever likely to be off-line, don't use TCP protocol + or you'll get TCP timeouts and your application will crawl. + Either switch to UDP transport or use AsyncWrapper target + so that your application threads will not be blocked by the timing-out connection attempts. +

+

+ There are two specialized versions of the Network target: Chainsaw + and NLogViewer which write to instances of Chainsaw log4j viewer + or NLogViewer application respectively. +

+
+
Initializes a new instance of the class. @@ -8962,6 +10494,18 @@ + + + Gets or sets a value indicating whether to include call site (class and method name) in the information sent over the network. + + + + + + Gets or sets a value indicating whether to include source info (file name and line number) in the information sent over the network. + + + Gets or sets a value indicating whether to include dictionary contents. @@ -8996,26 +10540,11 @@ Initializes a new instance of the class. - + - Writes log messages to the console. + Writes log messages to the console with customizable coloring. - Documentation on NLog Wiki - -

- To set up the target in the configuration file, - use the following syntax: -

- -

- This assumes just one target and a single rule. More configuration - options are described here. -

-

- To set up the log target programmatically use code like this: -

- -
+ Documentation on NLog Wiki
@@ -9054,6 +10583,273 @@ The layout with header and footer. + + + Initializes a new instance of the class. + + + The default value of the layout is: ${longdate}|${level:uppercase=true}|${logger}|${message} + + + + + Initializes the target. + + + + + Closes the target and releases any unmanaged resources. + + + + + Writes the specified log event to the console highlighting entries + and words based on a set of defined rules. + + Log event. + + + + Gets or sets a value indicating whether the error stream (stderr) should be used instead of the output stream (stdout). + + + + + + Gets or sets a value indicating whether to use default row highlighting rules. + + + The default rules are: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConditionForeground ColorBackground Color
level == LogLevel.FatalRedNoChange
level == LogLevel.ErrorYellowNoChange
level == LogLevel.WarnMagentaNoChange
level == LogLevel.InfoWhiteNoChange
level == LogLevel.DebugGrayNoChange
level == LogLevel.TraceDarkGrayNoChange
+
+ +
+ + + Gets the row highlighting rules. + + + + + + Gets the word highlighting rules. + + + + + + Color pair (foreground and background). + + + + + Colored console output color. + + + Note that this enumeration is defined to be binary compatible with + .NET 2.0 System.ConsoleColor + some additions + + + + + Black Color (#000000). + + + + + Dark blue Color (#000080). + + + + + Dark green Color (#008000). + + + + + Dark Cyan Color (#008080). + + + + + Dark Red Color (#800000). + + + + + Dark Magenta Color (#800080). + + + + + Dark Yellow Color (#808000). + + + + + Gray Color (#C0C0C0). + + + + + Dark Gray Color (#808080). + + + + + Blue Color (#0000FF). + + + + + Green Color (#00FF00). + + + + + Cyan Color (#00FFFF). + + + + + Red Color (#FF0000). + + + + + Magenta Color (#FF00FF). + + + + + Yellow Color (#FFFF00). + + + + + White Color (#FFFFFF). + + + + + Don't change the color. + + + + + The row-highlighting condition. + + + + + Initializes static members of the ConsoleRowHighlightingRule class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The condition. + Color of the foreground. + Color of the background. + + + + Checks whether the specified log event matches the condition (if any). + + + Log event. + + + A value of if the condition is not defined or + if it matches, otherwise. + + + + + Gets the default highlighting rule. Doesn't change the color. + + + + + Gets or sets the condition that must be met in order to set the specified foreground and background color. + + + + + + Gets or sets the foreground color. + + + + + + Gets or sets the background color. + + + + + + Writes log messages to the console. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +
+
Initializes the target. @@ -9074,6 +10870,71 @@ Note that the Error option is not supported on .NET Compact Framework. + + + Gets or sets a value indicating whether to send the log messages to the standard error instead of the standard output. + + + + + + Highlighting rule for Win32 colorful console. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The text to be matched.. + Color of the foreground. + Color of the background. + + + + Gets or sets the regular expression to be matched. You must specify either text or regex. + + + + + + Gets or sets the text to be matched. You must specify either text or regex. + + + + + + Gets or sets a value indicating whether to match whole words only. + + + + + + Gets or sets a value indicating whether to ignore case when comparing texts. + + + + + + Gets the compiled regular expression that matches either Text or Regex property. + + + + + Gets or sets the foreground color. + + + + + + Gets or sets the background color. + + + Information about database command + parameters. @@ -9267,6 +11128,12 @@ + + + Gets or sets the name of the connection string (as specified in <connectionStrings> configuration section. + + + Gets or sets the connection string. When provided, it overrides the values @@ -9359,6 +11226,42 @@ + + + Writes log messages to the attached managed debugger. + + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +
+
+ + + Initializes the target. + + + + + Closes the target and releases any unmanaged resources. + + + + + Writes the specified logging event to the attached debugger. + + The logging event. + Mock target - useful for testing. @@ -9406,6 +11309,98 @@ + + + Writes log message to the Event Log. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +
+
+ + + Initializes a new instance of the class. + + + + + Performs installation which requires administrative permissions. + + The installation context. + + + + Performs uninstallation which requires administrative permissions. + + The installation context. + + + + Determines whether the item is installed. + + The installation context. + + Value indicating whether the item is installed or null if it is not possible to determine. + + + + + Initializes the target. + + + + + Writes the specified logging event to the event log. + + The logging event. + + + + Gets or sets the name of the machine on which Event Log service is running. + + + + + + Gets or sets the layout that renders event ID. + + + + + + Gets or sets the layout that renders event Category. + + + + + + Gets or sets the value to be used as the event Source. + + + By default this is the friendly name of the current AppDomain. + + + + + + Gets or sets the name of the Event Log to write to. This can be System, Application or + any user-defined name. + + + Modes of archiving files based on time. @@ -9592,6 +11587,12 @@ + + + Gets or sets the file attributes (Windows only). + + + Gets or sets the line ending mode. @@ -9742,6 +11743,59 @@ Gets the characters that are appended after each line. + + + Logs text to Windows.Forms.Control.Text property control of specified Name. + + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ The result is: +

+ +

+ To set up the log target programmatically similar to above use code like this: +

+ , +
+
+ + + Initializes a new instance of the class. + + + The default value of the layout is: ${longdate}|${level:uppercase=true}|${logger}|${message} + + + + + Log message to control. + + + The logging event. + + + + + Gets or sets the name of control to which NLog will log write log text. + + + + + + Gets or sets a value indicating whether log text should be appended to the text of the control instead of overwriting it. + + + + + Gets or sets the name of the Form on which the control is located. + + + Line ending mode. @@ -9805,6 +11859,19 @@ The endpoint address. + + + Gets or sets the name of the endpoint configuration in WCF configuration file. + + The name of the endpoint configuration. + + + + + Gets or sets a value indicating whether to use binary message encoding. + + + Gets or sets the client ID. @@ -9819,6 +11886,152 @@ The parameters. + + + Sends log messages by email using SMTP protocol. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +

+ Mail target works best when used with BufferingWrapper target + which lets you send multiple log messages in single mail +

+

+ To set up the buffered mail target in the configuration file, + use the following syntax: +

+ +

+ To set up the buffered mail target programmatically use code like this: +

+ +
+
+ + + Initializes a new instance of the class. + + + The default value of the layout is: ${longdate}|${level:uppercase=true}|${logger}|${message} + + + + + Renders the logging event message and adds it to the internal ArrayList of log messages. + + The logging event. + + + + Renders an array logging events. + + Array of logging events. + + + + Gets or sets sender's email address (e.g. joe@domain.com). + + + + + + Gets or sets recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). + + + + + + Gets or sets CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). + + + + + + Gets or sets BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). + + + + + + Gets or sets a value indicating whether to add new lines between log entries. + + A value of true if new lines should be added; otherwise, false. + + + + + Gets or sets the mail subject. + + + + + + Gets or sets mail message body (repeated for each log message send in one mail). + + Alias for the Layout property. + + + + + Gets or sets encoding to be used for sending e-mail. + + + + + + Gets or sets a value indicating whether to send message as HTML instead of plain text. + + + + + + Gets or sets SMTP Server to be used for sending. + + + + + + Gets or sets SMTP Authentication mode. + + + + + + Gets or sets the username used to connect to SMTP server (used when SmtpAuthentication is set to "basic"). + + + + + + Gets or sets the password used to authenticate against SMTP server (used when SmtpAuthentication is set to "basic"). + + + + + + Gets or sets a value indicating whether SSL (secure sockets layer) should be used when communicating with SMTP server. + + + + + + Gets or sets the port number that SMTP Server is listening on. + + + Writes log messages to an ArrayList in memory for programmatic retrieval. @@ -10112,6 +12325,486 @@ + + + Outputs log messages through the OutputDebugString() Win32 API. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +
+
+ + + Outputs the rendered logging event through the OutputDebugString() Win32 API. + + The logging event. + + + + Increments specified performance counter on each write. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +
+ + TODO: + 1. Unable to create a category allowing multiple counter instances (.Net 2.0 API only, probably) + 2. Is there any way of adding new counters without deleting the whole category? + 3. There should be some mechanism of resetting the counter (e.g every day starts from 0), or auto-switching to + another counter instance (with dynamic creation of new instance). This could be done with layouts. + +
+ + + Initializes a new instance of the class. + + + + + Performs installation which requires administrative permissions. + + The installation context. + + + + Performs uninstallation which requires administrative permissions. + + The installation context. + + + + Determines whether the item is installed. + + The installation context. + + Value indicating whether the item is installed or null if it is not possible to determine. + + + + + Increments the configured performance counter. + + Log event. + + + + Closes the target and releases any unmanaged resources. + + + + + Ensures that the performance counter has been initialized. + + True if the performance counter is operational, false otherwise. + + + + Gets or sets a value indicating whether performance counter should be automatically created. + + + + + + Gets or sets the name of the performance counter category. + + + + + + Gets or sets the name of the performance counter. + + + + + + Gets or sets the performance counter instance name. + + + + + + Gets or sets the counter help text. + + + + + + Gets or sets the performance counter type. + + + + + + The row-coloring condition. + + + + + Initializes static members of the RichTextBoxRowColoringRule class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The condition. + Color of the foregroung text. + Color of the background text. + The font style. + + + + Initializes a new instance of the class. + + The condition. + Color of the text. + Color of the background. + + + + Checks whether the specified log event matches the condition (if any). + + + Log event. + + + A value of if the condition is not defined or + if it matches, otherwise. + + + + + Gets the default highlighting rule. Doesn't change the color. + + + + + + Gets or sets the condition that must be met in order to set the specified font color. + + + + + + Gets or sets the font color. + + + Names are identical with KnownColor enum extended with Empty value which means that background color won't be changed. + + + + + + Gets or sets the background color. + + + Names are identical with KnownColor enum extended with Empty value which means that background color won't be changed. + + + + + + Gets or sets the font style of matched text. + + + Possible values are the same as in FontStyle enum in System.Drawing + + + + + + Log text a Rich Text Box control in an existing or new form. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ The result is: +

+ To set up the target with coloring rules in the configuration file, + use the following syntax: +

+ + + +

+ The result is: +

+ To set up the log target programmatically similar to above use code like this: +

+ + , + + + for RowColoring, + + + for WordColoring +
+
+ + + Initializes static members of the RichTextBoxTarget class. + + + The default value of the layout is: ${longdate}|${level:uppercase=true}|${logger}|${message} + + + + + Initializes a new instance of the class. + + + The default value of the layout is: ${longdate}|${level:uppercase=true}|${logger}|${message} + + + + + Initializes the target. Can be used by inheriting classes + to initialize logging. + + + + + Closes the target and releases any unmanaged resources. + + + + + Log message to RichTextBox. + + The logging event. + + + + Gets the default set of row coloring rules which applies when is set to true. + + + + + Gets or sets the Name of RichTextBox to which Nlog will write. + + + + + + Gets or sets the name of the Form on which the control is located. + If there is no open form of a specified name than NLog will create a new one. + + + + + + Gets or sets a value indicating whether to use default coloring rules. + + + + + + Gets the row coloring rules. + + + + + + Gets the word highlighting rules. + + + + + + Gets or sets a value indicating whether the created window will be a tool window. + + + This parameter is ignored when logging to existing form control. + Tool windows have thin border, and do not show up in the task bar. + + + + + + Gets or sets a value indicating whether the created form will be initially minimized. + + + This parameter is ignored when logging to existing form control. + + + + + + Gets or sets the initial width of the form with rich text box. + + + This parameter is ignored when logging to existing form control. + + + + + + Gets or sets the initial height of the form with rich text box. + + + This parameter is ignored when logging to existing form control. + + + + + + Gets or sets a value indicating whether scroll bar will be moved automatically to show most recent log entries. + + + + + + Gets or sets the maximum number of lines the rich text box will store (or 0 to disable this feature). + + + After exceeding the maximum number, first line will be deleted. + + + + + + Gets or sets the form to log to. + + + + + Gets or sets the rich text box to log to. + + + + + Highlighting rule for Win32 colorful console. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The text to be matched.. + Color of the text. + Color of the background. + + + + Initializes a new instance of the class. + + The text to be matched.. + Color of the text. + Color of the background. + The font style. + + + + Gets or sets the regular expression to be matched. You must specify either text or regex. + + + + + + Gets or sets the text to be matched. You must specify either text or regex. + + + + + + Gets or sets a value indicating whether to match whole words only. + + + + + + Gets or sets a value indicating whether to ignore case when comparing texts. + + + + + + Gets or sets the font style of matched text. + Possible values are the same as in FontStyle enum in System.Drawing. + + + + + + Gets the compiled regular expression that matches either Text or Regex property. + + + + + Gets or sets the font color. + Names are identical with KnownColor enum extended with Empty value which means that font color won't be changed. + + + + + + Gets or sets the background color. + Names are identical with KnownColor enum extended with Empty value which means that background color won't be changed. + + + + + + SMTP authentication modes. + + + + + No authentication. + + + + + Basic - username and password. + + + + + NTLM Authentication. + + Marks class as a logging target and assigns a name to it. @@ -10133,6 +12826,36 @@ Gets or sets a value indicating whether to the target is a compound target (used to generate the target summary documentation page). + + + Sends log messages through System.Diagnostics.Trace. + + Documentation on NLog Wiki + +

+ To set up the target in the configuration file, + use the following syntax: +

+ +

+ This assumes just one target and a single rule. More configuration + options are described here. +

+

+ To set up the log target programmatically use code like this: +

+ +
+
+ + + Writes the specified logging event to the facility. + If the log level is greater than or equal to it uses the + method, otherwise it uses + method. + + The logging event. + Web service protocol. @@ -10219,6 +12942,95 @@ + + + Win32 file attributes. + + + For more information see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/createfile.asp. + + + + + Read-only file. + + + + + Hidden file. + + + + + System file. + + + + + File should be archived. + + + + + Device file. + + + + + Normal file. + + + + + File is temporary (should be kept in cache and not + written to disk if possible). + + + + + Sparse file. + + + + + Reparse point. + + + + + Compress file contents. + + + + + File should not be indexed by the content indexing service. + + + + + Encrypted file. + + + + + The system writes through any intermediate cache and goes directly to disk. + + + + + The system opens a file with no system caching. + + + + + Delete file after it is closed. + + + + + A file is accessed according to POSIX rules. + + Asynchronous request queue. @@ -10437,6 +13249,11 @@ Discard the overflowing item. + + + Block until there's more room in the queue. + + Causes a flush after each write on a wrapped target. @@ -10715,6 +13532,112 @@ + + + Impersonates another user for the duration of the write. + + Documentation on NLog Wiki + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The wrapped target. + + + + Initializes the impersonation context. + + + + + Closes the impersonation context. + + + + + Changes the security context, forwards the call to the .Write() + and switches the context back to original. + + The log event. + + + + Changes the security context, forwards the call to the .Write() + and switches the context back to original. + + Log events. + + + + Flush any pending log messages (in case of asynchronous targets). + + The asynchronous continuation. + + + + Gets or sets username to change context to. + + + + + + Gets or sets the user account password. + + + + + + Gets or sets Windows domain name to change context to. + + + + + + Gets or sets the Logon Type. + + + + + + Gets or sets the type of the logon provider. + + + + + + Gets or sets the required impersonation level. + + + + + + Gets or sets a value indicating whether to revert to the credentials of the process instead of impersonating another user. + + + + + + Helper class which reverts the given + to its original value as part of . + + + + + Initializes a new instance of the class. + + The windows impersonation context. + + + + Reverts the impersonation context. + + Logon provider. diff --git a/NzbDrone.Core/Main.cs b/NzbDrone.Core/Main.cs index 8e22872a1..4e193891b 100644 --- a/NzbDrone.Core/Main.cs +++ b/NzbDrone.Core/Main.cs @@ -1,11 +1,13 @@ using System; using System.IO; using System.Web; -using log4net; using Ninject; +using NLog.Config; +using NLog.Targets; using NzbDrone.Core.Providers; using SubSonic.DataProviders; using SubSonic.Repository; +using NLog; namespace NzbDrone.Core { @@ -20,13 +22,50 @@ namespace NzbDrone.Core kernel.Bind().To(); kernel.Bind().To(); kernel.Bind().To(); - kernel.Bind().ToMethod(c => LogManager.GetLogger("logger-name")); + kernel.Bind().ToMethod(c => log4net.LogManager.GetLogger("logger-name")); kernel.Bind().ToMethod(c => new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations)); } public static String AppPath { - get { return new DirectoryInfo(HttpContext.Current.Server.MapPath("\\")).Parent.FullName; } + get { return new DirectoryInfo(HttpContext.Current.Server.MapPath("\\")).FullName; } + } + + + public static void ConfigureNlog() + { + // Step 1. Create configuration object + var config = new LoggingConfiguration(); + + // Step 2. Create targets and add them to the configuration + var consoleTarget = new DebuggerTarget(); + config.AddTarget("console", consoleTarget); + + FileTarget fileTarget = new FileTarget(); + config.AddTarget("file", fileTarget); + + // Step 3. Set target properties + consoleTarget.Layout = "${logger} ${message}"; + fileTarget.FileName = "${basedir}/test.log"; + fileTarget.Layout = "${message}"; + + // Step 4. Define rules + LoggingRule rule1 = new LoggingRule("*", LogLevel.Trace, consoleTarget); + config.LoggingRules.Add(rule1); + + LoggingRule rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget); + config.LoggingRules.Add(rule2); + + // Step 5. Activate the configuration + NLog.LogManager.Configuration = config; + + Logger logger = LogManager.GetCurrentClassLogger(); + logger.Trace("trace log message"); + logger.Debug("debug log message"); + logger.Info("info log message"); + logger.Warn("warn log message"); + logger.Error("error log message"); + logger.Fatal("fatal log message"); } } } \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 87cb933e7..a13ed8a78 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -10,7 +10,7 @@ Properties NzbDrone.Core NzbDrone.Core - v3.5 + v4.0 512 @@ -128,6 +128,10 @@ + + False + Libraries\NLog.Extended.dll + False Libraries\SubSonic.Core.dll @@ -136,7 +140,7 @@ - + @@ -193,7 +197,6 @@ - @@ -202,6 +205,9 @@ + + + @@ -212,9 +218,6 @@ - - - &|xr5Hq)bjg0y{*%IcVQk}?Tl-jKcCcT8W?Gd71QHPU@FxeB|@#uQ|`|#qpO*gZ{M{qFsAo~Y6Up;CJa895D!byhmVt{jwP0t$-bgoi) z&8QFWr?nX9+-A1}R|SXeQ}xU94UL57kHKx(;U@I&1)j+6R~yb>z>7U@0zTkzs}_Tt z=sX(V-DtRe&|5-2|e?e5QqIQMAzYpvVC{lCpaoM&+P1hmfJcHjZ*Oz>Oa z$LyitL*P_g9sz9(I4@?1^B#LTxNqnX=QH-l;JRCeI0ENCpltwm2e)B=4xRuW&;AyC z5d0bY2Ds$bA=89|RY{#SrI1GOpjpTfFJyu+{o~4xEe5^Gyfmw|L9Z4$|_U55C`Gm~+zO zk}cnM79XN~9ptrJ4tItgE_7IRhIKT&VN7~pqA&B@y)jX&38OmpXN4NT)bAY`V zJh|0;r`cJ`*Mq0G%5|!+J9Y5E^`u4a{@K|F`B8mwfzSNMH~wSaH7Z~IoEpFTeUZgZ z1e*5m3tBC9lF@X0xvbR^rvv3$CJeu>)l#P$I?wk8cr$nqI}5z4)iP%>Tis7R)M~l& zExQ%$|8w;f&QItp?H%w@@NLSmza!;)Xm@|L!qLvF`cnPQv|8b8A&Yf5KdYVH?0w)& zW3}@Q`z-h~=M(1~Iv{R<_ku5TuI`t1Okd;ND3Nn^cp?0fvZx&7VX zTt&Ori#9m5e!yJo4&%2nK6Too-Q&GYPFHlEp!H#s^BSAhhfU4^HmwhvoHy9CK5TME zpbN)07M&y3O;Oi3HaQd717P~fQ`sZfvpvJ_bv8Mla<0x#N@i?!@+j9nf%2a@Tb!fl zJl`}pzpIe3#ks)#5UwwWWNdYAveomD6*9It582Bx-|m(K7{_qnqbP0MFQ#^=s~ zOKSSGe5PjPIX|%FXFH6w+yWc6x zruFxL^Ay@$e-AjdIM2ZGf92F>_r~#ms!N&-o z8_t)3SAsin{slPCIP7%i{35uRIPCP}{4oxH#2LzYxtnVEBhI^=$Aa^Wqt5%Bw*nUv zN1YGR?)LSylfyY}Utc@9oYVGo%vr`cZC}Tnb)5Hu@omaD?ri1!J@5|j=jc2i9lxG% zenMwyQy~8$;~VEUHf^6LomxMs(byyY_-3x*!sK^ zd0o{f&-cWy@cw1%3r+%i6Rgi+t-p6N*y?$hnASfyquC{(d}8a1&O(n%x4z`;VOPcc zN9PBROSk^XdCaEef7!8asOh`Q`?6CGoyYCLWv43I-5xJH6{|z>g6rp(o$6$*s^QZ* zy>QtXR!ilVe9sDapZ>)w&K~xFsqj7SkSopsc2&rW7+0L|P%JN}f`8DjICaRr6X0BM zL-t*E0+)}KJ}tfE6{i`ReveD?it{|2rxeyN-)TeEzBkqHneXiVSN^kenDZb@GJ$=U+Qji9T}EcU11{%x;0J=uBS*V|rqF2;L@zu{aZYxj!#;QrVR=ScIy zJhjtJ=XbI&gMH9n@@?k9%9CyMViagVFBqb=%p&QaQPo(_I*~(V+Umf(9vxkRQ{Vg8V|8lCo;2r;8 zPCqt{|E@Elt+)PnovCE5|9xi;y9>Y)41VzgWT`;LI)jKccgcQV*C{s&GD+O7Ws zXEj-<`bI+U$s5`9`#f@X^6*suM@|(u?kXJrBd0f;#{ai7Xn@LT{JHwy&M>le8tR+T z^>1h5dxd#qx5v(MGA}=$e;xa!GHU*O{;lkH!R24R zkhSxWm#tIWU+-gY9^`LA)}Dapf6LYh@*iB{%}e-0mZG)#kbhLCg#RSvS_=3~kCOhf z%f01G`Kyp|eqJbD${+HHHxKsLCFAqP?Rp3MAFlD{rTx}gn%*H8|JIVF{Ubj2=4Jdl z$=awVecG3qW&A_oIorbdE$d%S*2+MBrbk)-h=1kf{9`$P8uB7WIe!kj9{ZcU-tm?5 zpCjY=%GN384?p6~%lqq)wGI`0T5r3&|2jN}QdplS{lAm78Wnxo?vhXXC!F%;75r1l zS~}(x{5^m4<`w<@$=a2teA*uaEBeze|2uzyti4$Uw!c9Y{hjZq+->hF`q#0ky{qWo z%BJ?NqCfdhEYIy-MSn{&w|5o&ZQ0b`RrJ5a<*B`^=tSGo9a{5 zpTVa3RP`spaSha8PK5GDVfa)s*9Xe8sXkTx?{ImlPgVaIv|FF5{zd43_DfAwpAdgL zI4&t%ej)x$vbL+1PdoWmi2oHdJl_ny0FEl@Enm%FkF14;!tu-7)%-ugc3e2V>i+9w z?F!_%dUbz~N;p5hnPEQd?C|RTt!$eA>i#`!n*Zwly_K=Nd<5mML;1sGp8x9plWdy* z>i%HZZq)Lk`LFJ;h<4|{y1x-R0MF8^`qc1`@Z{^;)$mUxi(V0`y{+k=!yW-%9aPi5 z811$nHT?p%!@~BXrayyC?ME$t4w|OFzFjTe|?M$Q$^KWFU=Y3WOh52{#@YJ4% z`Kwg*jz7%bn@!^n_pd?I_;dAe|7Nmw9qQZqop65yYzKwEM})sFSrbt{EoDT6|DWpK zJkoE}Kx3XgBGP{w))Te;bcgcSMnw7JVLec$-z&H+#(_4a+QyNn&_-XWu@#!uVpIJ;d#|-}$(}@F{=e_X z@7#xH?Y-Atdmhipv2HeVDz9VRTJ}%nb*x)wxRlqi?yn4&_H&&3U(9&h`v*vze1U!`xc-PxcIR z>kSushPiJTUamGmUrlhh+s6E9<~PnFdno?lZuV@7|AY}bKZd(G#5w-qZZ30*f4E!0 z{we<9?kdA2{^9OA!^_oe(1-6~xC`cJ{p7CsrNq_m;XW;Gg!>fpcJNmtBi-8b_xC@_ zy>Wrz>W?EWbw=eVcMbEXAf4ZAboWq~)9@)ix zygQKHDg1c%#&!FLpWrqSSH01%Elix?-qywa40k2Fp91$MR-fS>`ba$dfbc|j0C8U5 z<+(!)m;B6gOPN!7<+-)YDL>D2dv1#Bs|lXzrV&?vKOOb6>P$EDXZyRKh4p~p>hST} zp0nJ4{ygqJe$FJfU(9e`?@n`%W=`wfY3}jN^>{pU&NO#4b6p<_!E+54`=`0B%*p;~ zZo!jUzwAfky9=I*$3M6*-@S==XdUbu9G>AWV@~yLhP#G&1KelMnc-F&F7eH9)1M~& z6yFTDj5+1kOgHVhcziX%nQk8s&nAw$?Ksbm&cu3WfB&xPWvI}x_y~b{+{b*8ZPNO*R5kt={wg= z+^+RWe$I6-G@Sac@pI<7D~WS?&Uf!&uJ?QDlIOeYm{WZ7-A9>IdCqqqH(cVM?@s;= z#YgeacVA~t`CH^>y|sUOi`=t_b9ygur!%Md+y(Br%ys%_&bh!{Xt>08f%_?Qithq< z{M-AdccHua5ApbFf(zX(#MP;1SnA2O3*DI?@9)0Io#){TiK}Vw|M`$bZpq*G_kW>V zM%=7NTW4SBZe*_4v-jRx;+A&tf06qfyX*Dsz4u<^ju~L@H=bPVjwi0Z!Mvu|(2L!z zL*nlB(=Tyx+$`odU+$hvT>TU7We;8Mo-}HI_fmH}an=~ z!Z(e++TApLfA=MBjJOH^@<~hF56<1+{TlaE;vD}q?qzfLcfZyxBW}J2`$EdK?q7@c zcQ13*`Gy<)zZ+BLzEZru`*rRc#99A!ZuS-XyI=3-5LbVI{e2&~-ko0-cOO6J2KP4N zq0y6c`QPNOWKR9xP3}F+_5S9}IXAiMn9qd&Lhwfom-=y&JN`PYU+TwA?u*Q+epI++ zOXKm^1S{MM;_6N4+YUZ>MOXJl#8uj4?ALFqaBpOu1zzmj><;VV{}y)>yI%_T&oxG0Iy44>Kb_)e6-S? zOq};~D&3jvPUjbu?p)?HAFXr?*+0!kE8SwlWj~E)VpIYBdxW|m#_UQ5IwbU(NlHSM7nU$?#tnb3PB=_RQuao`H zvA@?j9tqbSf5+or`0qLVXYBqJbNdU5Uw8`hlN>5%!9#EcrpsBdpYdm_qu75}?o*lF z$VajK%dwT1DxC{4>(c$CyPVrl6lhJFdMFxH9Dvsws?&RNQ|321ZdD4e_ zW2|5FQhW!FcYMTxy_OP`be_rSo5Cph=|!p!IJYwO0{a16k7gVooL7&Ri#|bd_wugs z`P66k>im!AkA(YoQQ{R`nM(P#8Fz;EkMBS{?Kbj%1?P{H|4qzqW0dwK`c|;~ZpH__ z{+Pea_-n>@7(Za_HId@q!+exEi~V+fNjfFp{!{rZ@k#uG-Q~CV7xbo2^5O5CUdhkR z%q73RW-j?F=q(4)C*>jKAo&~GL-{Lqh+VguGkaTIZP2G&_IGe{v@Z@X;l7(={NwVK zcm+i+_Dg=;cxG37f5diq!wLUSq1Y=ZQ~5LoM9;Lx4=x_@FDUizUyb)8PM_4b zDV#swmlv3Dm~V4<;q#eGK2kd4^FfiHTdmV?s|(q`@XMK(GrBxJ_K|Ut@i;~qKc&5O z?SKCL`YZV@_<*?^WhrUT2a8hP-f}xQZYgUf)fb8XcFrHE7m|MAUi8{2?jo1=DD8eF z>lYON2a8@k-f-eBDC;Z1S`&YKowb?mA$MB|Zz`pHX<+}227R6DD3Qzh$ZN;{Ha@(7 z($k$?pB8s@|1GCm{CnLGBo}u<2`}iC@8WV0xp#fq9T$Cq65fk4-w^q3j!){T$i4oW z&+VEo(%xj;5d4$Je$gjL`vP|7c;nUUwO{r%y!J>wNPU)YRKD?f%RaUz_?NEsi#;M= z;7Om@@_vHINiX_emP0&_>uQeKpF5!!0T zJjw^*(%(ruUcD0D>+ba@c8Gr&mkP}|>{FZ1qj*K`n)LeAm*y@b&e4rOTZ#X!^6tkO zsfS{p7aMpV!Ydcvox7w%{CQE*Bl#fZo7PP|^M)5L`6l7La^e3|DE<3^`u)D$q+9Yw z@EG>z#W^?|)B6n4js<1hl>H^){mi-~K94<~^`5{e@ku$#{Nh0TK>7SxiLS@Cy8i*H z&j<4Fb@zs+{EhEhN@96b^UFruKd93bcx@KvJdS|kCdDA*V6w9 z7d(84nlI~bH>GR6HT;dV*x(jb${o5FS$M}&4MegTZ(~g8g0@OweyBlPQG1G)qok(~`xEZPLF_(^^+-Py=6v=!}7 z`xKpH_&d*!$e*}ds+QxGd@eEiY(?uPU*~z1$Y~zxQ&)4mBJb+o-{~&rWL@3kJq zn5X@TyUg=_>c80kxg6isoNnQl_NVqjXsZHVFNxk)Zy~*c(k^agJ&%=HGHi{QK-r z^hmyleNtY6(ysr&`S>Y^7yp9P{^IBSRR81sx9IcAWj-u&x=&y$8n=9EFUKe0yF&>t z^Qkj=UM1^H8UMNqFLLjE|A*u@>iyT8kD98zV;@G^2NZvCeD){0{@P0Hk#i%` z7xyRoK-52B-OBw@*Z#^<|J!&5(y!C!wOjgaDWC38=1t=6<=x4>{=8hm2~vHv6}1OT zeP1qmB)puzbVXYoXYvF02BzqIvD9o+{_*xi^VI))*9%miCI8~-lKkloPvd+cwACc$ z(%$zUM_Mk7I8Xh zAI$Eo7nd2im*f568I&G!x0Lwv%DZw~E#Y`>X1&6%IF9mlIlIgK3E?N0`xKbp8uY1B zgMPJ&?^($F`9Sl1SszIHB^<2_EOj5-CF_LsY!7i;39n;+FR=UMA!NU#Lr~;0j#Xxn zKZ*Z`#;)g5J~i3A^WA;@`Jv+%ecjn1`%i*$o5rmy(5{Q$=F?bB)x)?F5!YA|Dp7F?Us1D!~awLxp&{B zyZB|FMcljF2k9!elx{(3pxyOn**__>Glzp|eG?c0=(UM~46`6=@h;d0+a_}y&ZMuRxF z<$QhW0P|)c~EyeF7I02@%@FbIh_Z>1oJHjTcsMrdgdU*iNEf`AIbW>?L*{8;oVkq zZ}k7+f1eM$p7!>)!nYjcecz+GJOm~D_r=%lp?*nF=A#Fzr@Qf%<~g<+$#zP=CgYIk z?<%*{DaOC8#(!rxTBqrK83`}@=Yo`fwtC6rqffnS(EqJ_)Z$;(k2EgYit@pyr2iH< z`4hQcO=J5Gk$aC)D>|8K9CWF9H_B&SDE=Izh3{9y4H z>|fR~+n9Unf%o38_nxo!9`JickFCTG;+Fb7>u+QCdFyrg`_vaK7k?7}f&A0`C0qT| zg!iei`Sud_rMu|2*xgo9vxjUwq#Dl=mRyJX6ZQJCyS(xxe*iz8Bb?|L)`mTOYmkP~sDmb|L$?qPHvBd`@90 z@h|E4@42t@{+Q^Kd^+Ep|Jv$U?x(%!ly>r?Jv1-r4!z-I{PphldFKP&?VCz_74+&C z`S%@%M{qj5=ZIdpxKlc8b;TG;zt;}AFD2`U{~o>Tk#BQ~&!hX2ncM*SiCSISK$@wJm1s+cC^ZAtQD~UgmFY)-Ndg|-kzmxeT zjSunouEjTN^!!&)>YwDh?7w*B|Ed0z(usWyUPsG3QPxwpnsj47iPKNqQj{;YTElYT zl1~q^KFLo>@5={RuZzF+tk>Hfo?`hn#t#_xGKRjQdVLt9ciws^-=C28&5mP#6Bvsa zmoVPJ_z2^Rj2|-olkt#$P`uA@zcPfm_kFhsEI)@)`guvWpwxTsd24s=@iLv&qjuXTSJAZMTf8f>ORT z9{D=QBWVxv{_g*@-T$}7@2wZz&4>Qo^htRNO1a5+CgYckH*2_^(|eq_hrnF+FAf%E ze3X9VK`^k=WOx)#RKW_x_9^9jn|)-OaCqM|J1lAmsr9-$l7+EBh;g4`Gh0=ehFUkl^=?uZio+%jE}G-@dQ@?)+1}#ovdb_t4|x zxOX18gYEpB@oUE94zjy1YpjnQ;f>Ul|k4x8E)GW5yF0z4KV_Jo6cz zhst*srg69uMk=59`n$V)`B&w#E|+@(QeOo{?!|+RkIu<$K4{1T} zyVEariTi`RPU*T2;Zt&+EdKso?9MK)J-2YVNqk;+Z~gVUOL<6mFCHko`1j_^iM*bY zd=f7H4;EK*`qp~VDdD@5i@TsV-6DU$qxTW!G*5`1e||q6->3L~;VgcC=7)<{<}YH0 zmk;FivA9dVbjM}gF79&9(H%dKzSwu>cRc@I`$YGf@?A8adXfF_e1`hdUon4&QQlt> z?wxnidgNc97f5>kr%~o7GS3whyX1X#;W7@(_wT$Y?%koxpJje4?Ojmb9~SP#7A_y! z5Bm0ZNW@NWI60S;exQ~0e8K4Tf3RG>-y!iz{~+@sL3y9V`(BOAM+BvR3w=%XQuKPU zACDh$pG5FL{qT3|iO)+;c;&y3*Bf5qJH*&)^Sl}FcQB{@d7nCr(+ONuC0(*E6aQkja9SV6&p!_& zr}0ec6~1fD^|q@#Zl~Bm_0QM&{kBie*6FdiUdH93PsVjG_ulIf{gN&(O8fTuBaZiJ zxPOuJ0;wldf8+JSt5?DccCGKYugl*>`R?&Q-X8x??L&#ZVwa%UOK7VTIQ`wVPicp; zzx406N6BBY&x_Jtz4Gq3x842F=P=#HEBQy|`|bUBZ~t-HLG|zPeqG8*^vHL(y5n-b zAnw9te4zN{JmuSX7T1IB((BFV1NC3teE_jT;`vXt3#s>lQf>#@XP0qV#)I!$|NqtT zN6Js?73EiV=V$S9oWb>L&2HVV`qX^G{puov0adzP%Pn;ve{wIvTMx)CO9{$+bq|lT zOSu00gmD?;os3?6@?E}~Zrr{8e`xNl&jWeBDBp8D(D?l@+x;}-HpUjlFBtvbP`-QH zgSY;lSx5eU=yd+O`lQ_mO1XK*i{6}0LRAL=|n+UYQkKaa7H@d8F! z4_?e%+UpYLVz0M;O8P}k?^D>S&s$yF*A1+P_7Ct~mHV{2-PsOhzv6cG=jGn_kA&0v zQ1SU%SGlD`pP-E2g7=#EY~JUI+eP0i^L2(_&vwmOO?JzBU6c;LdWzj8pS(!nEcFWe z6ZHD~SGlA|^a@J9+bc^2tWOE#E8X>d&X%=6n?WbbsBa7X4P+=T}!53@G0^&4Wtfm;CV7 z$FBPE_pd(D;o`W9-y@*mpYznTszH~f7a^SwGjTgg7M0Bdk-dk_)ZR| zQ``f;p>mgUA(VX&pBiZV`_(88=lyQU!G=4-gtwJ^pP1@HJfCG>)tfKg_~gCHe6~mI z7dhD@`#}EA@4I>3>Ah%w=YEmbUF`76zdM|K$Hi8(?;HPKnuM4AVBxgB{kA_@_e%M6 z#qP_I^okvEl=D}qAN$uE{eIP4&PSqg1HE7?A8IbF+g@z<5d z^X0qaiN8-Hdc7#)n#gH9jE@I0E{VUJ*`AdKvERX**16y2B-Roc4 zkNB5s`P4%b#c*lXwK>yr+)!$@~5Xt4GdZ{?qufu@~zoevd`wp)}9KeezE! zy)r-hq1OF0-o)ptv>$-{HtSiRqImr3*PNff?FOa2(s*z4euR(rBP=EHT!FuhrsrK$ zj#lTrM=3v9#|SPr`xvq>>r*WpzxY28$~so+nYP1x|BdxL@JGs5=`RnYuRC`cx5Zuh z-L-80Cng@*_x5u-0&4H~OpoaQz9{WUQ1Zo#^8IG9U)q^Bf24e5KS)sI%HsJoV_y%K z^Wc;)`IGPM3BK2Z;D7$6Mf4M(cye*t--iIv3EJ&8ywP$>>Xw>z;*{a*G&@d2j(0o z{&!mBeLgSB{hjVm{L6ly*Pna`Q1VyYUD+o~r~DYjDCH*T{qCg51wR-_;pKaLBBy#F z>yLPT?dI?Ky)mh4xkvjy4KV9y2xwCw((>)$?=^S!{hc#IX}XJyATOKORovCx7DZ|5p1GJyg%-JHBx}G@f9d;HiHFd#OHnQR*w*&%(OQb061R z|K}m+BgGrvXBRH+>plKNF8hQF@wat#eUN;me#EazjNF?(OVK(R-y!Aw zk9qi8wL1JFgK_^-->s=+ueaU`m-a1o%lls4p_~)w{ys(Js$MFn4pT*V7OFn#Qgwv7 zTJ=*Esz08izz3>oHAvlq=TbcD@Kmc~)T8QH6;ngt=XgBB@C?T@O6^pq!0##WdkXxW z20!EAcLLnbz%vognQDkNNsY87ur_zegyoHRpdJic$ih-O9%EbPm!;$HQAS8Rr&{7qg1vv&p*O? z*FVy#_KmXc@r}0D`Esn=)k#(ba(S|EoHf##06%A0*?}q6n7~vkCvdhkIWW_DM$NRQ zr~<1baE_H1m}^}f(4}x5!WCK1<9Qj+t9YiU^R4sMLdc7)A=V<`g?KK(vlvgQ)fBkW zY7Sftwy97^#FJco^^QE<9QIz!&X)BQQ$^Ao2*BJb->M5W$@Pu^;o*&_9 z3_c0|B;1~~7UFp$_!Q(%!Qazx+XDGBcp9v>;PX~{@J0N;(F!?@R-*GN@HO)!I3&a+HM_-=L_o%q~T4-erpZ4-Uhyl=RN#?2k=9a}A!xU=n1h_1$c}{HzQBHX`rAdJqwSD$w4LY-wjU2=+b@Pj*lz?! zz|RQy9|=FB?8eY&`}I(c-4;3#{3JUXI352VZ-0TOEi}`f8J=y&oOA5_@LYRxxX{iE zpJ$H`&$n~K3+#wmWY>mE5bh%2CHCXa<@o;Ya?Wv?ehYgA=_+!4J@}dL$<|!2G0~cKMihyYzt&t z?dOAAA=_%d3@o>{LiP;YpTYm1!T-O2tzW?X3)uPvWM4qG2eLho?SX6$WP2dn3)x=C z_CmH7vb~V4SNEa!?%%J}(m1GJtKDmiQXd6d?MW9Zb_eZ7A%Ffwty|IBlgs-3#tzZ86# zv)*3?tb@Ndflp1X_n&t&{t!fPy}!pArFI6^`#*qudoW@p1TEDtb*ujn;4){ce*kb? z|MmWd@)WSqmjymJ+~_+MXgiI@o&n*odIVn^`3UKn4Ec8GJqI}Jh*fInwIu(1rBcqc zrq1-8gLn^_R_?zU{?48HlF6T9XRPI-+;#r^)acK$8h~2wTfmXiD19eS%d-B&?l%5P zb>6hFqI$7PjR7x&-f6&#r#1VYT&s|dmQK{^eqr<|Yc||J3O4(QXIUlSwv%O*0l$F$ z<;?E~js)KX)OKtE>h!$|oY?<8|GU8R0`LnEx=P32-{3+I5@K@4%X<)NK zzn|<*^po9D|0`Iv3=T*A)3Iu)OD?pYg}=13x7rJEdwdv>@;TkuITH2j?{ME9TouT| zDtFS^YXj7tRt2sEKl|+Ufl6TE*^8~e0G;G4%T2V@lCv{7e0|`M`<1FZyV%Nw{GPKj zS)OH00)Oo6Z03utx!@lK>jQPb!f81yFZVwK{@1hX18)KC>5HwefuZT6EUouYAmziG zfnhx@b@=o*15<#5rtb+{0z7W|?!Z;RZ1A%Ecn)~^e*CoQW369-e}r<^?Q8Dz3F-sG z7h7Ke7fjEx9M@7;O}By+j}@eNNPju(iopH$>3RO&qdwM8Ut%2vzIA%Oe+Y1JxWJ^R zCb-JtdTfn=d>7>Iy-K||y}+-_yMFpAYXaoj-vZ$0;MV}#p?@>*v>A)74}nu>WLcjB z69Rhze+M3i^r)nGdgssB69^icpybzj z@WTE0Ch!Xk-xIiKKlzi8U&;Ii;0rSf)l#5tM?VF=3OjYay@7b10e>6*e*x6?HZi_s z5a~g?8ZdK}dVj1^LuOKa95Hi3km}o7>(B7FY$lb@>X}8HZ$+GMC0t)hOnz@j-e~nq z*7bHua1`)&GfR#8zO?n6|7FZ8Oh35+^>z~c?U}jNxPJ*;2>#8?SwY=?5@r~`BLux*(FL{GOL>VgIewn!m0=C)#Jy{5pLEIOH6({dF2Lc zf??G&#ZuSI-fHy$-ZFcsk*}CtXY|$tceCAVgBQSk!|Vxm*?6Tk&0ZhW{cb(@O^`n| zdt-0|aJRpn_2&88(N3C1ul2nF`4dham%{}68}NqNTZ4)CtMD(+E;Ra^otI3wVrLtN zr+(`#xG#ji4}ezzYl1OTE(5|1Y+nQO#?E|L1Aj-(Dfh1jj+nE{=(}`Ilm9F5{^2Hn z6uWdgqD}sRzWdy3$|w3WU=Gy8qaaJj>SOufJfe^>f(Kqae$A4wwes1Uwv= zF-xhV3o-(4fDaC*t7`b~1*HBaYQ7@VKO9xBK#u-jon|mIuxW-KpRyUF>e_L7e9183 z281)%UrvC=k=y`{BbfmjpYn`-1H$=?1&l?EC5+TA#`P~X>8uHs1v+47|8QAA=lhOm zML_3!|8PY>=l70irSVrky(&QCcQx}`4p$qPgk8-Y(K_S5f4I(s-w}-7iqEyURg{-B=U zbudPIWE=m}5)#=xhj}hz9%IzhM?F8(^TPY)Rs}v;rRz;&faW=Sxc*cBRTEqrY(zdh zIk$|*oqVHbKsY@}c4Y*0{TUE$Q%C+psZ0B`sq0Wrik(c>lg;t9snwWo+D;D3bAmJ; zm2$qU_iH<>!u9@pFh9}rPK|or_$lTc!NPqeT(OfIq;kv+j>Ycsj%aT10$~1}JmWsN zFh5A`EI;^(anBDb>@Mfe$qyb1JO`-De-Zp?J(m}j1gTw>1gTw>GB0Ib5~Oxi%2;ON znO(Te`qd*!osc=pHyV2PozbRxBK_z0sWADmA-PSJA|KFC8vi4wcJO?+!>7x6a5!RJ zhH$o1#raol@?$`_I!NuMmgRMfG1k*yuqH^@nq9!3V0p--$u~Zc?J7|BCIY$wlg3@U2N5!7s~|IySi@NcE*i{TAVhomNHluT@cd zj2OFWf+eaR;p>uVo_u&wiAnFx$)${~iu#GDlZy39eR9;v1fCd)I!6EpM$(O*o0Bsb zGZ~|f1NVmHY=^>^vA&8Hj6T<1$*uasO9j|=<&ye*Q)@#Z@(ApP5eIYFA&RjU!_Dm5adT1^C=4ZIiiR9koQVJYxN6(=#%a3-lJs7i&n62Acfm4O@+wD{vyGEoGIiI6kCeABz zz5u>aR3!Q9{0aX5l2qV447?~>>Wo{URNrWU^GBfV6gidf|6Wm<@jr5EffKrb9l@b!k7a!t9DVC}bf|#k z4UYaQUH@={qffWrPiZvv9G}@_@SXE}J9i;HJJ0Xy&^XoX==IU!V+J`-8F`jd^%N6$2 zsb3@f_F$cQfsx9kj_qi7&P4p5g|eJ9_}{*u!^G3NAjb8j!#Q=jPH%^EI^5qY>frd= zog9SQ9_(;NKz_$ie@OR7Bc~=ZMj6u?X|PQYb)N43NMQY$zgDnm#1T zoyDUZJumCuuebU-N2v#jt3%XZRDc_Uovj6yv-4E>G^Y>SjSi;-XJhnG5a82>jPUFtl^`0D9OH4d+n`FCgj zPBs116#EP4pSWnO^UhkO3KC15@{{zsXt$;N)hUZgonx_XNQ=hQJ4pZLq?n@dET;Yf zerhnL?g7@poyNVGdI5YQDPK8>NNjF&NPg8LO3!iSM;&Q|LADufWM)Q|LYLVrPQm zj?wjDifKPi-V!_OF#Ls;-eavvz@ID{%lm;%p%n0I7BzGEG=_GgA1rnnLp@+$v9rXE zU5k8P)WY?4u}$O3TI(|G$2_^HHAM6Lwh-+vG=_eJa0Q9GEnWUo7Bz(`&qBLNYYd%< zbQU}9A$`lTe`-6IcYA0S;$N89!SVaU`YQn=QWL{w{+d?Fdp7lu`zMS9(`#MucRD9H=2M82mw z`9}Y~w7l>Y;C}{c`}d_4gsJ_lw`hN^C`|heL-4}URJU#xCeH;KAG0Tld(TQ`YU)|PWu++CFOn_w-atH8Du8_i=9EX zo}WBWQp)WXdLd6cyVArra_S)aU8Hk+aFBg6``6>_OC>K^P57%W#m*i}mqSgkitVck z&xXIj;i@o?^Wol?=<&8Hd@kgezlL=`xFNZgv5v#lar$G-W6T>^&yv7=gum#bC4q~8 z*IzW&cO~$iiyAqfnvA{|Mwj!rF^JnGA<}7heJ{c-y*64uMfmL(ZM3!nn=e}Ge584B zsngCF>O(x8F^h2mW; zGp+@GbkQp3advNFTy}>ppHkJOJQ9XnDwam#hd|z620>zV)K=F{j z*6iE_-G9|3=O)npa~|t0_m5hm)LDzuO}zEfX`i@m@nY*y*!SFG+COYwJj>SOTk>UV z1DS8&Tmd)|n0{HY{VM!@6fCyi1|EMI?Gui?ET8QtU^~`Ybl$Yq()+*{T(-pi1N`fK z^>2W;A>848Emd{dOU^)GN$;1OEXEvzYpwA>?N9HsY`Lt6^_O(&pTh1l4Q{mN0XJY@ zO|Op=E~oLJ*qLJKe!KtW>-|^2{iMr#t34Mfb^7H?0=I)tzP#LjCHm=er;?o|mzQxo z6`k=cfd8*Ar+uIF(zVuJg!^%6CHt#le;vGD%d#@?S9dRgzpFPYbwz2hE$0biA;0ai zYA%Ob#=6dOc^2;JQ+GRhUv~Z#dmPyOr_zZTRknZoH>-)&5 zS=M=Qx1DYF^}r!lbtHUc+#?}mEO;|W_By{bmOlknBIfh-zZ1#w@h0? z`?}bVV?EpaCk?_rdOGcoUkCTw4A1C6%F0vK<}4_aUFvrz7|{a7}7Q@MYknK6yR#eE(hS zBkTgtNY3k_Z!z@`=NtP5g!4F_ydEDzUrlh2+3&#qOVB!6>o4GRbOieto@;ph^bTHE zb_8i3r-Bwoi4NxeL~0M^{s)e;)Unr<`zz2NPrR;#>tSLd%_GYF!#RrPO#g467ju#-B{;kV0$n81mOA&kE`DckKHlQu*a}=F`1!zvPC(&?aC2 z^SLbK*V-HM*ge0~pFVH-6#nXszXBt#2^J;typz*g%IPggd@p!!TRk1$OnU;3jQ$s?F?jCdVgyJ(^ zSPZ@$@#}T$J@8NYRGX;#|377>TYp7(?7Jjn;arDN?IgPb@qTV;i zG4a0^&1H-wk{x-RuMMU?pdaS=^Em!Iwkwb0%VT@;*p58T*F4VGJkHlV&euGP@->h1 zHIMT(kMlK;^EHq2wUP5RkMp%5k@B@6k@7X4?Okfx`>t>k+nvvL=d<1UYHKHHtocIUI*`D}MS+uh7|=d;~SZ1+-Cf%@zFNfX;&!1>?8 z`5$)H!2O-^xu%|=A7J-ZlP;XUg@0Xy{huSV!|wy1JhF}3dpo!HwboXI|JzRnSr=cW z)Hgp_A9?}&zmCi@_e!#F>fnAN%l9tiw$s7w-rtkjePU1QU!y&#e=RiU?Dew?)k#Aw zb;C{R?4H5ytBkzrrc4fB!u|Ow)i+z~U!~3muIar>U1oTRNly*Vx%K(;jW=)Pbk_4Z zY`xhRa`Ng!&%ytSo7b9hUDbE3qJDO*I`&efetb(d+mXX|j{?bCQpr^iNtWl>M_bYnN9%iX8vkQ98S*;8%0RQlof}Z-XnQGh# zdj|C@GX852?mD=CeoIkLS}zy%r1f(_&!v#}hrXLb8cU2l8+YhSWM4tg z{G;^zrl9AS@Q?jtwx^WsDeXyilyQ11I31Ooj!I5PC5Nl*Su$Lwqq3*|>#G{C0x!6= zvZwwltQv0uF9Pbn#;S2I?3xO^8}h}sR&hL)J=cL>b89unS8LL-1^#rp^5<0cd>ZaG zLBzvI_Sdl;b!bZD?&c`Os&!(QYf!73^IKP^DmVqb0AC+Ts&p)I5hW2Y={jEJ|A2*Npf!mB6>jHzA zU-3C!2baenD{Un9wQq}9a* zO3v2`i`qkl^#b;JF|V<<0|%@qv-Cdj5FqVGm6?6u`ss9zIBG?O*~c6ZE;Cp^y~3jO zRakUCuFRtQBNY~216IEsUCH-KD=eCimUSZKZzZR%%HY1Vi1iWD@zm6j2zad=K$pe~RyE_BH7%#yusS zo?$Boae4=ZGsY@47CiAZOO0Q-(LNGrI~(oefoFkdWB>Dlm04zAseiwXHr;>PX!b>~ zT{)KJqnzdNUk?Aeo^B70<^9A_;d>$9vNB@U>94MwW$%y_Vw}DrJ z>v8(QRqcGwHSDxP{?7PnlaJUR<#}5Z=UX%5Sl^%E??HsO##!o5t6JRSf&IfRF5Poz zHTKj`Z*#9R@-~<5wY0N*tnYrvwSBrg+k+i0wTljy>ND(z`}UweiOz5RNp!xOnB?x! z=N5@cJK?@@bu>xuGO`kKz$y9dpDeK zF-!0FUvqTKx&ZwJ&Q+|3aekSZ8ng8Iz>SdKf^&d=p_p|O-1|dL=U*{vE%>B9F{>Z& zjH9#J&X~0m;b$ORkmb6c-jE!#_Ch`)C1(8-csbnVTzt>-IKLf{lcfC(2*<3+h!5wn zmXA@NyJa9e?H}Ztc(fjUZgDI0=={q}EphZbtQx52VUMKdvA=vShkR2G|VxtD_Gxd z(?5>uU%~z>l8!$e^=nNf`>#kk1^kKCyG=hiu74H#t77-6q~35}nApJO+bHcLX$8*P zi=FDEp904nQ=RnoX~gyVrU?8_?ECBtR3~kPyGFf!41}wbeh2=3N_CR%2WB2qn?(17 zs*~vazRtuyAY2$;gLubP#gg>ff;Gn!bAPm$vBCJm_|DkOn3+WNy(Njp$JQhoAKQ|s zeY7X(xAsq%)MPEex#6wR_9XokPMmj}@HN2>=Ce$HG8XrSjvtTx*c5-Vt{3l|-@)NK zk`9ObiPeclK5}X_nc7>r;p2|UNTz*}Ov8VAOr!JeBj`sn8yy-S8=a5A$7i;g{Cq8% zolNVqoaD=~&%Z02lYB2wuNQT^w;nnceS>u( z)~R!`&ZPBjPI4jiEpu{`Z#L%$8NA-f;Pp-huXi$dy_1ui41btMS+wrW;B`)USnpRq z4?AdmmX}=hDDGEe<|RJ>+yT5D_-1B)vcA8C{k~*fzB{7%$$H-m_q&pHe|XNEykuP- zbB`!6=@~z#D0vm~vwyhAxbKJ-C2s`JpOaxN!#Wq|>c-#T!VGJ(;j?^ga368kQgaS+ z;$5r4hfP3zxvMmp`qNcmogevk<(Y7=W|k#S!?=cdMDnw+&p)^?BcCU>SafdOVx5Y0x9wE&d1#AO z%>EwOq{EdZe*!%{5bvKEe+Bz`46gEBWBR4aAuj6SyetdcW+ESZXC}4Lv?I_Q!>r> znv1i=(kk+hchGkulgNwPd4kxW?t)~^YvOEjc?iPzt;CU!WBEU zK04R0_0hS0t?zj3D{48N*XI~J>!)W&-hv(P_fItE%>%-THuVd+oQ^!ke8vLCsPX@g z%&7ey%K!R9q8zR$LhT`HzX|zgp^^yQw=Ie2_PHZk5}|fkYIy%}sd3*CE$x(3d(E|} zo|i>l!Mt;DxGZuj3bD- z9oMclp?zcj(d=sv4!83?k#_Ye+CT1FnERBUC$=l9@9pXs)=%lrFy(gfaoOg+{6(2X z5gIq@xPHY94hZMkWJdwt18Im*zBU^7kyD!(8@WE@+SISC4bpv^-DZ8Y?~ILMZTH0f zIVN88?@Heb{R`~ld!&4yrd{0#`*E*S(S4eBbvJXmKhw_la@zS`PP^IxcicNw-!RtA zH}_GMp5J{1{r6)Yh5M;$K%E}1+SO6@gwx<(^O->HUdX7wDz4@FYbYA^*T6OEuW@Rm zc9YBL$TNujOs@CMoDXAt?<~W7W8heyey`!dRk*)!2F@YwP3L@XiA;P#mt(q3{SM{N z)%TKoOqlo$_qOx?R4bQH%unmfRxYPjZf9*=4(%-Oi0FCmfN)1d&oBD}_52w39wStb zIwDk$^4b1ohvri;Ysnm4f0~^i$CSGL_-1DfxRc!M(EQ4uLj72w@7GAr7xy+hhr-`Y z@Ye%)-SLIK-$VXUu+T^EA;zprQSXYKLf;pV>-(okMt`9%G*PeT3VpOLZ+3P-uIJ|q z;9vXG?~`p0Haof3V|@)g3HsL{9-7ZJJ2amgYgNEs;(fIL(wg1u90t7=#dN>mzPWi0 z_2aEQsb6UAsrLt78Qtt`M>yL_H0c?U(qQh5{4u53q4^=+mPh-W44!H96>&Zl+4?>$ z-d{)=T%gp(<71Yt$H!t`PxqAz9DNVC*HGM-#rhyKwZPf&lrDz?z6V|4@cl6!zY82% zj}-8I=mLlCofSCsh<_CB>3)jv*!Oevz2bgDJA!n7zQD1cCilY)rl;^cFy(acQ-`Lf z1OwRbnwp-H3;VwWUXFW@nxD;l0r1qJ87BQBao(@b^?ic*_z7mrknW>p6yx)^T z<6lk+^%LnPo=HQ?LbR?a<^0J_(doZqXl{zO_bH&xuX~5)rRaNI+lEGs-umSH6kaEB zKE*hnV$KV&e^)r>yaz;mko@9&iaB3Gesp$>^Cjk_Y@z$XgMg!O|CR6UasI_PpJEQ> zQ-O(J4UO^rz$+(iGY!Dox>iCT>4vCLgh{#C*N~7L>2@7o>db-rHl(8*_S^@1E`U2b3QtD#pI}TU|+<^SXJ#@1lnVDJ_nu&V!Mz}VG=0Dr4P0){f9@g)GV;^UF#gL@dpp3KzrlpNIeVMFV<9mcpF)^a;6b&`z#2KK+r z`VsW#`{JLO_Fn2_fq#i~U4`@Ke*z~mpM`T;&Ch54BjiswTI$>h`C8a<1LUiLCk-aP zmia`a8~u`*cV(cwx551v@b`1LZ+W1xGarwGT_ce{V}Sae?(1+@HBIbZ?%xT1R1Mrw zk2a;Xn|7t|tB;(k+kc&U6D#jb!;VUEde~1L{W@`Jj*w1A)&$-Y?`&)%{3jYGNw&g9Ro%A4j6h z(^D_`g;LLr%;@BO{g%pHm!5j)nYeGYF4Ke`IW;}?8uHf9i9<{=h3|n)gOhX&fm_rEw%ZWfto7q@n)Qr{S-5RE5!3bbQp7*RMuZ8h=k_R~dXfLj1MtTodk&q19|hv2O(I-0jq+-U#d;u1&oMxFfpQ z_ZRG6ZhvrFSk4Pxf;=zfO>U2MMsNM}H^aJLpPaJT_cq)=c(8%T*I24PN3tJ^rS5`! z;=Gvp40ioI8Z+VW{%7iL$a_50U^v!u+%GhwOnF7GgR;Z4PH9LfFuWmU5#zIrzXV=C zx*=r~^D7zY{ftuQXq20cd;io<8rh!4RQ*??=A7Sl=Qs(Y3`w`}M4wqi~_%E!%)@%R{XXk2Va(eJS=9^Gu>n>eo_Oh1qd#FzO z1&7j$c7^uz)$mp>XN)UoS0|1r;e0L$osD^WKdk@9A^fV*9p-+zK9|t;O$@eieC?@! zgWXS$Zckl(pPrw!r_%XGwN3qYwN3NVDzm$E}UfP~Y{;Ou-%!L__Dt+fLiHE-s1b4Mzr!ync8gLQwD*X@R5|Hjt) zaBZXO?300?g_?Oi*v#wlChkw0INtOq^=BE3&BnbZ*kbVF;~IIrnHZ(?W=8d2L24h8 z8Kw8IvQ50WkHGTmPWewzo=u~3*sk2@YZqdl{6yeu*e3^mvIzG>Ps}s%Zb;6Jeu#X# z>BM})>!%k)^?Ll5@OKZwT?zaG?suG6#PO9xX+Nfvd6~htPOM-%D>*$?(ZR1HpF&kp zTGv-aCxM@GQdLye_q2~t73~Lk4&=1HD>UD^Xx-4RXkVc^s=q3E%1P~t`h!{%-+-{+ zN4$>9A;X;WwT({qQU1q_zmZe@K5mauE)`U};PPl>yPFvOW`DUR=;wVfzweir zzuna%(a3jZwR8E@ak`^Mj{O}U?c+p!w9n)B(f&!)NA)Y}qk0wf(f&s>=VLD0*}`_W zupPO)|Cq~m=kh*Wu8;Qda(Q1b$Hb3)XCLiHwQ~5jPCeA`P!Rhg*QN8V8eTiv0e!Ta{b{4Rm(KKoY>5Tp~YX2F` zGa0kfGAHTrDLakM>$21Id*%6aveQn1{G2&CMnCqg(&!vH*Ti2xo%**AAIUTB`_l4R z-yZ(XQ32bz+q^Hk?~L6__e)b2?c($D_sn=#?CfT~%Wx-okJ^HGAKSP`y$Fl}DSzoa zS}mPm)BT>MzSrTtZUw%mhV<`CE8=`8^3lD^-Qf@6{z&@n@ZW*@dqJ;G#(OiHO4zPa z_FwM*E#$rH%F@ie=Ft_M^0&}F?wec5{tMEmUn=+M`Ss$ua^EA*Dz*2Faua_|u-vx; zdMfLx(vF&<^Rp^#JP`YHMqmB(TGm^gHUsjyW54ma-U+tuc*(m^!Fdu*B2(7j_{Ax7bnaEK32cfcMcC3DD zP}}`{{gQ;cA#Vge0_+!>U_T99kNq&+etre{E8vd|T$1nxuo?V)<8MjApIQD55bswd zjLJtjLhl5ileaZE|6zrD601ypdgg>Oy%wwE9x*zG}t+(!n9P0(^ zDaP%LEsVPv|4!%+o{jqu_2F?^dClcmBN8)Z4+~hD5#JH5m6B z2_xnn$&6WaKJv_pMpxf|s0lWjdq3GR{~^>q=>Grd;C(}SeLL3IYdYO8IFd07^K5Md!k>yP+Z)SN5%UhYZ zF>hzy!Q9_V=Lg=8?nUX0GEZlo!90_BHuD_jxyr6+;K0amwqqiH%Aoo8vQBO(UYos>HYQJ98ukCr@?|= zRYqSehp*%C1-ieq+*T(+a#eXk%Ci;mjG1k|??*2n{zGEKC`f^!cZl}JZOt{2DDc_^) zzo6GikiVLhXOn&D?4H5ydG;%)|GGS<8h@GWp4}OK0pyFGO%GD|f?j3di=S-|2wwqy z^|KjV?r$bM3I1SUz3)q4#k0E-j+>>|-Ff`}Df+9``g@Bxhf=>$Zoc!^{A})_R8Mz@ z>3(Bb8m({Y%=@V|!Msj)y7!o8?Avl{8TV)ThGSoy{S`2O$__QR~rzPW!Bt4)dM+UScBcS~Z49w^iQkj7Q{0<2e;x{|60KX#x7veW3a4CMr z1g^kuZr~dHjt|^`-@HHtext$J>Ch0=Ix~Y>XRi7Gc=P|fpw>S*sP*Ruwf>nwt-m0s z_0J1x{Y62oe_`;7UOrV4{3*0W!&=*+VXZAatTh}N)*3QU;}BO^Ysd_14MV~g_HtEj zxbKfc>Twe)7XIr|A+;s^6@DAS-{AMfuz!H78pC1yz8*djzfIv0_K&T`)T+={I-Q(!tWR15AoX`P92CC6P_64s__ZW;x{j$aZpGl z_tZ8=dup2px+XVV{r@4Zwm;j|mXCCGDso(Hf0cXKu#mdPJrcjw?vIDL>P7db>9Ers zF&uWfqw(A1jvXFS%|_e1M%z6}T61-h*1RrBYfenolH_D9sWtz96#sYeRhs9;HfJuh%tm)|old z-di%K6Otq(mDDv3l_UuX;Tp%jBo0ZaYdY4v?OV3G#<3)&6m43rNh(R3cF8rJD3wau zB>6pF*Y$Y)@;$e2zt8Xc{lnw_e7&x9uDP}u*ExrJGz-;os@TS(YyR>jRQ(~g3*fH2 zg+1^i%>M8a+JOBg+ZMH{LtW}o{8D#+K5=SNi%x>guzZJY_XNwu#?Btw_~R16`a*ww zPjE{f)*tPs^8W4~=XfTys7)Q}QT*|YVEt$@RP!%^yYlY2&15@4ZK&Qihq~0G_!E2n z@M5Uulb}hOqG_6;GB+4MPK&8Y6EsOvG)*%!OJ!a#zhau84lEZny1CS&Sq_)DRQcN% z`uiu_Nm|DK6x(T`ysLXisJ2rB*g1mtne8M^(KOA_ER{uEKZ=WiKffeR(KOA_ zEUkj-{gE{|ADW;CAkIHl@}yvRicW{BKf`u$&0u(fTJV(oR)tBnZMIWvJ8Y-fc4>xs zG)wX475vvFX$Y$Ij`zgLrm0Ia)T3D{PT}%soEFmrP0|#d1pV_6+iB|3 z49!w`YOtJQnxIMQQE^%@UYwfLqBeD?OEc7?St?HF>!Wd6Oih}g7EMx{I@F~e&C)8U z-Y5KN4FCO$Q?KI8MDyUvZ@;|}+QZz%eRMrZHCuoX>&JLz8hW`1SCTWUh=vG)R4i3+7JuIh;RD(lpJ`ER}VF@r!AKTGXZ~>d-WGX@+ivYCCysi+C`9N#nGbn$)66 zYSR>TXqr|+wH%jikBVY0kH%>+HEDvDLNyaD%%>8n*O_IzxPH)|ph=pdX_}!~D$nP7 z(FEPzAUOW*3xeSeb!morG)t?XTCaG+U^47ItciEqz9u*e` z^9{jr(Q2l0cY~j1#@TPu1huG5E1=r$4%?zpFuyo8sYM6FaxwmPn{9`Ri}*UBI!~Fj zl>HXlHg%{=)dw3jokz{aLEEA>b!eKpG($a_rQ+gXK9a_1F*T`0ZR*f+C zWfQ(mS_(@q#`_7?`)bn^hgYzjX4|D1>d`C}O@sNzsYxwrQ-`|Lqqvy}&imA)7OjM8 zJzcgvDlXx4G(jzD({)hYcgp6$_{B6qlQc!sG()RkX{^VR)TP1nSt?s_el$UoG)2=i zL*-?hj+Q|6`ZBuz@?dy^CTWURLN&f~MKGRAGc-$O%V2n%7E_ZZXp*LAB`m!X>%(@I z$}73vG(nRzMbk7xvsAX?^t1$)i#^K|Y$s`orfG&|sl1Bwp$VF#m2h{1$tyE#XQ{lJ z)6oPigX+BEu`NuFM>8}_tDxHcA`y%yX`B{QlUmfJ8R}8dI+#zKCTKfYE*j5HvYn!7 z>e3ALXqHw%e?3dNo-|I2sYw&mqDgAg6m@8tW@whmHr#$RL6g*`DeBNPb!morG)rY$ z&YzkzK`ol3Hce57rm0Ia)T3D{ui^5jNfXqfNovy+b!eJqsJNEz3ysraYSIL?s7)Q} zQjcb-ypHQlOYwi~iesrGw|{Wh&&zp`PwhU*>nyVRpryI}q{b*M|_^}+BesP@C+ z_CY&Ale7$$i;o{y?ru==L6CdI6d?~SI{I)(KM}uYWfV@Sz5(@*&&!u2&(VF zl>YZ(>@R`k;`S#?ZVculItJs%sY%t(NT~I(sY6}r(a=r7cqO!ymQkBl(CJWp@8GbV zrj^vC8M>8vG)t=}{s^4Eo*`OHOK5_Y(j+aTDOy3(w32S6RaD;0<(kdFdC0K3=P0&)Bq&7`aho)&I-Ac2tJ?=ZJ z*v6mn^xGk*j-z6>OW01ZUCMTn?J~A2Xqr~i4Bbkzw2G>~#HyATqQ$g?ny@tH^-Zu{ zMs2^pX<3TxG_9mrT1D|kF@x7dOK5_Y(lS~>)3lOi=vJDgRW#HiSWX<4#zvQwuw6>a zs7))VL({a9x->(#Qjb8Iw3J#j zNz15BQ?!CkhyMAM?KG{VF3r%b)T3EiMe*lm{q>bJM2l$&Z2<8(Vp)RiQktY?G({_D znpV=S)T32Y^yYS>#k7PbXelkD6?76*-|JSgy^8G&+goXtR#E(!-QfMA#k7PbXp*LA znr3L0N-LOOF-_1UP0=*X&@7cnPEQlG4OFi$$##mSX@+L0?92Jkgtjc`Pg0wvs6*2< zL$g%&<9um?CTWVMX@+L0?9b_`MQxg)St+W~fKSaL$(|Xp*LAnr5g+vsB#9*G=QpqzRg&DVnAk z>d`F4pVJPuCoQH4YSARMX_{temdZQ$dTD|tsZCSVp=p|-S$f{c;P|(of8S0W>Qax2 zQG7i#NmDdUvs9LIeQAPPG)Zlmq7F^d49!wGn)9UzYEfIa$MAJgmwGgNCtuH4&X1Zj zK`ol3Hce57rm0Ia)T3D{@8a^PNfXqfNovy+b!eKpG($a_rE(mXM@^cb7EMx{rs#B7 zt6gZF!*-gk^ZOgDbJ@<&?SB6i>pZrz^nl-g?K*ik*M~NMwc0(u&SX15+xh*w*I8^Q z>0rM*}ai^wAm`_putKm5)|GHh@6+ZB&w**@U6=R6|D2kR$k0j$;T z@kiop7t;oQ|L2dGY$s?tzyIhX7TZZ`(-d`Rnifw8mYbk$pnrX4+ole6sYk`cVEQ;U zsYPv?q7F^d_&ve&CQZ;JP0=*X&@7era{08FHh}86Ad~F`ZO49#?Ig8niaIn+UFuO` zbGg){7EQue?mK<8&34LfpTF8+J561hp;;pR%WNIGqmF|JSG4UdMKZ?JPaOemRZnOHG=f7EMx{I@G1b z(}Vd~{|&UMOFb%P2E*gjq!#t4n8op^NiAwqhq~0GVm7CzCT#=#^8(xb*iNx6=5RV% zOcOLoQ#4I8G)v{&U_Qk(L6bB^)6}II-9ImwK0~uq{cc{he-u;m1l9YVVB4Zenxbi% zp&nHGdzNjnAZRP`T-Hzt)$-y{Jug(uw#jyaZHw(B+cw)Nwi643`B*ebZJMHKnxTmY zg6WbpMbk7xJ({IrNidzHaf)A49h@gq&9V^ zOFde=A{akGlhmdu>d-XJ&@7b?2J?wilUmfK4s~gU#vcl%H)(<pcd>zn#9c&k~ZL)1shl=gNba84@i+WVN8H{I9n~JwMJvFIE-JQX3kGk)% zO~w11p4!x*F7;@9S1`UwJt{une5gq+>QYY+|0EdSqV8uw+oNJP=SOYoQ1kQP{jsP` z9qLk#ntOurZK&Qa^9!|qeml|L8(dEvtrrY;sYgYY>qAXyX}=1F+ti^h^{Cj#`B0Nu z)TRz~sYk_rPESp0QJXr{r5+Vub9!o0i`vwoE;YXkrn9I`9qLi>J?BqN>Qax2gB*`q z)TRz~Y5ZsPes#Rhg6jRVsY6}eJ{$~psYk^xTpl&42i5(Q`D-xT`knKq4t1#q%f)$< z;(sXTO)`CRCyOJh{m|q%ROb!z1pVi`{o(zmSnRi{LtX08_@BXiT8VLAYEy^0)T1KA>8VLAYEy^0)T1KI>8VLAYEy^0)T1JY z(`$2Ouzyku`ujh1s7pO6@`CXksP;dXdQ{{G{b8u?pWT{4N~Q-`|Lqaw!TQj=QLrXKWP z7k*}0Eytsx2B$wM(1vO}hq~0Gq9*4<9q7Lw)MLNE?@sWSM@?!$HNH(9>Qax2Q@CDG z&Bvq``)%s5-=!WEr*iq!q!zWQLtQFP3*J|YI;X4Se(CJ^nZf)#sMcTLclRkx{H+PK zeipT}f78|99@L_?ZpWp6zP71b%=M;j3ENbh$MvBm zwWv)U>Qax2x}08HFKC<8qBeD?tJ~)XQQkS=SS7g;;Z-Hz9P_} zF7>Er$?2#`E$UJHfP1h%Qj=OxUH5J3P?vgCvQT{?%cCZ>s7)Q}Qjdz;I6XC~ zMQ!R(SNHb{rgNz1&G}G=y40hh567b>wWv)U>Qavii_=q+TGXZvb*V>1lG9U@TGXZv zb*V>1UrtX=YEfJFmj&b5)S)i*sOZP}QIlHKrVe$fM@4^5Pfco3n>y5`9u)&PJvFIC zZR+UZ1B3A`YEy^0)T3e$=TA*)QJXr{r5-g0b9vOJ4t1$VQax2X`G&#)S@FG z6-@6?mwHsp=5nb=#hjquq!zWQLtW}oF_-I0O=?k(ig{cv^{AL1^oODU`IT*te#L&V zfXksKwWv)U>Qax2g`A$6)S@!DBIs`e)%#$vZBvK3R6NM#QFsGv?b*M|lI*vz8YEhdy)TJI3k8pZw zQ%Ac#817P!ibpveHK|2y-TzoHo~7Lov~B8AkBY}RUusf|+SJkgPpb3T)s6+#_d(7H zmd2Jl&Qt7%rLksd7y6%%Xna%9HmMCuV;j>-|NExR|5zHkV5N(;KRp#sbA72vEh?Vj zaB4#Jy@f?>_B+(29u?2>dl>3%3FaqW;C!L~JqWd^OFb%H z<#MS>EoxJTy40g0!|AC>EoxJTy40iM6;4kb?W;k*tKAl~Jt|(~bkw94wW&kJ8@zv@ zCbg(d9qLk#itU`9n$)5;RQr*5lj}uIYEgFwUk4R$aeOLvvQ15DQJXr{r5+V;b9!o0 zi`vwoF7>E*htpG&TGXbF9{z4HzWIKjMQ!R(mwHs};&P}-Eh;|baB5SBS|11RhfN*o zQty*sdhsdeLrrQ?n~L2WkDAn?Hg%{=Jt{uu^wgvlwW&j0>gnNog6VCK^T`I9)S|ZT z-xmzGs7)Q}Qjd!LoG&%0MQ!R(mwMFvn#-d$b*M`{D!$?Js7WnqQ-`|LqvAVGPfco3 zn>y5`9u?nndTLUO+SH*g^{6<=>8VLAYEy^0)T81DPESp0>GqGoaEp3W{KV-F2b$FT zRef)MaIN^A=Y48Yi`vwo;t!5bEoxJTx-@=-*B@$8n>y5`9uQQl& z(^HdL)TRz~sYlJfxIL*&9qLk#ieuc))T9=5p}G!xRQ%2Lqqa2s^Swh|>e09n3^%Do zZR$}G3dW05lUmfK4t1$VMVQN>7PYBEUFuPh!{t&7`mdK-xolIB7qsKlq!zWQLtW}Y z|GJpZ6ZE$m+WvZ;pqft9x^+p4znx|GwWkJDAR<4t1#q)pVjZ*B`3=)}$7- zsY6}rL4W#lI6d^IrxyEd>agFX9u;-?`byO6-M-0&YCewNzJ9X{{q0Y!^Mc_vb*M`{ z=&x5@t`{|_MQ!R)QIF$OlUmfK4t1$VMSV_BO=?k_I?(@rf9Rhl&gbi=Cbg(d9qLk# ziUypXn$)5;b*M`{8owZz-lW!rLEEMdb*V>1BQBSk)S@`OU4^w)!W>=!M9;c=*jo7AE< zb*M`{DlX&epeD7bO&#h|kBZAVJvFICZ7N!FJnBIIdxln6fBfEYmx`-`cAQ$&rry=T zaN7)Ys7pO+CW7G>wW&izYc7YH)S@o+s3_(5)TRz~_3$=aFX~c{inhUUkBVzJUuw7K z^wgu`hM?c17PYBEJt{hId}>jbdNh6`$D=lNs7FOdjz=x(P?vf)1>=cM9G_a$p)M6S z2jf}PrVe#!yff!VE#28V3qD!K;4y6& z&*9Xj4vi1se5ggmAWlbZ>QFH(817J)dfMTf@9mrqwP}0=hf|w6)T82#V7xdrsZAZ~ zQ8AL^QpZ5BrSMA0V|rUnXHp6O>Rhjl&ne~ zNuJ-gXWt=xQ+;Rm-O%^5z899gRQ5^P_hmnqo!PH`zw7&r={K|A%6_l)i}t^{|JeRZ z`aj-3G@#ai76S$i7&TztfK3Bl8SwFd=)hS6UmW<+z{3Me2DKd2Zcv{=g9hC@Xy%~# zgB}{Re$e9FHwJw;=<`8G2h|yT?cjlfM-Co8c+KFwgMS+w9dhxID~6N~={BVQkl{o2 z3^`?J)1l*rRt%j#^sk{;4!dR8xM5p{y)kU>uB&q-f#Gr;Zugs z9$qi~o-!I=^eyBWu^l77;j~+Za zHG2B!d81d3es=UZW4evGZ_JD_4~}_m%+F)4xU>JAPu}^;o!L7N-c^?#u2TeD~9L7mSaO zZ#=&3_!bjxoiK62$_Woo*f3$!gy$!`H=$_asS^_uZ<#n^;{1uPPTV`O{GP4%RNZrd zJ=Q*KTdBdRbn2B<)6SoE>9kJMhE5wd?cQmVr!AQF#IzTty*tgDmN)&$`(L@g z_l)Sw7BkP7b@i<4XWcYw?W|X3{WR;hS)tjrW?wM7)|>`&y383qXWpEb=j@#G*_;D& z{+<(=TQc{Wxwp*iJ9om|N9XRG`_bHA<{qDW*1Q(;+Rqy?Z_2z`^S+w*_q^KkFP`6L z{>b^$=07(7<@sOFKQcdmLGuMqFW9r7=E55nPFeWg!ov$=i{guVEJ`h!w&>SIr!Ov9 z++cB&#eEjfSiE8J(Z#JE=<&dc2cCQ2-~)A+v|7?-$($u0E%|oI?@Pit#1A`*K;miC>wfv41_pg}0V)=?KD?VCrbj9rt zu6ppMhsHiMZFuDP<`%JC~7UHQt&uU7uHvSDS5$_14#RlZSqu=4a(tyYz; z>aeP8)reJht-5#Bo>f(=j;uOqb*I&@uWq#F$~8BynYw1?n)z$iu6cdUM{9mvb97C3 zZLPH}*7jSwa_zRYyVmYsyXoPr55M#9o`*-TpS6C``W5Rd*FU@d<@Il@e`me%=uMB_ z`Dn$XiymF~=nao;d+eeOoi}vfklHYN!@>>EZg_3OTO0On_+~@DjYBs+u<^@{zizzf zN$bh)pZx2|=u^#~$~^V=Q{hcDHr=>s_@)V)R&2^_YPNaj<|CUkPcM7!l;=l2|Mv42 zY+117=`G)EIrD`UFSLE3{|ojDQ(jo{!loBKdg1FATE2Mai&I`)_~Q9e3L#cc#@}j_ zH3a@*o(PGPMHs)JJV%@^a>bbO8^n0gLD-_Bm@GQsM-p$wpDMjYEECOM39uh0@;|Qz8uVS6}O*|rwi1p$xEcv*2 zOi1~J2+Jq&SoKqQbb6DB$jx|k_G$4S`K+iVpA#kWdC^q9BrcUN<59qEqEx;n+Q`?% zwek(oLB1_+l)FSn`GL4eeki)gk41O+iRd9e6}{wVc$93n=p#QDmfR!C(Mhuldied7w7$JWZqvUU*T>dV`$UnrL@=q~V9u?!{adD3n@?I&WEyFS;^W=T9 zNLI)ia+0hmr^u7#RC%WSuRKf6lK+u&WGy*Yo-G&1+H#>hM=p|e&wUF`ErA7AfJ*K$W5}Ld|F;8pOF{IXJupgoV-{*FPq3MvZ;JQHj^*P zOXN%P3b|Fbl&{JwWNZN_}r z%UCFr#v)l}ERp?<<#K>gDF+#=}^kW22mGJSnFbPsv5b zCRu50maC1Y<+H{!@+IRr`G)a=e9PD>cN(wCca7KN2gd92L*otkiLqUJ#+!1Vu|w`R z-j-h*@5)2Q`|_Cafy@hiB%`5^Wi0fmtP%Q5o*DW={wL(gTA?a=PUtInUTB}J7uqk+ z4}C2ghQ5=HLO;lhLWgAY(9iPH&@VC>`c?J~{U-Z|j>;jSObVT3%nqGmEC|&y7KhF;mWJZS%FqQyW#~dR|j3y3zPC)Y14Ubdzx?)YJGQG{`s-8e%jG4>c|d4>y{G%Z)3;qm8S>cN%8+ zE~8EOZlhgzywM>%(YPs`GJ1!n7*=?y(JwsB7!aOr3<}?G3<>|&7#5ysj0mTVG2xZQ z*zhW2TzIuHKD^GD7=FaKH@x0Rg&#L6!p|C$!_OI0!_OPj!!H{%!mcqhyxo``e#@8> z-f1idzi%uK?=qH#KQJB)?>5rm14d=|ps_amld&#*$XFl#*?250MBEf&U#<{)TjKAu z!=Y&B=KW*$gb+8P{Vg1OLVx4dLOhLj^AmZyUVMzH}7ajrINSCHNU4cpuv8b+3g#L%m&YyEd3k z_y14xc@xuLo&V4LB29(36>Z%=7xU|lw(j58E?Djla2NWILbZH7-pSVs@hSSxhI`=~ zg;*b07j3ov4WU}^2~ZRSc82lxLI3$sy}xSw{pjC~_D@hRN6$|$U%y`c`t^G2*I#`; z@`hl2_3O~DOV3Zg4!t}*zFw|+eg7%^XZ`f+(d(&RS5pjs70c-Wx6|rv{d$LYz`h&# z=k@FMX!NV?bT?G5{~UNf#%sWKVMifWqJ0`v+e^={`gl7yT>V``HQq;1&G&zL-TL)b z-+rAs3Gq3Wdn--SLG%uK551pOfBkAZ{et;iadWUBodU`#c zIOw|YN$p5y8Fw_VrZ{nqb$XSS;^N6)wV@>XGdb$-yVLoZJqZ$=TeOE>)eT&R9` zX%W<~U+=H8(XaON#qd-NSLgNGu-UCbtblLA#x;cK3Dt2ji2hsu)7^vpU$5_X+`rUv zw_-l~FkHP)THXJ6k6=38|1{e#LG}7}v90I(8QN+-9{ayxd)UQ79K>>tqJ0d0(=!FJ~r>5UUzodFUIJa*wTrY1K+G_h&LiPHsG9hMS{f0s{AHDu#(N@Ft z`1<{y!ttuVpL+XOe_#IXeb(=fejoJv_HXaMexLOFzoh|s`b{d`w_I&dcOpJ z#PIF#SNIt`4!?!!eVs8N7;gzw@29>m(EEq_os}(572*+?fa>~nEqoU34p99r%g%5+ zRLj%X1$}-QgZ-vEhJT9TW$;Umr}pEqXtx*`OxK!rgla#_9~8Vl>hGSa_vv)1u5YSc zo9%OH19~xSL9e7YP<@>*(`_CvXAZ_|!TRXquLNy%T6^+oT8FJrpBn2$O> z-aifV91^@fz5lcw8mzzG-#Vf_>vSQqP@SiAzaC!?*VDy@3Go`nzY~4|Cs5t5k3;PZ z|G|5W@wC;a)8m~w9DfJ-4E&xtx^M*k9x~ec`1u&`quRetxg%Krv*;{%`kA=D7=`mZ ztOwP3=CP4@uhBkymJko%-=fh%JP4nJt6&b+>l*x=6Hsgc!nL=NIk7ByFCIrL(z_Fm#TW>#g zT-=X&|28q0@7?zV=QVwt>htJy^sDWvx1S!a)}y%gKigX^uPxeoyz1LuFIVrEdOUqy zx%|H1yxbm6#(ebkOsQU<-cR)Yq4yuX-yFbn>b$J3pXxlJx7R`RtM~JF_$=o8Z~b~Y zJ)c`91@pUNa zX;W%aJ>Oqv2IJ}Z>-kk*PWAa7#dPX@((~8Luf800KlBvVv(Btw{6Fe&{!NK)Jx7GFNl{oInu>Y&&>h1jc93f6B#&uynj`wr%`{@_p zcrU?rT^M}sJq*?O$7y7d5YJ)w_l0saCfVfku1_C#BaKLGxT{-MyQ3)OxLmvi{|Wx@KX_1T90mdk_pzcsy?R=-Z4 z@gP3G)%*W{-KdB0TVec5VJU12)%qRAbwgc$EVSF9|NmW|rorcHwI8YFT)z^p^L!z0 zrg}e9`@@gu?}7ebp}zmt_vNqRy{c@0?OKW783O;O>zlp~#?9dU`nT()9Uh!j zLFaP6(ARyvpXmD;eSXv1Q{V6E`zw8aT>ZXT-yiGi_H(O(`(u5-t**oWz2KkwWxamd zb5`RTjp6F^rBZ#~R_gs)-EVw~wz>~ds{0V7y5CUh`RMxz^}gKK5XURF(=4d&L)3mZ zZcX6j*bmkI-h|$Re$_r7>-iDJzoi$hM^G=nC)#R%IKCG5TNnPL`uwZ5uY-Gxf#_G~ z={sTd`>z`x4z3^F;baW2e*9P8FE(SmuP|Qq`K#BZ)>GgAj(;RruL?So>h)fzJGj;Cl797{ZptNEUcw%WdDLp|LSc-`v#dY-;Y_2<@=Y^(2y>SH>! z-<|mS-^1`m=-&g?_ayu2A$kqAv+CFHoBn>}PY!Rv;U%iAXPH|YBneLU*ze<7w*`;DHze!ukhNc#QO?~8t)^!Y}A-qYJ# zzt4LAsJ>t5{iXVKSHC~%ee8zqTeUHGpMHXB{q%WC&HsOQUe()MpFgXAZ#BQZ5bt5W z`g~CR`-Fe%fA~p!7RNbV57$Un`re`6)4~2bj{cV}qk4a? zzMrn*aQ!|!#rDheHL9;KYQI$9$LRf7?{E6^rTRXjVKX80{;2j(_5DZn&!hVMt+(rm z+kG;o*V|pq?`5?0_S4^+==HhgS$yYo3BE5J7;IPl{lQJ>SLciB>sft0^n9Pj{-X9* z-PSgEPKXrdudXlZ^S!#RsQ;gE(63bMuT;a8>iVNp*BhnYPc~zG^*KR%V*hc>U$>8O zJbirX_2~M1uzq?xy}k5yQlGEXb{nuIxE|gC)$-JOs_UfszF^{|*iSO}9M(dJ5m23< z^!E@IXshj|zQ zeLt`X<2{ez`o2J45A^pS`gnW^%^k zeVPH)_cB|d`ab3_sJ^e!`uwES!}5N{ecOjnf1mXwUZ2`7`g@ogFrK=P z(f3{Ydmi<@ruyDxi1RO4_CjhR@eFc7;naF z!TRX!rmv%m(Z9K6u>H3{eLdCZXLX)eev`hq z$hrF8uj6_>_4!U;&-C%5UZh;v?t=9J-?m16f{$aG$dLM&&{q*|l<-{>e zolmM?Z`6Kr(>1~O<4QfA{(fKYC+c^is{MKt9ZVeK1hQ~mubc`LXsTtJ&qy?yk3 zhJJnD?F`oYFg@{egIXVTo>c1lk-0p6^4<>i%NSML?RUJsGtfQ;&xawLJM{gGzHian zOW*&@#I;`CuTOm^IDgKE>iARt4^ihj9KV>4@=f%s?dyNffwtZr>hqlHSJSEgmzec# z(AL}aVYc<>+b7UgpLbt{YB_5EXpi}+`SyX=y%$XXZ_}yQp_ZpVM=r(q>bzgJ3;P+i zfgb)p&1Vh9Z-DW0J_zPl2s@#zzaP}E?+WzahyLn5`eCr#zHI~5`l|I%uTy=_SFca0 zUa$K6ueOhB>-)ay{|~?Ri(vZa=??lO{gH^C-9_|fYS9sN z23<|J)BJ2O{k3!fT}55Gj~0Cyj9;H#LkH9Q>3aGi{el)%1=F{tx6>(fEzQ!S^rWwX z=`N)=)4udB`UHKK{zy;X7fi4BcfEiAg#HFM;JOBz!MGXhH!tlE_G3MsK7Rghj)SF` zZ|>JZJk#Ny=Nt6rPSxM0BmSTJK(O4pv>9zn$IvNI{Xe2Qj*nwHJ)dshVxPb1f1Z!} zzDqqHazDmbE}*Lab4-8Z54eWHflwXC)t7rO`_=hFEq^}R-(vhnpnCq{RklB4yZZXo z$34L>YW@Y%{~omxs_%b$^ZTmTvE9}GPYgO$iUB=^2;==23JajR-&fM_W z4h|Im|LgFZt_j-ubuVW7f43b^++J#Z^!8EPVf%H#eDrj0qpgPP z?XKSkJ)PeEYPfnGx?fFy;`^yzw;Er~Z^^OX^?&?oFx{Yz|Lbzq`>VzqhJH04t5Yz1 z2vp0d{{H-bxAVmlxrR7NY(yG(mNbNHBXW@KL>}@6Ji=q(iO`6^Qji9o0*xV)q6Ts> zo?A8WEa)j1IuvP$Vd6C8aB&9mc09pqh!J>x)ev{!=~Y9F#Ph2L{>WG{vK&vg8e%k_ zWHrPXQ6G6Ho?e_o=1=do^Q{=tkp`aZU4mLjm4;k~9*LBA(su>w z5K@X<`4H+Hq!jrwjXKZI0$GWkLO-K&HTold#^hS`7x{UTT!;P|NQtL~*P}ku&)V`a z)aS^@(O)b#qK+dao+5q<^|?riU%ET2K$1< zybaGE8=@yt;+f(M>fT5xl5#6*3yE_ko=-MJU!)ZM@r<&8CyrGPlH1WU7>OfG?m#`% z&*5?>dWQKqO1^{sawLu*`5x*qevZZS%{Y#bQjEtl&Nz0E62Fe_W7HG;yhnbDo_mov zYVgc6jv7BJ@Z2+w9i$YK@%%H69i$XfWft`mB#sVQg?g5sbL2ks%=L4={2Kl9{9GUp zpnsvCi{*FdUxdUlA`hZ|z|W<4o?41!em*1*q5nao6lpwTZ3qV`#VR~&ZHP)gU&Hg( zQoN2d#2fMm>g|5+z_Zr|e(8+Lx8yPOzl|rc4Y3m`#rt>~+Ys*|rT9SN(Omr66_p># z9Q1tT=O=hl+Ylf7`Kc^G|7S=;?3EFuCu7Jgp5ivdmw1jFKYc7uL4GAqL++DjAot^$ zZbN*HC%SP2;dyRD9Kh4uIF9fYmY=nZYtjE7q!hJ{cBs!rN>SHnkNP~M6!nb`sO$N8zR?kN z1EUl20;4mAHuSTR(G@)xBBf|-bVGd+62I%r=#IK6Qi|qAPt=znrMTSah59l-uQ2+c zrzO%5R~kvwt^B;&C_~RxNc`?9qd)4_ezw8$=n_A;sq$JplWyRLHdS6{3`MrX6Y7Sz z-WY+QHy9&PxA(JyQI4J){TyeELH}KT-ffIU|9B*h3u7GWiGJRTC)#mkLE^YDCZe|e zybn*eDL%$i@rL-w&ni3_FU40#>|=OBUW)yGeq$^~&)0q)z!UR0OB>73^DR<} zAB+{K4LMie=$VAXT?Bqw0CyCA&csg)NHNRLIrymoL(KNG zGIRj_tNeTvKS_XVJyMD-p@XQO_w$9&kLY>P&zJF228MVEDaF>%Vbrf6rPzj_I55Pk ze!dp^9X+ojaSjX}LA}Gzo%m@4oDY#wyc0Tx`fVhB^BaCb!4U5wvG0YXfql= zickIAjh|jH#Akkf9?C=i9zXZtrx|eGLrU>=D1v&wpWlRH=sDo$ccB{S{}w65!B9=q z-y@~?89(`evz(v5hE7BMd*}@G|KaDKp|j9)#LuJn`3UTFNbGf?+Nl5bQ-tfF=Xj_N zdW>)}YUyVvT!NmkpSj_>=+E&pFI*q}`F<9L8=$`ciTy3y5Ou`QShx{-iu^n&+!*~e zkW!o+Zi2cdQi@Z<%}}4>=NaMV=s6Qdijf{sA$l`D* z^4xG+j=U(`6WKW2 z3wd$453)%(iEJ7!LpBTdM_v*hh;?i3XN&M)^jzxaW%#)doE7ntA2=U|M<8zqk3@FB z&w&`?#_$+q$M9I>P2q9KPWV|6-0kD1K@8D3d@r&~IEB0=T!HKso{TIDPsOtOAq}B^ zMnsB%NZhxCXP_SJ=TQ8-2<~3|91)(4{yUJk{}0baJ<89~;rZw(M@n&Lcp>UBNE~b7 z#i+;nIWD{eJ$EB<9u6-k+fO{>Ux41CcN04o1F|I~4g!?r@B` z6^Y|6cLZ`r?nva$+;ZeQxnq#;<&H(}${mONFn2uiquhy@>SLrKKFPfo^{0OB&P}1` zGbFA=xfQ5C_w$R~$*BLzor?ZrNJB*PrlXD_ac`VA19c4~?kMtRqOOU=9Yx-3)TbbE zN0B!d^=U}lA?M9UeFhSr4f7VFJ`0IEx^Eaz3CuJ31qyw&Krz|RZw)}p_mpN;a?q5mQz&h~lhQD2P2 z**@r4svSVdl)*+&joqA&@%*!Hw$*V$t)BJs?n;@mQB>!vF&HQYhe*is~ z`gvLYcj#~7XRG{!=)VeS;HTq$L~SB*mdHPZy0xEe@(-h@)X%p0zoP#dq#>@&{~h&p zNPO**iZE*(bjsjBSp@ zIUzrS`mX#K>al*N@@t@;lwTA5lacr&o_`AJsYslq^G`!P9f`9<{u!ueA#u-{e-`RF zNJGrcuZ4OZ65Bk#HtGdPLoCd%gL)AX=l1+!)DIvHu_V6)^-?6x_W5;DFGu1X$*+(4 zK_t%h`3+DzNW3rk4N*NL-8aTcO^E#I-p8YSdpNarc;?K>a5YpIq`wQU8U+ zd7z*z>KaHKvjx|puH$EMK|A!sk@&W!pgrny{XDOr1A6NES-+qo`s?|5enBVnH$dVZ zte`WpNkLciG(}=hE9i#$5#IbA=US~15w}XXP1J(=;?~Y{aC?J)ZP5-UN9UzxBA(mUHdjvv)x``uia9?Nh-RWU^o^dio-9pH?sqIjmqja(KZ+QPAC zEfiEB?=F~(tSFd@{z*vOGZaimJq3v)yM;-f;8$KNPG?|s6@RJiF>?))u`V=8sgo8wW!}i;&V{JI@BK`aV08PkNRUIu0#co zq5c$!Yf!=CsCWDMW5GuB{NU$L1y7;>5YiBT7HmcyEqDg`SHW}0V+C7~e;2%nJYMiJ z#uSAwqn3pk)Om$lQRn)ZU$_lD1xW0-g|DNofyDKza69UnNbJLfJ5bj_;!{K6PSh75 zaRn)S2la(W+{G2XhrF+F7qX)8L*%5wkCBrLKSfR{+>J4(B60R8+=F^L5=VXEUersG zIO+?t$kz+2(DMcocguzQP`~Nt&cd(J^Om1)7al$V_kiejY5$LC^Po{!o~Q{vVOJ3oR@_eF%xW z(837n!${nv7sgQkhQw#p!WyXmK;k@8SQGW1NW9C1r=b4J&%X;#L(efkj~AYSei1nX zJu-3@Y6FS;{75a-VI)4KMrxzZMdBNhNFCJqNPJ3-6r(Og;!|p*1a%aNZ%86_Q5PZc zDK%0b^+`y4N{uu?eKHcCQX>sfpNho2N~96$+DPm(k;bU&AaTZvG(laA#2GKr40Va0 zbtBEua~=}k`$bxyuIK0Zk;~E3z|V$}mgv90&kG~1(BBA&Pa=`4Q8z~7+!#rqZi2+; z(?}`mW_~u0v_;P)eqI{67IlkAI}E)HX^1N#?NPTx;=Vo70d*@Rz5|SOM13{V5N4zk z>V%)Ak(NpGU|Hv5h4?r4XU}P-nK}h`1T4WsRAxHy1Jw6`w zFeJ{*k%_2BAn|`{k$X{(MB;NqB!#*hiT@FZRG=P%#Qz0ECZisU#Qj)gD(Z1aoWmp2 zQIALB`_IS>)Dw~T<})%A^}R@ZDvZoVokHT%L}V`N#YlXIADNGO2@;>dBMVV4L*o7| zvKaLWq#+)SEJ6Jk5@+eiGUO|f73kUO=eEd0=y}!8HzH}&+ar}2`X&;e7b2@szlFr7 zhR9mfZzFNWj;up|5Lu7>F!C7sKSJWH5_uf;CrF%0A{$YEj>I`6@)YVXkT{1#Hly~C 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%0A{Sw@xYQGG3bnRE*9$kA9+|Sg04eprQ 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�mYG1zW~*2H$u=7VUaY^xw`XZ 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 F{}201PW=D? literal 0 HcmV?d00001 diff --git a/NzbDrone.Web/Libraries/Telerik.Web.Mvc.xml b/NzbDrone.Web/Libraries/Telerik.Web.Mvc.xml new file mode 100644 index 000000000..9b98ad49b --- /dev/null +++ b/NzbDrone.Web/Libraries/Telerik.Web.Mvc.xml @@ -0,0 +1,14017 @@ + + + + Telerik.Web.Mvc + + + + + Contains extension methods of . + + + + + Get the Application root path. + + The instance. + + + + + Determines whether this instance can compress the specified instance. + + The instance. + + true if this instance can compress the specified instance; otherwise, false. + + + + + + + + + + + + + + + + + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Bold. + + + + + Looks up a localized string similar to Insert hyperlink. + + + + + Looks up a localized string similar to Select font family. + + + + + Looks up a localized string similar to Select font size. + + + + + Looks up a localized string similar to Select block type. + + + + + Looks up a localized string similar to Indent. + + + + + Looks up a localized string similar to Insert HTML. + + + + + Looks up a localized string similar to Insert image. + + + + + Looks up a localized string similar to Insert ordered list. + + + + + Looks up a localized string similar to Insert unordered list. + + + + + Looks up a localized string similar to Italic. + + + + + Looks up a localized string similar to Center text. + + + + + Looks up a localized string similar to Justify. + + + + + Looks up a localized string similar to Align text left. + + + + + Looks up a localized string similar to Align text right. + + + + + Looks up a localized string similar to Outdent. + + + + + Looks up a localized string similar to Strikethrough. + + + + + Looks up a localized string similar to Styles. + + + + + Looks up a localized string similar to Underline. + + + + + Looks up a localized string similar to Remove hyperlink. + + + + + View component base class. + + + + + Defines the basic building block of scriptable component. + + + + + Writes the initialization script. + + The writer. + + + + Writes the cleanup script. + + The writer. + + + + Gets or sets the asset key. + + The asset key. + + + + Gets or sets the script files path. Path must be a virtual path. + + The script files path. + + + + Gets or sets the script file names. + + The script file names. + + + + Gets the client side object writer factory. + + The client side object writer factory. + + + + Defines whether one navigation item can have content output immediately + + + + + The HtmlAttributes applied to objects which can have child items + + + + + Initializes a new instance of the class. + + The view context. + The client side object writer factory. + + + + Renders the component. + + + + + Writes the initialization script. + + The writer. + + + + Writes the cleanup script. + + The writer. + + + + Ensures the required settings. + + + + + Writes the HTML. + + + + + Gets or sets the name. + + The name. + + + + Gets the id. + + The id. + + + + Gets the HTML attributes. + + The HTML attributes. + + + + Gets or sets the asset key. + + The asset key. + + + + Gets or sets the script files path. Path must be a virtual path. + + The script files path. + + + + Gets or sets the script file names. + + The script file names. + + + + Gets the client side object writer factory. + + The client side object writer factory. + + + + Gets or sets the view context to rendering a view. + + The view context. + + + + Defines the fluent interface for configuring the component. + + + + + View component Builder base class. + + + + + Helper interface used to hide the base + members from the fluent API to make it much cleaner + in Visual Studio intellisense. + + + + + Equalses the specified value. + + The value. + + + + + Gets the hash code. + + + + + + Gets the type. + + + + + + Toes the string. + + + + + + Initializes a new instance of the class. + + The component. + + + + Performs an implicit conversion from to TViewComponent. + + The builder. + The result of the conversion. + + + + Returns the internal view component. + + + + + + Sets the name of the component. + + The name. + + + + + Sets the web asset key for the component. + + The key. + + + + + Sets the Scripts files path.. Path must be a virtual path. + + The path. + + + + + Sets the Script file names. + + The names. + + + + + Sets the HTML attributes. + + The HTML attributes. + + + + + Renders the component. + + + + + Gets the view component. + + The component. + + + + Initializes a new instance of the class. + + The component. + + + + Use it to enable filling the first matched item text. + + + + <%= Html.Telerik().AutoComplete() + .Name("AutoComplete") + .AutoFill(true) + %> + + + + + + + Use it to configure Data binding. + + Action that configures the data binding options. + + + <%= Html.Telerik().AutoComplete() + .Name("AutoComplete") + .DataBinding(dataBinding => dataBinding + .Ajax().Select("_AjaxLoading", "ComboBox") + ); + %> + + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => + events.OnLoad("onLoad") + ) + %> + + + + + + Configures the effects of the AutoComplete. + + The action which configures the effects. + + + <%= Html.Telerik().AutoComplete() + .Name("AutoComplete") + .Effects(fx => + { + fx.Slide() + .OpenDuration(AnimationDuration.Normal) + .CloseDuration(AnimationDuration.Normal); + }) + + + + + + Use it to configure filtering settings. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .Filterable(filtering => filtering.Enabled(true) + .FilterMode(AutoCompleteFilterMode.Contains)); + %> + + + + + + Use it to enable multiple values. + + + + <%= Html.Telerik().AutoComplete() + .Name("AutoComplete") + .Multiple(); + %> + + + + + + Use it to configure autocompleting multiple values. + + + + <%= Html.Telerik().AutoComplete() + .Name("AutoComplete") + .Multiple(multi => multi.Enabled(true) + .Separator(" ")); + %> + + + + + + Use it to enable highlighting of first matched item. + + + + <%= Html.Telerik().AutoComplete() + .Name("AutoComplete") + .HighlightFirstMatch(true) + %> + + + + + + Defines the fluent interface for building + + + + + Initializes a new instance of the class. + + The settings. + + + + Enable or disable autocompleting multiple values into a single field + + + + <%= Html.Telerik().AutoComplete() + .Name("AutoComplete") + .Multiple(multi => + { + multi.Enabled((bool)ViewData["multiple"]); + }) + %> + + + + + + Set multiple values separator. + + + + <%= Html.Telerik().AutoComplete() + .Name("AutoComplete") + .Multiple(multi => + { + multi.Separator(", "); + }) + %> + + + + + + Gets the items of the ComboBox. + + + + + Defines the fluent interface for building + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables filtering. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .Filterable(filtering => + { + filtering.Enabled((bool)ViewData["filtering"]); + }) + %> + + + + The Enabled method is useful when you need to enable/disable filtering based on certain conditions. + + + + + Defines filter mode. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .Filterable(filtering => + { + filtering.FilterMode(AutoCompleteFilterMode.StartsWith); + }) + %> + + + + + + Set minimum chars number needed to start filtering. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .Filterable(filtering => + { + filtering.MinimumChars(2); + }) + %> + + + + + + Defines the fluent interface for configuring the component. + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => + events.OnLoad("onLoad") + ) + %> + + + + + + Configures the effects of the dropdownlist. + + The action which configures the effects. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .Effects(fx => + { + fx.Slide() + .OpenDuration(AnimationDuration.Normal) + .CloseDuration(AnimationDuration.Normal); + }) + + + + + + Defines the items in the DropDownList + + The add action. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + %> + + + + + + + + Initializes a new instance of the class. + + The component. + + + + Use it to enable filtering of items. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .Filterable(); + %> + + + + + + Use it to configure filtering settings. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .Filterable(filtering => filtering.Enabled(true) + .FilterMode(AutoCompleteFilterMode.Contains)); + %> + + + + + + Use it to enable filling the first matched item text. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .AutoFill(true) + %> + + + + + + Use it to configure Data binding. + + Action that configures the data binding options. + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .DataBinding(dataBinding => dataBinding + .Ajax().Select("_AjaxLoading", "ComboBox") + ); + %> + + + + + + Use it to enable highlighting of first matched item. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .HighlightFirstMatch(true) + %> + + + + + + Use it to set selected item index + + Item index. + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .SelectedIndex(0); + %> + + + + + + Defines the fluent interface for building + + + + + Defines the fluent interface for building + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables binding. + + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home").Enabled((bool)ViewData["ajax"]); + }) + %> + + + + The Enabled method is useful when you need to enable binding based on certain conditions. + + + + + Sets the action, controller and route values for the select operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for the select operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home", new { {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for the select operation + + Name of the action. + Name of the controller. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home"); + }) + %> + + + + + + Sets the route and values for the select operation + + Name of the route. + The route values. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the route and values for the select operation + + Name of the route. + The route values. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default", new {id=1}); + }) + %> + + + + + + Sets the route name for the select operation + + Name of the route. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default"); + }) + %> + + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables cache of items. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home").Cache((bool)ViewData["cache"]); + }) + %> + + + + The Cache method is useful when you need to enable/disable caching based on certain conditions. + Default value is true. + + + + + Specifies delay of the Ajax/WebServer request. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home").Delay(400); + }) + %> + + + + The Delay method is useful when you need to postpone request to the server for some time. + + + + + Defines the fluent interface for building + + + + + Initializes a new instance of the class. + + The settings. + + + + Defines filter mode. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .Filterable(filtering => + { + filtering.FilterMode(AutoCompleteFilterMode.StartsWith); + }) + %> + + + + + + Set minimum chars number needed to start filtering. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .Filterable(filtering => + { + filtering.MinimumChars(2); + }) + %> + + + + + + Defines the fluent interface for configuring the data binding. + + + + + Initializes a new instance of the class. + + The configuration. + + + + Use it to configure Ajax binding. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .DataBinding(dataBinding => dataBinding + .Ajax().Select("_AjaxLoading", "TreeView") + ) + %> + + + + + + Use it to configure web service binding. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .DataBinding(dataBinding => dataBinding + .WebService().Select("~/Models/ProductDDI.asmx/GetProducts") + ) + %> + + + + + + Defines the fluent interface for building + + + + + Defines the fluent interface for configuring the treeview webservice. + + + + + Initializes a new instance of the class. + + The settings. + + + + Specify the web service url for loading data + + The web service url + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => dataBinding + .WebService().Select("~/Models/ProductDDI.asmx/GetProducts") + ) + %> + + + + + + Enables / disables web service functionality. + + Whether to enable or to disable the web service. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => dataBinding + .Ajax().Enabled(true).Select("_AjaxLoading", "DropDownList") + ) + %> + + + + The Enabled method is useful when you need to enable ajax based on certain conditions. + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables cache of items. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .DataBinding(dataBinding => + { + dataBinding.WebService().Select("~/Models/Product.asmx/GetProducts").Cache((bool)ViewData["cache"]); + }) + %> + + + + The Cache method is useful when you need to enable/disable caching based on certain conditions. + Default value is true. + + + + + Specifies delay of the Ajax/WebServer request. + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .DataBinding(dataBinding => + { + dataBinding.WebService().Select("~/Models/Product.asmx/GetProducts").Delay(400); + }) + %> + + + + The Delay method is useful when you need to postpone request to the server for some time. + + + + + Defines the fluent interface for building + + + + + Initializes a new instance of the class. + + The settings. + + + + Defines the fluent interface for configuring the treeview webservice. + + + + + Initializes a new instance of the class. + + The settings. + + + + Represent item in the DropDownList/ComboBox items. + + + + + Gets the items of the treeview. + + + + + Use it to set selected item index + + Item index. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .SelectedIndex(0); + %> + + + + + + Use it to configure Data binding. + + Action that configures the data binding options. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => dataBinding + .Ajax().Select("_AjaxLoading", "DropDownList") + ); + %> + + + + + + Initializes a new instance of the class. + + The client events. + The view context. + + + + Defines the inline handler of the OnLoad client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnLoad client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + Defines the inline handler of the OnChange client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnChange(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnChange client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnChange("onChange")) + %> + + + + + + Defines the inline handler of the OnOpen client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnOpen(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnOpen client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnOpen("onOpen")) + %> + + + + + + Defines the inline handler of the OnClose client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnClose(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnClose client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnClose("onClose")) + %> + + + + + + Defines the inline handler of the OnDataBinding client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnDataBinding(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnDataBinding client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnDataBinding("OnDataBinding")) + %> + + + + + + Defines the inline handler of the OnDataBound client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnDataBound(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnDataBound client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnDataBound("onDataBound")) + %> + + + + + + Defines the inline handler of the OnError client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnError(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnError client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .ClientEvents(events => events.OnError("onError")) + %> + + + + + + Defines the fluent interface for configuring the data binding. + + + + + Initializes a new instance of the class. + + The configuration. + + + + Use it to configure Ajax binding. + + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => dataBinding + .Ajax().Select("_AjaxLoading", "TreeView") + ) + %> + + + + + + Use it to configure web service binding. + + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .DataBinding(dataBinding => dataBinding + .WebService().Select("~/Models/ProductDDI.asmx/GetProducts") + ) + %> + + + + + + Defines the fluent interface for configuring child DropDonwList items. + + + + + Initializes a new instance of the class. + + The item. + + + + Sets the value for the item. + + The value. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .Items(items => items.Add().Text("First item.")) + %> + + + + + + Sets the value for the item. + + The value. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .Items(items => items.Add().Value("1")) + %> + + + + + + Define when the item will be expanded on intial render. + + If true the item will be selected. + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .Items(items => + { + items.Add().Text("First Item").Selected(true); + }) + %> + + + + + + Creates items for the . + + + + + Initializes a new instance of the class. + + The settings. + + + + Defines a item. + + + + + + Defines an interface that supports navigation. + + + + + Gets or sets the name of the route. + + The name of the route. + + + + Gets or sets the name of the controller. + + The name of the controller. + + + + Gets or sets the name of the action. + + The name of the action. + + + + Gets the route values. + + The route values. + + + + Gets or sets the URL. + + The URL. + + + + Sets the HTML content that will show initially in the editor. + + The action which renders the HTML content. + + <% Html.Telerik().Editor() + .Name("Editor") + .Value(() => { %> + <blockquote> + According to Deep Thought, the answer to the ultimate question of + life, the universe and everything is <strong>42</strong>. + </blockquote> + <% }) + .Render(); + %> + + + + + Sets the HTML content which the item should display as a string. + + An HTML string. + + <%= Html.Telerik().Editor() + .Name("Editor") + .Value("<blockquote>A towel has <strong>immense</strong> psychological value</blockquote>") + %> + + + + + Encode HTML content. + + + <%= Html.Telerik().Editor() + .Name("Editor") + .Value("<blockquote>A towel has <strong>immense</strong> psychological value</blockquote>") + .Encode(true) + %> + + + + + Sets the localization culture of the editor. + + The culture. + + + <%= Html.Telerik().Editor() + .Name("Editor") + .Value("<blockquote>A towel has <strong>immense</strong> psychological value</blockquote>") + .Localizable("de-DE") + %> + + + + + + Enables toggle animation. + + + + + Enables opacity animation. + + + + + Enables opacity animation. + + Builder, which sets different opacity properties. + + + + Enables expand animation. + + + + + Enables expand animation. + + Builder, which sets different expand properties. + + + + Enables slide animation. + + + + + Enables slide animation. + + Builder, which sets different slide properties. + + + + Defines the fluent interface for configuring grid editing. + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables grid editing. + + + + <%= Html.Telerik().Grid<Order>() + .Name("Orders") + .Editable(settings => settings.Enabled(true)) + %> + + + + The Enabled method is useful when you need to enable grid editing on certain conditions. + + + + + Enables or disables delete confirmation. + + + + <%= Html.Telerik().Grid<Order>() + .Name("Orders") + .Editable(settings => settings.DisplayDeleteConfirmation(true)) + %> + + + + The Enabled method is useful when you need to enable grid editing on certain conditions. + + + + + Defines the fluent interface for configuring template columns + + + + + Defines the fluent interface for configuring columns. + + + The type of the column builder. + + + + Initializes a new instance of the class. + + The column. + + + + Sets the title displayed in the header of the column. + + The text. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderID).Title("ID")) + %> + + + + + + Sets the HTML attributes applied to the header cell of the column. + + The attributes. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderID).HeaderHtmlAttributes(new {@class="order-header"})) + %> + + + + + + Sets the HTML attributes applied to the content cell of the column. + + The attributes. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderID).HtmlAttributes(new {@class="order-cell"})) + %> + + + + + + Sets the width of the column in pixels. + + The width in pixels. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderID).Width(100)) + %> + + + + + + Sets the width of the column. + + The width to set. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => + { + %> + <%= Html.ActionLink("Edit", "Home", new { id = o.OrderID}) %> + <% + }) + .Render(); + %> + + + + + + Makes the column visible or not. By default all columns are visible. Invisible columns are not rendered in the output HTML. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderID).Visible((bool)ViewData["visible"])) + %> + + + + + + Makes the column hidden or not. By default all columns are not hidden. Hidden columns are rendered in the output HTML but are hidden. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderID).Hidden((bool)ViewData["hidden"])) + %> + + + + + + Hides a column. By default all columns are not hidden. Hidden columns are rendered in the output HTML but are hidden. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderID).Hidden()) + %> + + + + + + Gets or sets the column. + + The column. + + + + Sets the button type. + + The button type. + + + + + Sets the HTML attributes. + + The HTML attributes. + + + + + Sets the image HTML attributes. + + The Image HTML attributes. + + + + + Gets or sets a value indicating whether member access expression used + by this builder should be lifted to null. The default value is true; + + + true if member access should be lifted to null; otherwise, false. + + + + Provided expression should have string type + + + ArgumentException. + + + ArgumentException. + + + + Provided 's is not + + + + Provided type is not + + + + Provided 's is not + + + + + Provided 's is not + + + + + + + + ArgumentException. + + + did not implement . + + + + Invalid name for property or field; or indexer with the specified arguments. + + + + InvalidOperationException. + + + InvalidCastException. + + + + Holds extension methods for . + + + + + Child element with name specified by does not exists. + + + + + Represents a filtering descriptor which serves as a container for one or more child filtering descriptors. + + + + + Base class for all used for + handling the logic for property changed notifications. + + + + + Represents a filtering abstraction that knows how to create predicate filtering expression. + + + + + Creates a predicate filter expression used for collection filtering. + + The instance expression, which will be used for filtering. + A predicate filter expression. + + + + Creates a filter expression by delegating its creation to + , if + is , otherwise throws + + The instance expression, which will be used for filtering. + A predicate filter expression. + Parameter should be of type + + + + Creates a predicate filter expression used for collection filtering. + + The parameter expression, which will be used for filtering. + A predicate filter expression. + + + + Creates a predicate filter expression combining + expressions with . + + The parameter expression, which will be used for filtering. + A predicate filter expression. + + + + Gets or sets the logical operator used for composing of . + + The logical operator used for composition. + + + + Gets or sets the filter descriptors that will be used for composition. + + The filter descriptors used for composition. + + + + Logical operator used for filter descriptor composition. + + + + + Combines filters with logical AND. + + + + + Combines filters with logical OR. + + + + + The class enables implementation of custom filtering logic. + + + + + The method checks whether the passed parameter satisfies filter criteria. + + + + + Creates a predicate filter expression that calls . + + The parameter expression, which parameter + will be passed to method. + + + + If false will not execute. + + + + + Represents declarative filtering. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The member. + The filter operator. + The filter value. + + + + Creates a predicate filter expression. + + The parameter expression, which will be used for filtering. + A predicate filter expression. + + + + Determines whether the specified descriptor + is equal to the current one. + + The other filter descriptor. + + True if all members of the current descriptor are + equal to the ones of , otherwise false. + + + + + Determines whether the specified + is equal to the current descriptor. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current filter descriptor. + + + + + Gets or sets the member name which will be used for filtering. + + The member that will be used for filtering. + + + + Gets or sets the type of the member that is used for filtering. + Set this property if the member type cannot be resolved automatically. + Such cases are: items with ICustomTypeDescriptor, XmlNode or DataRow. + Changing this property did not raise + event. + + The type of the member used for filtering. + + + + Gets or sets the filter operator. + + The filter operator. + + + + Gets or sets the target filter value. + + The filter value. + + + + Represents collection of . + + + + + Operator used in + + + + + Left operand must be smaller than the right one. + + + + + Left operand must be smaller than or equal to the right one. + + + + + Left operand must be equal to the right one. + + + + + Left operand must be different from the right one. + + + + + Left operand must be larger than the right one. + + + + + Left operand must be larger than or equal to the right one. + + + + + Left operand must start with the right one. + + + + + Left operand must end with the right one. + + + + + Left operand must contain the right one. + + + + + Left operand must be contained in the right one. + + + + InvalidOperationException. + + + + Gets the key for this group. + + The key for this group. + + + + Gets the items in this groups. + + The items in this group. + + + + Gets a value indicating whether this instance has sub groups. + + + true if this instance has sub groups; otherwise, false. + + + + + Gets the count. + + The count. + + + + Gets the subgroups, if is true, otherwise empty collection. + + The subgroups. + + + + Gets a value indicating whether this instance has any sub groups. + + + true if this instance has sub groups; otherwise, false. + + + + + Gets the number of items in this group. + + The items count. + + + + Gets the subgroups, if is true, otherwise empty collection. + + The subgroups. + + + + Gets the items in this groups. + + The items in this group. + + + + Gets the key for this group. + + The key for this group. + + + + Gets the aggregate results generated for the given aggregate functions. + + The aggregate results for the provided aggregate functions. + functions is null. + + + + Gets or sets the aggregate functions projection for this group. + This projection is used to generate aggregate functions results for this group. + + The aggregate functions projection. + + + + Creates the aggregate expression that is used for constructing expression + tree that will calculate the aggregate result. + + The grouping expression. + + + + + Generates default name for this function using this type's name. + + + Function name generated with the following pattern: + {.}_{} + + + + + Gets or sets the informative message to display as an illustration of the aggregate function. + + The caption to display as an illustration of the aggregate function. + + + + Gets or sets the name of the aggregate function, which appears as a property of the group record on which records the function works. + + The name of the function as visible from the group record. + + + + Gets or sets a string that is used to format the result value. + + The format string. + + + + Represents a collection of items. + + + + + Gets the with the specified function name. + + + First with the specified function name + if any, otherwise null. + + + + + Initializes a new instance of the class. + + The value of the result. + The number of arguments used for the calculation of the result. + Function that generated the result. + function is null. + + + + Initializes a new instance of the class. + + that generated the result. + function is null. + + + + Initializes a new instance of the class. + + The value of the result. + that generated the result. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Called when a property has changed. + + Name of the property. + + + + Occurs when a property value changes. + + + + + Gets or sets the value of the result. + + The value of the result. + + + + Gets the formatted value of the result. + + The formatted value of the result. + + + + Gets or sets the number of arguments used for the calulation of the result. + + The number of arguments used for the calulation of the result. + + + + Gets or sets the text which serves as a caption for the result in a user interface.. + + The text which serves as a caption for the result in a user interface. + + + + Gets the name of the function. + + The name of the function. + + + + Gets the first which + is equal to . + + + The for the specified function if any, otherwise null. + + + + + Represents a function that returns the arithmetic mean of a set of arguments. + + + + + Represents an that uses aggregate extension + methods provided in using + as a member selector. + + + + + Base class for all aggregate functions that will use extension + methods in for aggregation. + + + + + Generates default name for this function using . + + + Function name generated with the following pattern: + {}_{} + + + + + Gets the name of the aggregate method on the + that will be used for aggregation. + + The name of the aggregate method that will be used. + + + + Gets the type of the extension methods that holds the extension methods for + aggregation. For example or . + + + The type of that holds the extension methods. The default value is . + + + + + Creates the aggregate expression using . + + The grouping expression. + + + + + Generates default name for this function using + and . + + + Function name generated with the following pattern: + {}{}_{} + + + + + Gets or sets the name of the field, of the item from the set of items, which value is used as the argument of the aggregate function. + + The name of the field to get the argument value from. + + + + Initializes a new instance of the class. + + + + + Gets the the Average method name. + + Average. + + + + Represents a function that returns the number of items in a set of items, including nested sets. + + + + + Represents an that uses aggregate extension + methods provided in . + + + + + Creates the aggregate expression using . + + The grouping expression. + + + + + Initializes a new instance of the class. + + + + + Gets the the Count method name. + + Count. + + + + Represents a function that returns the first item from a set of items. + + + + + Initializes a new instance of the class. + + + + + Gets the the First method name. + + First. + + + + Represents a function that returns the last item from a set of items. + + + + + Initializes a new instance of the class. + + + + + Gets the the Last method name. + + Last. + + + + Represents a function that returns the greatest item from a set of items. + + + + + Initializes a new instance of the class. + + + + + Gets the the Max method name. + + Max. + + + + Represents a function that returns the least item from a set of items. + + + + + Initializes a new instance of the class. + + + + + Gets the the Min method name. + + Min. + + + + Represents a function that returns the sum of all items from a set of items. + + + + + Initializes a new instance of the class. + + + + + Gets the the Min method name. + + Min. + + + + Represents grouping criteria. + + + + + Changes the to the next logical value. + + + + + Gets or sets the member name which will be used for sorting. + + The member that will be used for sorting. + + + + Gets or sets the type of the member that is used for grouping. + Set this property if the member type cannot be resolved automatically. + Such cases are: items with ICustomTypeDescriptor, XmlNode or DataRow. + Changing this property did not raise + event. + + The type of the member used for grouping. + + + + Gets or sets the content which will be used from UI. + + The content that will be used from UI. + + + + Gets or sets the sort direction for this sort descriptor. If the value is null + no sorting will be applied. + + The sort direction. The default value is null. + + + + Gets or sets the aggregate functions used when grouping is executed. + + The aggregate functions that will be used in grouping. + + + + Calculates unique int for given group in a group sequence, + taking into account groups order, each group key and groups' count. + + + + + Defines the fluent interface for configuring the component. + + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The component. + + + + Sets the initial value of the textbox. + + + + + Sets the step, used ti increment/decrement the value of the textbox. + + + + + Sets the minimal possible value allowed to the user. + + + + + Sets the maximal possible value allowed to the user. + + + + + Sets the group size of the number. + + + + + Sets the group separator of the number. + + + + + Sets the index of the negative pattern. + + + + + Sets the text which will be displayed if the textbox is empty. + + + + + Enables or disables the spin buttons. + + + + + + + Define the tooltip text of the up button. + + + + + Define the tooltip text of the down button. + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().NumericTextBox() + .Name("NumericTextBox") + .ClientEvents(events => + events.OnLoad("onLoad").OnChange("onChange") + ) + %> + + + + + + Sets the Input HTML attributes. + + The HTML attributes. + + + + + Defines the fluent interface for configuring the component. + + + + + + Defines the number of the decimal digits. + + + + + Sets the decimal separator. + + + + + Sets the index of the positive pattern. + + + + + Sets the percent symbol. + + + + + Defines the fluent interface for configuring the component. + + + + + + Defines the number of the decimal digits. + + + + + Sets the decimal separator. + + + + + Sets the index of the positive pattern. + + + + + Sets the currency symbol. + + + + + Represents declarative sorting. + + + + + Gets or sets the member name which will be used for sorting. + + The member that will be used for sorting. + + + + Gets or sets the sort direction for this sort descriptor. If the value is null + no sorting will be applied. + + The sort direction. The default value is null. + + + source is null. + + + + Resolves this instance. + + The type of the service. + + + + + Registers the specified service as singleton. + + The type of the service. + The service. + + + + + Registers the specified factory. + + The type of the service. + The factory. + + + + ReSharper disable UnusedParameter.Local + + + + Executes the provided delegate for each item. + + + The instance. + The action to be applied. + + + index is out of range. + + + first is null. + second is null. + resultSelector is null. + + + + Initializes a new instance of the class. + + The source. + + + + Sorts the elements of a sequence using the specified sort descriptors. + + A sequence of values to sort. + The sort descriptors used for sorting. + + An whose elements are sorted according to a . + + + + + Pages through the elements of a sequence until the specified + using . + + A sequence of values to page. + Index of the page. + Size of the page. + + An whose elements are at the specified . + + + + + Projects each element of a sequence into a new form. + + + An whose elements are the result of invoking a + projection selector on each element of . + + A sequence of values to project. + A projection function to apply to each element. + + + + Groups the elements of a sequence according to a specified key selector function. + + An whose elements to group. + A function to extract the key for each element. + + An with items, + whose elements contains a sequence of objects and a key. + + + + + Sorts the elements of a sequence in ascending order according to a key. + + + An whose elements are sorted according to a key. + + + A sequence of values to order. + + + A function to extract a key from an element. + + + + + Sorts the elements of a sequence in descending order according to a key. + + + An whose elements are sorted in descending order according to a key. + + + A sequence of values to order. + + + A function to extract a key from an element. + + + + + Calls + or depending on the . + + The source. + The key selector. + The sort direction. + + An whose elements are sorted according to a key. + + + + + Groups the elements of a sequence according to a specified . + + An whose elements to group. + The group descriptors used for grouping. + + An with items, + whose elements contains a sequence of objects and a key. + + + + + Calculates the results of given aggregates functions on a sequence of elements. + + An whose elements will + be used for aggregate calculation. + The aggregate functions. + Collection of s calculated for each function. + + + + Filters a sequence of values based on a predicate. + + + An that contains elements from the input sequence + that satisfy the condition specified by . + + An to filter. + A function to test each element for a condition. + + + + Filters a sequence of values based on a collection of . + + The source. + The filter descriptors. + + An that contains elements from the input sequence + that satisfy the conditions specified by each filter descriptor in . + + + + + Returns a specified number of contiguous elements from the start of a sequence. + + + An that contains the specified number + of elements from the start of . + + The sequence to return elements from. + The number of elements to return. + is null. + + + + Bypasses a specified number of elements in a sequence + and then returns the remaining elements. + + + An that contains elements that occur + after the specified index in the input sequence. + + + An to return elements from. + + + The number of elements to skip before returning the remaining elements. + + is null. + + + Returns the number of elements in a sequence. + The number of elements in the input sequence. + + The that contains the elements to be counted. + + is null. + + + Returns the element at a specified index in a sequence. + The element at the specified position in . + An to return an element from. + The zero-based index of the element to retrieve. + is null. + is less than zero. + + + + Creates a from an where T is . + + + A that contains elements from the input sequence. + + + The to create a from. + + + is null. + + + + + Default Service locator. + + + + + Initializes a new instance of the class. + + if set to true [debug mode]. + + + + Resolves this instance. + + The type of the service. + + + + + Registers the specified service as singleton. + + The type of the service. + The service. + + + + + Registers the specified factory. + + The type of the service. + The factory. + + + + + Disposes the resources. + + + + + Represents an attribute that is used to populate in view data. + + + + + Initializes a new instance of the class. + + The site maps. + + + + Initializes a new instance of the class. + + + + + Called before an action result executes. + + The filter context. + + + + Called after an action result executes. + + The filter context. + + + + Gets or sets the default view data key. + + The default view data key. + + + + Gets or sets the name of the site map. + + The name of the site map. + + + + Gets or sets the view data key. + + The view data key. + + + + Gets or sets the site maps. + + The site maps. + + + + Defines a base class that represents site map. + + + + + Initializes a new instance of the class. + + + + + Performs an implicit conversion from to . + + The site map. + The result of the conversion. + + + + Returns a new builder. + + + + + + Resets this instance. + + + + + Gets or sets the default cache duration in minutes. + + The default cache duration in minutes. + + + + Gets or sets a value indicating whether [default compress]. + + true if [default compress]; otherwise, false. + + + + Gets or sets a value indicating whether [default generate search engine map]. + + + true if [default generate search engine map]; otherwise, false. + + + + + Gets or sets the root node. + + The root node. + + + + Gets or sets the cache duration in minutes. + + The cache duration in minutes. + + + + Gets or sets a value indicating whether this is compress. + + true if compress; otherwise, false. + + + + Gets or sets a value indicating whether [generate search engine map]. + + + true if [generate search engine map]; otherwise, false. + + + + + The builder to fluently configuring . + + + + + Initializes a new instance of the class. + + The site map. + + + + Performs an implicit conversion from to . + + The builder. + The result of the conversion. + + + + Returns the internal sitemap. + + + + + + Caches the duration in minutes. + + The value. + + + + + Compresses the specified value. + + if set to true [value]. + + + + + Generates the search engine map. + + if set to true [value]. + + + + + Gets the root node. + + The root node. + + + + Sitemap change frequency + + + + + Automatic + + + + + Daily + + + + + Always + + + + + Hourly + + + + + Weekly + + + + + Monthly + + + + + Yearly + + + + + Never + + + + + Defines a class that is used to store against a key. + + + + + Registers the specified name. + + The type of the site map. + The name. + The configure. + + + + + Adds an item to the . + + The object to add to the . + + The is read-only. + + + + + Adds an element with the provided key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + + is null. + + + An element with the same key already exists in the . + + + The is read-only. + + + + + Removes all items from the . + + + The is read-only. + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Determines whether the contains an element with the specified key. + + The key to locate in the . + + true if the contains an element with the key; otherwise, false. + + + is null. + + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is null. + + + is less than 0. + + + is multidimensional. + -or- + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + -or- + Type cannot be cast automatically to the type of the destination + + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + The is read-only. + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . + + + is null. + + + The is read-only. + + + + + Gets the value associated with the specified key. + + The key whose value to get. + When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. + + true if the object that implements contains an element with the specified key; otherwise, false. + + + is null. + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets or sets the default site map factory. + + The default site map factory. + + + + Gets or sets the default site map. + + The default site map. + + + + Gets the number of elements contained in the . + + + + The number of elements contained in the . + + + + + Gets a value indicating whether the is read-only. + + + true if the is read-only; otherwise, false. + + + + + Gets an containing the keys of the . + + + + An containing the keys of the object that implements . + + + + + Gets an containing the values in the . + + + + An containing the values in the object that implements . + + + + + Gets or sets the with the specified key. + + + + + + Defines a class that is used to generate searach engine sitemap xml. + + + + + Provides a common base set of functionality for IHttpHandler implementations. + + + + + Enables processing of HTTP Web requests by a custom HttpHandler that implements the interface. + + An object that provides references to the intrinsic server objects (for example, Request, Response, Session, and Server) used to service HTTP requests. + + + + Processes the request. + + The context. + + + + Gets a value indicating whether another request can use the instance. + + + true if the instance is reusable; otherwise, false. + + + + Initializes a new instance of the class. + + The site maps. + The HTTP response compressor. + The HTTP response cacher. + The URL generator. + + + + Initializes a new instance of the class. + + + + + Processes the request. + + The context. + + + + Gets or sets the default path. + + The default path. + + + + Defines a class that is used to store global sitemaps. + + + + + Gets the site maps. + + The site maps. + + + + Defines a class that is used to store single url. + + + + + Serves as the base class for classes that provides linked object information. + + + + + Gets or sets the T object that is the parent of the current node. + + The parent. + + + + Gets the previous T object on the same level as the current one, relative to the T.ParentNode object (if one exists). + + The previous sibling. + + + + Gets the next T node on the same hierarchical level as the current one, relative to the T.ParentNode property (if one exists). + + The next sibling. + + + + Initializes a new instance of the class. + + + + + Performs an implicit conversion from to . + + The node. + The result of the conversion. + + + + Gets or sets the title. + + The title. + + + + Gets or sets a value indicating whether this is visible. + + true if visible; otherwise, false. + + + + Gets or sets the last modified at. + + The last modified at. + + + + Gets or sets the name of the route. + + The name of the route. + + + + Gets or sets the name of the controller. + + The name of the controller. + + + + Gets or sets the name of the action. + + The name of the action. + + + + Gets or sets the route values. + + The route values. + + + + Gets or sets the URL. + + The URL. + + + + Gets or sets the change frequency. + + The change frequency. + + + + Gets or sets the update priority. + + The update priority. + + + + Gets or sets a value indicating whether [include in search engine index]. + + + true if [include in search engine index]; otherwise, false. + + + + + Gets or sets the attributes. + + The attributes. + + + + Gets or sets the child nodes. + + The child nodes. + + + + Builder class for fluently configuring . + + + + + Initializes a new instance of the class. + + The site map node. + + + + Performs an implicit conversion from to . + + The builder. + The result of the conversion. + + + + Returns the internal node. + + + + + + Sets the title. + + The value. + + + + + Sets the visibility. + + if set to true [value]. + + + + + Sets the Lasts the modified date.. + + The value. + + + + + Sets the route. + + Name of the route. + The route values. + + + + + Sets the route. + + Name of the route. + The route values. + + + + + Sets the route. + + Name of the route. + + + + + Sets the action, controller and route values. + + Name of the action. + Name of the controller. + The route values. + + + + + Sets the action, controller and route values. + + Name of the action. + Name of the controller. + The route values. + + + + + Sets the action and controller. + + Name of the action. + Name of the controller. + + + + + Expression based controllerAction. + + The type of the controller. + The action. + + + + + Sets the url. + + The value. + + + + + Sets the change frequency. + + The value. + + + + + Sets the update priority. + + The value. + + + + + Marks an item that it would be included in the search engine index. + + if set to true [value]. + + + + + Sets the attributes + + The value. + + + + + Sets the attributes + + The value. + + + + + Executes the provided delegate to configure the child node. + + The add actions. + + + + + Defines a factory that is used to create . + + + + + Initializes a new instance of the class. + + The parent. + + + + Adds this instance. + + + + + + Sitemap update priority. + + + + + Automatic + + + + + Low + + + + + Normal + + + + + High + + + + + Critical + + + + + Xml file based sitemap. + + + + + Initializes a new instance of the class. + + The path resolver. + The file system. + The cache manager. + + + + Initializes a new instance of the class. + + + + + Loads from the default path. + + + + + Loads from the specified path. + + The relative virtual path. + + + + Gets or sets the default path. + + The default path. + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The component. + + + + Sets selected date. + + DateTime object represents the selected date. + + + + Sets selected date. + + Date passed as string. + + + + Sets the smallest possible date, which user can choose. + + + + + Sets the smallest possible date, which user can choose. + + + + + Sets the biggest possible date, which user can choose. + + + + + Sets the smallest possible date, which user can choose. + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().Calendar() + .Name("Calendar") + .ClientEvents(events => + events.OnLoad("onLoad") + ) + %> + + + + + + Configures the selection settings of the calendar. + + SelectAction settings, which includes Action name and IEnumerable of DateTime objects. + + + + + Defines fluent interface for configuring calendar client events. + + + + + Initializes a new instance of the class. + + Client events of the calendar. + The context of the View. + + + + Defines the inline handler of the OnSelect client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Calendar() + .Name("Calendar") + .ClientEvents(events => events.OnChange(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the OnDateSelect client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Calendar() + .Name("Calendar") + .ClientEvents(events => events.OnChange("onChange")) + %> + + + + + + Defines the inline handler of the OnLoad client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Calendar() + .Name("Calendar") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnLoad client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + Contains constants for CSS class names, used across all UI extensions + + + + + Next navigation link + + + + + Previous navigavtion link + + + + + Previous navigavtion link + + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The selection settings. + The view context. + + + + Defines list of dates. This list determines which dates to be rendered with action link. + + List of objects + + + + Sets the action to which the date should navigate + + Name of the action. + The route values. + + + + Sets the action to which the item should navigate + + Name of the action. + Name of the controller. + The route values. + + + + Defines the fluent interface for configuring delete action command. + + + + + + Defines the fluent interface for configuring command. + + The type of the model + The type of the command. + The type of the builder. + + + + Initializes a new instance of the class. + + The column. + + + + Sets the button type. + + The button type. + + + + + Sets the HTML attributes. + + The HTML attributes. + + + + + Sets the image HTML attributes. + + The Image HTML attributes. + + + + + Initializes a new instance of the class. + + The command. + + + + Represents a column in the component + + The type of the data item + + + + Gets or sets the grid. + + The grid. + + + + Gets the member of the column. + + The member. + + + + Gets the template of the column. + + + + + Gets or sets the title of the column. + + The title. + + + + Gets or sets the width of the column. + + The width. + + + + Gets or sets a value indicating whether this column is hidden. + + true if hidden; otherwise, false. + + Hidden columns are output as HTML but are not visible by the end-user. + + + + + Gets the header HTML attributes. + + The header HTML attributes. + + + + Gets or sets a value indicating whether this column is visible. + + true if visible; otherwise, false. The default value is true. + + Invisible columns are not output in the HTML. + + + + + Gets the HTML attributes of the cell rendered for the column + + The HTML attributes. + + + + Defines the fluent interface for configuring the edit action command. + + + + + + Initializes a new instance of the class. + + The command. + + + + Defines the fluent interface for building + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables binding. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home").Enabled((bool)ViewData["ajax"]); + }) + %> + + + + The Enabled method is useful when you need to enable binding based on certain conditions. + + + + + Sets the action, controller and route values for the select operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for the select operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home", new { {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for the select operation + + Name of the action. + Name of the controller. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home"); + }) + %> + + + + + + Sets the route and values for the select operation + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the route and values for the select operation + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default", new {id=1}); + }) + %> + + + + + + Sets the route name for the select operation + + Name of the route. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default"); + }) + %> + + + + + + Sets the action, controller and route values for the select operation + + The type of the controller. + The action. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select<HomeController>(controller => controller.Index())); + }) + %> + + + + + + Sets the action, controller and route values for insert operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for insert operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Insert("Index", "Home", new { {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for insert operation + + Name of the action. + Name of the controller. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Insert("Index", "Home"); + }) + %> + + + + + + Sets the route and values for insert operation + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the route and values for insert operation + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Insert("Default", new {id=1}); + }) + %> + + + + + + Sets the route name for insert operation + + Name of the route. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Insert("Default"); + }) + %> + + + + + + Sets the action, controller and route values for insert operation + + The type of the controller. + The action. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Insert<HomeController>(controller => controller.Index())); + }) + %> + + + + + + Sets the action, controller and route values for delete operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Insert("Index", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for update operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Update("Index", "Home", new { {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for update operation + + Name of the action. + Name of the controller. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Update("Index", "Home"); + }) + %> + + + + + + Sets the route and values for update operation + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Update("Default", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the route and values for update operation + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Update("Default", new {id=1}); + }) + %> + + + + + + Sets the route name for update operation + + Name of the route. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Update("Default"); + }) + %> + + + + + + Sets the action, controller and route values for update operation + + The type of the controller. + The action. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Update<HomeController>(controller => controller.Index())); + }) + %> + + + + + + Sets the action, controller and route values for delete operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Delete("Index", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for delete operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Delete("Index", "Home", new { {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for delete operation + + Name of the action. + Name of the controller. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Delete("Index", "Home"); + }) + %> + + + + + + Sets the route and values for delete operation + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Delete("Default", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the route and values for delete operation + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Delete("Default", new {id=1}); + }) + %> + + + + + + Sets the route name for delete operation + + Name of the route. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Delete("Default"); + }) + %> + + + + + + Sets the action, controller and route values for delete operation + + The type of the controller. + The action. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Delete<HomeController>(controller => controller.Index())); + }) + %> + + + + + + Defines the fluent interface for configuring the data binding. + + + + + Initializes a new instance of the class. + + The configuration. + + + + Use it to configure Server binding. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Server().Select("FirstLook", "Grid"}); + }) + .Pagealbe() + .Sortable(); + %> + + + + + + Use it to configure Ajax binding. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("_FirstLook", "Grid").Enabled((bool)ViewData["ajax"]); + }) + .Pagealbe() + .Sortable(); + %> + + + + + + Use it to configure web service binding. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.WebService().Select("~/Models/Orders.asmx/GetOrders") + }) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + %> + + + + + + Defines the fluent interface for configuring the data key. + + The type of the model + The type of the value. + + + + Initializes a new instance of the class. + + The dataKey. + + + + Sets the RouteKey. + + The value. + + + + + Creates data key for the . + + The type of the data item + + + + Initializes a new instance of the class. + + The grid. + + + + Defines a data key. + + + + + + + + Defines which objects can have child items. + + + + + + Child items collection. + + + + + Defines the fluent interface for configuring the component. + + + + + + Defines the number of the decimal digits. + + + + + Sets the decimal separator. + + + + + Defines the fluent interface for configuring the . + + + + + Defines the inline handler of the OnChange client-side event + + The action defining the inline handler. + + + <% Html.Telerik().IntegerTextBox() + .Name("IntegerTextBox") + .ClientEvents(events => events.OnChange(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnChange client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().IntegerTextBox() + .Name("IntegerTextBox") + .ClientEvents(events => events.OnChange("onChange")) + %> + + + + + + Defines the inline handler of the OnLoad client-side event + + The action defining the inline handler. + + + <% Html.Telerik().IntegerTextBox() + .Name("IntegerTextBox") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnLoad client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().IntegerTextBox() + .Name("IntegerTextBox") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + Defines the fluent interface for configuring TreeView drag&drop. + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables / disables drag&drop functionality. + + Whether to enable or to disable the drag&drop. + + + + Allows elements to be dropped on arbitrary HTML elements + + jQuery selector that specifies the elements that qualify as drop targets. + + + + Defines the fluent interface for building + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables binding. + + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home").Enabled((bool)ViewData["ajax"]); + }) + %> + + + + The Enabled method is useful when you need to enable binding based on certain conditions. + + + + + Sets the action, controller and route values for the select operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for the select operation + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home", new { {"id", 1} }); + }) + %> + + + + + + Sets the action, controller and route values for the select operation + + Name of the action. + Name of the controller. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Index", "Home"); + }) + %> + + + + + + Sets the route and values for the select operation + + Name of the route. + The route values. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default", "Home", new RouteValueDictionary{ {"id", 1} }); + }) + %> + + + + + + Sets the route and values for the select operation + + Name of the route. + The route values. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default", new {id=1}); + }) + %> + + + + + + Sets the route name for the select operation + + Name of the route. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => + { + dataBinding.Ajax().Select("Default"); + }) + %> + + + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The component. + + + + Defines the items in the TreeView + + The add action. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + %> + + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => + .OnDataBinding("onDataBinding") + .OnItemDataBound("onItemDataBound") + ) + %> + + + + + + Sets the theme of the TreeView + + + + + Binds the TreeView to a sitemap + + The view data key. + The action to configure the item. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .BindTo("examples", (item, siteMapNode) => + { + }) + %> + + + + + + Binds the TreeView to a sitemap. + + The view data key. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .BindTo("examples") + %> + + + + + + Binds the TreeView to a list of objects. The TreeView will be "flat" which means a TreeView item will be created for + every item in the data source. + + The type of the data item + The data source. + The action executed for every data bound item. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .BindTo(new []{"First", "Second"}, (item, value) + { + item.Text = value; + }) + %> + + + + + + Binds the TreeView to a list of objects. The TreeView will create a hierarchy of items using the specified mappings. + + The type of the data item + The data source. + The action which will configure the mappings + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .BindTo(Model, mapping => mapping + .For<Customer>(binding => binding + .Children(c => c.Orders) // The "child" items will be bound to the the "Orders" property + .ItemDataBound((item, c) => item.Text = c.ContactName) // Map "Customer" properties to TreeViewItem properties + ) + .For<Order<(binding => binding + .Children(o => null) // "Orders" do not have child objects so return "null" + .ItemDataBound((item, o) => item.Text = o.OrderID.ToString()) // Map "Order" properties to TreeViewItem properties + ) + ) + %> + + + + + + Use it to configure Data binding. + + Action that configures the data binding options. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => dataBinding + .Ajax().Select("_AjaxLoading", "TreeView") + ); + %> + + + + + + Callback for each item. + + Action, which will be executed for each item. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ItemAction(item => + { + item + .Text(...) + .HtmlAttributes(...); + }) + %> + + + + + + Select item depending on the current URL. + + If true the item will be highlighted. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .HighlightPath(true) + %> + + + + + + Configures the effects of the TreeView. + + The action which configures the effects. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Effects(fx => + { + fx.Slide() + .Opacity() + .OpenDuration(AnimationDuration.Normal) + .CloseDuration(AnimationDuration.Normal); + }) + + + + + + Expand all the items. + + If true all the items will be expanded. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ExpandAll(true) + %> + + + + + + ShowLines indicates if lines connecting child nodes to parent nodes are displayed. + + If true lines connecting child nodes to parent nodes are displayed. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ShowLines(true) + %> + + + + + + ShowCheckBox indicates if checkbox displayed before node. + + If true checkbox will be displayed for every node. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ShowCheckBox(true) + %> + + + + + + Enables drag & drop between treeview nodes. + + If true, drag & drop is enabled. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + .DragAndDrop(true) + %> + + + + + + Enables drag & drop between treeview nodes. + + Action that configures the drag and drop options. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + .DragAndDrop(settings => + { + + }) + %> + + + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The client events. + The view context. + + + + Defines the inline handler of the OnExpand client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnExpand(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnExpand client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnExpand("onExpand")) + %> + + + + + + Defines the inline handler of the OnCollapse client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnCollapse(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnCollapse client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnCollapse("onCollapse")) + %> + + + + + + Defines the inline handler of the OnSelect client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnSelect(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnSelect client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnSelect("onSelect")) + %> + + + + + + Defines the inline handler of the OnLoad client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnLoad client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + Defines the inline handler of the OnError client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnError(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnError client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnError("onError")) + %> + + + + + + Defines the inline handler of the OnNodeDragStart client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDragStart(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnNodeDragStart client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDragStart("onNodeDragStrat")) + %> + + + + + + Defines the inline handler of the OnNodeDrop client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDrop(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnNodeDrop client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDrop("OnNodeDrop")) + %> + + + + + + Defines the inline handler of the OnNodeDropped client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDropped(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnNodeDropped client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDropped("OnNodeDropped")) + %> + + + + + + Defines the inline handler of the OnNodeDragCancelled client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDragCancelled(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnNodeDragCancelled client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDragCancelled("OnNodeDragCancelled")) + %> + + + + + + Defines the inline handler of the OnNodeDragging client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDragging(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnNodeDragging client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnNodeDragging("OnNodeDragging")) + %> + + + + + + Defines the inline handler of the OnDataBinding client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnDataBinding(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnDataBinding client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnDataBinding("OnDataBinding")) + %> + + + + + + Defines the inline handler of the OnDataBound client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnDataBound(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnDataBound client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnDataBound("OnDataBound")) + %> + + + + + + Defines the inline handler of the OnChecked client-side event. Requires ShowCheckBox to be true. + + The action defining the inline handler. + + + <% Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnChecked(() => + { + %> + function(e) { + // event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnChecked client-side event. Requires ShowCheckBox to be true. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .ClientEvents(events => events.OnChecked("onChecked")) + %> + + + + + + Defines the fluent interface for configuring the data binding. + + + + + Initializes a new instance of the class. + + The configuration. + + + + Use it to configure Ajax binding. + + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => dataBinding + .Ajax().Select("_AjaxLoading", "TreeView") + ) + %> + + + + + + Use it to configure web service binding. + + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => dataBinding + .WebService().Select("~/Models/Employees.asmx/GetEmployees") + ) + %> + + + + + + Defines the fluent interface for configuring child TreeView items. + + + + + Defines the fluent interface for configuring navigation items + + The type of the item. + The type of the builder. + + + + Initializes a new instance of the class. + + The item. + + + + Returns the inner navigation item + + + + + + Sets the HTML attributes applied to the outer HTML element rendered for the item + + The attributes. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Attributes(new {@class="first-item"})) + %> + + + + + + Sets the text displayed by the item. + + The value. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("First Item")) + %> + + + + + + Makes the item visible or not. Invisible items are not rendered in the output HTML. + + + Sets the text displayed by the item. + + The value. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("First Item").Visible((bool)ViewData["visible"]) + %> + + + + + + Enables or disables the item. Disabled item cannot be clicked, expanded or open (depending on the item type - menu, tabstrip, panelbar). + + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("First Item").Enabled((bool)ViewData["enabled"]) + %> + + + + + + Selects or unselects the item. By default items are not selected. + + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("First Item").Selected(true)) + %> + + + + + + Sets the route to which the item should navigate. + + Name of the route. + The route values. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("First Item").Route("Default", new RouteValueDictionary{{"id", 1}})) + %> + + + + + + Sets the route to which the item should navigate. + + Name of the route. + The route values. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("First Item").Route("Default", new {id, 1})) + %> + + + + + + Sets the route to which the item should navigate. + + Name of the route. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("First Item").Route("Default")) + %> + + + + + + Sets the action to which the item should navigate + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("Index").Action("Index", "Home", new RouteValueDictionary{{"id", 1}})) + %> + + + + + + Sets the action to which the item should navigate + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("Index").Action("Index", "Home", new {id, 1})) + %> + + + + + + Sets the action to which the item should navigate + + Name of the action. + Name of the controller. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("Index").Action("Index", "Home")) + %> + + + + + + Sets the URL to which the item should navigate + + The value. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("www.example.com").Url("http://www.example.com")) + %> + + + + + + Sets the URL of the image that should be displayed by the item. + + The value. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("First Item").ImageUrl("~/Content/first.png")) + %> + + + + + + Sets the HTML attributes for the item image. + + The attributes. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items + .Add().Text("First Item") + .ImageUrl("~/Content/first.png") + .ImageHtmlAttributes(new {@class="first-item-image"})) + %> + + + + + + Sets the sprite CSS class names. + + The CSS classes. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items + .Add().Text("First Item") + .SpriteCssClasses("icon", "first-item") + %> + + + + + + Sets the HTML content which the item should display. + + The action which renders the content. + + <% Html.Telerik().Menu() + .Name("Menu") + .Items(items => items + .Add() + .Text("First Item") + .Content(() => + { + %> + <strong> First Item Content</strong> + <% + });) + .Render(); + %> + + + + + Sets the HTML content which the item should display as a string. + + The action which renders the content. + + <% Html.Telerik().Menu() + .Name("Menu") + .Items(items => items + .Add() + .Text("First Item") + .Content("<strong> First Item Content</strong>"); + ) + .Render(); + %> + + + + + Sets the HTML attributes of the content element of the item. + + The attributes. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items + .Add().Text("First Item") + .Content(() => { %> <strong>First Item Content</strong> <% }) + .ContentHtmlAttributes(new {@class="first-item-content"}) + %> + + + + + + Makes the item navigate to the specified controllerAction method. + + The type of the controller. + The action. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items + .Add().Text("First Item") + .Action<HomeController>(controller => controller.Index())) + + %> + + + + + + Sets whether the Text property should be encoded when the item is rendered. + + Whether the property should be encoded. Default: true. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => items.Add().Text("<strong>First Item</strong>").Encoded(false)) + %> + + + + + + Initializes a new instance of the class. + + The item. + + + + Configures the child items of a . + + The add action. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => + { + items.Add().Text("First Item").Items(firstItemChildren => + { + firstItemChildren.Add().Text("Child Item 1"); + firstItemChildren.Add().Text("Child Item 2"); + }); + }) + %> + + + + + + Sets the value for the item. + + The value. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => items.Add().Value("1")) + %> + + + + + + Define when the item will be expanded on intial render. + + If true the item will be expanded. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => + { + items.Add().Text("First Item").Items(firstItemChildren => + { + firstItemChildren.Add().Text("Child Item 1"); + firstItemChildren.Add().Text("Child Item 2"); + }) + .Expanded(true); + }) + %> + + + + + + Define when the item will be checked on intial render. + + If true the item will be checked. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => + { + items.Add().Text("First Item").Items(firstItemChildren => + { + firstItemChildren.Add().Text("Child Item 1"); + firstItemChildren.Add().Text("Child Item 2"); + }) + .Checked(true); + }) + %> + + + + + + Enables/disables the rendering of a checkbox for this item. + + If false, no checkbox will be rendered. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => + { + items.Add().Text("First Item").Items(firstItemChildren => + { + firstItemChildren.Add().Text("Child Item 1"); + firstItemChildren.Add().Text("Child Item 2"); + }) + .Checkable(false); + }) + %> + + + + + + Sets the expand mode of the treeview item. + + If true then item will be load on demand from client side. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => + { + items.Add().Text("First Item").Items(firstItemChildren => + { + firstItemChildren.Add().Text("Child Item 1"); + firstItemChildren.Add().Text("Child Item 2"); + }) + .LoadOnDemand(true); + }) + %> + + + + + + Creates items for the . + + + + + Initializes a new instance of the class. + + The settings. + + + + Defines a item. + + + + + + Defines the fluent interface for configuring the treeview webservice. + + + + + Initializes a new instance of the class. + + The settings. + + + + Specify the web service url for loading data + + The web service url + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => dataBinding + .WebService().Select("~/Models/Employees.asmx/GetEmployees") + ) + %> + + + + + + Enables / disables web service functionality. + + Whether to enable or to disable the web service. + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .DataBinding(dataBinding => dataBinding + .Ajax().Enabled(true).Select("_AjaxLoading", "TreeView") + ) + %> + + + + The Enabled method is useful when you need to enable ajax based on certain conditions. + + + + + Telerik Treeview for ASP.NET MVC is a view component for presenting hierarchical data. + + + + + Initializes a new instance of the class. + + The view context. + The client side object writer factory. + The URL generator. + The navigation item authorization. + The builder factory. + + + + Gets the client events of the treeview. + + The client events. + + + + Gets or sets the theme. + + + + + Gets the items of the treeview. + + + + + Gets or sets the item action. + + + + + Gets or sets the effects. + + + + + Gets or sets a value indicating whether all the item is expanded. + + true if expand all is enabled; otherwise, false. The default value is false + + + + Gets or sets a value indicating whether all the item is expanded. + + true if expand all is enabled; otherwise, false. The default value is false + + + + Gets or sets a value indicating whether all the item is expanded. + + true if expand all is enabled; otherwise, false. The default value is false + + + + Gets the ajax configuration. + + + + + Gets the web service configuration + + + + + + Defines whether one navigation item can have content output immediately + + + + + The HtmlAttributes which will be added to the wrapper of the content. + + + + + The action which will output the content. + + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The component. + + + + Sets the theme of the datepicker + + + + + Configures the effects of the datepicker. + + The action which configures the effects. + + + <%= Html.Telerik().DatePicker() + .Name("DatePicker") + .Effects(fx => + { + fx.Height() + .Opacity() + .OpenDuration(AnimationDuration.Normal) + .CloseDuration(AnimationDuration.Normal); + }) + + + + + + Sets whether datepicker to be rendered with button, which shows calendar on click + + + + + Sets the title of the datepicker button. + + + + + Sets the date format, which will be used to parse and format the machine date. + + + + + Sets the value of the datepicker input + + + + + Sets the value of the datepicker input + + + + + Sets the minimal date, which can be selected in DatePicker. + + + + + Sets the minimal date, which can be selected in DatePicker. + + + + + Sets the maximal date, which can be selected in DatePicker. + + + + + Sets the maximal date, which can be selected in DatePicker. + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => + events.OnLoad("onLoad").OnSelect("onSelect") + ) + %> + + + + + + Sets the Input HTML attributes. + + The HTML attributes. + + + + Defines the fluent interface for configuring datepicker client events. + + + + + Initializes a new instance of the class. + + Datepicker client-side events. + The context of the View. + + + + Defines the inline handler of the OnSelect client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => events.OnChange(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnSelect client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => events.OnChange("onChange")) + %> + + + + + + Defines the inline handler of the OnLoad client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnLoad client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + Defines the inline handler of the OnPopupOpen client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => events.OnOpen(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnPopupOpen client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => events.OnOpen("onOpen")) + %> + + + + + + Defines the inline handler of the OnPopupClose client-side event + + The action defining the inline handler. + + + <% Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => events.OnClose(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnPopupClose client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().DatePicker() + .Name("DatePicker") + .ClientEvents(events => events.OnClose("onClose")) + %> + + + + + + Sets the Url, which will be requested to return the content. + + The action name. + The controller name. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .Items(parent => { + + parent.Add() + .Text("Completely Open Source") + .LoadContentFrom("AjaxView_OpenSource", "PanelBar"); + }) + %> + + + + + + Sets the Url, which will be requested to return the content. + + The action name. + The controller name. + Route values. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .Items(parent => { + + parent.Add() + .Text("Completely Open Source") + .LoadContentFrom("AjaxView_OpenSource", "PanelBar", new { id = 10}); + }) + %> + + + + + + Sets the Url, which will be requested to return the content. + + The url. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .Items(parent => { + + parent.Add() + .Text("Completely Open Source") + .LoadContentFrom(Url.Action("AjaxView_OpenSource", "PanelBar")); + }) + %> + + + + + + Defines the fluent interface for configuring the ajax settings + + + + + Defines the fluent interface for building + + + + + Initializes a new instance of the class. + + The settings. + + + + Sets the route and values + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Ajax(ajax => ajax.Route("Default", new {id=1})) + %> + + + + + + Sets the route and values + + Name of the route. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Ajax(ajax => ajax.Route("Default", new RouteValueDictionary{{"id",1}})) + %> + + + + + + Sets the route name + + Name of the route. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Ajax(ajax => ajax.Route("Default")) + %> + + + + + + Sets the action, controller and route values + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Ajax(ajax => ajax.Action("Index", "Home", new {id = 1})) + %> + + + + + + Sets the action, controller and route values + + Name of the action. + Name of the controller. + The route values. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Ajax(ajax => ajax.Action("Index", "Home", new RouteValueDictionary{ {"id", 1} })) + %> + + + + + + Sets the action, controller and route values + + Name of the action. + Name of the controller. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Ajax(ajax => ajax.Action("Index", "Home")) + %> + + + + + + Gets or sets the settings. + + The settings. + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables Ajax binding. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Ajax(ajax => ajax.Enabled((bool)ViewData["enableAjax"])) + %> + + + + The Enabled method is useful when you need to enable ajax based on certain conditions. + + + + + Initializes a new instance of the class. + + The property to which the column is bound to. + + + + Gets type of the property to which the column is bound to. + + + + + Gets or sets a value indicating whether this column is groupable. + + true if groupable; otherwise, false. + + + + Gets the name of the column + + + + + Gets a function which returns the value of the property to which the column is bound to. + + + + + Gets or sets a value indicating whether this is sortable. + + true if sortable; otherwise, false. The default value is true. + + + + Gets or sets a value indicating whether this is filterable. + + true if filterable; otherwise, false. The default value is true. + + + + Defines the fluent interface for configuring bound columns + + The type of the data item + + + + Initializes a new instance of the class. + + The column. + + + + Gets or sets the format for displaying the data. + + The value. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderDate).Format("{0:dd/MM/yyyy}")) + %> + + + + + + Makes the column read-only or not. By default bound columns are not read-only. + + + If a column is read-only it cannot be modified during editing. + + true if the column should be read-only;otherwise false + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderDate).ReadOnly(true)) + %> + + + + + + Makes the column read-only. + + + If a column is read-only it cannot be modified during editing. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderDate).ReadOnly()) + %> + + + + + + Enables or disables sorting the column. All bound columns are sortable by default. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderDate).Sortable(false)) + %> + + + + + + Enables or disables grouping by that column. All bound columns are groupable by default. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderDate).Groupable(false)) + %> + + + + + + Enables or disables filtering the column. All bound columns are filterable by default. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderDate).Filterable(false)) + %> + + + + + + Enables or disables HTML encoding the data of the column. All bound columns are encoded by default. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => columns.Bound(o => o.OrderDate).Encoded(false)) + %> + + + + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The events. + The view context. + + + + Defines the inline handler of the OnLoad client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + //Load handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnLoad client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnEdit client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnEdit("onEdit")) + %> + + + + + + Defines the inline handler of the OnEdit client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnEdit(() => + { + %> + function(e) { + //edit handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnSave client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnSave("onSave")) + %> + + + + + + Defines the inline handler of the OnSave client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnSave(() => + { + %> + function(e) { + //edit handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnDetailViewExpand client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnDetailViewExpand("onDetailViewExpand")) + %> + + + + + + Defines the inline handler of the OnDetailViewExpand client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnDetailViewExpand(() => + { + %> + function(e) { + //edit handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnDetailViewCollapse client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnDetailViewCollapse("onDetailViewCollapse")) + %> + + + + + + Defines the inline handler of the OnDetailViewCollapse client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnDetailViewCollapse(() => + { + %> + function(e) { + //edit handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnDelete client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnSave("onDelete")) + %> + + + + + + Defines the inline handler of the OnSave client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnSave(() => + { + %> + function(e) { + //edit handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the inline handler of the OnColumnResize client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnColumnResize(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnColumnResize client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnColumnResize("onColumnResize")) + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnRowSelect client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnRowSelect("onRowSelect")) + %> + + + + + + Defines the inline handler of the OnRowSelect client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnRowSelect(() => + { + %> + function(e) { + //Error handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the inline handler of the OnError client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnError(() => + { + %> + function(e) { + //Error handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnError client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnError("onError")) + %> + + + + + + Defines the inline error handler of the OnDataBound client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnDataBound(() => + { + %> + function(e) { + //data bound handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnDataBound client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnDataBound("onDataBound")) + %> + + + + + + Defines the inline error handler of the OnDataBinding client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnDataBinding(() => + { + %> + function(e) { + //data binding handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnDataBinding client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnDataBinding("onDataBinding")) + %> + + + + + + Defines the inline error handler of the OnRowDataBound client-side event. + + The action defining the inline handler. + + + <% Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnRowDataBound(() => + { + %> + function(e) { + var row = e.row; + var dataItem = e.dataItem; + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnRowDataBound client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .ClientEvents(events => events.OnRowDataBound("onRowDataBound")) + %> + + + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The column. + + + + Creates command for the . + + The type of the data item + + + + Initializes a new instance of the class. + + The column. + + + + Defines a edit command. + + + + + + Defines a delete command. + + + + + + Defines a select command. + + + + + + Defines the fluent interface for configuring . + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables filtering + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Filterable(filtering => filtering.Enabled((bool)ViewData["enableFiltering"])) + %> + + + + The Enabled method is useful when you need to enable filtering based on certain conditions. + + + + + Defines the fluent interface for configuring + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables scrolling. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Scrolling(scrolling => scrolling.Enabled((bool)ViewData["enableScrolling"])) + %> + + + + The Enabled method is useful when you need to enable scrolling based on certain conditions. + + + + + Sets the height of the scrollable area in pixels. + + The height in pixels. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Scrolling(scrolling => scrolling.Height(400)) + %> + + + + + + Sets the height of the scrollable. + + The height in pixels. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Scrolling(scrolling => scrolling.Height("20em")) + %> + + + + + + Defines the fluent interface for configuring the + + + + + Initializes a new instance of the class. + + The settings. + + + The pager will display only a status message + + + The pager will display first/previous/next/last links + + + The pager will display page numbers as link buttons. + + + The pager will display an input field and the total number of pages. + + + (first) (previous) (page numbers) (next) (last) + + + (first) (previous) (page input field) (next) (last) + + + + Defines the fluent interface for configuring + + + + + Enables or disables selection. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Selectable(selection => selection.Enabled((bool)ViewData["enableSelection"])) + %> + + + + The Enabled method is useful when you need to enable scrolling based on certain conditions. + + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The settings. + + + + Enables or disables sorting. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Sorting(sorting => sorting.Enabled((bool)ViewData["enableSorting"])) + %> + + + + The Enabled method is useful when you need to enable sorting based on certain conditions. + + + + + Sets the sort mode of the grid. + + The value. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Sorting(sorting => sorting.SortMode(GridSortMode.MultipleColumns)) + %> + + + + + + Configures the initial sort order. + + The configurator. + + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The settings. + + + + Sets the url of the web service which the will request for data. + + The value. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .WebService(webService => webService.Url("~/Models/Orders.asmx/GetOrders"))) + %> + + + + + + Enables or disables web service binding. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .WebService(webService => webService.Enabled((bool)ViewData["enableWebServiceBinding"])) + %> + + + + The Enabled method is useful when you need to enable web service binding based on certain conditions. + + + + + Specifies the animation duration of item. + + + + + Fast animation, duration is set to 200. + + + + + Normal animation, duration is set to 400. + + + + + Slow animation, duration is set to 600. + + + + + Helper class to convert jQuery Animation Duration. + + + + + Converts specified duration in jQuery equivalent value. + + The duration. + + + + + Defines whether one navigation item can have content loaded asynchroniously. + + + + + Url, which will be used as a destination for the Ajax request. + + + + + Defines the basic building block of creating client side object. + + + + + Starts writing this instance. + + + + + + Appends the specified key value pair to the end of this instance. + + The key value pair. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and nullable value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + The default value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + if set to true [value]. + + + + + Appends the specified name and value to the end of this instance. + + The name. + if set to true [value]. + if set to true [default value]. + + + + + Appends the specified name and only the date of the passed . + + The name. + The value. + + + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The action. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The values. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The values. + + + + + Appends the object. + + The name. + The value. + + + + + Appends the specified name and Action or String specified in the ClientEvent object. + + The name. + Client event of the component. + + + + + Appends the specified name and value to the end of this instance. + + The type of the enum. + The name. + The value. + The default value. + + + + + Completes this instance. + + + + + Defines the factory to create . + + + + + Creates a writer. + + The id. + The type. + The text writer. + + + + + Defines the sort modes supported by + + + + + The user can sort only by one column at the same time. + + + + + The user can sort by more than one column at the same time. + + + + + Telerik Grid for ASP.NET MVC is a view component for presenting tabular data. + It supports the following features: + + Flexible databinding - server, ajax and web service + Paging, sorting and filtering + Light HTML and JavaScript footprint + + + The type of the data item which the grid is bound to. + + + + Initializes a new instance of the class. + + The view context. + The client side object writer factory. + The URL generator. + The builder factory. + + + + Gets the selection configuration + + + + + Gets the client events of the grid. + + The client events. + + + + Gets the filtering configuration. + + + + + Gets the web service configuration + + + + + Gets the server binding configuration. + + + + + Gets the scrolling configuration. + + + + + Gets the ajax configuration. + + + + + Gets or sets a value indicating whether custom binding is enabled. + + true if custom binding is enabled; otherwise, false. The default value is false + + + + Gets the paging configuration. + + + + + Gets the columns of the grid. + + + + + Gets or sets the data source. + + The data source. + + + + Gets the page size of the grid. + + + + + Gets the sorting configuration. + + The sorting. + + + + Gets or sets a value indicating whether to add the property of the grid as a prefix in url parameters. + + true if prefixing is enabled; otherwise, false. The default value is true + + + + Gets or sets the action executed when rendering a row. + + + + + Gets or sets the action executed when rendering a cell. + + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The component. + + + + Configures the grid resizing settings + + Resizing settings configurator method + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Resizable(resizing => resizing.Columns(true)) + %> + + + + + + Sets the localization culture of the grid. + + The culture. + + + <%= Html.Telerik().Grid<Order>() + .Name("Orders") + .Localizable("de-DE") + %> + + + + + + Configures the grid editing settings. + + Configurator for the edit settings. + + + <%= Html.Telerik().Grid<Order>() + .Name("Orders") + .Editable(settings => settings.Enabled(true)) + %> + + + + + + Configures the toolbar of the grid. + + ToolBar configurator. + + + <%= Html.Telerik().Grid<Order>() + .Name("Orders") + .ToolBar(commands => commands.Insert()) + %> + + + + + + Defines a list of the private keys. + + DataKeys configurator. + + + <%= Html.Telerik().Grid<Order>() + .Name("Orders") + .DataKeys(keys => + { + keys.Add(c => c.CustomerID); + }) + %> + + + + + + Configure when to show footer of the grid. + + If it is true, the future is visible. + + + + Binds the grid to a list of objects + + The type of the data item + The data source. + + + <%= Html.Telerik().Grid<Order>() + .Name("Orders") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]); + %> + + + + + + Callback for each row. + + Action, which will be executed for each row. + You can format the entire row + + + <%= Html.Telerik().Grid() + .Name("Grid") + .RowAction(row => + { + // "DataItem" is the Order object to which the current row is bound to + if (row.DataItem.Freight > 10) + { + //Set the background of the entire row + row.HtmlAttributes["style"] = "background:red;"; + } + }); + %> + + + + + + Callback for each cell. + + Action, which will be executed for each cell. + You can format a concrete cell. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .CellAction(cell => + { + if (cell.Column.Name == "Freight") + { + if (cell.DataItem.Freight > 10) + { + //Set the background of this cell only + cell.HtmlAttributes["style"] = "background:red;"; + } + } + }); + %> + + + + + + Enables or disables the custom binding of the grid. + + If true enables custom binding. + + + + + Defines the columns of the grid. + + The add action. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]); + %> + + + + + + Allows sorting of the columns. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Sortable(); + %> + + + + + + Allows sorting of the columns. + + Use builder to define sort settings. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Sortable(sorting => sorting.SortMode(GridSortMode.MultipleColumn) + %> + + + + + + Enables row selection. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Selectable() + %> + + + + + + Enables row selection. + + Use builder to define the selection settings. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Selectable(selection => selection.Enabled(true)) + %> + + + + + + Put grid name as a prefix. + + + + + Allows paging of the data. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Pageable(); + %> + + + + + + Allows paging of the data. + + Use builder to define paging settings. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Pageable(paging => + paging.PageSize(20) + .Style(GridPagerStyles.NextPreviousAndNumeric) + .Position(GridPagerPosition.Bottom) + ) + %> + + + + + + Use it to configure Server binding. + + Use builder to set different server binding settings. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .ServerBinding(serverBinding => serverBinding + .Action("Index", "Home", new {id = (string)ViewData["id"]}) + ) + .Pagealbe() + .Sortable(); + %> + + + + + + Use it to configure binding option when performing data operations - paging, sorting and filtering. + + Use builder to set different data binding options. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .DataBinding(dataBinding => + { + dataBinding.Server().Select("FirstLook", "Grid"}); + dataBinding.Ajax().Select("_FirstLook", "Grid").Enabled((bool)ViewData["ajax"]); + }) + .Pagealbe() + .Sortable(); + %> + + + + + + Use it to configure Ajax binding. + + Use builder to set different ajax binding settings. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_AjaxBinding", "Home")) + .Pagealbe() + .Sortable(); + %> + + + + + + Allows filtering of the columns. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Filterable(); + %> + + + + + + Allows filtering of the columns. + + Use builder to define filtering settings. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Filterable(filtering => filtering.Enabled(true); + %> + + + + + + Show scrollbar if there are many items. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Scrollable(); + %> + + + + + + Show scrollbar if there are many items. + + Use builder to define scrolling settings. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Scrollable(scrolling => scrolling.Enabled(true); + %> + + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .ClientEvents(events => events + .OnDataBinding("onDataBinding") + .OnRowDataBound("onRowDataBound") + ) + %> + + + + + + Use it to configure grouping. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Groupable(grouping => grouping.Enabled(true); + %> + + + + + + Allows grouping. + + + + <%= Html.Telerik().Grid() + .Name("Grid") + .Ajax(ajax => ajax.Action("_RelatedGrids_Orders", "Grid", new { customerID = "ALFKI" })) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + .BindTo((IEnumerable<Order>)ViewData["Orders"]) + .Groupable(); + %> + + + + + + Use it to configure web service binding. + + Use builder to set different web service binding settings. + + + <%= Html.Telerik().Grid() + .Name("Grid") + .WebService(webService => webService.Url("~/Models/Orders.asmx/GetOrders")) + .Columns(columns=> + { + columns.Add(c => c.OrderID).Width(100); + columns.Add(c => c.OrderDate).Width(200).Format("{0:dd/MM/yyyy}"); + columns.Add(c => c.ShipAddress); + columns.Add(c => c.ShipCity).Width(200); + }) + %> + + + + + + Creates columns for the . + + The type of the data item to which the grid is bound to + + + + Initializes a new instance of the class. + + The container. + + + + Defines a bound column. + + + + + + + + Defines a bound column. + + + + + + + + Defines a bound column. + + + + + Defines a bound column. + + + + + Defines a template column. + + + + + + + Defines a template column. + + + + + + + Defines a command column. + + + + + + + Used for action methods when using Ajax or Custom binding + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name of the action parameter. The default value is "command". + + The name of the action parameter. + + + [GridAction(ActionParameterName="param")] + public ActionResult Index(GridCommand param) + { + } + + + + + + Gets or sets the name of the Grid that is populated by the associated action method. Required + when custom server binding is enabled and the grid query string parameters are prefixed. + + + + [GridAction(EnableCustomBinding=true, GridName="Employees")] + public ActionResult Index(GridCommand param) + { + } + + + + + + Gets or sets a value indicating whether custom binding is enabled. Used when implementing custom ajax binding. + + true if custom binding is enabled; otherwise, false. The default value is false. + + + [GridAction(EnableCustomBinding=true)] + public ActionResult Index(GridCommand param) + { + } + + + + + + Defines the fluent interface for configuring + + + + + Initializes a new instance of the class. + + The pager. + + + + Sets the position at which to display the pager. + + The pager position. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Pageable(paging => paging.Position(GridPagerPosition.Bottom)) + %> + + + + + + Sets the page size of the grid. + + The number of items to display in a single page. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Pageable(paging => paging.PageSize(20)) + %> + + + + + + Sets the pager style. + + The pager style to set. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Pageable(paging => paging.Style(GridPagerStyles.PageInput | GridPagerStyles.Numeric)) + %> + + + + + + Sets the total number of items in the data source. Required during Custom binding. + + The value. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Pageable(paging => paging.Total((int)ViewData["total"])) + %> + + + + + + Enables or disables paging. + + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .Pageable(paging => paging.Enabled((bool)ViewData["enablePaging"])) + %> + + + + The Enabled method is useful when you need to enable paging based on certain conditions. + + + + + Defines methods to manipulate generic link object collections. + + + + + + Initializes a new instance of the class. + + The parent. + + + + Adds an item to the . + + The object to add to the . + The is read-only. + + + + Removes all items from the . + + The is read-only. + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is null. + + + is less than 0. + + + is multidimensional. + -or- + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + -or- + Type cannot be cast automatically to the type of the destination . + + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + The is read-only. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + The is read-only. + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + The is read-only. + + + + Gets or sets the T object that is the parent of the current node. + + The parent. + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Gets a value indicating whether the is read-only. + + + true if the is read-only; otherwise, false. + + + + Gets or sets the at the specified index. + + + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The component. + + + + Defines the items in the menu + + The add action. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + %> + + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .ClientEvents(events => + events.OnOpen("onOpen").OnClose("onClose") + ) + %> + + + + + + Sets the menu orientation. + + The desired orientation. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Orientation(MenuOrientation.Vertical) + %> + + + + + + Enables or disables the "open-on-click" feature. + + + + <%= Html.Telerik().Menu() + .Name("Menu") + .OpenOnClick(true) + %> + + + + + + Sets the theme of the menu + + + + + Binds the menu to a sitemap + + The view data key. + The action to configure the item. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .BindTo("examples", (item, siteMapNode) => + { + }) + %> + + + + + + Binds the menu to a sitemap. + + The view data key. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .BindTo("examples") + %> + + + + + + Binds the menu to a list of objects. The menu will be "flat" which means a menu item will be created for + every item in the data source. + + The type of the data item + The data source. + The action executed for every data bound item. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .BindTo(new []{"First", "Second"}, (item, value) + { + item.Text = value; + }) + %> + + + + + + Binds the menu to a list of objects. The menu will create a hierarchy of items using the specified mappings. + + The type of the data item + The data source. + The action which will configure the mappings + + + <%= Html.Telerik().Menu() + .Name("Menu") + .BindTo(Model, mapping => mapping + .For<Customer>(binding => binding + .Children(c => c.Orders) // The "child" items will be bound to the the "Orders" property + .ItemDataBound((item, c) => item.Text = c.ContactName) // Map "Customer" properties to MenuItem properties + ) + .For<Order<(binding => binding + .Children(o => null) // "Orders" do not have child objects so return "null" + .ItemDataBound((item, o) => item.Text = o.OrderID.ToString()) // Map "Order" properties to MenuItem properties + ) + ) + %> + + + + + + Configures the effects of the menu. + + The action which configures the effects. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Effects(fx => + { + fx.Slide() + .Opacity() + .OpenDuration(AnimationDuration.Normal) + .CloseDuration(AnimationDuration.Normal); + }) + + + + + + Selects the item at the specified index. + + The index. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + .SelectedIndex(1) + %> + + + + + + Callback for each item. + + Action, which will be executed for each item. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .ItemAction(item => + { + item + .Text(...) + .HtmlAttributes(...); + }) + %> + + + + + + Select item depending on the current URL. + + If true the item will be highlighted. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .HighlightPath(true) + %> + + + + + + Defines the fluent interface for configuring child menu items. + + + + + Initializes a new instance of the class. + + The item. + + + + Configures the child items of a . + + The add action. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => + { + items.Add().Text("First Item").Items(firstItemChildren => + { + firstItemChildren.Add().Text("Child Item 1"); + firstItemChildren.Add().Text("Child Item 2"); + }); + }) + %> + + + + + + Specifies the orientation in which the menu items will be ordered + + + + + Items are oredered horizontally + + + + + Items are oredered vertically + + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The client events. + The view context. + + + + Defines the inline handler of the OnOpen client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Menu() + .Name("Menu") + .ClientEvents(events => events.OnOpen(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnOpen client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .ClientEvents(events => events.OnOpen("onOpen")) + %> + + + + + + Defines the inline handler of the OnClose client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Menu() + .Name("Menu") + .ClientEvents(events => events.OnClose(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnClose client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .ClientEvents(events => events.OnClose("onClose")) + %> + + + + + + Defines the inline handler of the OnSelect client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Menu() + .Name("Menu") + .ClientEvents(events => events.OnSelect(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnSelect client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .ClientEvents(events => events.OnSelect("onSelect")) + %> + + + + + + Defines the inline handler of the OnLoad client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Menu() + .Name("Menu") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnSelect client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Menu() + .Name("Menu") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + INavigatable extension for providing access to . + + + + + Sets the action and controller name, along with Route values of object. + + The object. + Action name. + Controller name. + Route values as an object + + + + Sets the action, controller name and route values of object. + + The object. + Action name. + Controller name. + Route values as + + + + Sets the url property of object. + + The object. + The Url. + + + + Sets the route name and route values of object. + + The object. + Route name. + Route values as an object. + + + + Sets the route name and route values of object. + + The object. + Route name. + Route values as . + + + + Generating url depending on the ViewContext and the generator. + + The object. + The object + The generator. + + + + Generating url depending on the ViewContext and the generator. + + The object. + The object + The generator. + + + + Verify whether the object is accessible. + + The object. + The object. + The object + + + + Verifies whether collection of objects is accessible. + + Object of type. + The object. + The object. + The object + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The component. + + + + Defines the items in the panelbar + + The add action. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + %> + + + + + + Sets the theme of the panelbar + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => + events.OnExpand("onExpand").OnCollapse("onCollapse") + ) + %> + + + + + + Binds the panelbar to a sitemap + + The view data key. + The action to configure the item. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .BindTo("examples", (item, siteMapNode) => + { + }) + %> + + + + + + Binds the panelbar to a sitemap. + + The view data key. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .BindTo("examples") + %> + + + + + + Binds the panelbar to a list of objects + + The type of the data item + The data source. + The action executed for every data bound item. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .BindTo(new []{"First", "Second"}, (item, value) + { + item.Text = value; + }) + %> + + + + + + Binds the panelbar to a list of objects. The panelbar will create a hierarchy of items using the specified mappings. + + The type of the data item + The data source. + The action which will configure the mappings + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .BindTo(Model, mapping => mapping + .For<Customer>(binding => binding + .Children(c => c.Orders) // The "child" items will be bound to the the "Orders" property + .ItemDataBound((item, c) => item.Text = c.ContactName) // Map "Customer" properties to PanelBarItem properties + ) + .For<Order<(binding => binding + .Children(o => null) // "Orders" do not have child objects so return "null" + .ItemDataBound((item, o) => item.Text = o.OrderID.ToString()) // Map "Order" properties to PanelBarItem properties + ) + ) + %> + + + + + + Configures the effects of the panelbar. + + The action which configures the effects. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .Effects(fx => + { + fx.Height() + .Opacity() + .OpenDuration(AnimationDuration.Normal) + .CloseDuration(AnimationDuration.Normal); + }) + + + + + + Callback for each item. + + Action, which will be executed for each item. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .ItemAction(item => + { + item + .Text(...) + .HtmlAttributes(...); + }) + %> + + + + + + Select item depending on the current URL. + + If true the item will be highlighted. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .HighlightPath(true) + %> + + + + + + Renders the panelbar with expanded items. + + If true the panelbar will be expanded. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .ExpandAll(true) + %> + + + + + + Sets the expand mode of the panelbar. + + The desired expand mode. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .ExpandMode(PanelBarExpandMode.Multiple) + %> + + + + + + Selects the item at the specified index. + + The index. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + .SelectedIndex(1) + %> + + + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The client events. + The view context. + + + + Defines the inline handler of the OnExpand client-side event + + The action defining the inline handler. + + + <% Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnExpand(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnExpand client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnExpand("onExpand")) + %> + + + + + + Defines the inline handler of the OnCollapse client-side event + + The action defining the inline handler. + + + <% Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnCollapse(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnCollapse client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnCollapse("onCollapse")) + %> + + + + + + Defines the inline handler of the OnSelect client-side event + + The action defining the inline handler. + + + <% Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnSelect(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnSelect client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnSelect("onSelect")) + %> + + + + + + Defines the inline handler of the OnLoad client-side event + + The action defining the inline handler. + + + <% Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnLoad client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + Defines the inline handler of the OnError client-side event + + The action defining the inline handler. + + + <% Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnError(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnError client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .ClientEvents(events => events.OnError("onError")) + %> + + + + + + Specifies the expand mode in which the panelbar will expand its items + + + + + Only one item can be expanded. + + + + + All items can be expanded + + + + + Defines the fluent interface for configuring child panelbar items. + + + + + Initializes a new instance of the class. + + The item. + The context of the View. + + + + Configures the child items of a . + + The add action. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .Items(items => + { + items.Add().Text("First Item").Items(firstItemChildren => + { + firstItemChildren.Add().Text("Child Item 1"); + firstItemChildren.Add().Text("Child Item 2"); + }); + }) + %> + + + + + + Define when the item will be expanded on intial render. + + If true the item will be expanded. + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .Items(items => + { + items.Add().Text("First Item").Items(firstItemChildren => + { + firstItemChildren.Add().Text("Child Item 1"); + firstItemChildren.Add().Text("Child Item 2"); + }) + .Expanded(true); + }) + %> + + + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The client events. + The view context. + + + + Defines the inline handler of the OnSelect client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TabStrip() + .Name("TabStrip") + .ClientEvents(events => events.OnSelect(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnSelect client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .ClientEvents(events => events.OnSelect("onSelect")) + %> + + + + + + Defines the inline handler of the OnLoad client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TabStrip() + .Name("TabStrip") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnLoad client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + Defines the inline handler of the OnError client-side event + + The action defining the inline handler. + + + <% Html.Telerik().TabStrip() + .Name("TabStrip") + .ClientEvents(events => events.OnError(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnError client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .ClientEvents(events => events.OnError("onError")) + %> + + + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The component. + + + + Defines the items in the tabstrip + + The add action. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + %> + + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .ClientEvents(events => + events.OnSelect("onSelect").OnLoad("onLoad") + ) + %> + + + + + + Binds the tabstrip to a sitemap + + The view data key. + The action to configure the item. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .BindTo("examples", (item, siteMapNode) => + { + }) + %> + + + + + + Binds the tabstrip to a sitemap. + + The view data key. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .BindTo("examples") + %> + + + + + + Binds the tabstrip to a list of objects + + The type of the data item + The data source. + The action executed for every data bound item. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .BindTo(new []{"First", "Second"}, (item, value) + { + item.Text = value; + }) + %> + + + + + + Configures the effects of the tabstrip. + + The action which configures the effects. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .Effects(fx => + { + fx.Slide() + .Opacity() + .OpenDuration(AnimationDuration.Normal) + .CloseDuration(AnimationDuration.Normal); + }) + + + + + + Selects the item at the specified index. + + The index. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + .SelectedIndex(1) + %> + + + + + + Callback for each item. + + Action, which will be executed for each item. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .ItemAction(item => + { + item + .Text(...) + .HtmlAttributes(...); + }) + %> + + + + + + Select item depending on the current URL. + + If true the item will be highlighted. + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .HighlightPath(true) + %> + + + + + + Defines the fluent interface for configuring child tabstrip items. + + + + + Initializes a new instance of the class. + + The item. + The context of the View. + + + + Contains constants for CSS class names + + + + + Active state of items + + + + + Button + + + + + Content - rendered around custom content + + + + + Default state of items + + + + + Disabled state of items + + + + + Group - rendered around grouped items (children) + + + + + Header - rendered on headers or header items + + + + + Hovered state of items + + + + + Icon - icon from default icon set + + + + + Image - image rendered through ImageUrl + + + + + Item - rendered on items + + + + + First in list of items + + + + + Last in list of items + + + + + Top in list of items + + + + + Bottom in list of items + + + + + Middle in list of items + + + + + Last in list of headers + + + + + Link - rendered on all links + + + + + Reset - removes inherited styles + + + + + Selected state of items + + + + + Sprite - sprite rendered in the begging of the item. + + + + + Widget - rendered always on the outmost HTML element of a UI component + + + + + Input - input rendered in the div wrapper + + + + + CheckBox - rendered on all checkbox + + + + + ToolBar - rendered on all toolbars + + + + + Contains CSS classes, used in the Grid + + + + + Contains CSS classes, used in the Grid + + + + + Grid action + + + + + Grid action + + + + + Container element for editing / inserting form + + + + + Container element for editing / inserting form + + + + + Toolbar which contains different commands + + + + + Class that shows treeview lines + + + + + Editor toolbar button + + + + + Editor toolbar color picker + + + + + Editor tool icon + + + + + Defines the basic building block of web asset merging. + + + + + Merges the specified assets. + + Type of the content. + The asset handler path. + if set to true [is secured]. + if set to true [can compress]. + The assets. + + + + + Merges the specified asset group. + + Type of the content. + The asset handler path. + if set to true [is secured]. + if set to true [can compress]. + The asset group. + + + + + Enables zoom animation. + + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The client events. + The view context. + + + + Defines the inline handler of the OnLoad client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnLoad(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnLoad client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnLoad("onLoad")) + %> + + + + + + Defines the inline handler of the OnOpen client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnOpen(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnOpen client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnOpen("onOpen")) + %> + + + + + + Defines the inline handler of the OnClose client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnClose(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnClose client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnClose("onClose")) + %> + + + + + + Defines the inline handler of the OnMove client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnMove(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnMove client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnMove("onMove")) + %> + + + + + + Defines the inline handler of the OnResize client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnResize(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnResize client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnResize("onResize")) + %> + + + + + + Defines the inline handler of the OnRefresh client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnRefresh(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnRefresh client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnRefresh("onRefresh")) + %> + + + + + + Defines the inline handler of the OnError client-side event + + The action defining the inline handler. + + + <% Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnError(() => + { + %> + function(e) { + //event handling code + } + <% + })) + .Render(); + %> + + + + + + Defines the name of the JavaScript function that will handle the the OnError client-side event. + + The name of the JavaScript function that will handle the event. + + + <%= Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => events.OnError("onError")) + %> + + + + + + Sets path to the icon. + + Path to the icon. + + + <%= Html.Telerik().Window() + .Name("Window") + .Icon(Url.Content("~/Content/Icons/WindowIcon.png")) + %> + + + + + + Sets path and alternative text to the icon. + + Path to the icon. + Alternative text to the icon. + + + <%= Html.Telerik().Window() + .Name("Window") + .Icon(Url.Content("~/Content/Icons/WindowIcon.png"), "icon") + %> + + + + + + Sets title, which appears in the header of the window. + + + + + Sets the HTML content which the window should display. + + The action which renders the content. + + + <% Html.Telerik().Window() + .Name("Window") + .Content(() => + { + %> + <strong> First Item Content</strong> + <% + }) + %> + + + + + + Sets the HTML content which the window should display + + The Razor inline template + + + @(Html.Telerik().Window() + .Name("Window") + .Content(@<strong> Hello World!!!</strong>)) + + + + + + + Sets the HTML content which the item should display as a string. + + The action which renders the content. + + <%= Html.Telerik().Window() + .Name("Window") + .Content("<strong> First Item Content</strong>") + %> + + + + + Sets the HTML attributes of the content element of the item. + + The attributes. + + + <%= Html.Telerik().Window() + .Name("Window") + .Content(() => { %> <strong>First Item Content</strong> <% }) + .ContentHtmlAttributes(new {@class="first-item-content"}) + %> + + + + + + Sets the Url, which will be requested to return the content. + + The action name. + The controller name. + + + <%= Html.Telerik().Window() + .Name("Window") + .LoadContentFrom("AjaxView_OpenSource", "Window") + %> + + + + + + Sets the Url, which will be requested to return the content. + + The action name. + The controller name. + Route values. + + + <%= Html.Telerik().Window() + .Name("Window") + .LoadContentFrom("AjaxView_OpenSource", "Window", new { id = 10}) + %> + + + + + + Sets the Url, which will be requested to return the content. + + The url. + + + <%= Html.Telerik().Window() + .Name("Window") + .LoadContentFrom(Url.Action("AjaxView_OpenSource", "Window")) + %> + + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => + events.OnOpen("onOpen").OnClose("onClose") + ) + %> + + + + + + Enables windows resizing. + + + + <%= Html.Telerik().Window() + .Name("Window") + .Resizable() + %> + + + + + + Configures the resizing ability of the window. + + Resizing settings action. + + + <%= Html.Telerik().Window() + .Name("Window") + .Resizable(settings => + settings.Enabled(true).MaxHeight(500).MaxWidth(500) + ) + %> + + + + + + Configures the client-side events. + + The client events action. + + + <%= Html.Telerik().Window() + .Name("Window") + .ClientEvents(events => + events.OnOpen("onOpen").OnClose("onClose") + ) + %> + + + + + + Sets the width of the window. + + + + + Sets the height of the window. + + + + + Sets whether the window should be rendered visible. + + + + + Sets whether the window should have scrollbars. + + + + + Configures the effects of the window. + + The action which configures the effects. + + + <%= Html.Telerik().Window() + .Name("Window") + .Effects(fx => + { + fx.Zoom() + .Opacity() + .OpenDuration(AnimationDuration.Fast) + .CloseDuration(AnimationDuration.Fast); + }) + + + + + + Sets whether the window should be modal or not. + + + + + Sets whether the window can be moved. + + + + + Defines basic building blocks of Global storage for web assets. + + + + + Basic building block to locate the correct virtual path. + + + + + Returns the correct virtual path based upon the debug mode and version. + + The virtual path. + The version. + + + + + Stores the specified asset group. + + Type of the content. + The asset group. + + + + + Retrieves the web asset by specified id. + + The id. + + + + + Builder class for fluently configuring the shared group. + + + + + Initializes a new instance of the class. + + The default path. + The assets. + + + + Adds the group. + + The name. + The configure action. + + + + + Gets the group. + + The name. + The configure action. + + + + + + + + + + Executes the provided delegate that is used to configure stylesheets. + + The configure action. + + + + Executes the provided delegate that is used to configure scripts. + + The configure action. + + + + The web asset Configuration. + + + + + Gets the name of the section. + + The name of the section. + + + + Gets or sets a value indicating whether to use telerik content delivery network. + + + true if [use telerik content delivery network]; otherwise, false. + + + + + Gets the style sheets. + + The style sheets. + + + + Gets the scripts. + + The scripts. + + + + Web asset item configuration element. + + + + + Gets or sets the source. + + The source. + + + + Web asset item configuration collection. + + + + + Adds the specified element. + + The element. + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + The to return the key for. + + An that acts as the key for the specified . + + + + + Gets the with the specified source. + + + + + + Web asset group configuration element. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the default path. + + The default path. + + + + Gets or sets a value indicating whether to use telerik content delivery network. + + + true if [use telerik content delivery network]; otherwise, false. + + + + + Gets or sets the content delivery network URL. + + The content delivery network URL. + + + + Gets or sets a value indicating whether this is enabled. + + true if enabled; otherwise, false. + + + + Gets or sets the version. + + The version. + + + + Gets or sets a value indicating whether this is compress. + + true if compress; otherwise, false. + + + + Gets or sets the cache duration in days. + + The cache duration in days. + + + + Gets or sets a value indicating whether this is combined. + + true if combined; otherwise, false. + + + + Gets the items. + + The items. + + + + Web asset group configuration collection + + + + + Adds the specified element. + + The element. + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + The to return the key for. + + An that acts as the key for the specified . + + + + + Gets the with the specified name. + + + + + + Reprenets an web asset. + + + + + Initializes a new instance of the class. + + Type of the content. + The version. + if set to true [compress]. + The cache duration in days. + The content. + + + + Gets the type of the content. + + The type of the content. + + + + Gets the version. + + The version. + + + + Gets a value indicating whether this is compressed. + + true if compress; otherwise, false. + + + + Gets the cache duration in days. + + The cache duration in days. + + + + Gets the content. + + The content. + + + + The HttpHandler to compress, cache and combine web assets. + + + + + Initializes a new instance of the class. + + The asset registry. + The HTTP response compressor. + The HTTP response cacher. + + + + Initializes a new instance of the class. + + + + + Enables a WebAssetHttpHandler object to process of requests. + + The context. + + + + Gets or sets the default path of the asset. + + The default path. + + + + Gets or sets the name of the id parameter. + + The name of the id parameter. + + + + Default web asset locator. + + + + + Returns the correct virtual path based upon the debug mode and version. + + The virtual path. + The version. + + + + + The default web asset registry. + + + + + Initializes a new instance of the class. + + if set to true [is in debug mode]. + The cache manager. + The asset locator. + The URL resolver. + The path resolver. + The virtual path provider. + + + + Stores the specified asset group. + + Type of the content. + The asset group. + + + + + Retrieves the web asset by specified id. + + The id. + + + + + Returns the correct virtual path based upon the debug mode and version. + + The virtual path. + The version. + + + + + Contains default asset settings. + + + + + Gets or sets the style sheet files path. Path must be a virtual path. + + The style sheet files path. + + + + Gets or sets the script files path. Path must be a virtual path. + + The script files path. + + + + Gets or sets the version. + + The version. + + + + Gets or sets a value indicating whether assets should be served as compressed. + + true if compress; otherwise, false. + + + + Gets or sets a value indicating whether assets shoule be combined. + + true if combined; otherwise, false. + + + + Gets or sets the cache duration in days. + + The cache duration in days. + + + + Gets or sets a value indicating whether [use telerik content delivery network]. + + + true if [use telerik content delivery network]; otherwise, false. + + + + + Defines members that a class must implement in order to provide helper methods for resolving virtual path. + + + + + Returns the physical path for the specified virtual path. + + The virtual path. + + + + + Defines members that a class must implement in order to compress the response. + + + + + Compresses the response. + + The context. + + + + Defines members that must be implemented for cache the http response + + + + + Caches the response for the specified duration. + + The context. + The duration. + + + + Defines members that a class must implement in order to access file system. + + + + + Determines whether the specified directory exists. + + The path. + + + + + Determines whether the specified file exists. + + The path. + + + + + Gets the files in the specified locations. + + The path. + The search pattern. + if set to true [recursive]. + + + + + Reads the content of the specified file. + + The path. + + + + + Defines the read operaations of configuration. + + + + + Gets the section with the specified name. + + + Name of the section. + + + + + Defines members that a class must implement in order to access System.Web.HttpRuntime.Cache object. + + + + + Gets the item. + + The key. + + + + + Inserts the specified key. + + The key. + The value. + The on remove callback. + The file dependencies. + + + + Contains extension methods of T[]. + + + + + Determines whether the specified array is empty or null. + + + The instance. + + true if [is null or empty] [the specified instance]; otherwise, false. + + + + + Determines whether the specified array is empty. + + + The instance. + + true if the specified instance is empty; otherwise, false. + + + + + Encapsulates the System.Web.HttpRuntime.Cache object that contains methods for accessing System.Web.HttpRuntime.Cache object. + + + + + Retrieves the specified item from the System.Web.HttpRuntime.Cache object. + + The object to be retrives from the cache. + + + + + Inserts an object into the System.Web.Caching.Cache object with dependencies and a delegate you can use to notify your application when the inserted item is removed from the Cache. + + The object to be inserted in the cache. + The file or cache key dependencies for the item. When any dependency changes, the object becomes invalid and is removed from the cache. If there are no dependencies, this parameter contains null. + A delegate that, if provided, will be called when an object is removed from the cache. You can use this to notify applications when their objects are deleted from the cache. + List of files that the cache item depends upon, if any of the file is changed the cache item will become invalid. + + + + Defines the factory to create . + + + + + Creates a writer. + + The id. + The type. + The text writer. + + + + + Provides an attribute to change the enum value for client side. + + + + + Initializes a new instance of the class with the specified value for the client side. + + The value. + + + + Gets or sets the value for client side. + + The value. + + + + Contains extension methods of ICollection<T>. + + + + + Determines whether the specified collection instance is null or empty. + + + The instance to check. + + true if the specified instance is null or empty; otherwise, false. + + + + + Determines whether the specified collection is empty. + + + The instance. + + true if the specified instance is empty; otherwise, false. + + + + + Adds the specified elements to the end of the System.Collections.Generic.ICollection<T>. + + + The instance to add. + The collection whose elements should be added to the end of the ICollection<T>. The collection itself cannot be null, but it can contain elements that are null, if type T is a reference type. + + + + Encapsulates the ConfigurationManager object that contains methods for accessing System.Web.HttpRuntime.Cache object. + + + + + Gets the section with the specified name. + + + Name of the section. + + + + + Contains extension methods of IDictionary<string, objectT>. + + + + + Merges the specified instance. + + The instance. + The key. + The value. + if set to true [replace existing]. + + + + Appends the in value. + + The instance. + The key. + The separator. + The value. + + + + Appends the specified value at the beginning of the existing value + + + + + + + + + Toes the attribute string. + + The instance. + + + + + Merges the specified instance. + + The instance. + From. + if set to true [replace existing]. + + + + Merges the specified instance. + + The instance. + From. + + + + Merges the specified instance. + + The instance. + The values. + if set to true [replace existing]. + + + + Merges the specified instance. + + The instance. + The values. + + + + Provides properties and methods for working with drives, files, and directories. + + + + + Determines whether the given path refers to an existing directory on disk. + + The path to test. + true if path refers to an existing directory; otherwise, false. + + + + Determines whether the specified file exists. + + The file to check. + true if the caller has the required permissions and path contains the name of an existing file; otherwise, false. This method also returns false if path is null, an invalid path, or a zero-length string. If the caller does not have sufficient permissions to read the specified file, no exception is thrown and the method returns false regardless of the existence of path. + + + + Returns the names of files in the specified directory that match the specified search pattern, using a value to determine whether to search subdirectories. + + The directory to search. + The search string to match against the names of files in path. The parameter cannot end in two periods ("..") or contain two periods ("..") followed by System.IO.Path.DirectorySeparatorChar or System.IO.Path.AltDirectorySeparatorChar, nor can it contain any of the characters in System.IO.Path.InvalidPathChars. + if set to true the search operation should include all subdirectories or only the current directory. + A String array containing the names of files in the specified directory that match the specified search pattern. File names include the full path. + + + + Opens a text file, reads all lines of the file, and then closes the file. + + The file to open for reading. + A string containing all lines of the file. + + + + Contains extension methods of . + + + + + Requests the context. + + The instance. + + + + + Gets a value indicating whether we're running under Mono. + + true if Mono; otherwise, false. + + + + Gets a value indicating whether we're running under Linux or a Unix variant. + + true if Linux/Unix; otherwise, false. + + + + Class used to cache the http response. + + + + + Set the caching policy. + + The context. + The duration. + + + + Encapsulates the HTTP intrinsic object that compress the response + + + + + Compresses the response. + + The context. + + + + Class use to resolve physical path for virtual path. + + + + + Returns the physical path for the specified virtual path. + + The virtual path. + + + + + Helper class for argument validation. + + + + + Ensures the specified argument is not null. + + The parameter. + Name of the parameter. + + + + Ensures the specified string is not blank. + + The parameter. + Name of the parameter. + + + + Ensures the specified array is not null or empty. + + + The parameter. + Name of the parameter. + + + + Ensures the specified collection is not null or empty. + + + The parameter. + Name of the parameter. + + + + Ensures the specified value is a positive integer. + + The parameter. + Name of the parameter. + + + + Ensures the specified value is not a negative integer. + + The parameter. + Name of the parameter. + + + + Ensures the specified value is not a negative float. + + The parameter. + Name of the parameter. + + + + Ensures the specified path is a virtual path which starts with ~/. + + The parameter. + Name of the parameter. + + + + Contains extension methods of . + + + + + Starts thread safe read write code block. + + The instance. + + + + + Starts thread safe read code block. + + The instance. + + + + + Starts thread safe write code block. + + The instance. + + + + + Contains the extension methods of . + + + + + Replaces the format item in a specified System.String with the text equivalent of the value of a corresponding System.Object instance in a specified array. + + A string to format. + An System.Object array containing zero or more objects to format. + A copy of format in which the format items have been replaced by the System.String equivalent of the corresponding instances of System.Object in args. + + + + Determines whether this instance and another specified System.String object have the same value. + + The string to check equality. + The comparing with string. + + true if the value of the comparing parameter is the same as this string; otherwise, false. + + + + + Determines whether this instance and another specified System.String object have the same value. + + The string to check equality. + The comparing with string. + + true if the value of the comparing parameter is the same as this string; otherwise, false. + + + + + Determines whether this instance is null or empty string. + + The string to check its value. + + true if the value is null or empty string; otherwise, false. + + + + + Compresses the specified instance. + + The instance. + + + + + Decompresses the specified instance. + + The instance. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to "{0}" array cannot be empty.. + + + + + Looks up a localized string similar to "{0}" cannot be negative.. + + + + + Looks up a localized string similar to "{0}" cannot be negative or zero.. + + + + + Looks up a localized string similar to "{0}" cannot be null.. + + + + + Looks up a localized string similar to "{0}" cannot be null or empty.. + + + + + Looks up a localized string similar to Cannot find a public property of primitive type to sort by.. + + + + + Looks up a localized string similar to Cannot have more one column in order when sort mode is set to single column.. + + + + + Looks up a localized string similar to Cannot route to class named 'Controller'.. + + + + + Looks up a localized string similar to Cannot use Ajax and WebService binding at the same time.. + + + + + Looks up a localized string similar to Cannot use only server templates in Ajax or WebService binding mode. Please specify a client template as well.. + + + + + Looks up a localized string similar to "{0}" collection cannot be empty.. + + + + + Looks up a localized string similar to Multiple types were found that match the controller named '{0}'. This can happen if the route that services this request does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter. + + The request for '{0}' has found the following matching controllers:{1}. + + + + + Looks up a localized string similar to Multiple types were found that match the controller named '{0}'. This can happen if the route that services this request ('{1}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter. + + The request for '{0}' has found the following matching controllers:{2}. + + + + + Looks up a localized string similar to Controller name must end with 'Controller'.. + + + + + Looks up a localized string similar to The DataKeys collection is empty. Please specify a data key.. + + + + + Looks up a localized string similar to Date should be bigger than MinDate and less than MaxDate.. + + + + + Looks up a localized string similar to The Delete data binding setting is required by the delete command. Please specify the Delete action or url in the DataBinding configuration.. + + + + + Looks up a localized string similar to The Update data binding setting is required by the edit command. Please specify the Update action or url in the DataBinding configuration.. + + + + + Looks up a localized string similar to Group with specified name already exists.. + + + + + Looks up a localized string similar to Group with specified name "{0}" already exists. Please specify a different name.. + + + + + Looks up a localized string similar to Group with "{0}" does not exist in {1} SharedWebAssets.. + + + + + Looks up a localized string similar to Group with specified name "{0}" does not exist. Please make sure you have specified a correct name.. + + + + + Looks up a localized string similar to Provided index is out of range.. + + + + + Looks up a localized string similar to The Insert data binding setting is required by the insert command. Please specify the Insert action or url in the DataBinding configuration.. + + + + + Looks up a localized string similar to Item with specified source already exists.. + + + + + Looks up a localized string similar to Local group with name "{0}" already exists.. + + + + + Looks up a localized string similar to Bound columns require a field or property access expression.. + + + + + Looks up a localized string similar to MinDate should be less than MaxDate.. + + + + + Looks up a localized string similar to MinHeight should be less than MaxHeight.. + + + + + Looks up a localized string similar to MinValue should be less than MaxValue. + + + + + Looks up a localized string similar to MinWidth should be less than MaxWidth.. + + + + + Looks up a localized string similar to Name cannot be blank.. + + + + + Looks up a localized string similar to "None" is only used for internal purpose.. + + + + + Looks up a localized string similar to Only one ScriptRegistrar is allowed in a single request.. + + + + + Looks up a localized string similar to Only one StyleSheetRegistrar is allowed in a single request.. + + + + + Looks up a localized string similar to Only property and field expressions are supported. + + + + + Looks up a localized string similar to {0} should be bigger than {1} and less then {2}. + + + + + Looks up a localized string similar to You must have SiteMap defined with key "{0}" in ViewData dictionary.. + + + + + Looks up a localized string similar to Source must be a virtual path which should starts with "~/". + + + + + Looks up a localized string similar to Specified file does not exist: "{0}".. + + + + + Looks up a localized string similar to Passed string cannot be parsed to DateTime object.. + + + + + Looks up a localized string similar to The specified method is not an action method.. + + + + + Looks up a localized string similar to You cannot set Url and ContentUrl at the same time.. + + + + + Looks up a localized string similar to Value should be bigger than MinValue and less than MaxValue.. + + + + + Looks up a localized string similar to The Url of the WebService must be set. + + + + + Looks up a localized string similar to You cannot add more than once column when sort mode is set to single column.. + + + + + Looks up a localized string similar to You cannot call render more than once.. + + + + + Looks up a localized string similar to You cannot call Start more than once.. + + + + + Looks up a localized string similar to You cannot configure a shared web asset group.. + + + + + Looks up a localized string similar to You must have to call Start prior calling this method.. + + + + + Defines an individual web asset. + + + + + Marker interface of web asset. + + + + + Initializes a new instance of the class. + + + + + Gets the source. + + The source. + + + + Represents a list of that can be accessed by index. Provides methods to search, sort and manipulate lists. + + + + + Initializes a new instance of the class. + + The default path. + + + + Finds the group with the specified name. + + The name. + + + + + Finds the item with the specified source. + + The source. + + + + + Adds the specified source as . + + The item source. + + + + Adds the specified source as in the specified . + + Name of the group. + The item source. + + + + Inserts the specified source as at the specified index. + + The index. + The item source. + + + + Inserts the specified source as at the specified index in the specified . + + The index. + Name of the group. + The item source. + + + + Inserts an element into the at the specified index. + + The zero-based index at which should be inserted. + The object to insert. The value can be null for reference types. + + is less than zero. + -or- + is greater than . + + + + + Replaces the element at the specified index. + + The zero-based index of the element to replace. + The new value for the element at the specified index. The value can be null for reference types. + + is less than zero. + -or- + is greater than . + + + + + Gets or sets the default path. + + The default path. + + + + Gets the asset groups. + + The asset groups. + + + + Gets the asset items. + + The asset items. + + + + Defines the fluent interface for configuring web assets. + + + + + Initializes a new instance of the class. + + Type of the asset. + The assets. + + + + Performs an implicit conversion from to . + + The builder. + The result of the conversion. + + + + Returns the internal collection. + + + + + + Adds a new web asset + + The source. + + + <%= Html.Telerik().ScriptRegistrar() + .Scripts(scripts => scripts.Add("script1.js")) + %> + + + + + + Adds a new web asset group. + + The name. + The configure action. + + + <%= Html.Telerik().ScriptRegistrar() + .Scripts(scripts => scripts.AddGroup("Group1", group => + { + group.Add("script1.js"); + } + )) + %> + + + + + + Adds the specified shared group. + + The name. + + + <%= Html.Telerik().ScriptRegistrar() + .Scripts(scripts => scripts.AddShareGroup("SharedGroup1")) + %> + + + + + + Executes the provided delegate that is used to configure the group fluently. + + The name. + The configure action. + + + + Defines the group. + + + + + Initializes a new instance of the class. + + The name. + if set to true [is shared]. + + + + Gets or sets the name. + + The name. + + + + Gets or sets a value indicating whether this instance is shared. + + true if this instance is shared; otherwise, false. + + + + Gets or sets the default path. + + The default path. + + + + Gets or sets a value indicating whether Telerik content delivery network would be used. + + + true if [use Telerik content delivery network]; otherwise, false. + + + + + Gets or sets the content delivery network URL. + + The content delivery network URL. + + + + Gets or sets a value indicating whether this is disabled. + + true if disabled; otherwise, false. + + + + Gets or sets the version. + + The version. + + + + Gets or sets a value indicating whether this is compress. + + true if compress; otherwise, false. + + + + Gets or sets the cache duration in days. + + The cache duration in days. + + + + Gets or sets a value indicating whether this is combined. + + true if combined; otherwise, false. + + + + Gets the items. + + The items. + + + + Class used to build initialization script of jQuery plugin. + + + + + Initializes a new instance of the class. + + The id. + The type. + The text writer. + + + + Starts writing this instance. + + + + + + Appends the specified key value pair to the end of this instance. + + The key value pair. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and nullable value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + The default value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + if set to true [value]. + + + + + Appends the specified name and value to the end of this instance. + + The name. + if set to true [value]. + if set to true [default value]. + + + + + Appends the specified name and only the date of the passed . + + The name. + The value. + + + + + Appends the specified name and only the date of the passed . + + The name. + The value. + + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The action. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The values. + + + + + Appends the specified name and value to the end of this instance. + + The name. + The values. + + + + + Appends the specified name and value to the end of this instance. + + The type of the enum. + The name. + The value. + + + + + Appends the specified name and value to the end of this instance. + + The type of the enum. + The name. + The value. + The default value. + + + + + + Completes this instance. + + + + + Defines members that a class must implement in order to provide helper methods for resolving relative path. + + + + + Returns the relative path for the specified virtual path. + + The URL. + + + + + HTMLHelper extension for providing access to . + + + + + Gets the Telerik View Component Factory + + The helper. + The Factory + + + + Gets the Telerik View Component Factory + + The helper. + The Factory + + + + Container of scriptable component. + + + + + Registers the specified component. + + The component. + + + + Provides the factory methods for creating Telerik View Components. + + + + + Creates a + + + + <%= Html.Telerik().StyleSheetRegistrar() + .DefaultGroup(group => group + group.Add("Site.css") + .Add("telerik.common.css") + .Add("telerik.vista.css") + .Compressed(true) + ) + %> + + + + + + Creates a + + + + <%= Html.Telerik().ScriptRegistrar() + %> + + + + + + Creates a + + + + <%= Html.Telerik().Menu() + .Name("Menu") + .Items(items => { /* add items here */ }); + %> + + + + + + Creates a + + + + <%= Html.Telerik().Editor() + .Name("Editor"); + %> + + + + + + Creates a new bound to the specified data item type. + + + The type of the data item + + <%= Html.Telerik().Grid<Order>() + .Name("Grid") + .BindTo(Model) + %> + + + + Do not forget to bind the grid using the method when using this overload. + + + + + Creates a new bound to the specified data source. + + The type of the data item + The data source. + + + <%= Html.Telerik().Grid(Model) + .Name("Grid") + %> + + + + + + Creates a new bound an item in ViewData. + + Type of the data item + The data source view data key. + + + <%= Html.Telerik().Grid<Order>("orders") + .Name("Grid") + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().TabStrip() + .Name("TabStrip") + .Items(items => + { + items.Add().Text("First"); + items.Add().Text("Second"); + }) + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().DatePicker() + .Name("DatePicker") + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().Calendar() + .Name("Calendar") + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().PanelBar() + .Name("PanelBar") + .Items(items => + { + items.Add().Text("First"); + items.Add().Text("Second"); + }) + %> + + + + + + Creates a + + + + <%= Html.Telerik().TreeView() + .Name("TreeView") + .Items(items => { /* add items here */ }); + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().NumericTextBox() + .Name("NumericTextBox") + %> + + + Returns . + + + + + Creates a new . + + + + <%= Html.Telerik().CurrencyTextBox() + .Name("CurrencyTextBox") + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().PercentTextBox() + .Name("PercentTextBox") + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().IntegerTextBox() + .Name("IntegerTextBox") + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().Window() + .Name("Window") + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().DropDownList() + .Name("DropDownList") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().ComboBox() + .Name("ComboBox") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + %> + + + + + + Creates a new . + + + + <%= Html.Telerik().AutoComplete() + .Name("AutoComplete") + .Items(items => + { + items.Add().Text("First Item"); + items.Add().Text("Second Item"); + }) + %> + + + + + + Creates a new UI component. + + + + + Creates a new . + + + + <%= Html.Telerik().NumericTextBoxFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().NumericTextBoxFor(m=>m.NullableProperty) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().IntegerTextBoxFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().IntegerTextBoxFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().CurrencyTextBoxFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().CurrencyTextBoxFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().PercentTextBoxFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().PercentTextBoxFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().DatePickerFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().DatePickerFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().DropDownListFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().ComboBoxFor(m=>m.Property) %> + + + + + + Creates a new . + + + + <%= Html.Telerik().AutoCompleteFor(m=>m.Property) %> + + + + + + The default web asset merger. + + + + + Initializes a new instance of the class. + + The asset registry. + The URL resolver. + The URL encoder. + + + + Merges the specified assets. + + Type of the content. + The asset handler path. + if set to true [is secure]. + if set to true [can compress]. + The assets. + + + + + Defines members that a class must implement in order to act as wrapper for script, + + + + + Gets the on page load start. + + The on page load start. + + + + Gets the on page load end. + + The on page load end. + + + + Gets the on page unload start. + + The on page unload start. + + + + Gets the on page unload end. + + The on page unload end. + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The style sheet registrar. + + + + Performs an implicit conversion from to . + + The builder. + The result of the conversion. + + + + Returns the internal style sheet registrar. + + + + + + Sets the asset handler path. Path must be a virtual path. + + The value. + + + <%= Html.Telerik().StyleSheetRegistrar() + .AssetHandlerPath("~/asset.axd") + %> + + + + + + Configures the . + + The configure action. + + + <%= Html.Telerik().StyleSheetRegistrar() + .DefaultGroup(group => group + .Add("style1.css") + .Add("style2.css") + .Combined(true) + ) + %> + + + + + + Executes the provided delegate that is used to register the stylesheet files fluently. + + The configure action. + + + + + Renders the + + + + <% Html.Telerik().StyleSheetRegistrar() + .Render(); + %> + + + + + + Manages ASP.NET MVC views style sheet files. + + + + + Used to ensure that the same instance is used for the same HttpContext. + + + + + Initializes a new instance of the class. + + The style sheets. + The view context. + The asset merger. + + + + Writes the stylesheets in the response. + + + + + Writes all stylesheet source. + + The writer. + + + + Gets or sets the asset handler path. Path must be a virtual path. The default value is set to WebAssetHttpHandler.DefaultPath. + + The asset handler path. + + + + Gets or sets the default group. + + The default group. + + + + Gets the stylesheets that will be rendered in the view. + + The style sheets. + + + + Gets or sets the view context. + + The view context. + + + + Gets or sets the asset merger. + + The asset merger. + + + + Class used to resolve relative path for virtual path. + + + + + Returns the relative path for the specified virtual path. + + The URL. + + + + + Wrap the script for the jQuery ready/unload events. + + + + + Gets the on page load start. + + The on page load start. + + + + Gets the on page load end. + + The on page load end. + + + + Gets the on page unload start. + + The on page unload start. + + + + Gets the on page unload end. + + The on page unload end. + + + + Helper class to get currrent and invariant culture. + + + + + Gets the System.Globalization.CultureInfo that represents the current culture used by the Resource Manager to look up culture-specific resources at run time. + + The current. + + + + Gets the System.Globalization.CultureInfo that represents the current UI culture + + The current. + + + + Gets the System.Globalization.CultureInfo that is culture-independent (invariant). + + The invariant. + + + + Defines the fluent interface for configuring the . + + + + + Initializes a new instance of the class. + + The asset item group. + + + + Performs an implicit conversion from to . + + The builder. + The result of the conversion. + + + + Returns the internal group. + + + + + + Sets whether Telerik content delivery network would be used. + + if set to true [value]. + + + + + Sets the content delivery network URL. + + The value. + + + <%= Html.Telerik().ScriptRegistrar() + .DefaultGroup(group => group.ContentDeliveryNetworkUrl("http://www.example.com")) + %> + + + + + + Enables or disables the group + + + + <%= Html.Telerik().ScriptRegistrar() + .DefaultGroup(group => group.Enabled((bool)ViewData["enabled"])) + %> + + + + + + Sets the version. + + The value. + + + <%= Html.Telerik().ScriptRegistrar() + .DefaultGroup(group => group.Version("1.1")) + %> + + + + + + Sets whether the groups will be served as compressed. By default asset groups are not compressed. + + + + <%= Html.Telerik().ScriptRegistrar() + .DefaultGroup(group => group.Compress(true)) + %> + + + + + + Sets the caches the duration of this group. + + The value. + + + <%= Html.Telerik().ScriptRegistrar() + .DefaultGroup(group => group.CacheDurationInDays(365)) + %> + + + + + + Sets whether the groups items will be served as combined. + + + + <%= Html.Telerik().ScriptRegistrar() + .DefaultGroup(group => group.Combined(true)) + %> + + + + + + Sets the defaults path of the containing . + + The path. + + + + + Adds the specified source as . + + The value. + + + <%= Html.Telerik().ScriptRegistrar() + .DefaultGroup(group => group.Add("script1.js")) + %> + + + + + + Manages ASP.NET MVC javascript files and statements. + + + + + Used to ensure that the same instance is used for the same HttpContext. + + + + + Initializes a new instance of the class. + + The scripts. + The scriptable components. + The view context. + The asset merger. + The script wrapper. + + + + Registers the scriptable component. + + The component. + + + + Writes the scripts in the response. + + + + + Writes all script source and script statements. + + The writer. + + + + Gets the framework script file names. + + The framework script file names. + + + + Gets or sets a value indicating whether [exclude framework scripts]. + + + true if [exclude framework scripts]; otherwise, false. + + + + + Gets or sets the asset handler path. Path must be a virtual path. The default value is set to . + + The asset handler path. + + + + Gets the default script group. + + The default group. + + + + Gets or sets a value indicating whether [enable globalization]. + + true if [enable globalization]; otherwise, false. + + + + Gets the scripts that will be rendered in the view. + + The scripts. + + + + Gets the on document ready actions. + + The on page load actions. + + + + Gets the on document ready statements that is used in RenderAction. + + The on page load actions. + + + + Gets the on window unload actions. + + The on page unload actions. + + + + Gets the on window unload statements.that is used in RenderAction. + + The on page load actions. + + + + Gets the view context. + + The view context. + + + + Gets the asset merger. + + The asset merger. + + + + Gets the script wrapper that is used to write the script statements. + + The script wrapper. + + + + Defines the fluent interface for configuring the component. + + + + + Initializes a new instance of the class. + + The script registrar. + + + + Performs an implicit conversion from to . + + The builder. + The result of the conversion. + + + + Returns the internal script registrar. + + + + + + Sets the asset handler path. Path must be a virtual path. + + The value. + + + <%= Html.Telerik().ScriptRegistrar() + .AssetHandlerPath("~/asset.axd") + %> + + + + + + Configures the . + + The configure action. + + + <%= Html.Telerik().ScriptRegistrar() + .DefaultGroup(group => group + .Add("script1.js") + .Add("script2.js") + .Combined(true) + ) + %> + + + + + + Enables globalization support. + + if set to true [enable]. + + + <%= Html.Telerik().ScriptRegistrar() + .Globalization(true) + %> + + + + + + Includes the jQuery script files. By default jQuery JavaScript is included. + + + Telerik Extensions for ASP.NET MVC require jQuery so make sure you manually include the JavaScrip file + if you disable the automatic including. + + if set to true [enable]. + + + <%= Html.Telerik().ScriptRegistrar() + .jQuery(false) + %> + + + + + + Executes the provided delegate that is used to register the script files fluently in different groups. + + The configure action. + + + + + Defines the inline handler executed when the DOM document is ready (using the $(document).ready jQuery event) + + The action defining the inline handler + + + <% Html.Telerik().ScriptRegistrar() + .OnDocumentReady(() => + { + %> + function() { + alert("Document is ready"); + } + <% + }) + .Render(); + %> + + + + + + Appends the specified statement in $(document).ready jQuery event. This method should be + used in Html.RenderAction(). + + The statements. + + + + + Defines the inline handler executed when the DOM window object is unloaded. + + The action defining the inline handler + + + <% Html.Telerik().ScriptRegistrar() + .OnWindowUnload(() => + { + %> + function() { + // event handler code + } + <% + }) + .Render(); + %> + + + + + + Appends the specified statement window unload event. This method should be + used in Html.RenderAction(). + + The statements. + + + + + Renders the + + + + <% Html.Telerik().ScriptRegistrar() + .Render(); + %> + + + + + + Web asset types. + + + + + None, used for internal purpose. + + + + + Stylesheet + + + + + Javascript + + + + diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index c36a9c25d..f34ba84e3 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -24,6 +24,7 @@ DEBUG;TRACE prompt 4 + x86 pdbonly @@ -47,6 +48,7 @@ ..\NzbDrone.Core\Libraries\System.Data.SQLite.dll + True @@ -69,6 +71,10 @@ + + False + Libraries\Telerik.Web.Mvc.dll + @@ -78,22 +84,125 @@ Global.asax + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer @@ -104,7 +213,6 @@ Web.config - @@ -124,7 +232,6 @@ - diff --git a/NzbDrone.Web/Scripts/2010.2.825/jquery-1.4.2.min.js b/NzbDrone.Web/Scripts/2010.2.825/jquery-1.4.2.min.js new file mode 100644 index 000000000..7c2430802 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/jquery-1.4.2.min.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/NzbDrone.Web/Scripts/2010.2.825/jquery.validate.min.js b/NzbDrone.Web/Scripts/2010.2.825/jquery.validate.min.js new file mode 100644 index 000000000..6264866fc --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/jquery.validate.min.js @@ -0,0 +1,16 @@ +/* + * jQuery validation plug-in 1.7 + * + * http://bassistance.de/jquery-plugins/jquery-plugin-validation/ + * http://docs.jquery.com/Plugins/Validation + * + * Copyright (c) 2006 - 2008 Jörn Zaefferer + * + * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ +(function($){$.extend($.fn,{validate:function(options){if(!this.length){options&&options.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing");return;}var validator=$.data(this[0],'validator');if(validator){return validator;}validator=new $.validator(options,this[0]);$.data(this[0],'validator',validator);if(validator.settings.onsubmit){this.find("input, button").filter(".cancel").click(function(){validator.cancelSubmit=true;});if(validator.settings.submitHandler){this.find("input, button").filter(":submit").click(function(){validator.submitButton=this;});}this.submit(function(event){if(validator.settings.debug)event.preventDefault();function handle(){if(validator.settings.submitHandler){if(validator.submitButton){var hidden=$("").attr("name",validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);}validator.settings.submitHandler.call(validator,validator.currentForm);if(validator.submitButton){hidden.remove();}return false;}return true;}if(validator.cancelSubmit){validator.cancelSubmit=false;return handle();}if(validator.form()){if(validator.pendingRequest){validator.formSubmitted=true;return false;}return handle();}else{validator.focusInvalid();return false;}});}return validator;},valid:function(){if($(this[0]).is('form')){return this.validate().form();}else{var valid=true;var validator=$(this[0].form).validate();this.each(function(){valid&=validator.element(this);});return valid;}},removeAttrs:function(attributes){var result={},$element=this;$.each(attributes.split(/\s/),function(index,value){result[value]=$element.attr(value);$element.removeAttr(value);});return result;},rules:function(command,argument){var element=this[0];if(command){var settings=$.data(element.form,'validator').settings;var staticRules=settings.rules;var existingRules=$.validator.staticRules(element);switch(command){case"add":$.extend(existingRules,$.validator.normalizeRule(argument));staticRules[element.name]=existingRules;if(argument.messages)settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);break;case"remove":if(!argument){delete staticRules[element.name];return existingRules;}var filtered={};$.each(argument.split(/\s/),function(index,method){filtered[method]=existingRules[method];delete existingRules[method];});return filtered;}}var data=$.validator.normalizeRules($.extend({},$.validator.metadataRules(element),$.validator.classRules(element),$.validator.attributeRules(element),$.validator.staticRules(element)),element);if(data.required){var param=data.required;delete data.required;data=$.extend({required:param},data);}return data;}});$.extend($.expr[":"],{blank:function(a){return!$.trim(""+a.value);},filled:function(a){return!!$.trim(""+a.value);},unchecked:function(a){return!a.checked;}});$.validator=function(options,form){this.settings=$.extend(true,{},$.validator.defaults,options);this.currentForm=form;this.init();};$.validator.format=function(source,params){if(arguments.length==1)return function(){var args=$.makeArray(arguments);args.unshift(source);return $.validator.format.apply(this,args);};if(arguments.length>2&¶ms.constructor!=Array){params=$.makeArray(arguments).slice(1);}if(params.constructor!=Array){params=[params];}$.each(params,function(i,n){source=source.replace(new RegExp("\\{"+i+"\\}","g"),n);});return source;};$.extend($.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:true,errorContainer:$([]),errorLabelContainer:$([]),onsubmit:true,ignore:[],ignoreTitle:false,onfocusin:function(element){this.lastActive=element;if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.settings.unhighlight.call(this,element,this.settings.errorClass,this.settings.validClass);this.errorsFor(element).hide();}},onfocusout:function(element){if(!this.checkable(element)&&(element.name in this.submitted||!this.optional(element))){this.element(element);}},onkeyup:function(element){if(element.name in this.submitted||element==this.lastElement){this.element(element);}},onclick:function(element){if(element.name in this.submitted)this.element(element);else if(element.parentNode.name in this.submitted)this.element(element.parentNode);},highlight:function(element,errorClass,validClass){$(element).addClass(errorClass).removeClass(validClass);},unhighlight:function(element,errorClass,validClass){$(element).removeClass(errorClass).addClass(validClass);}},setDefaults:function(settings){$.extend($.validator.defaults,settings);},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:$.validator.format("Please enter no more than {0} characters."),minlength:$.validator.format("Please enter at least {0} characters."),rangelength:$.validator.format("Please enter a value between {0} and {1} characters long."),range:$.validator.format("Please enter a value between {0} and {1}."),max:$.validator.format("Please enter a value less than or equal to {0}."),min:$.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function(){this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var groups=(this.groups={});$.each(this.settings.groups,function(key,value){$.each(value.split(/\s/),function(index,name){groups[name]=key;});});var rules=this.settings.rules;$.each(rules,function(key,value){rules[key]=$.validator.normalizeRule(value);});function delegate(event){var validator=$.data(this[0].form,"validator"),eventType="on"+event.type.replace(/^validate/,"");validator.settings[eventType]&&validator.settings[eventType].call(validator,this[0]);}$(this.currentForm).validateDelegate(":text, :password, :file, select, textarea","focusin focusout keyup",delegate).validateDelegate(":radio, :checkbox, select, option","click",delegate);if(this.settings.invalidHandler)$(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler);},form:function(){this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid())$(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid();},checkForm:function(){this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());elements[i];i++){this.check(elements[i]);}return this.valid();},element:function(element){element=this.clean(element);this.lastElement=element;this.prepareElement(element);this.currentElements=$(element);var result=this.check(element);if(result){delete this.invalid[element.name];}else{this.invalid[element.name]=true;}if(!this.numberOfInvalids()){this.toHide=this.toHide.add(this.containers);}this.showErrors();return result;},showErrors:function(errors){if(errors){$.extend(this.errorMap,errors);this.errorList=[];for(var name in errors){this.errorList.push({message:errors[name],element:this.findByName(name)[0]});}this.successList=$.grep(this.successList,function(element){return!(element.name in errors);});}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors();},resetForm:function(){if($.fn.resetForm)$(this.currentForm).resetForm();this.submitted={};this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass);},numberOfInvalids:function(){return this.objectLength(this.invalid);},objectLength:function(obj){var count=0;for(var i in obj)count++;return count;},hideErrors:function(){this.addWrapper(this.toHide).hide();},valid:function(){return this.size()==0;},size:function(){return this.errorList.length;},focusInvalid:function(){if(this.settings.focusInvalid){try{$(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin");}catch(e){}}},findLastActive:function(){var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,function(n){return n.element.name==lastActive.name;}).length==1&&lastActive;},elements:function(){var validator=this,rulesCache={};return $([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name&&validator.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in rulesCache||!validator.objectLength($(this).rules()))return false;rulesCache[this.name]=true;return true;});},clean:function(selector){return $(selector)[0];},errors:function(){return $(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext);},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);this.currentElements=$([]);},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:function(element){this.reset();this.toHide=this.errorsFor(element);},check:function(element){element=this.clean(element);if(this.checkable(element)){element=this.findByName(element.name)[0];}var rules=$(element).rules();var dependencyMismatch=false;for(method in rules){var rule={method:method,parameters:rules[method]};try{var result=$.validator.methods[method].call(this,element.value.replace(/\r/g,""),element,rule.parameters);if(result=="dependency-mismatch"){dependencyMismatch=true;continue;}dependencyMismatch=false;if(result=="pending"){this.toHide=this.toHide.not(this.errorsFor(element));return;}if(!result){this.formatAndAdd(element,rule);return false;}}catch(e){this.settings.debug&&window.console&&console.log("exception occured when checking element "+element.id ++", check the '"+rule.method+"' method",e);throw e;}}if(dependencyMismatch)return;if(this.objectLength(rules))this.successList.push(element);return true;},customMetaMessage:function(element,method){if(!$.metadata)return;var meta=this.settings.meta?$(element).metadata()[this.settings.meta]:$(element).metadata();return meta&&meta.messages&&meta.messages[method];},customMessage:function(name,method){var m=this.settings.messages[name];return m&&(m.constructor==String?m:m[method]);},findDefined:function(){for(var i=0;iWarning: No message defined for "+element.name+"");},formatAndAdd:function(element,rule){var message=this.defaultMessage(element,rule.method),theregex=/\$?\{(\d+)\}/g;if(typeof message=="function"){message=message.call(this,rule.parameters,element);}else if(theregex.test(message)){message=jQuery.format(message.replace(theregex,'{$1}'),rule.parameters);}this.errorList.push({message:message,element:element});this.errorMap[element.name]=message;this.submitted[element.name]=message;},addWrapper:function(toToggle){if(this.settings.wrapper)toToggle=toToggle.add(toToggle.parent(this.settings.wrapper));return toToggle;},defaultShowErrors:function(){for(var i=0;this.errorList[i];i++){var error=this.errorList[i];this.settings.highlight&&this.settings.highlight.call(this,error.element,this.settings.errorClass,this.settings.validClass);this.showLabel(error.element,error.message);}if(this.errorList.length){this.toShow=this.toShow.add(this.containers);}if(this.settings.success){for(var i=0;this.successList[i];i++){this.showLabel(this.successList[i]);}}if(this.settings.unhighlight){for(var i=0,elements=this.validElements();elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function(){return this.currentElements.not(this.invalidElements());},invalidElements:function(){return $(this.errorList).map(function(){return this.element;});},showLabel:function(element,message){var label=this.errorsFor(element);if(label.length){label.removeClass().addClass(this.settings.errorClass);label.attr("generated")&&label.html(message);}else{label=$("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(element),generated:true}).addClass(this.settings.errorClass).html(message||"");if(this.settings.wrapper){label=label.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();}if(!this.labelContainer.append(label).length)this.settings.errorPlacement?this.settings.errorPlacement(label,$(element)):label.insertAfter(element);}if(!message&&this.settings.success){label.text("");typeof this.settings.success=="string"?label.addClass(this.settings.success):this.settings.success(label);}this.toShow=this.toShow.add(label);},errorsFor:function(element){var name=this.idOrName(element);return this.errors().filter(function(){return $(this).attr('for')==name;});},idOrName:function(element){return this.groups[element.name]||(this.checkable(element)?element.name:element.id||element.name);},checkable:function(element){return/radio|checkbox/i.test(element.type);},findByName:function(name){var form=this.currentForm;return $(document.getElementsByName(name)).map(function(index,element){return element.form==form&&element.name==name&&element||null;});},getLength:function(value,element){switch(element.nodeName.toLowerCase()){case'select':return $("option:selected",element).length;case'input':if(this.checkable(element))return this.findByName(element.name).filter(':checked').length;}return value.length;},depend:function(param,element){return this.dependTypes[typeof param]?this.dependTypes[typeof param](param,element):true;},dependTypes:{"boolean":function(param,element){return param;},"string":function(param,element){return!!$(param,element.form).length;},"function":function(param,element){return param(element);}},optional:function(element){return!$.validator.methods.required.call(this,$.trim(element.value),element)&&"dependency-mismatch";},startRequest:function(element){if(!this.pending[element.name]){this.pendingRequest++;this.pending[element.name]=true;}},stopRequest:function(element,valid){this.pendingRequest--;if(this.pendingRequest<0)this.pendingRequest=0;delete this.pending[element.name];if(valid&&this.pendingRequest==0&&this.formSubmitted&&this.form()){$(this.currentForm).submit();this.formSubmitted=false;}else if(!valid&&this.pendingRequest==0&&this.formSubmitted){$(this.currentForm).triggerHandler("invalid-form",[this]);this.formSubmitted=false;}},previousValue:function(element){return $.data(element,"previousValue")||$.data(element,"previousValue",{old:null,valid:true,message:this.defaultMessage(element,"remote")});}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(className,rules){className.constructor==String?this.classRuleSettings[className]=rules:$.extend(this.classRuleSettings,className);},classRules:function(element){var rules={};var classes=$(element).attr('class');classes&&$.each(classes.split(' '),function(){if(this in $.validator.classRuleSettings){$.extend(rules,$.validator.classRuleSettings[this]);}});return rules;},attributeRules:function(element){var rules={};var $element=$(element);for(method in $.validator.methods){var value=$element.attr(method);if(value){rules[method]=value;}}if(rules.maxlength&&/-1|2147483647|524288/.test(rules.maxlength)){delete rules.maxlength;}return rules;},metadataRules:function(element){if(!$.metadata)return{};var meta=$.data(element.form,'validator').settings.meta;return meta?$(element).metadata()[meta]:$(element).metadata();},staticRules:function(element){var rules={};var validator=$.data(element.form,'validator');if(validator.settings.rules){rules=$.validator.normalizeRule(validator.settings.rules[element.name])||{};}return rules;},normalizeRules:function(rules,element){$.each(rules,function(prop,val){if(val===false){delete rules[prop];return;}if(val.param||val.depends){var keepRule=true;switch(typeof val.depends){case"string":keepRule=!!$(val.depends,element.form).length;break;case"function":keepRule=val.depends.call(element,element);break;}if(keepRule){rules[prop]=val.param!==undefined?val.param:true;}else{delete rules[prop];}}});$.each(rules,function(rule,parameter){rules[rule]=$.isFunction(parameter)?parameter(element):parameter;});$.each(['minlength','maxlength','min','max'],function(){if(rules[this]){rules[this]=Number(rules[this]);}});$.each(['rangelength','range'],function(){if(rules[this]){rules[this]=[Number(rules[this][0]),Number(rules[this][1])];}});if($.validator.autoCreateRanges){if(rules.min&&rules.max){rules.range=[rules.min,rules.max];delete rules.min;delete rules.max;}if(rules.minlength&&rules.maxlength){rules.rangelength=[rules.minlength,rules.maxlength];delete rules.minlength;delete rules.maxlength;}}if(rules.messages){delete rules.messages;}return rules;},normalizeRule:function(data){if(typeof data=="string"){var transformed={};$.each(data.split(/\s/),function(){transformed[this]=true;});data=transformed;}return data;},addMethod:function(name,method,message){$.validator.methods[name]=method;$.validator.messages[name]=message!=undefined?message:$.validator.messages[name];if(method.length<3){$.validator.addClassRules(name,$.validator.normalizeRule(name));}},methods:{required:function(value,element,param){if(!this.depend(param,element))return"dependency-mismatch";switch(element.nodeName.toLowerCase()){case'select':var val=$(element).val();return val&&val.length>0;case'input':if(this.checkable(element))return this.getLength(value,element)>0;default:return $.trim(value).length>0;}},remote:function(value,element,param){if(this.optional(element))return"dependency-mismatch";var previous=this.previousValue(element);if(!this.settings.messages[element.name])this.settings.messages[element.name]={};previous.originalMessage=this.settings.messages[element.name].remote;this.settings.messages[element.name].remote=previous.message;param=typeof param=="string"&&{url:param}||param;if(previous.old!==value){previous.old=value;var validator=this;this.startRequest(element);var data={};data[element.name]=value;$.ajax($.extend(true,{url:param,mode:"abort",port:"validate"+element.name,dataType:"json",data:data,success:function(response){validator.settings.messages[element.name].remote=previous.originalMessage;var valid=response===true;if(valid){var submitted=validator.formSubmitted;validator.prepareElement(element);validator.formSubmitted=submitted;validator.successList.push(element);validator.showErrors();}else{var errors={};var message=(previous.message=response||validator.defaultMessage(element,"remote"));errors[element.name]=$.isFunction(message)?message(value):message;validator.showErrors(errors);}previous.valid=valid;validator.stopRequest(element,valid);}},param));return"pending";}else if(this.pending[element.name]){return"pending";}return previous.valid;},minlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)>=param;},maxlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)<=param;},rangelength:function(value,element,param){var length=this.getLength($.trim(value),element);return this.optional(element)||(length>=param[0]&&length<=param[1]);},min:function(value,element,param){return this.optional(element)||value>=param;},max:function(value,element,param){return this.optional(element)||value<=param;},range:function(value,element,param){return this.optional(element)||(value>=param[0]&&value<=param[1]);},email:function(value,element){return 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);},url:function(value,element){return 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);},date:function(value,element){return this.optional(element)||!/Invalid|NaN/.test(new Date(value));},dateISO:function(value,element){return this.optional(element)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);},number:function(value,element){return this.optional(element)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);},digits:function(value,element){return this.optional(element)||/^\d+$/.test(value);},creditcard:function(value,element){if(this.optional(element))return"dependency-mismatch";if(/[^0-9-]+/.test(value))return false;var nCheck=0,nDigit=0,bEven=false;value=value.replace(/\D/g,"");for(var n=value.length-1;n>=0;n--){var cDigit=value.charAt(n);var nDigit=parseInt(cDigit,10);if(bEven){if((nDigit*=2)>9)nDigit-=9;}nCheck+=nDigit;bEven=!bEven;}return(nCheck%10)==0;},accept:function(value,element,param){param=typeof param=="string"?param.replace(/,/g,'|'):"png|jpe?g|gif";return this.optional(element)||value.match(new RegExp(".("+param+")$","i"));},equalTo:function(value,element,param){var target=$(param).unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){$(element).valid();});return value==target.val();}}});$.format=$.validator.format;})(jQuery);;(function($){var ajax=$.ajax;var pendingRequests={};$.ajax=function(settings){settings=$.extend(settings,$.extend({},$.ajaxSettings,settings));var port=settings.port;if(settings.mode=="abort"){if(pendingRequests[port]){pendingRequests[port].abort();}return(pendingRequests[port]=ajax.apply(this,arguments));}return ajax.apply(this,arguments);};})(jQuery);;(function($){if(!jQuery.event.special.focusin&&!jQuery.event.special.focusout&&document.addEventListener){$.each({focus:'focusin',blur:'focusout'},function(original,fix){$.event.special[fix]={setup:function(){this.addEventListener(original,handler,true);},teardown:function(){this.removeEventListener(original,handler,true);},handler:function(e){arguments[0]=$.event.fix(e);arguments[0].type=fix;return $.event.handle.apply(this,arguments);}};function handler(e){e=$.event.fix(e);e.type=fix;return $.event.handle.call(this,e);}});};$.extend($.fn,{validateDelegate:function(delegate,type,handler){return this.bind(type,function(event){var target=$(event.target);if(target.is(delegate)){return handler.apply(target,arguments);}});}});})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.autocomplete.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.autocomplete.min.js new file mode 100644 index 000000000..2c86ad184 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.autocomplete.min.js @@ -0,0 +1 @@ +(function(a){var b=a.telerik;b.autocomplete=function(c,d){a.extend(this,d);var e=a(c);this.$text=e;this.element=c;this.$element=e;this.trigger=new b.list.trigger(this);this.trigger.change=function(){var j=this.component.text();var i=this.component.previousValue;if(i==undefined||j!=i){b.trigger(this.component.element,"valueChange",{value:j})}this.component.previousValue=j};this.loader=new b.list.loader(this);this.loader.showBusy=function(){this.busyTimeout=setTimeout(a.proxy(function(){this.component.$element.addClass("t-loading")},this),100)};this.loader.hideBusy=function(){clearTimeout(this.busyTimeout);this.component.$element.removeClass("t-loading")};this.filtering=new b.list.filtering(this);this.filtering.autoFill=function(r,n){if(r.autoFill&&(r.lastKeyCode!=8&&r.lastKeyCode!=46)){var u=r.$text[0];var i=u.value;var s=r.separator;var o=b.caretPos(u);var k=s?b.lastIndexOf(i.substring(0,o),s):-1;var p=k!=-1?k+s.length:0;var l=i.substring(p,o);var t=n.toLowerCase().indexOf(l.toLowerCase());if(t!=-1){var q=n.substring(t+l.length);var j=f(u,s);var m=i.split(s);m[j]=l+q;u.value=m.join(s)+(r.multiple&&j!=0&&j==m.length-1?s:"");b.list.selection(u,o,o+q.length)}}};this.filtering.multiple=a.proxy(function(i){if(this.multiple){i=i.split(this.separator);i=i[f(this.$text[0],this.separator)]}return i},this);this.dropDown=new b.dropDown({outerHeight:e.outerHeight(),outerWidth:e.outerWidth(),zIndex:b.list.getZIndex(e),attr:this.dropDownAttr,effects:this.effects,onOpen:a.proxy(function(){var j=this.dropDown;var i=e.offset();j.position(i.top,i.left);if(!j.outerHeight){j.outerHeight=e.outerHeight()}if(!j.outerWidth){j.outerWidth=e.outerWidth();j.$element.css("width",j.outerWidth-2)}return true},this),onClick:a.proxy(function(i){this.select(i.item);this.trigger.change();this.trigger.close()},this)});this.fill=function(j){function i(r){var q=r.highlightFirst?n.$items.first():null;if(q){q.addClass("t-state-selected")}}var o=this.loader;var n=this.dropDown;var k=this.minChars;var m=this.text();var p=m.length;if(!n.$items&&!o.ajaxError){if(o.isAjax()&&p>=k){var l={};l[this.queryString.text]=m;o.ajaxRequest(function(q){this.data=q;n.dataBind(q);i(this);b.trigger(this.element,"dataBound");if(j){j()}},{data:l})}else{n.dataBind(this.data);i(this);if(j){j()}}}};this.text=function(i){return this.$text.val(i)};this.value=function(){return this.text.apply(this,arguments)};this.select=function(q){var p=this.highlight(q);if(p==-1){return p}var j=this.filteredDataIndexes;var l=(j&&j.length)>0?j[p]:p;var q=this.data[l];var n=q.Text?q.Text:q;var i=n;if(this.multiple){var k=this.$element;var o=this.separator;var m=f(k[0],o);i=k.val().split(o);i[m]=n;i=i.join(o)+(m==i.length-1?o:"")}this.text(i)};this.previousValue=this.value();b.list.common.call(this);b.list.filters.call(this);b.bind(this,{dataBinding:this.onDataBinding,dataBound:this.onDataBound,error:this.onError,open:this.onOpen,close:this.onClose,valueChange:this.onChange,load:this.onLoad});e.bind({focus:a.proxy(function(i){i.stopPropagation()},this),keydown:a.proxy(h,this),keypress:a.proxy(function(j){var i=j.keyCode||j.charCode;if(i==0||a.inArray(i,b.list.keycodes)!=-1){return true}g(this)},this)});a(document).bind("mousedown",a.proxy(function(j){var i=this.dropDown.$element.parent();if((i.length>0)&&!a.contains(c,j.target)&&!a.contains(i[0],j.target)){this.trigger.change();this.trigger.close()}},this));function f(i,j){return i.value.substring(0,b.caretPos(i)).split(j).length-1}function g(i){clearTimeout(i.timeout);i.timeout=setTimeout(function(){i.filtering.filter(i)},i.delay)}function h(r){var m=this.trigger;var j=this.dropDown;var n=r.keyCode||r.which;this.lastKeyCode=n;if(!r.shiftKey&&n>36&&n<41&&n!=37&&n!=39){r.preventDefault();if(j.isOpened()){if(!j.$items){this.fill()}var k=j.$items;var o=k.filter(".t-state-selected:first");var i=[];if(n==38){var s=o.prev();i=s.length?s:k.last()}else{if(n==40){var p=o.next();i=p.length?p:k.first()}}if(i.length){var t=i[0];this.highlight(t);j.scrollTo(t);this.filtering.autoFill(this,i.text())}}}if(n==8||n==46){var l=this.$element;if(l.val()!=""){g(this)}setTimeout(a.proxy(function(){if(l.val()==""){m.close()}},this),0)}if(n==13){if(j.$items.length){var q=j.$items.filter(".t-state-selected:first");if(j.isOpened()){r.preventDefault()}if(q.length>0){this.select(q[0]);m.change();m.close();b.list.moveToEnd(this.element)}}}if(n==27||n==9){m.change();m.close()}}};a.fn.tAutoComplete=function(c){return b.create(this,{name:"tAutoComplete",init:function(d,e){return new b.autocomplete(d,e)},options:c})};a.fn.tAutoComplete.defaults={effects:b.fx.slide.defaults(),filter:1,delay:200,minChars:1,cache:true,autoFill:false,highlightFirst:false,queryString:{text:"text"},multiple:false,separator:", "}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.calendar.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.calendar.min.js new file mode 100644 index 000000000..2f9f37d13 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.calendar.min.js @@ -0,0 +1 @@ +(function(c){var a=c.telerik;var b=/d{1,4}|M{1,4}|yy(?:yy)?|([Hhmstf])\1*|"[^"]*"|'[^']*'/g;c.extend(a,{calendar:function(e,f){this.element=e;c.extend(this,f);this.currentView=a.calendar.views[0];var d=new a.datetime();this.viewedMonth=a.datetime.firstDayOfMonth(this.selectedDate||(a.calendar.isInRange(d,this.minDate,this.maxDate)?d:this.minDate));c(".t-nav-next:not(.t-state-disabled)",e).live("click",c.proxy(this.navigateToFuture,this));c(".t-nav-prev:not(.t-state-disabled)",e).live("click",c.proxy(this.navigateToPast,this));c(".t-nav-fast:not(.t-state-disabled)",e).live("click",c.proxy(this.navigateUp,this));c(".t-link.t-state-disabled",e).live("click",a.preventDefault);c("td:not(.t-state-disabled):has(.t-link)",e).live("mouseenter",a.hover).live("mouseleave",a.leave).live("click",c.proxy(this.navigateDown,this));a.bind(this,{change:this.onChange,load:this.onLoad})}});c.extend(a.cultureInfo,{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbrDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],abbrMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longTime:"h:mm:ss tt",longDate:"dddd, MMMM dd, yyyy",shortDate:"M/d/yyyy",shortTime:"h:mm tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",generalDateShortTime:"M/d/yyyy h:mm tt",generalDateTime:"M/d/yyyy h:mm:ss tt",sortableDateTime:"yyyy'-'MM'-'ddTHH':'mm':'ss",universalSortableDateTime:"yyyy'-'MM'-'dd HH':'mm':'ss'Z'",monthYear:"MMMM, yyyy",monthDay:"MMMM dd",today:"today",tomorrow:"tomorrow",yesterday:"yesterday",next:"next",last:"last",year:"year",month:"month",week:"week",day:"day",am:"AM",pm:"PM",dateSeparator:"/",timeSeparator:":"});a.calendar.prototype={stopAnimation:false,updateSelection:function(){var h=new a.datetime();var f=a.datetime.firstDayOfMonth(this.viewedMonth);var e=new a.datetime(f.value).date(32).date(0);if(this.selectedDate===null||!a.calendar.isInRange(this.selectedDate,f,e)){this.goToView(0,a.datetime.firstDayOfMonth(this.selectedDate||(a.calendar.isInRange(h,this.minDate,this.maxDate)?h:this.minDate)))}var d=this;var g=c(".t-content td:not(.t-other-month)",this.element).removeClass("t-state-selected");if(this.selectedDate!==null){g.filter(function(){return(parseInt(c(this).text(),10)==d.selectedDate.date())}).addClass("t-state-selected")}},value:function(){if(arguments.length==0){return this.selectedDate===null?null:this.selectedDate.toDate()}if(arguments.length==1){this.selectedDate=arguments[0]===null?null:arguments[0].value?arguments[0]:new a.datetime(arguments[0])}else{if(arguments.length>1){this.selectedDate=new a.datetime(arguments[0],arguments[1],arguments[2])}}this.updateSelection();return this},overlay:function(d){if(!d){return c(".t-overlay",this.element).remove()}c("
").addClass("t-overlay").css({opacity:0,width:this.element.offsetWidth,height:this.element.offsetHeight,position:"absolute",top:0,left:0,zIndex:3,backgroundColor:"#fff"}).appendTo(this.element)},goToView:function(d,e){if(d<0||a.calendar.views.length<=d){return}if(typeof e!="undefined"){this.viewedMonth=a.datetime.firstDayOfMonth(e)}this.currentView=a.calendar.views[d];c(".t-nav-prev",this.element).toggleClass("t-state-disabled",this.currentView.compare(e,this.minDate,false)<=0);c(".t-nav-next",this.element).toggleClass("t-state-disabled",this.currentView.compare(e,this.maxDate,true)>=0);c(".t-nav-fast",this.element).html(this.currentView.title(this.viewedMonth)).toggleClass("t-state-disabled",d==a.calendar.views.length-1);c(".t-content",this.element).html(this.currentView.body(this.viewedMonth,this.minDate,this.maxDate,this.selectedDate,this.urlFormat,this.dates)).toggleClass("t-meta-view",d==1||d==2);return this},navigateVertically:function(e,g,h,p){this.viewedMonth=a.datetime.firstDayOfMonth(g);this.currentView=a.calendar.views[e];this.overlay(true);var o=c(".t-content",this.element);var f=o.outerWidth();var m=o.outerHeight();var i=o.css("font-size");var q=o.css("line-height");if(q==="normal"){q=parseInt(i)*1.5}o.find("td").removeClass("t-state-hover");c(".t-nav-fast",this.element).html(this.currentView.title(g)).toggleClass("t-state-disabled",e==a.calendar.views.length-1);c(".t-nav-prev",this.element).toggleClass("t-state-disabled",this.currentView.compare(this.viewedMonth,this.minDate,false)<=0);c(".t-nav-next",this.element).toggleClass("t-state-disabled",this.currentView.compare(this.viewedMonth,this.maxDate,true)>=0);var r=c('
').html(this.currentView.body(g,this.minDate,this.maxDate,this.selectedDate,this.urlFormat,this.dates)).toggleClass("t-meta-view",e==1||e==2);var d=this;var l={fontSize:i,lineHeight:q,top:0,left:0,width:f,height:m,opacity:1};var k;if(h){k=a.fx._wrap(o).css({overflow:"hidden",position:"relative"});r.wrap(c("
").addClass("t-animation-container").css(c.extend({position:"absolute",zIndex:1,fontSize:1,lineHeight:1,width:p.outerWidth(),height:p.outerHeight(),opacity:0},p.position()))).parent().insertAfter(o);if(!this.stopAnimation){r.parent().animate({fontSize:i,lineHeight:q,top:0,left:0,width:f,height:m,opacity:1},"normal",function(){r.appendTo(d.element);k.remove();d.overlay(false)})}else{o.remove();r.appendTo(d.element);k.remove();d.overlay(false)}}else{r.insertBefore(o);k=a.fx._wrap(r).css({overflow:"hidden",position:"relative"});var j;if(e!=0){j=a.calendar.views[e].verticalDate(this.viewedMonth)}var n={top:(Math.floor(j/4)*m)/3,left:((j%4)*f)/4};o.wrap(c("
").addClass("t-animation-container").css(c.extend({position:"absolute"},l))).parent().insertAfter(r);if(!this.stopAnimation){o.parent().animate(c.extend({fontSize:1,lineHeight:1,width:48,height:54,opacity:0},n),"normal",function(){r.appendTo(d.element);k.remove();d.overlay(false)})}else{o.remove();r.appendTo(d.element);k.remove();d.overlay(false)}}a.trigger(this.element,"navigate",{direction:h})},navigateHorizontally:function(d,f,h){this.viewedMonth=a.datetime.firstDayOfMonth(a.calendar.fitDateToRange(f,this.minDate,this.maxDate));this.currentView=a.calendar.views[d];c(".t-nav-fast",this.element).html(this.currentView.title(f)).toggleClass("t-state-disabled",d==a.calendar.views.length-1);c(".t-nav-prev",this.element).toggleClass("t-state-disabled",this.currentView.compare(this.viewedMonth,this.minDate,false)<=0);c(".t-nav-next",this.element).toggleClass("t-state-disabled",this.currentView.compare(this.viewedMonth,this.maxDate,true)>=0);this.overlay(true);var g=c('
').html(this.currentView.body(f,this.minDate,this.maxDate,this.selectedDate,this.urlFormat,this.dates)).toggleClass("t-meta-view",d==1||d==2);var e=c(".t-content",this.element);var k=e.outerWidth();e.add(g).css({width:k,"float":"left"});var j=a.fx._wrap(e).css({position:"relative",width:k*2,"float":"left",left:(h?0:-200)});g[h?"insertAfter":"insertBefore"](e);var i=this;if(!this.stopAnimation){j.animate({left:(h?-200:0)},"normal",function(){g.appendTo(i.element);j.remove();i.overlay(false)})}else{e.remove();g.appendTo(i.element);j.remove();i.overlay(false)}a.trigger(this.element,"navigate",{direction:h})},navigateUp:function(f){if(f){f.preventDefault()}var d=this.currentView.index;this.navigateVertically(d+1,this.viewedMonth,false)},navigateDown:function(m,k,d){var g=c(c(m.target).hasClass("t-input")?k:m.target);var n=g.text();var l=d||this.currentView.index;var f=g.attr("href");if(f&&(f.charAt(f.length-1)=="#")){m.preventDefault()}if(l==0){var j=parseInt(n,10);var i=this.viewedMonth.month();if(g.parent().hasClass("t-other-month")){i+=(j<15?1:-1)}var h=new a.datetime(this.viewedMonth.year(),i,j);if(!this.selectedDate||(this.selectedDate.value>h.value||h.value>this.selectedDate.value)){if(a.trigger(this.element,"change",{previousDate:this.selectedDate===null?null:this.selectedDate.toDate(),date:h.toDate()})){return this}this.selectedDate=h}this.updateSelection()}else{if(l!=0){a.calendar.views[l].verticalDate(this.viewedMonth,n)}this.viewedMonth=a.calendar.fitDateToRange(this.viewedMonth,this.minDate,this.maxDate);this.navigateVertically(l-1,this.viewedMonth,true,g.add(g.parent()).filter("td"))}},navigateToPast:function(f){if(f){f.preventDefault()}var d=this.currentView.index;if(d==0){this.viewedMonth.date(1).date(-1)}else{this.viewedMonth.addYear(-Math.pow(10,d-1))}this.navigateHorizontally(d,this.viewedMonth,false)},navigateToFuture:function(f){if(f){f.preventDefault()}var d=this.currentView.index;if(d==0){this.viewedMonth.date(32).date(1)}else{this.viewedMonth.addYear(Math.pow(10,d-1))}this.navigateHorizontally(d,this.viewedMonth,true)}};c.fn.tCalendar=function(d){return a.create(this,{name:"tCalendar",init:function(e,f){return new a.calendar(e,f)},options:d})};c.fn.tCalendar.defaults={selectedDate:null,minDate:new a.datetime(1899,11,31),maxDate:new a.datetime(2100,0,1)};c.extend(a.calendar,{views:[{index:0,title:function(d){return new a.stringBuilder().cat(a.cultureInfo.months[d.month()]).cat(" ").cat(d.year()).string()},body:function(f,n,k,j,h,m){var s=(new a.stringBuilder()).cat('');for(var g=0;g<7;g++){s.cat('').cat(a.cultureInfo.days[g].charAt(0)).cat("")}s.cat("");var o=a.datetime.firstVisibleDay(f);var d=f.month();var q=j===null?false:f.year()==j.year();var r;for(var p=0;p<6;p++){s.cat("");for(var e=0;e<7;e++){r=o.month()!=d?"t-other-month":(q&&o.month()==j.month()&&o.date()==j.date())?" t-state-selected":"";s.cat("");if(a.calendar.isInRange(o,n,k)){s.cat('').cat(o.date()).cat("")}else{s.cat(" ")}s.cat("");a.datetime.modify(o,a.datetime.msPerDay)}s.cat("")}s.cat("");return s.string()},compare:function(e,d){var g;var j=e.month();var f=e.year();var i=d.month();var h=d.year();if(f>h){g=1}else{if(fi?1:-1}}return g},firstLastDay:function(f,d,e){return d?a.datetime.firstDayOfMonth(f):new a.datetime(f.year(),f.month()+1,0)},navCheck:function(e,d,f){return f?new a.datetime(d.year(),d.month()+1,d.date()).value-e.value<=0:e.value=f.year()){h>f.month()?g.push(" "):g.push(a.cultureInfo.abbrMonths[h])}else{g.push(a.cultureInfo.abbrMonths[h])}}}return g})},compare:function(d,e){return d.year()>e.year()?1:d.year()=g&&j+l<=k?j+l:" ")}return h})},compare:function(e,d,g){var h=e.year();var f=(h-h%10);var i=(h-h%10+9);return a.calendar.check(f,i,d,g)},verticalDate:function(d,e){if(!e){return d.year()%10+1}d.year(e)},firstLastDay:function(d,e){return new a.datetime(d.year()-d.year()%10+(e?0:9),0,1)},navCheck:function(f,d,g){var e=this.compare(d,f,g);return g?e==-1:e==1}},{index:3,title:function(e){var d=e.year()-e.year()%100;return d+"-"+(d+99)},body:function(e,d,f){return a.calendar.metaView(false,e,function(){var j=e.year()-e.year()%100;var g=[];for(var k=-1;k<11;k++){var h=j+k*10;if((h+10)>=d.year()&&h<=f.year()){g.push(h+"-
"+(h+9)+" ")}else{g.push(" 
 ")}}return g})},compare:function(e,d,f){var g=e.year();var i=(g-g%100);var h=(g-g%100+99);return a.calendar.check(i,h,d,f)},verticalDate:function(d,e){if(!e){return Math.ceil(d.year()/10)%10+1}d.year(e.substring(0,e.indexOf("-")))},firstLastDay:function(d,e){return e?new a.datetime(d.year()-(d.year()%100),0,1):new a.datetime(d.year()-(d.year()%100)+99,0,1)},navCheck:function(f,d,g){var e=this.compare(d,f,g);return g?e==-1:e==1}}],check:function(g,h,d,e){var f=function(i){return id.year()?1:0};return e?f(h):f(g)},pad:function(d){if(d<10){return"0"+d}return d},standardFormat:function(d){var e=a.cultureInfo;var f={d:e.shortDate,D:e.longDate,F:e.fullDateTime,g:e.generalDateShortTime,G:e.generalDateTime,m:e.monthDay,M:e.monthDay,s:e.sortableDateTime,t:e.shortTime,T:e.longTime,u:e.universalSortableDateTime,y:e.monthYear,Y:e.monthYear};return f[d]},formatDate:function(u,e){var o=a.cultureInfo;var r=u.getDate();var g=u.getDay();var q=u.getMonth();var i=u.getFullYear();var n=u.getHours();var k=u.getMinutes();var j=u.getSeconds();var t=u.getMilliseconds();var p=a.calendar.pad;var v={d:r,dd:p(r),ddd:o.abbrDays[g],dddd:o.days[g],M:q+1,MM:p(q+1),MMM:o.abbrMonths[q],MMMM:o.months[q],yy:p(i%100),yyyy:i,h:n%12||12,hh:p(n%12||12),H:n,HH:p(n),m:k,mm:p(k),s:j,ss:p(j),f:Math.floor(t/100),ff:Math.floor(t/10),fff:t,tt:n<12?o.am:o.pm};e=e||"G";e=a.calendar.standardFormat(e)?a.calendar.standardFormat(e):e;return e.replace(b,function(d){return d in v?v[d]:d.slice(1,d.length-1)})},html:function(g,e,d,h,i,f){g=g||new a.datetime();d=d||c.fn.tCalendar.defaults.minDate;h=h||c.fn.tCalendar.defaults.maxDate;return new a.stringBuilder().cat('
').cat('").cat('').cat(a.calendar.views[0].body(g,d,h,e,i,f)).cat("
").string()},metaView:function(h,k,e){var f=new a.stringBuilder();var j=e();f.cat("");for(var d=0,g=j.length;d",d>0&&d%4==0).cat("");if(j[d]!==" "&&j[d]!==" 
 "){f.cat('').cat(j[d]).cat("")}else{f.cat(j[d])}f.cat("")}f.cat("");return f.string()},isInRange:function(f,d,e){if(!f){return false}return d.value-f.value<=0&&e.value-f.value>=0},fitDateToRange:function(f,d,e){if(f.valuee.value){f=new a.datetime(e.value)}return f},isInCollection:function(g,d){var e=d[g.year()];if(e){var f=e[g.month()];if(f&&c.inArray(g.date(),f)!=-1){return true}}return false},findTarget:function(i,l,k,g){var d=function(m,n){return c.grep(m,function(o){return c(o).children().eq(0).text().indexOf(n)>-1})[0]};var e=g?"last":"first";var j=c(".t-content:"+e+" td:has(> .t-link)",k).removeClass("t-state-focus");var f;if(l==0){f=c(d(j.filter(":not(.t-other-month)"),i.date()))}else{if(l==1){f=c(d(j,a.cultureInfo.abbrMonths[i.month()]))}else{if(l==2||l==3){var h=i.year();f=c(d(j,l==2?h:h-(h%10)));if(f.length==0&&l==3){f=c(d(j,h-(h%10)+99))}}}}return f},focusDate:function(g,d,f,e){a.calendar.findTarget(g,d,f,e).addClass("t-state-focus")},formatUrl:function(d,e){return d.replace("{0}",a.calendar.formatDate(e.toDate(),a.cultureInfo.shortDate))}});c.extend(a.formatters,{date:a.calendar.formatDate})})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.combobox.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.combobox.min.js new file mode 100644 index 000000000..c65304694 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.combobox.min.js @@ -0,0 +1 @@ +(function(a){var b=a.telerik;b.combobox=function(c,d){a.extend(this,d);var e=a(c);this.element=c;this.$element=e;this.loader=new b.list.loader(this);this.trigger=new b.list.trigger(this);this.$text=e.find("> .t-dropdown-wrap > .t-input").attr("autocomplete","off");this.filtering=new b.list.filtering(this);this.filtering.autoFill=function(i,j){if(i.autoFill&&(i.lastKeyCode!=8&&i.lastKeyCode!=46)){var k=i.$text[0];var o=b.caretPos(k);var n=k.value.substring(0,o);var m=j.toLowerCase().indexOf(n.toLowerCase());if(m!=-1){var l=j.substring(m+n.length);k.value=n+l;b.list.selection(k,o,o+l.length)}}};this.dropDown=new b.dropDown({outerHeight:e.outerHeight(),outerWidth:e.outerWidth(),zIndex:b.list.getZIndex(e),attr:this.dropDownAttr,effects:this.effects,onOpen:a.proxy(function(){var j=this.data;var i=this.dropDown;var m=e.offset();i.position(m.top,m.left);if(!i.outerHeight){i.outerHeight=e.outerHeight()}if(!i.outerWidth){i.outerWidth=e.outerWidth();i.$element.css("width",i.outerWidth-2)}if(j.length==0){return}var k=this.$text.val();var l=this.selectedIndex;if(l!=-1&&this.isFiltered){if(k==j[l].Text){this.filteredDataIndexes=[];i.onItemCreate=null;i.dataBind(this.data);this.select(i.$items[l])}else{this.filters[this.filter](this,this.data,k)}this.isFiltered=false}return true},this),onClick:a.proxy(function(i){this.select(i.item);this.trigger.change(this);this.trigger.close()},this)});this.fill=function(j){function n(q){var r=i.$items;var t=q.index;var s=r.filter(".t-state-selected");var u=s.length;var v=t!=-1&&t0?s[u-1]:null;if(v){q.select(v)}else{q.selectedIndex=-1;if(q.highlightFirst){q.highlight(r[0])}}}var l=this.loader;var i=this.dropDown;var o=this.minChars;var m=this.text();var k=m.length;if(!i.$items&&!l.ajaxError){if(l.isAjax()&&k>=o){var p={};p[this.queryString.text]=m;l.ajaxRequest(function(q){this.data=q;i.dataBind(q);n(this);b.trigger(this.element,"dataBound");this.trigger.change();if(j){j()}},{data:p})}else{i.dataBind(this.data);n(this);if(j){j()}}}};this.reload=function(){this.dropDown.$items=null;this.fill()};this.select=function(j){var i=this.highlight(j);if(i==-1){return i}var k=this.filteredDataIndexes;this.selectedIndex=(k&&k.length)>0?k[i]:i;b.list.updateTextAndValue(this,a(this.dropDown.$items[i]).text(),this.data[this.selectedIndex].Value)};this.text=function(i){return this.$text.val(i)};this.value=function(){if(arguments.length){var j=arguments[0];var i=this.select(function(k){return j==k.Value});if(i==-1){this.$input.val(j);this.text(j)}this.previousValue=this.$input.val()}else{return this.$input.val()}};b.list.common.call(this);b.list.filters.call(this);b.list.initialize.call(this);this.$text.bind({change:a.proxy(function(i){i.stopPropagation()},this),keydown:a.proxy(g,this),keypress:a.proxy(h,this),focus:a.proxy(function(l){var j=this.trigger;var i=this.dropDown;if(!i.$items){this.fill(j.open)}else{j.open()}var k=this.$text;b.list.selection(k[0],0,k.val().length)},this)});e.find("> .t-dropdown-wrap > .t-select").click(a.proxy(function(i){this.loader.ajaxError=false;if(!this.dropDown.isOpened()){this.$text[0].focus()}else{this.trigger.close()}},this));function f(i){clearTimeout(i.timeout);i.timeout=setTimeout(function(){i.filtering.filter(i)},i.delay)}function g(q){var l=this.trigger;var j=this.dropDown;var n=q.keyCode||q.which;this.lastKeyCode=n;if(q.altKey&&n==38){l.close();return}if(q.altKey&&n==40){l.open();return}if(!q.shiftKey&&(n==38||n==40)){q.preventDefault();if(!j.$items){this.fill()}var k=j.$items;var o=k.filter(".t-state-selected:first");var i=o.length==0||k.length==1?k.first():(n==38)?o.prev():(n==40)?o.next():[];if(i.length){var r=i[0];this.select(r);j.scrollTo(r);if(!j.isOpened()){l.change()}}}if(n==8||n==46){var m=this.$text;if(m.val()!=""){f(this)}setTimeout(a.proxy(function(){if(m.val()==""){this.selectedIndex=-1;this.$input.val("")}else{this.$input.val(this.$text.val())}},this),0)}if(n==13){if(j.isOpened()){q.preventDefault()}var p=j.$items.filter(".t-state-selected:first");if(p.length>0){this.select(p[0])}else{this.$input.val(this.$text.val())}l.change();l.close();b.list.moveToEnd(this.$text[0])}if(n==27||n==9){l.change();l.close();if(n==27){this.$text.blur()}}}function h(j){var i=j.keyCode||j.charCode;if(i==0||a.inArray(i,b.list.keycodes)!=-1){return true}this.$input.val(this.$text.val()+String.fromCharCode(i));f(this)}};a.fn.tComboBox=function(c){return b.create(this,{name:"tComboBox",init:function(d,e){return new b.combobox(d,e)},options:c})};a.fn.tComboBox.defaults={effects:b.fx.slide.defaults(),index:-1,autoFill:true,highlightFirst:true,filter:0,delay:200,minChars:0,cache:true,queryString:{text:"text"}}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.common.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.common.min.js new file mode 100644 index 000000000..eba12900c --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.common.min.js @@ -0,0 +1 @@ +(function(d){try{if(document.execCommand){document.execCommand("BackgroundImageCache",false,true)}}catch(c){}var b=d.telerik={create:function(e,f){var h=f.name;var g=d.extend({},d.fn[h].defaults,f.options);return e.each(function(){var i=d(this);g=d.meta?d.extend({},g,i.data()):g;if(!i.data(h)){var j=f.init(this,g);i.data(h,j);b.trigger(this,"load");if(f.success){f.success(j)}}})},toJson:function(e){var f=[];for(var h in e){var g=e[h];if(typeof g!="object"){f.push('"'+h+'":"'+g+'"')}else{f.push('"'+h+'":'+this.toJson(g))}}return"{"+f.join(",")+"}"},delegate:function(f,e){return function(g){e.apply(f,[g,this])}},stop:function(e,f){return function(g){g.stopPropagation();e.apply(f||this,arguments)}},stopAll:function(e,f){return function(g){g.preventDefault();g.stopPropagation();e.apply(f||this,arguments)}},bind:function(e,f){var g=d(e.element);d.each(f,function(h){if(d.isFunction(this)){g.bind(h,this)}})},preventDefault:function(f){f.preventDefault()},hover:function(){d(this).addClass("t-state-hover")},leave:function(){d(this).removeClass("t-state-hover")},buttonHover:function(){d(this).addClass("t-button-hover")},buttonLeave:function(){d(this).removeClass("t-button-hover")},stringBuilder:function(){this.buffer=[]},ajaxError:function(h,g,e,i){var f=this.trigger(h,g,{XMLHttpRequest:e,textStatus:i});if(!f){if(i=="error"&&e.status!="0"){alert("Error! The requested URL returned "+e.status+" - "+e.statusText)}if(i=="timeout"){alert("Error! Server timeout.")}}},trigger:function(g,f,h){h=d.extend(h||{},new d.Event(f));h.stopPropagation();d(g).trigger(h);return h.isDefaultPrevented()},getType:function(e){if(e instanceof Date){return"date"}if(!isNaN(e)){return"number"}return"object"},formatString:function(){var j=arguments[0];for(var e=0,f=arguments.length-1;e-1;h--){if(e.substr(h,g)==f){return h}}return -1},caretPos:function(e){var f=-1;if(document.selection){f=Math.abs(e.document.selection.createRange().moveStart("character",-e.value.length))}else{if(e.selectionStart!==undefined){f=e.selectionStart}}return f},formatters:{},fx:{},cultureInfo:{}};b.datetime=function(){if(arguments.length==0){this.value=new Date()}else{if(arguments.length==1){this.value=new Date(arguments[0])}else{if(arguments.length==3){this.value=new Date(arguments[0],arguments[1],arguments[2])}else{if(arguments.length==6){this.value=new Date(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])}else{this.value=new Date(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6])}}}}return this};d.extend(b.datetime,{msPerMinute:60000,msPerDay:86400000,add:function(i,f){var g=i.timeOffset();var h=new b.datetime(i.time()+f);var e=h.timeOffset()-g;return new b.datetime(h.time()+e*b.datetime.msPerMinute)},subtract:function(h,g){g=new b.datetime(g).toDate();var e=h.time()-g;var f=h.timeOffset()-g.timeOffset();return e-(f*b.datetime.msPerMinute)},firstDayOfMonth:function(e){return new b.datetime(0).hours(0).minutes(0).year(e.year(),e.month(),1)},firstVisibleDay:function(e){var f=new b.datetime(e.year(),e.month(),0);while(f.day()!=0){b.datetime.modify(f,-1*b.datetime.msPerDay)}return f},modify:function(i,e){var g=i.timeOffset();var f=new b.datetime(i.time()+e);var h=f.timeOffset()-g;i.time(f.time()+h*b.datetime.msPerMinute)}});b.datetime.prototype={year:function(){if(arguments.length==0){return this.value.getFullYear()}else{if(arguments.length==1){this.value.setFullYear(arguments[0])}else{this.value.setFullYear(arguments[0],arguments[1],arguments[2])}}return this},timeOffset:function(){return this.value.getTimezoneOffset()},day:function(){return this.value.getDay()},toDate:function(){return this.value},addMonth:function(e){this.month(this.month()+e)},addYear:function(e){this.year(this.year()+e)}};d.each(["Month","Date","Hours","Minutes","Seconds","Milliseconds","Time"],function(e,f){b.datetime.prototype[f.toLowerCase()]=function(){if(arguments.length==1){this.value["set"+f](arguments[0])}else{return this.value["get"+f]()}return this}});b.stringBuilder.prototype={cat:function(e){this.buffer.push(e);return this},rep:function(f,e){for(var g=0;g").addClass("t-animation-container").css({width:e.outerWidth(),height:e.outerHeight()}))}return e.parent()},play:function(j,k,g,e){var m=a(j,k,e);if(m===null){return}k.stop(false,true);for(var f=0,l=j.list.length;f=0;f--){var h=k.data("effect-"+f)||new b.fx[j.list[f].name](k);h.rewind(d.extend(j.list[f],{openDuration:j.openDuration,closeDuration:j.closeDuration},g),l);k.data("effect-"+f,null)}}});b.fx.toggle=function(e){this.element=e.stop(false,true)};b.fx.toggle.prototype={play:function(e,f){this.element.show();if(f){f()}},rewind:function(e,f){this.element.hide();if(f){f()}}};b.fx.toggle.defaults=function(){return{list:[{name:"toggle"}]}};b.fx.slide=function(e){this.element=e;this.animationContainer=b.fx._wrap(e)};b.fx.slide.prototype={play:function(f,j){var e=this.animationContainer;this.element.css("display","block").stop();e.css({display:"block",overflow:"hidden"});var g=this.element.outerWidth();var l=this.element.outerHeight();var k=f.direction=="bottom"?"marginTop":"marginLeft";var h=f.direction=="bottom"?-l:-g;e.css({width:g,height:l});var i={};i[k]=0;this.element.css("width",this.element.width()).each(function(){this.style.cssText=this.style.cssText}).css(k,h).animate(i,{queue:false,duration:f.openDuration,easing:"linear",complete:function(){e.css("overflow","");if(j){j()}}})},rewind:function(g,f){var h=this.animationContainer;this.element.stop();h.css({overflow:"hidden"});var e;switch(g.direction){case"bottom":e={marginTop:-this.element.outerHeight()};break;case"right":e={marginLeft:-this.element.outerWidth()};break}this.element.animate(e,{queue:false,duration:g.closeDuration,easing:"linear",complete:function(){h.css({display:"none",overflow:""});if(f){f()}}})}};b.fx.slide.defaults=function(){return{list:[{name:"slide"}],openDuration:"fast",closeDuration:"fast"}};b.fx.property=function(e){this.element=e};b.fx.property.prototype={_animate:function(i,h,f,e){var j={overflow:"hidden"},k={},g=this.element;d.each(i,function(m,n){var l;switch(n){case"height":case"width":l=g[n]();break;case"opacity":l=1;break;default:l=g.css(n);break}j[n]=f?l:0;k[n]=f?0:l});g.css(j).show().animate(k,{queue:false,duration:h,easing:"linear",complete:function(){if(f){g.hide()}d.each(k,function(l){k[l]=""});g.css(d.extend({overflow:""},k));if(e){e()}}})},play:function(f,e){this._animate(f.properties,f.openDuration,false,e)},rewind:function(f,e){this._animate(f.properties,f.closeDuration,true,e)}};b.fx.property.defaults=function(){return{list:[{name:"property",properties:arguments}],openDuration:"fast",closeDuration:"fast"}};d(document).ready(function(){if(d.browser.msie&&typeof(Sys)!="undefined"&&typeof(Sys.Mvc)!="undefined"&&typeof(Sys.Mvc.FormContext)!="undefined"){Sys.Mvc.FormContext._getFormElementsWithName=function(f,e){return d.grep(f.getElementsByTagName("*"),function(g){return g.name==e})}}})})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.datepicker.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.datepicker.min.js new file mode 100644 index 000000000..465c08e59 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.datepicker.min.js @@ -0,0 +1 @@ +(function(d){var b=d.telerik;var a=null;var c=/\d/;d.extend(b.datetime,{parse:function(e,g,f,h,i){g=b.calendar.standardFormat(g)?b.calendar.standardFormat(g):g;if(c.test(e)){return b.datetime.parseMachineDate(e,g,h,i)}return b.datetime.parseByToken(e,f,h,i)},parseMachineDate:function(i,l,E,u){var q=-1;var x=-1;var r=-1;var h=0;var o=0;var s=0;var k="+10";var A;var m=false;var D=function(G){var F=0;while(p(G)){F++;t++}return F};var f=function(){var F=p("'");if(F){t++}return F};var p=function(F){return(t+10?1:-1)*t))%t):0)+(o?(e==b.cultureInfo.next?1:-1)*t:0))};var s=d.inArray(o||e,b.cultureInfo[h]);if(h.toLowerCase().indexOf("day")>-1){q=(s==0?7:s)-k.day();r(7,true)}else{q=s-k.month();r(12,false)}};var n=function(){var r=function(s){var t;switch(o){case"year":t=s==1?1:0;break;case"month":t=s==2?1:0;break;case"week":t=s==3?7:0;break;case"day":t=s==3?1:0;break}return t};var q=(e==b.cultureInfo.next?1:-1);k.year(k.year()+r(1)*q,k.month()+r(2)*q,k.date()+r(3)*q)};d.each(["today","tomorrow","yesterday","next","last"],function(r,q){if(e!==null){return}e=f(b.cultureInfo[q])});if(e!==null){p+=e.length;if(/[^\s\d]\s+[^\s\d]/i.test(i)){p++;d.each(["year","month","week","day"],function(r,q){if(o!==null){return}o=f(b.cultureInfo[q])});h=null;if(o===null){o=l()}if(o===null){return null}}else{switch(e){case b.cultureInfo.today:break;case b.cultureInfo.tomorrow:k.date(k.date()+1);break;case b.cultureInfo.yesterday:k.date(k.date()-1);break;default:k=null;break}if(g&&m){k=b.calendar.isInRange(k,g,m)?k:null}return k}}else{e=l();if(e!=null){j();if(g&&m){k=b.calendar.isInRange(k,g,m)?k:null}return k}else{return null}}if(h!==null){j()}else{n()}if(g&&m){k=b.calendar.isInRange(k,g,m)?k:null}return k}});b.datepicker=function(e,f){this.element=e;this.isValueChanged=false;d.extend(this,f);d("> .t-icon",e).bind("click",b.delegate(this,this.togglePopup));this.$input=d(".t-input",e).keydown(b.delegate(this,this.keyDown)).focus(b.delegate(this,this.show)).attr("autocomplete","off");this.focusedDate=this.selectedDate||(b.calendar.isInRange(this.focusedDate,this.minDate,this.maxDate)?this.focusedDate:new b.datetime(this.minDate.value));b.bind(this,{open:this.onOpen,close:this.onClose,change:this.onChange,load:this.onLoad})};d.extend(b.datepicker,{hideSharedCalendar:function(h){var f=a.data("associatedDatePicker");if(f){if(d.contains(f,h.target)||d.contains(a[0],h.target)){return}var g=d(f).data("tDatePicker");if(!g){g=d(f).tDatePicker().data("tDatePicker")}g.parseDate(d(".t-input",f).val());g.hide()}},adjustDate:function(e,h,g,f){if(e==0){b.datetime.modify(h,b.datetime.msPerDay*g)}else{if(e==1){h.addMonth(f)}else{h.addYear((e==2?f:10*f))}}}});b.datepicker.prototype={enable:function(){this.$input.attr("disabled",false);d(".t-icon",this.element).unbind("click").bind("click",b.delegate(this,this.togglePopup))},disable:function(f){this.$input.attr("disabled",true);d(".t-icon",this.element).unbind("click").bind("click",b.preventDefault)},$calendar:function(){if(!a){a=d(b.calendar.html(this.focusedDate,this.selectedDate,this.minDate,this.maxDate)).hide().addClass("t-datepicker-calendar").bind("click",function(i){i.stopPropagation()}).appendTo(document.body).tCalendar({selectedDate:this.selectedDate,minDate:this.minDate,maxDate:this.maxDate});d(document).bind("mousedown",b.datepicker.hideSharedCalendar)}var g=d(this.element).offset();g.top+=d(this.element).height();var h=b.fx._wrap(a);h.css(d.extend({position:"absolute"},g));var e=a.data("tCalendar");if(a.data("associatedDatePicker")!=this.element){e.minDate=this.minDate;e.maxDate=this.maxDate;e.selectedDate=this.selectedDate;e.goToView(0,this.focusedDate);a.unbind("change").bind("change",d.proxy(this.calendarChange,this)).unbind("navigate").bind("navigate",d.proxy(this.viewedMonthChanged,this)).data("associatedDatePicker",this.element);if(this.selectedDate){this.value(this.focusedDate)}}var f=e.currentView.index;if(!a.is(":visible")&&e.viewedMonth.value-this.focusedDate.value!=0){e.goToView(f,this.focusedDate).value(this.selectedDate)}b.calendar.focusDate(this.focusedDate,f,a);return a},isOpened:function(){return a&&a.data("associatedDatePicker")==this.element&&a.is(":visible")},viewedMonthChanged:function(i){var h=a.data("tCalendar");var f=h.viewedMonth;var g=h.currentView.index;if(g==0){this.focusedDate=this.selectedDate||this.focusedDate}else{this.focusedDate.year(f.year(),f.month(),this.focusedDate.date())}b.calendar.focusDate(this.focusedDate,g,a,i.direction)},value:function(g){if(arguments.length==0){return this.selectedDate===null?null:this.selectedDate.toDate()}var f=g===null?null:g.getDate||g.value?g:this.parse(g);var e=f===null;this.selectedDate=e?null:f.value?f:new b.datetime(f);if(!e){this.focusedDate=this.selectedDate}this.$input.val(e?"":b.calendar.formatDate(this.selectedDate.toDate(),this.format));if(this.isOpened()){this.$calendar().data("tCalendar").value(this.selectedDate)}return this},calendarChange:function(f){var g=new b.datetime(f.date);if(this.checkSelectedDate(this.selectedDate,g)){return this}this.$input.removeClass("t-state-error");this.hide()},checkSelectedDate:function(e,f){if(!e||(e.value>f.value||f.value>e.value)){this.value(f);return b.trigger(this.element,"change",{previousDate:e===null?null:e.toDate(),date:f.toDate()})}},togglePopup:function(f){f.preventDefault();var g=this.$input;if(this.isOpened()){this.parseDate(g.val());g.blur();this.hide()}else{g[0].focus()}},showPopup:function(){var f=this.parse(d(":input",this.element).val());this.selectedDate=f;if(f!==null){this.focusedDate=new b.datetime(f.value)}var g=this.$calendar();if(g){var e="auto";d(this.element).parents().andSelf().each(function(){e=d(this).css("zIndex");if(Number(e)){e=Number(e)+1;return false}});b.fx._wrap(g).css("zIndex",e).show();b.fx.play(this.effects,g,{direction:"bottom"})}},hidePopup:function(){if(this.isOpened()){b.fx.rewind(this.effects,this.$calendar(),{direction:"bottom"},function(){if(a){b.fx._wrap(a).hide()}})}},show:function(){this.showPopup();b.trigger(this.element,"open")},hide:function(){if(this.isOpened()){b.trigger(this.element,"close")}this.hidePopup()},keyDown:function(s){var k=d(s.target).val();if(s.keyCode==9){this.parseDate(k);this.hide()}if(s.keyCode==27){this.hide()}if(this.isOpened()&&d(".t-overlay",a).length>0){return}var o;var l=false;var q=this.$calendar();var n=q.data("tCalendar");var p=n.viewedMonth;var h=n.currentView;var i=n.currentView.index;var t=new b.datetime(this.focusedDate.value);var u=function(e,w,v){if(!d(e,q).hasClass("t-state-disabled")){if("navigateUp"==w){i+=1}o=v||false;n[w]();return true}else{return false}};var g=function(){var e=b.calendar.findTarget(t,i,q,false)[0];n.navigateDown(s,e,i);i=i==0?0:i-1;o=true};var m=function(e,x,v){var w=!v?-1:1;if(!u(e,x,v)){return false}if(i==0){t.addMonth(w)}else{t.addYear(w*(i==1?1:i==2?10:100))}return true};if(q.is(":visible")&&!s.shiftKey){switch(s.keyCode){case 37:l=true;if(s.ctrlKey){if(!m(".t-nav-prev","navigateToPast")){return}}else{b.datepicker.adjustDate(i,t,-1,-1);if(h.navCheck(t,p,false)){if(!u(".t-nav-prev","navigateToPast")){return}}}break;case 38:l=true;if(s.ctrlKey){u(".t-nav-fast","navigateUp")}else{b.datepicker.adjustDate(i,t,-7,-4);if(h.navCheck(t,p,false)){if(!u(".t-nav-prev","navigateToPast")){return}}}break;case 39:l=true;if(s.ctrlKey){if(!m(".t-nav-next","navigateToFuture",true)){return}}else{b.datepicker.adjustDate(i,t,1,1);if(h.navCheck(t,p,true)){if(!u(".t-nav-next","navigateToFuture",true)){return}}}break;case 40:l=true;if(s.ctrlKey){g()}else{b.datepicker.adjustDate(i,t,7,4);if(h.navCheck(t,p,true)){if(!u(".t-nav-next","navigateToFuture",true)){return}}}break;case 33:if(!m(".t-nav-prev","navigateToPast")){return}l=true;break;case 34:if(!m(".t-nav-next","navigateToFuture",true)){return}l=true;break;case 35:t=b.calendar.views[i].firstLastDay(t,false,n);l=true;break;case 36:t=b.calendar.views[i].firstLastDay(t,true,n);l=true;break;case 13:if(this.isValueChanged){this.parseDate(k);this.isValueChanged=false;break}l=true;if(i==0){d(s.target).removeClass("t-state-error");if(this.checkSelectedDate(this.selectedDate,this.focusedDate)){return}this.hide()}else{g()}break}}else{if(s.altKey&&s.keyCode==40){this.show();var r=this.parseDate(k);if(k!=""&&r===null){l=true}}else{if(s.keyCode==13){this.parseDate(k)}}}if(l){s.preventDefault();t=b.calendar.fitDateToRange(t,this.minDate,this.maxDate);b.calendar.focusDate(t,i,q,o);this.focusedDate=t}else{var j=s.keyCode;var f=function(v,e,w){return v>e&&v=this.hitTestOffset){c(document).bind(this.evt.ss,function(){return false}).unbind(this.evt.mm);if(this.onDragStart(h,this.$draggedElement)){}if(this.useDragClue){this.$dragClueStatus=c('')[0];this.$dragClue=c('
').html(this.createDragClue(this.$draggedElement)).prepend(this.$dragClueStatus).css({left:h.pageX+b,top:h.pageY+b}).appendTo(document.body)}c(document).bind(this.evt.mm,a.stop(this.moveClue,this)).bind(this.evt.ku,a.stop(this.keyboardListener,this));this.dragStarted=true}},removeDragClue:function(){if(this.$dragClue){this.$dragClue.remove();this.$dragClue=null;this.$dragClueStatus=null}},stopDrag:function(d){if(this.dragStarted){var f=this.onDrop(d,this.$draggedElement,this.useDragClue?this.$dragClue:undefined);if(this.useDragClue&&this.$dragClue){if(!f){this.$dragClue.animate(this.$draggedElement.offset(),"fast",c.proxy(this.removeDragClue,this))}else{if(typeof f=="function"){f(c.proxy(this.removeDragClue,this))}else{this.removeDragClue()}}}this.dragStarted=false}c(document).unbind([this.evt.ss,this.evt.mm,this.evt.mu,this.evt.ku].join(" "))},waitForDrag:function(f){var d=c(f.target);if(f.which!==1||!this.shouldDrag(d)){return}this.$draggedElement=d;this.hittestCoordinates={left:f.pageX,top:f.pageY};c(document).bind(this.evt.mm,a.stop(this.startDrag,this)).bind(this.evt.mu,a.stop(this.stopDrag,this));if(this.hitTestOffset==0){this.startDrag(f)}c(document).trigger("mousedown",f);return false},keyboardListener:function(d){if(d.keyCode==27){c(document).unbind([this.evt.ss,this.evt.mm,this.evt.mu,this.evt.ku].join(" "));this.onDragCancelled(d,this.$draggedElement);if(this.useDragClue&&this.$dragClue){this.$dragClue.animate(this.$draggedElement.offset(),"fast",c.proxy(this.removeDragClue,this))}this.dragStarted=false}}}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.editor.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.editor.min.js new file mode 100644 index 000000000..033302b2f --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.editor.min.js @@ -0,0 +1 @@ +(function(s){var ao=s.telerik;function F(aY){var aX={};for(var aW=0;aW1?aY:"0"+aY}).join("")},encode:function(aW){return aW.replace(/&/g,"&").replace(//g,">").replace(/\u00a0/g," ")},name:function(aW){return aW.nodeName.toLowerCase()},significantChildNodes:function(aW){return s.grep(aW.childNodes,function(aX){return aX.nodeType!=3||!C.isWhitespace(aX)})},lastTextNode:function(aX){if(aX.nodeType==3){return aX}var aW=null;for(var aY=aX.lastChild;aY;aY=aY.previousSibling){if(aW=C.lastTextNode(aY)){return aW}}return aW},is:function(aW,aX){return C.name(aW)==aX},isMarker:function(aW){return aW.className=="t-marker"},isWhitespace:function(aW){return aB.test(aW.nodeValue)},isBlock:function(aW){return L[C.name(aW)]},isEmpty:function(aW){return aH[C.name(aW)]},isInline:function(aW){return aP[C.name(aW)]},scrollTo:function(aW){aW.ownerDocument.body.scrollTop=s(ac(aW)?aW.parentNode:aW).offset().top},insertAt:function(aX,aW,aY){aX.insertBefore(aW,aX.childNodes[aY]||null)},insertBefore:function(aW,aX){return aX.parentNode.insertBefore(aW,aX)},insertAfter:function(aW,aX){return aX.parentNode.insertBefore(aW,aX.nextSibling)},remove:function(aW){aW.parentNode.removeChild(aW)},trim:function(aX){for(var aW=aX.childNodes.length-1;aW>=0;aW--){var aY=aX.childNodes[aW];if(ac(aY)){if(aY.nodeValue.replace(/\ufeff/g,"").length==0){C.remove(aY)}if(C.isWhitespace(aY)){C.insertBefore(aY,aX)}}else{if(aY.className!="t-marker"){C.trim(aY);if(aY.childNodes.length==0&&!C.isEmpty(aY)){C.remove(aY)}}}}return aX},parentOfType:function(aW,aX){do{aW=aW.parentNode}while(aW&&!(C.ofType(aW,aX)));return aW},ofType:function(aW,aX){return s.inArray(C.name(aW),aX)>=0},changeTag:function(a0,aX){var aZ=C.create(a0.ownerDocument,aX);var a3=a0.attributes;for(var aY=0;aY")},end:function(){a1.push("")}},b:{start:function(){a1.push("")},end:function(){a1.push("")}},i:{start:function(){a1.push("")},end:function(){a1.push("")}},u:{start:function(){a1.push('')},end:function(){a1.push("")}},font:{start:function(a4){a1.push('')},end:function(a2){a1.push("")}}};function aX(a3){var a9=[],bi=a3.attributes,bd=s.trim;for(var a7=0,bb=bi.length;a7bk.nodeName?1:bj.nodeName=0){a2=C.toHex(a2)}a1.push(bf);a1.push(":");a1.push(a2);a1.push(";")}}}else{if(a5=="src"||a5=="href"){a1.push(a3.getAttribute(a5,2))}else{a1.push(K[a5]?a5:bc)}}a1.push('"')}}function aW(a2,a3){for(var a4=a2.firstChild;a4;a4=a4.nextSibling){aZ(a4,a3)}}function aZ(a5,a6){var a9=a5.nodeType;if(a9==1){if(a5.attributes._moz_dirty&&C.is(a5,"br")){return}var a3=C.name(a5);var a7=a0[a3];if(a7){a7.start(a5);aW(a5);a7.end(a5);return}a1.push("<");a1.push(a3);aX(a5);if(aH[a3]){a1.push(" />")}else{a1.push(">");aW(a5,a6||C.is(a5,"pre"));a1.push("")}}else{if(a9==3){var a2=a5.nodeValue;if(!a6&&s.support.leadingWhitespace){var a8=a5.parentNode;var a4=(C.isInline(a8)?a8:a5).previousSibling;if(!a4||a4.innerHTML==""||C.isBlock(a4)){a2=a2.replace(/^[\r\n\v\f\t ]+/,"")}a2=a2.replace(/ +/," ")}a1.push(C.encode(a2))}else{if(a9==4){a1.push("")}else{if(a9==8){if(a5.data.indexOf("[CDATA[")<0){a1.push("")}else{a1.push("")}}}}}}aW(aY);return a1.join("")}var u=0,an=1,a=2,R=3;function q(aX){var aW=aX.startContainer;return aW.nodeType==9?aW:aW.ownerDocument}function D(aW){return aW.getSelection?aW.getSelection():new at(aW.document)}function ai(aX){var aW=q(aX);return aU(aW)}function aU(aW){return D(ax(aW))}function ax(aW){return aW.defaultView||aW.parentWindow}function aj(aW,aX,aZ){function aY(a2){var a0=aW.cloneRange();a0.collapse(a2);a0[a2?"setStartBefore":"setEndAfter"](aX);var a1=a0.extractContents();if(aZ){a1=C.trim(a1)}C[a2?"insertBefore":"insertAfter"](a1,aX)}aY(true);aY(false)}function M(aX){var aY=S.image(aX);if(aY){aX.setStartAfter(aY);aX.setEndAfter(aY)}var aW=ai(aX);aW.removeAllRanges();aW.addRange(aX)}function J(aW){s.extend(this,{ownerDocument:aW,startContainer:aW,endContainer:aW,commonAncestorContainer:aW,startOffset:0,endOffset:0,collapsed:true})}J.prototype={setStart:function(aW,aX){this.startContainer=aW;this.startOffset=aX;v(this);t(this,true)},setEnd:function(aW,aX){this.endContainer=aW;this.endOffset=aX;v(this);t(this,false)},setStartBefore:function(aW){this.setStart(aW.parentNode,p(aW))},setStartAfter:function(aW){this.setStart(aW.parentNode,p(aW)+1)},setEndBefore:function(aW){this.setEnd(aW.parentNode,p(aW))},setEndAfter:function(aW){this.setEnd(aW.parentNode,p(aW)+1)},selectNode:function(aW){this.setStartBefore(aW);this.setEndAfter(aW)},selectNodeContents:function(aW){this.setStart(aW,0);this.setEnd(aW,aW[aW.nodeType===1?"childNodes":"nodeValue"].length)},collapse:function(aW){if(aW){this.setEnd(this.startContainer,this.startOffset)}else{this.setStart(this.endContainer,this.endOffset)}},deleteContents:function(){var aX=this.cloneRange();if(this.startContainer!=this.commonAncestorContainer){this.setStartAfter(az(this.commonAncestorContainer,this.startContainer))}this.collapse(true);(function aW(aY){while(aY.next()){aY.hasPartialSubtree()?aW(aY.getSubtreeIterator()):aY.remove()}})(new l(aX))},cloneContents:function(){var aW=q(this);return(function aX(a0){for(var aZ,aY=aW.createDocumentFragment();aZ=a0.next();){aZ=aZ.cloneNode(!a0.hasPartialSubtree());if(a0.hasPartialSubtree()){aZ.appendChild(aX(a0.getSubtreeIterator()))}aY.appendChild(aZ)}return aY})(new l(this))},extractContents:function(){var aX=this.cloneRange();if(this.startContainer!=this.commonAncestorContainer){this.setStartAfter(az(this.commonAncestorContainer,this.startContainer))}this.collapse(true);var aY=this;var aW=q(this);return(function aZ(a2){for(var a1,a0=aW.createDocumentFragment();a1=a2.next();){a2.hasPartialSubtree()?a1=a1.cloneNode(false):a2.remove(aY.originalRange);if(a2.hasPartialSubtree()){a1.appendChild(aZ(a2.getSubtreeIterator()))}a0.appendChild(a1)}return a0})(new l(aX))},insertNode:function(aW){if(ac(this.startContainer)){if(this.startOffset!=this.startContainer.nodeValue.length){ar(this.startContainer,this.startOffset)}C.insertAfter(aW,this.startContainer)}else{C.insertAt(this.startContainer,aW,this.startOffset)}this.setStart(this.startContainer,this.startOffset)},cloneRange:function(){return s.extend(new J(this.ownerDocument),{startContainer:this.startContainer,endContainer:this.endContainer,commonAncestorContainer:this.commonAncestorContainer,startOffset:this.startOffset,endOffset:this.endOffset,collapsed:this.collapsed,originalRange:this})},toString:function(){var aX=this.startContainer.nodeName,aW=this.endContainer.nodeName;return[aX=="#text"?this.startContainer.nodeValue:aX,"(",this.startOffset,") : ",aW=="#text"?this.endContainer.nodeValue:aW,"(",this.endOffset,")"].join("")}};function m(aY,aW,a3,a0){if(aY==aW){return a0-a3}var a2=aW;while(a2&&a2.parentNode!=aY){a2=a2.parentNode}if(a2){return p(a2)-a3}a2=aY;while(a2&&a2.parentNode!=aW){a2=a2.parentNode}if(a2){return a0-p(a2)-1}var a1=C.commonAncestor(aY,aW);var aZ=aY;while(aZ&&aZ.parentNode!=a1){aZ=aZ.parentNode}if(!aZ){aZ=a1}var aX=aW;while(aX&&aX.parentNode!=a1){aX=aX.parentNode}if(!aX){aX=a1}if(aZ==aX){return 0}return p(aX)-p(aZ)}function t(aX,aY){function aW(a0){try{return m(a0.startContainer,a0.endContainer,a0.startOffset,a0.endOffset)<0}catch(aZ){return true}}if(aW(aX)){if(aY){aX.commonAncestorContainer=aX.endContainer=aX.startContainer;aX.endOffset=aX.startOffset}else{aX.commonAncestorContainer=aX.startContainer=aX.endContainer;aX.startOffset=aX.endOffset}aX.collapsed=true}}function v(aX){aX.collapsed=aX.startContainer==aX.endContainer&&aX.startOffset==aX.endOffset;var aW=aX.startContainer;while(aW&&aW!=aX.endContainer&&!k(aW,aX.endContainer)){aW=aW.parentNode}aX.commonAncestorContainer=aW}function aL(aW){return aW.createRange?aW.createRange():new J(aW)}function l(aX){s.extend(this,{range:aX,_current:null,_next:null,_end:null});if(aX.collapsed){return}var aW=aX.commonAncestorContainer;this._next=aX.startContainer==aW&&!ac(aX.startContainer)?aX.startContainer.childNodes[aX.startOffset]:az(aW,aX.startContainer);this._end=aX.endContainer==aW&&!ac(aX.endContainer)?aX.endContainer.childNodes[aX.endOffset]:az(aW,aX.endContainer).nextSibling}l.prototype={hasNext:function(){return !!this._next},next:function(){var aW=this._current=this._next;this._next=this._current&&this._current.nextSibling!=this._end?this._current.nextSibling:null;if(ac(this._current)){if(this.range.endContainer==this._current){(aW=aW.cloneNode(true)).deleteData(this.range.endOffset,aW.length-this.range.endOffset)}if(this.range.startContainer==this._current){(aW=aW.cloneNode(true)).deleteData(0,this.range.startOffset)}}return aW},traverse:function(aX){function aW(){this._current=this._next;this._next=this._current&&this._current.nextSibling!=this._end?this._current.nextSibling:null;return this._current}var aY;while(aY=aW.call(this)){if(this.hasPartialSubtree()){this.getSubtreeIterator().traverse(aX)}else{aX(aY)}}return aY},remove:function(a1){var a0=this.range.startContainer==this._current;var aY=this.range.endContainer==this._current;if(ac(this._current)&&(a0||aY)){var aX=a0?this.range.startOffset:0;var aW=aY?this.range.endOffset:this._current.length;var a3=aW-aX;if(a1&&(a0||aY)){if(this._current==a1.startContainer&&aX<=a1.startOffset){a1.startOffset-=a3}if(this._current==a1.endContainer&&aW<=a1.endOffset){a1.endOffset-=a3}}this._current.deleteData(aX,a3)}else{var a2=this._current.parentNode;if(a1&&(this.range.startContainer==a2||this.range.endContainer==a2)){var aZ=p(this._current);if(a2==a1.startContainer&&aZ<=a1.startOffset){a1.startOffset-=1}if(a2==a1.endContainer&&aZ0&&aZ.previousSibling);a2.setEndPoint(aW?"EndToStart":"EndToEnd",a1);var a0=aZ.nextSibling;if(!a0){a0=aZ.previousSibling;if(a0&&ac(a0)){aX.setEnd(a0,a0.nodeValue.length);C.remove(aZ)}else{aX.selectNodeContents(aY);C.remove(aZ);aX.endOffset-=1}return}C.remove(aZ);if(ac(a0)){aX[aW?"setStart":"setEnd"](a0,a2.text.length)}else{aX[aW?"setStartBefore":"setEndBefore"](a0)}}function ag(aW){this.enumerate=function(){var aY=[];function aX(aZ){if(C.is(aZ,"img")||(aZ.nodeType==3&&!C.isWhitespace(aZ))){aY.push(aZ)}else{aZ=aZ.firstChild;while(aZ){aX(aZ);aZ=aZ.nextSibling}}}new l(aW).traverse(aX);return aY}}function j(aW){return new ag(aW).enumerate()}function X(a0){var aW=[];for(var aX=0,aZ=a0.length;aX'}aY.selectNodeContents(a2)}}aY.collapse(true)};this.add=function(aX,aZ){if(aZ&&aX.collapsed){this.addCaret(aX);aX=S.expand(aX)}var aY=aX.cloneRange();aY.collapse(false);this.end=C.create(q(aX),"span",{className:"t-marker"});aY.insertNode(this.end);aY=aX.cloneRange();aY.collapse(true);this.start=this.end.cloneNode(true);aY.insertNode(this.start);aX.setStartBefore(this.start);aX.setEndAfter(this.end);g(aX.commonAncestorContainer);return aX};this.remove=function(a4){var aX=this.start,a9=this.end;g(a4.commonAncestorContainer);while(!aX.nextSibling&&aX.parentNode){aX=aX.parentNode}while(!a9.previousSibling&&a9.parentNode){a9=a9.parentNode}var aZ=(aX.previousSibling&&aX.previousSibling.nodeType==3)&&(aX.nextSibling&&aX.nextSibling.nodeType==3);var a5=(a9.previousSibling&&a9.previousSibling.nodeType==3)&&(a9.nextSibling&&a9.nextSibling.nodeType==3);aX=aX.nextSibling;a9=a9.previousSibling;var a8=false;var a2=false;if(aX==this.end){a2=!!this.start.previousSibling;aX=a9=this.start.previousSibling||this.end.nextSibling;a8=true}C.remove(this.start);C.remove(this.end);var a7=a8?ac(aX)?aX.nodeValue.length:aX.childNodes.length:0;var a0=ac(a9)?a9.nodeValue.length:a9.childNodes.length;if(aX.nodeType==3){while(aX.previousSibling&&aX.previousSibling.nodeType==3){aX=aX.previousSibling;a7+=aX.nodeValue.length}}if(a9.nodeType==3){while(a9.previousSibling&&a9.previousSibling.nodeType==3){a9=a9.previousSibling;a0+=a9.nodeValue.length}}var a3=p(aX),a6=aX.parentNode;var a1=p(a9),aY=a9.parentNode;for(var bb=aX;bb.previousSibling;bb=bb.previousSibling){if(bb.nodeType==3&&bb.previousSibling.nodeType==3){a3--}}for(var ba=a9;ba.previousSibling;ba=ba.previousSibling){if(ba.nodeType==3&&ba.previousSibling.nodeType==3){a1--}}g(a6);if(aX.nodeType==3){aX=a6.childNodes[a3]}g(aY);if(a9.nodeType==3){a9=aY.childNodes[a1]}if(a8){if(aX.nodeType==3){a4.setStart(aX,a7)}else{a4[a2?"setStartAfter":"setStartBefore"](aX)}a4.collapse(true)}else{if(aX.nodeType==3){a4.setStart(aX,a7)}else{a4.setStartBefore(aX)}if(a9.nodeType==3){a4.setEnd(a9,a0)}else{a4.setEndAfter(a9)}}if(aW){this.removeCaret(a4)}}}var ap=/[\u0009-\u000d]|\u0020|\u00a0|\ufeff|\.|,|;|:|!|\(|\)|\?/;var S={nodes:function(aX){var aW=j(aX);if(!aW.length){aX.selectNodeContents(aX.commonAncestorContainer);aW=j(aX);if(!aW.length){aW=C.significantChildNodes(aX.commonAncestorContainer)}}return aW},image:function(aX){var aW=[];new l(aX).traverse(function(aY){if(C.is(aY,"img")){aW.push(aY)}});if(aW.length==1){return aW[0]}},expand:function(aX){var aY=aX.cloneRange();var a1=aY.startContainer.childNodes[aY.startOffset==0?0:aY.startOffset-1];var a2=aY.endContainer.childNodes[aY.endOffset];if(!ac(a1)||!ac(a2)){return aY}var aZ=a1.nodeValue;var a0=a2.nodeValue;if(aZ==""||a0==""){return aY}var aW=aZ.split("").reverse().join("").search(ap);var a3=a0.search(ap);if(aW==0||a3==0){return aY}a3=a3==-1?a0.length:a3;aW=aW==-1?0:aZ.length-aW;aY.setStart(a1,aW);aY.setEnd(a2,a3);return aY},isExpandable:function(aX){var a2=aX.startContainer;var a1=q(aX);if(a2==a1||a2==a1.body){return false}var aY=aX.cloneRange();var aW=a2.nodeValue;if(!aW){return false}var aZ=aW.substring(0,aY.startOffset);var a0=aW.substring(aY.startOffset);var a3=0,a4=0;if(aZ!=""){a3=aZ.split("").reverse().join("").search(ap)}if(a0!=""){a4=a0.search(ap)}return a3!=0&&a4!=0}};function c(aX){var aY=new ak(aX.range);var aW=new aa();this.formatter=aX.formatter;this.getRange=function(){return aY.toRange()};this.lockRange=function(aZ){return aW.add(this.getRange(),aZ)};this.releaseRange=function(aZ){aW.remove(aZ);M(aZ)};this.undo=function(){aY.body.innerHTML=aY.html;M(aY.toRange())};this.redo=function(){this.exec()};this.exec=function(){var aZ=this.lockRange(true);this.formatter.editor=this.editor;this.formatter.toggle(aZ);this.releaseRange(aZ)}}function aR(aY,aX){var aW=aY.body;this.redo=function(){aW.innerHTML=aX.html;M(aX.toRange())};this.undo=function(){aW.innerHTML=aY.html;M(aY.toRange())}}function aM(aW){c.call(this,aW);this.managesUndoRedo=true;this.exec=function(){var aY=this.editor;var aX=aY.getRange();var aZ=new ak(aX);aY.clipboard.paste(aW.value||"");aY.undoRedoStack.push(new aR(aZ,new ak(aY.getRange())));aY.focus()}}function w(){V.call(this);this.command=function(aW){return new aM(aW)};this.update=function(aW,aX){aW.data("tSelectBox").close()};this.init=function(aY,aW){var aX=aW.editor;aY.tSelectBox({data:aX.insertHtml,onItemCreate:function(aZ){aZ.html=''+aZ.dataItem.Text+""},onChange:function(aZ){V.exec(aX,"insertHtml",aZ.value)},highlightFirst:false}).find(".t-input").html(aX.localization.insertHtml)}}function P(){var aX=[],aW=-1;this.push=function(aY){aX=aX.slice(0,aW+1);aW=aX.push(aY)-1};this.undo=function(){if(this.canUndo()){aX[aW--].undo()}};this.redo=function(){if(this.canRedo()){aX[++aW].redo()}};this.canUndo=function(){return aW>=0};this.canRedo=function(){return aW!=aX.length-1}}function aK(aW){this.keydown=function(aZ){var aY=aW.keyboard;var aX=aY.isTypingKey(aZ);if(!aX){au(aW)}if(aX&&!aY.typingInProgress()){this.startRestorePoint=new ak(aW.getRange());aY.startTyping(s.proxy(function(){this.endRestorePoint=new ak(aW.getRange());aW.undoRedoStack.push(new aR(this.startRestorePoint,this.endRestorePoint))},this));return true}return false};this.keyup=function(aX){var aY=aW.keyboard;if(aY.typingInProgress()){aY.endTyping();return true}return false}}function z(aX){var aW=false;this.createUndoCommand=function(){this.endRestorePoint=new ak(aX.getRange());aX.undoRedoStack.push(new aR(this.startRestorePoint,this.endRestorePoint));this.startRestorePoint=this.endRestorePoint};this.changed=function(){if(this.startRestorePoint){return this.startRestorePoint.html!=aX.body.innerHTML}return false},this.keydown=function(aY){var aZ=aX.keyboard;if(aZ.isModifierKey(aY)){if(aZ.typingInProgress()){aZ.endTyping(true)}this.startRestorePoint=new ak(aX.getRange());return true}if(aZ.isSystem(aY)){aW=true;if(this.changed()){aW=false;this.createUndoCommand()}return true}return false};this.keyup=function(aY){if(aW&&this.changed()){aW=false;this.createUndoCommand(aY);return true}return false}}function aE(aX){var aZ=false;var a2;var aY;function aW(a3){return(a3>=48&&a3<=90)||(a3>=96&&a3<=111)||(a3>=186&&a3<=192)||(a3>=219&&a3<=222)}this.toolFromShortcut=function(a5,a7){var a4=String.fromCharCode(a7.keyCode);for(var a6 in a5){var a3=a5[a6];if((a3.key==a4||a3.key==a7.keyCode)&&!!a3.ctrl==a7.ctrlKey&&!!a3.alt==a7.altKey&&!!a3.shift==a7.shiftKey){return a6}}};this.isTypingKey=function(a4){var a3=a4.keyCode;return(aW(a3)&&!a4.ctrlKey&&!a4.altKey)||a3==32||a3==13||a3==8||(a3==46&&!a4.shiftKey&&!a4.ctrlKey&&!a4.altKey)};this.isModifierKey=function(a4){var a3=a4.keyCode;return(a3==17&&!a4.shiftKey&&!a4.altKey)||(a3==16&&!a4.ctrlKey&&!a4.altKey)||(a3==18&&!a4.ctrlKey&&!a4.shiftKey)};this.isSystem=function(a3){return a3.keyCode==46&&a3.ctrlKey&&!a3.altKey&&!a3.shiftKey};this.startTyping=function(a3){aY=a3;aZ=true};function a0(){aZ=false;aY()}this.endTyping=function(a3){this.clearTimeout();if(a3){a0()}else{a2=window.setTimeout(a0,1000)}};this.typingInProgress=function(){return aZ};this.clearTimeout=function(){window.clearTimeout(a2)};function a1(a5,a4){for(var a3=0;a3$/g,"li>");var a2=aW(a5);var a4=a0.getRange();a4.deleteContents();if(a4.startContainer==a0.document){a4.selectNodeContents(a0.body)}var a6=new aa();var a9=a6.addCaret(a4);var a8=aY(a2,a9);var a7=false;if(!/body|td/.test(C.name(a8))&&(a2||C.isInline(a8))){a4.selectNode(a9);aj(a4,a8,true);a7=true}var ba=aX(a5);a4.insertNode(ba);a8=aY(a2,a9);if(a7){while(a9.parentNode!=a8){C.unwrap(a9.parentNode)}C.unwrap(a9.parentNode)}g(a4.commonAncestorContainer);a9.style.display="inline";C.scrollTo(a9);a6.removeCaret(a4);M(a4)}}function f(){var aW=[//g,"",/mso-[^;"]*;?/ig,"",/<\/?(meta|link|style|o:|v:)[^>]*>((?:.|\n)*?<\/(meta|link|style|o:|v:)[^>]*>)?/ig,""];this.applicable=function(aZ){return/class="?Mso|style="[^"]*mso-/i.test(aZ)};function aX(aZ){if(/^[\u2022\u00b7\u00a7\u00d8o\-]\u00a0+/.test(aZ)){return"ul"}if(/^\s*\w+[\.\)]\u00a0{2,}/.test(aZ)){return"ol"}}function aY(bc){var a4=C.create(document,"div",{innerHTML:bc});var bb=s(G.join(","),a4);var a6=-1,a1,ba={ul:{},ol:{}},aZ=a4;for(var a7=0;a7]*>/g,"").replace(/ /g,"\u00a0");var a5=aX(bc);if(!a5||C.name(a2)!="p"){if(a2.innerHTML==""){C.remove(a2)}else{ba={ul:{},ol:{}};aZ=a4;a6=-1}continue}var a8=parseFloat(a2.style.marginLeft||0);var a9=ba[a5][a8];if(a8>a6||!a9){a9=C.create(document,a5);if(aZ==a4){C.insertBefore(a9,a2)}else{aZ.appendChild(a9)}ba[a5][a8]=a9}if(a1!=a5){for(var a3 in ba){for(var a0 in ba[a3]){if(s.contains(a9,ba[a3][a0])){delete ba[a3][a0]}}}}C.remove(a2.firstChild);aZ=C.create(document,"li",{innerHTML:a2.innerHTML});a9.appendChild(aZ);C.remove(a2);a6=a8;a1=a5}return a4.innerHTML}this.clean=function(a0){for(var aZ=0,a1=aW.length;aZ]*"?/ig,"");return a0}}function i(aW){function aX(a0){var aY=0;for(var aZ=a0.parentNode.firstChild;aZ;aZ=aZ.nextSibling){if(aZ!=a0&&aZ.className!="t-marker"&&aZ.nodeType==1){aY++}}return aY}this.findSuitable=function(aZ,aY){if(!aY&&aX(aZ)>0){return null}return C.parentOfType(aZ,aW[0].tags)};this.findFormat=function(a2){for(var aY=0;aY1){var a1=a3.pop();var a2=a3[a3.length-1];if(a1.previousSibling&&a1.previousSibling.className=="t-marker"){a2.appendChild(a1.previousSibling)}if(a1.previousSibling==a2&&a1.style.cssText==a2.style.cssText){while(a1.firstChild){a2.appendChild(a1.firstChild)}C.remove(a1)}}}}function aV(aX,aW){i.call(this,aX);function aY(a2){var bd=a2.attributes,ba=s.trim;for(var a1=0,a8=bd.length;a1=0?C.toHex(a0):a0}}}}return}function aZ(a4){var a5=s(ac(a4)?a4.parentNode:a4);var a3=a5.parents().andSelf();for(var a1=0,a2=a3.length;a1'+a1.dataItem.Text+""}}}function aT(aX){V.call(this,aX);var aW=new aV([{tags:["span"]}],aX.cssAttr);this.update=function(aY){aY.data("tColorPicker").close()};this.command=function(aY){return new aF(s.extend(aY,{formatter:function(){var aZ={};aZ[aX.domAttr]=aY.value;return new E([{tags:["span"]}],{style:aZ},aX.cssAttr)}}))};this.init=function(a0,aY){var aZ=aY.editor;a0.tColorPicker({selectedColor:"#000000",onChange:function(a1){V.exec(aZ,aX.name,a1.value)}})}}function Z(){V.call(this);var aW=new aV([{tags:["span"]}],"className");this.command=function(aX){return new aF(s.extend(aX,{formatter:function(){return new E([{tags:["span"]}],{className:aX.value})}}))};this.update=function(aX,aZ){var aY=aX.data("tSelectBox");aY.close();aY.value(aW.getFormat(aZ))};this.init=function(aZ,aX){var aY=aX.editor;aZ.tSelectBox({data:aY.style,title:aY.localization.style,onItemCreate:function(a0){var a1=C.inlineStyle(aY.document,"span",{className:a0.dataItem.Value});a0.html=''+a0.html+""},onChange:function(a0){V.exec(aY,"style",a0.value)}})}}function x(aX){function aW(a0,a1){for(var aY=0;aY'+a1.dataItem.Text+""},onChange:function(a0){V.exec(aY,"formatBlock",a0.value)},highlightFirst:false})}}function aN(aW){c.call(this,aW);this.exec=function(){var aZ=this.getRange();var a7=q(aZ);var a5=s.browser.msie?"":'
';var a8=C.parentOfType(aZ.startContainer,["p"]),aX=C.parentOfType(aZ.endContainer,["p"]),aY=(a8&&!aX)||(!a8&&aX);aZ.deleteContents();var a6=C.create(a7,"a");aZ.insertNode(a6);var a0=C.parentOfType(a6,"li".split(","));var a1;if(a0){var a3=aZ.cloneRange();a3.selectNode(a0);if(j(a3).length==0){var a9=C.create(a7,"p");if(a0.nextSibling){aj(a3,a0.parentNode)}C.insertAfter(a9,a0.parentNode);C.remove(a0.parentNode.childNodes.length==1?a0.parentNode:a0);a9.innerHTML=a5;a1=a9}}if(!a1){if(!a0){new U([{tags:["p"]}]).apply([a6])}aZ.selectNode(a6);var a2=C.parentOfType(a6,[a0?"li":"p"]);aj(aZ,a2,aY);var a4=a2.previousSibling;if(C.is(a4,"li")&&a4.firstChild&&!C.is(a4.firstChild,"br")){a4=a4.firstChild}a1=a2.nextSibling;if(C.is(a1,"li")&&a1.firstChild&&!C.is(a1.firstChild,"br")){a1=a1.firstChild}C.remove(a2);if(a4.firstChild&&C.is(a4.firstChild,"br")){C.remove(a4.firstChild)}if(ac(a4)&&a4.nodeValue==""){a4=a4.parentNode}if(a4&&a4.innerHTML==""){a4.innerHTML=a5}if(a1.firstChild&&C.is(a1.firstChild,"br")){C.remove(a1.firstChild)}if(ac(a1)&&a1.nodeValue==""){a1=a1.parentNode}if(a1.innerHTML==""){a1.innerHTML=a5}g(a4)}g(a1);aZ.selectNodeContents(a1);aZ.collapse(true);C.scrollTo(a1);M(aZ)}}function d(aW){c.call(this,aW);this.exec=function(){var aY=this.getRange();aY.deleteContents();var aX=C.create(q(aY),"br");aY.insertNode(aX);aX.parentNode.normalize();if(!s.browser.msie&&(!aX.nextSibling||C.isWhitespace(aX.nextSibling))){var aZ=aX.cloneNode(true);aZ.setAttribute("_moz_dirty","");C.insertAfter(aZ,aX)}aY.setStartAfter(aX);aY.collapse(true);M(aY)}}function am(aX){var aW=[aX=="ul"?"ol":"ul",aX];x.call(this,[{tags:aW}]);this.isFormatted=function(a1){var aY=[],aZ;for(var a0=0;a01){C.insertAfter(aZ[aZ.length-1],a0);C.insertAfter(aZ[1],a0);C[aY.length>0?"insertBefore":"insertAfter"](aZ[0],a0)}}else{var a1=new b([{tags:["a"]}],a2);a1.finder=this.finder;a1.apply(aY)}}}function al(aW){aW.formatter={toggle:function(aX){new b([{tags:["a"]}]).remove(j(aX))}};c.call(this,aW)}function Y(aX){c.call(this,aX);var aW;this.async=true;var aY=new aS();this.exec=function(){var a3=this.getRange();var a1=a3.collapsed;a3=this.lockRange(true);var a6=j(a3);var a5=null;var a0=this;function a7(bd){var bc=s("#t-editor-link-url",a4.element).val();if(bc&&bc!="http://"){aW={href:bc};var a9=s("#t-editor-link-title",a4.element).val();if(a9){aW.title=a9}var ba=s("#t-editor-link-text",a4.element).val();if(ba!==a5){aW.innerHTML=ba}var bb=s("#t-editor-link-target",a4.element).val();if(bb!="false"){aW.target="_blank"}aY.apply(a3,aW)}a2(bd);if(a0.change){a0.change()}}function a2(a9){a9.preventDefault();a4.destroy();ax(q(a3)).focus();a0.releaseRange(a3)}var a8=a6.length?aY.finder.findSuitable(a6[0]):null;var aZ=a6.length<=1||(a6.length==2&&a1);var a4=ao.window.create(s.extend({},this.editor.dialogOptions,{title:"Insert link",html:new s.telerik.stringBuilder().cat('
').cat("
    ").cat('
  1. ').catIf('
  2. ',aZ).cat('
  3. ').cat('
  4. ').cat("
").cat('
').cat('').cat(" or ").cat('Close').cat("
").cat("
").string(),onClose:a2})).hide().find(".t-dialog-insert").click(a7).end().find(".t-dialog-close").click(a2).end().find(".t-form-text-row input").keydown(function(a9){if(a9.keyCode==13){a7(a9)}else{if(a9.keyCode==27){a2(a9)}}}).end().delegate(".t-button","mouseenter",ao.buttonHover).delegate(".t-button","mouseleave",ao.buttonLeave).find("#t-editor-link-url").val(a8?a8.getAttribute("href",2):"http://").end().find("#t-editor-link-text").val(a6.length>0?(a6.length==1?a6[0].nodeValue:a6[0].nodeValue+a6[1].nodeValue):"").end().find("#t-editor-link-title").val(a8?a8.title:"").end().find("#t-editor-link-target").val(a8?a8.target=="_blank":"false").end().show().data("tWindow").center();if(aZ&&a6.length>0){a5=s("#t-editor-link-text",a4.element).val()}s("#t-editor-link-url",a4.element).focus().select()},this.redo=function(){var aZ=this.lockRange(true);aY.apply(aZ,aW);this.releaseRange(aZ)}}function aO(aX){V.call(this,s.extend(aX,{command:al}));var aW=new H();this.init=function(aY){aY.attr("unselectable","on").addClass("t-state-disabled")};this.update=function(aY,aZ){aY.toggleClass("t-state-disabled",!aW.findSuitable(aZ[0])).removeClass("t-state-hover")}}function aJ(aX){c.call(this,aX);this.async=true;var aW;function aY(aZ,a0){if(aW.src&&aW.src!="http://"){if(!aZ){aZ=C.create(q(a0),"img",aW);aZ.onload=aZ.onerror=function(){aZ.removeAttribute("complete");aZ.removeAttribute("width");aZ.removeAttribute("height")};a0.deleteContents();a0.insertNode(aZ);a0.setStartAfter(aZ);a0.setEndAfter(aZ);M(a0);return true}else{C.attr(aZ,aW)}}return false}this.redo=function(){var aZ=this.lockRange();if(!aY(S.image(aZ),aZ)){this.releaseRange(aZ)}};this.exec=function(){var a2=this.lockRange();var aZ=false;var a4=S.image(a2);var a0=this;function a5(a6){aW={src:s("#t-editor-image-url",a3.element).val(),alt:s("#t-editor-image-title",a3.element).val()};aZ=aY(a4,a2);a1(a6);if(a0.change){a0.change()}}function a1(a6){a6.preventDefault();a3.destroy();ax(q(a2)).focus();if(!aZ){a0.releaseRange(a2)}}var a3=ao.window.create(s.extend({},this.editor.dialogOptions,{title:"Insert image",html:new s.telerik.stringBuilder().cat('
').cat("
    ").cat('
  1. ').cat('
  2. ').cat("
").cat('
').cat('').cat(" or ").cat('Close').cat("
").cat("
").string(),onClose:a1})).hide().find(".t-dialog-insert").click(a5).end().find(".t-dialog-close").click(a1).end().find(".t-form-text-row input").keydown(function(a6){if(a6.keyCode==13){a5(a6)}else{if(a6.keyCode==27){a1(a6)}}}).end().delegate(".t-button","mouseenter",ao.buttonHover).delegate(".t-button","mouseleave",ao.buttonLeave).find("#t-editor-image-url").val(a4?a4.getAttribute("src",2):"http://").end().find("#t-editor-image-title").val(a4?a4.alt:"").end().show().data("tWindow").center();s("#t-editor-image-url",a3.element).focus().select()}}ao.selectbox=function(aW,aX){var a4;var aZ=s(aW);var a1=aZ.find(".t-input");var aY=new ao.dropDown({outerHeight:aZ.outerHeight(),outerWidth:aZ.outerWidth(),zIndex:ao.list.getZIndex(aZ),effects:ao.fx.slide.defaults(),onOpen:function(){var a5=aZ.offset();aY.position(a5.top,a5.left);return true},onItemCreate:aX.onItemCreate,onClick:function(a5){a3(aX.data[s(a5.item).index()].Value);aX.onChange({value:a4})}});function a0(){if(!aY.$items){aY.dataBind(aX.data)}}function a2(a5){a1.html(a5)}function a3(a7){a0();var a6=-1;for(var a5=0,a8=aX.data.length;a50;if(a6&&!s.contains(aW,a7.target)&&!s.contains(a5.parent()[0],a7.target)){aY.close()}},this))};s.fn.tSelectBox=function(aW){return ao.create(this,{name:"tSelectBox",init:function(aX,aY){return new ao.selectbox(aX,aY)},options:aW})};s.fn.tSelectBox.defaults={effects:s.fn.tDropDownList.defaults.effects};ao.colorpicker=function(aW,aX){this.element=aW;var aY=s(aW);s.extend(this,aX);aY.bind("click",s.proxy(this.click,this));if(this.selectedColor){aY.find(".t-selected-color").css("background-color",this.selectedColor)}s(aW.ownerDocument).bind("mousedown",s.proxy(function(aZ){if(!s(aZ.target).closest(".t-colorpicker-popup").length){this.close()}},this));ao.bind(this,{change:this.onChange,load:this.onLoad})};ao.colorpicker.prototype={select:function(aW){if(aW){aW=C.toHex(aW);if(!ao.trigger(this.element,"change",{value:aW})){this.value(aW);this.close()}}else{ao.trigger(this.element,"change",{value:this.selectedColor})}},open:function(){var aW=this.popup();var aZ=s(this.element);var aY=aZ.offset();aY.top+=aZ.outerHeight();var aX="auto";aZ.parents().andSelf().each(function(){aX=s(this).css("zIndex");if(Number(aX)){aX=Number(aX)+1;return false}});ao.fx._wrap(aW).css(s.extend({position:"absolute",zIndex:aX},aY));aW.find(".t-item").bind("click",s.proxy(function(a1){var a0=s(a1.target,a1.target.ownerDocument).css("background-color");this.select(a0)},this));ao.fx.play(this.effects,aW,{direction:"bottom"})},close:function(){if(!this.$popup){return}ao.fx.rewind(this.effects,this.$popup,{direction:"bottom"},s.proxy(function(){C.remove(this.$popup[0].parentNode);this.$popup=null},this))},toggle:function(){if(!this.$popup||!this.$popup.is(":visible")){this.open()}else{this.close()}},click:function(aW){if(s(aW.target).closest(".t-tool-icon").length>0){this.select()}else{this.toggle()}},value:function(aW){if(!aW){return this.selectedColor}aW=C.toHex(aW);this.selectedColor=aW;s(".t-selected-color",this.element).css("background-color",aW)},popup:function(){if(!this.$popup){this.$popup=s(ao.colorpicker.buildPopup(this)).hide().appendTo(document.body)}return this.$popup}};s.extend(ao.colorpicker,{buildPopup:function(aW){var aZ=new ao.stringBuilder();aZ.cat('
').cat('
    ');var a1=aW.data;var aY=(aW.value()||"").substring(1);for(var aX=0,a0=a1.length;aX')}aZ.cat("
");return aZ.string()}});s.fn.tColorPicker=function(aW){return ao.create(this,{name:"tColorPicker",init:function(aX,aY){return new ao.colorpicker(aX,aY)},options:aW})};s.fn.tColorPicker.defaults={data:"000000,7f7f7f,880015,ed1c24,ff7f27,fff200,22b14c,00a2e8,3f48cc,a349a4,ffffff,c3c3c3,b97a57,ffaec9,ffc90e,efe4b0,b5e61d,99d9ea,7092be,c8bfe7".split(","),selectedColor:null,effects:s.fn.tDropDownList.defaults.effects};function aQ(){var aX=new x([{tags:G}]);function aW(aY){return aY.style.marginLeft||0}this.apply=function(a3){var a1=aX.findSuitable(a3);if(a1.length){var a0=[];for(var aZ=0;aZul")[0];if(!a6){a6=C.create(a4.ownerDocument,C.name(a7));a2.append(a6)}while(a4&&a4.parentNode==a7){a6.appendChild(a4);a4=a0.shift()}}else{var aY=parseInt(aW(a4))+30;C.style(a4,{marginLeft:aY})}}}else{var a5=new U([{tags:G}],{style:{marginLeft:30}});a5.apply(a3)}};this.remove=function(a0){var a2=aX.findSuitable(a0);for(var aY=0;aY",{src:'javascript:""',frameBorder:"0",className:"t-content"}).css("display","").insertBefore(aW)[0];var aX=a0.contentWindow||a0;var aZ=aX.document||a0.contentDocument;var aY=aW.val().replace(/(<\/?img[^>]*>)[\r\n\v\f\t ]+/ig,"$1");aZ.designMode="On";aZ.open();aZ.write(new ao.stringBuilder().cat('').cat('').cat('").cat(s.map(a1,function(a2){return[''].join("")}).join("")).cat('').cat(aY).cat("").string());aZ.close();return aX}function T(aW){ao.trigger(aW.element,"selectionChange")}function au(aW){if(aW.pendingFormats.length==0){return}aW.pendingFormats.reverse();s.each(aW.pendingFormats,function(){for(var aX=this.firstChild;aX;aX=aX.nextSibling){while(aX.nodeType==3&&(charIndex=aX.nodeValue.indexOf("\ufeff"))>=0){aX.deleteData(charIndex,1)}}});s.each(aW.pendingFormats,function(){if(this.innerHTML==""&&this.parentNode){C.remove(this)}});aW.pendingFormats=[]}ao.editor=function(aW,aX){if(/Mobile.*Safari/.test(navigator.userAgent)){return}var aY=this;this.element=aW;var aZ=s(aW);aZ.closest("form").bind("submit",function(){aY.update()});s.extend(this,aX);ao.bind(this,{load:this.onLoad,selectionChange:this.onSelectionChange,change:this.onChange,execute:this.onExecute});this.textarea=aZ.find("textarea").attr("autocomplete","off")[0];this.window=av(s(this.textarea),this.stylesheets);this.document=this.window.contentDocument||this.window.document;this.body=this.document.body;this.keyboard=new aE([new aK(this),new z(this)]);this.clipboard=new ay(this);this.pendingFormats=[];this.undoRedoStack=new P();function a3(a4){var a5=s.grep(a4.className.split(" "),function(a6){return !/^t-(widget|tool-icon|state-hover|header|combobox|dropdown|selectbox|colorpicker)$/i.test(a6)});return a5[0]?a5[0].substring(2):"custom"}function a2(a5,a4){if(!a4.key){return a5}return new ao.stringBuilder().cat(a5).cat(" (").catIf("Ctrl + ",a4.ctrl).catIf("Shift + ",a4.shift).catIf("Alt + ",a4.alt).cat(a4.key).cat(")").string()}s(this.window).bind("blur",function(){var a4=aY.textarea.value;var a5=aY.encodedValue();aY.update(a5);if(a5!=a4){ao.trigger(aY.element,"change")}});var a1=".t-editor-toolbar > li > *";var a0=".t-editor-button .t-tool-icon:not(.t-state-disabled)";aZ.delegate(a0,"mouseenter",ao.hover).delegate(a0,"mouseleave",ao.leave).delegate(a0,"mousedown",ao.preventDefault).delegate(a0,"click",ao.stopAll(function(a4){aY.focus();aY.exec(a3(this))})).find(a1).each(function(){var a6=a3(this);var a4=aY.tools[a6];if(!a4){return}var a5=a2(aY.localization[a6],a4);a4.init(s(this),{title:a5,editor:aY})}).end().bind("selectionChange",function(){var a5=aY.getRange();aY.selectionRestorePoint=new ak(a5);var a4=j(a5);if(!a4.length){a4=[a5.startContainer]}aZ.find(a1).each(function(){var a6=aY.tools[a3(this)];if(a6){a6.update(s(this),a4)}})});s(this.document).bind("keyup",function(a4){var a5=[8,9,13,33,34,35,36,37,38,39,40,40,45,46];if(s.inArray(a4.keyCode,a5)>-1){T(aY)}}).keydown(function(a5){var a4=aY.keyboard.toolFromShortcut(aY.tools,a5);if(a4){a5.preventDefault();aY.exec(a4);return false}aY.keyboard.clearTimeout();aY.keyboard.keydown(a5)}).keyup(function(a4){aY.keyboard.keyup(a4)}).mouseup(function(){T(aY)});s(this.body).bind("cut paste",function(a4){aY.clipboard["on"+a4.type](a4)})};s.extend(ao.editor,{Dom:C,RestorePoint:ak,Marker:aa,RangeUtils:S,RangeEnumerator:ag,LinkFormatter:aS,LinkFormatFinder:H,LinkCommand:Y,UnlinkCommand:al,InlineFormatter:b,GreedyInlineFormatter:E,InlineFormatFinder:i,GreedyInlineFormatFinder:aV,BlockFormatter:U,GreedyBlockFormatter:aq,BlockFormatFinder:x,FormatCommand:aF,IndentFormatter:aQ,IndentCommand:o,OutdentCommand:Q,ListFormatFinder:am,ListFormatter:I,ListCommand:aw,ParagraphCommand:aN,NewLineCommand:d,ImageCommand:aJ,InsertHtmlCommand:aM,GenericCommand:aR,UndoRedoStack:P,TypingHandler:aK,SystemHandler:z,Keyboard:aE,MSWordFormatCleaner:f});ao.editor.prototype={value:function(aW){if(aW===undefined){return B(this.body)}aW=aW.replace(//g,"");aW=aW.replace(/]*)>(.*)?<\/script>/ig,"$2");if(s.browser.msie){aW="
"+aW;aW=aW.replace(/href\s*=\s*(?:'|")?([^'">\s]*)(?:'|")?/,'originalhref="$1"');aW=aW.replace(/src\s*=\s*(?:'|")?([^'">\s]*)(?:'|")?/,'originalsrc="$1"');this.body.innerHTML=aW;C.remove(this.body.firstChild);s("script,link,img,a",this.body).each(function(){if(this["originalhref"]){this.setAttribute("href",this["originalhref"]);this.removeAttribute("originalhref")}if(this["originalsrc"]){this.setAttribute("src",this["originalsrc"]);this.removeAttribute("originalsrc")}})}else{this.body.innerHTML=aW}this.update()},focus:function(){this.window.focus()},update:function(aW){this.textarea.value=aW||this.encoded?this.encodedValue():this.value()},encodedValue:function(){return C.encode(this.value())},createRange:function(aW){return aL(aW||this.document)},getSelection:function(){return aU(this.document)},selectRange:function(aX){var aW=this.getSelection();aW.removeAllRanges();aW.addRange(aX)},getRange:function(){var aW=this.getSelection();return aW.rangeCount>0?aW.getRangeAt(0):this.createRange()},selectedHtml:function(){return B(this.getRange().cloneContents())},paste:function(aW){this.clipboard.paste(aW)},exec:function(aZ,aW){aZ=aZ.toLowerCase();var a1="";for(var aY in this.tools){if(aY.toLowerCase()==aZ){a1=this.tools[aY];break}}if(a1){var aX=this.getRange();var a0=a1.command?a1.command(s.extend({range:aX},aW)):null;ao.trigger(this.element,"execute",{name:aZ,command:a0});if(/undo|redo/i.test(aZ)){this.undoRedoStack[aZ]()}else{if(a0){if(!a0.managesUndoRedo){this.undoRedoStack.push(a0)}a0.editor=this;a0.exec();if(a0.async){a0.change=s.proxy(function(){T(this)},this);return}}}T(this)}}};s.fn.tEditor=function(aW){return ao.create(this,{name:"tEditor",init:function(aX,aY){return new ao.editor(aX,aY)},options:aW})};var ah={bold:[{tags:["strong"]},{tags:["span"],attr:{style:{fontWeight:"bold"}}}],italic:[{tags:["em"]},{tags:["span"],attr:{style:{fontStyle:"italic"}}}],underline:[{tags:["span"],attr:{style:{textDecoration:"underline"}}}],strikethrough:[{tags:["del"]},{tags:["span"],attr:{style:{textDecoration:"line-through"}}}],justifyLeft:[{tags:G,attr:{style:{textAlign:"left"}}},{tags:["img"],attr:{style:{"float":"left"}}}],justifyCenter:[{tags:G,attr:{style:{textAlign:"center"}}},{tags:["img"],attr:{style:{display:"block",marginLeft:"auto",marginRight:"auto"}}}],justifyRight:[{tags:G,attr:{style:{textAlign:"right"}}},{tags:["img"],attr:{style:{"float":"right"}}}],justifyFull:[{tags:G,attr:{style:{textAlign:"justify"}}}]};function ab(aY,aX){for(var aW=0;aW=0){return aX[aW]}}}function V(aW){s.extend(this,aW);this.init=function(aX,aY){aX.attr({unselectable:"on",title:aY.title})};this.command=function(aX){return new aW.command(aX)};this.update=function(){}}V.exec=function(aX,aY,aW){aX.focus();if(aX.selectionRestorePoint){aX.selectRange(aX.selectionRestorePoint.toRange())}aX.exec(aY,{value:aW})};function af(aW){V.call(this,aW);this.command=function(aX){return new aF(s.extend(aX,{formatter:aW.formatter}))};this.update=function(aX,aY){aX.toggleClass("t-state-active",aW.finder.isFormatted(aY))}}var O=function(){return{isFormatted:function(){return false}}};s.fn.tEditor.defaults={localization:{bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",justifyCenter:"Center text",justifyLeft:"Align text left",justifyRight:"Align text right",justifyFull:"Justify",insertUnorderedList:"Insert unordered list",insertOrderedList:"Insert ordered list",indent:"Indent",outdent:"Outdent",createLink:"Insert hyperlink",unlink:"Remove hyperlink",insertImage:"Insert image",insertHtml:"Insert HTML",fontName:"Select font family",fontSize:"Select font size",formatBlock:"Format",style:"Styles"},formats:ah,encoded:true,stylesheets:[],dialogOptions:{modal:true,resizable:false,draggable:true,effects:{list:[{name:"toggle"}]}},fontName:[{Text:"inherit",Value:"inherit"},{Text:"Arial",Value:"Arial,Helvetica,sans-serif"},{Text:"Courier New",Value:"'Courier New',Courier,monospace"},{Text:"Georgia",Value:"Georgia,serif"},{Text:"Impact",Value:"Impact,Charcoal,sans-serif"},{Text:"Lucida Console",Value:"'Lucida Console',Monaco,monospace"},{Text:"Tahoma",Value:"Tahoma,Geneva,sans-serif"},{Text:"Times New Roman",Value:"'Times New Roman',Times,serif"},{Text:"Trebuchet MS",Value:"'Trebuchet MS',Helvetica,sans-serif"},{Text:"Verdana",Value:"Verdana,Geneva,sans-serif"}],fontSize:[{Text:"inherit",Value:"inherit"},{Text:"1 (8pt)",Value:"xx-small"},{Text:"2 (10pt)",Value:"x-small"},{Text:"3 (12pt)",Value:"small"},{Text:"4 (14pt)",Value:"medium"},{Text:"5 (18pt)",Value:"large"},{Text:"6 (24pt)",Value:"x-large"},{Text:"7 (36pt)",Value:"xx-large"}],formatBlock:[{Text:"Paragraph",Value:"p"},{Text:"Quotation",Value:"blockquote"},{Text:"Heading 1",Value:"h1"},{Text:"Heading 2",Value:"h2"},{Text:"Heading 3",Value:"h3"},{Text:"Heading 4",Value:"h4"},{Text:"Heading 5",Value:"h5"},{Text:"Heading 6",Value:"h6"}],tools:{bold:new W({key:"B",ctrl:true,format:ah.bold}),italic:new W({key:"I",ctrl:true,format:ah.italic}),underline:new W({key:"U",ctrl:true,format:ah.underline}),strikethrough:new W({format:ah.strikethrough}),undo:{key:"Z",ctrl:true},redo:{key:"Y",ctrl:true},insertLineBreak:new V({key:13,shift:true,command:d}),insertParagraph:new V({key:13,command:aN}),justifyCenter:new N({format:ah.justifyCenter}),justifyLeft:new N({format:ah.justifyLeft}),justifyRight:new N({format:ah.justifyRight}),justifyFull:new N({format:ah.justifyFull}),insertUnorderedList:new aI({tag:"ul"}),insertOrderedList:new aI({tag:"ol"}),createLink:new V({key:"K",ctrl:true,command:Y}),unlink:new aO({key:"K",ctrl:true,shift:true}),insertImage:new V({command:aJ}),indent:new V({command:o}),outdent:new ad(),insertHtml:new w(),style:new Z(),fontName:new aA({cssAttr:"font-family",domAttr:"fontFamily",name:"fontName"}),fontSize:new aA({cssAttr:"font-size",domAttr:"fontSize",name:"fontSize"}),formatBlock:new n(),foreColor:new aT({cssAttr:"color",domAttr:"color",name:"foreColor"}),backColor:new aT({cssAttr:"background-color",domAttr:"backgroundColor",name:"backColor"})}}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.editing.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.editing.min.js new file mode 100644 index 000000000..b8056a536 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.editing.min.js @@ -0,0 +1 @@ +(function(h){var l=h.telerik;h.validator.addMethod("regex",function(o,q,p){if(this.optional(q)){return true}var r=new RegExp(p).exec(o);return r&&r.index==0&&r[0].length==o.length});h.validator.addMethod("number",function(o,r){var p=l.cultureInfo.numericgroupsize;var q=new l.stringBuilder();q.cat("^-?(?:\\d+|\\d{1,").cat(p).cat("}(?:").cat(l.cultureInfo.numericgroupseparator).cat("\\d{").cat(p).cat("})+)(?:\\").cat(l.cultureInfo.numericdecimalseparator).cat("\\d+)?$");return this.optional(r)||new RegExp(q.string()).test(o)});function b(p,o,q){p.range=[o,q]}function j(o,p){o.regex=p}function c(o){o.required=true}function m(o,p){o.maxlength=p}function e(o,p,q){o[p]=q}function g(r){var o={};for(var q=0;q",{id:q.element.id+"PopUp"}).appendTo(q.element).css({top:0,left:"50%",marginLeft:-90}).tWindow(q.settings).delegate(".t-grid-cancel","click",l.stopAll(function(){o.data("tWindow").close()}))}h.each(["insert","update"],function(r,s){if(q[s]){o.undelegate(".t-grid-"+s,"click").delegate(".t-grid-"+s,"click",l.stopAll(function(t){q[s](t.target,o)}))}});o.find("> .t-content").empty().append(q.content);var p=o.data("tWindow");p.title(q.title);p.open();return o}l.editing.implementation={insertRow:function(o){var p=this.extractValues(o);if(l.trigger(this.element,"save",{mode:"insert",values:p,form:o.find("form")[0]})){return}this.sendValues(p,"insertUrl")},updateRow:function(o){var p=this.dataItem(o.data("tr")||o);var q=this.extractValues(o,true);if(l.trigger(this.element,"save",{mode:"edit",dataItem:p,values:q,form:o.find("form")[0]})){return}this.sendValues(q,"updateUrl")},deleteRow:function(o){if(l.trigger(this.element,"delete",{dataItem:this.dataItem(o)})){return}if(this.editing.confirmDelete===false||confirm(this.localization.deleteConfirmation)){this.sendValues(this.extractValues(o,true),"deleteUrl")}},editRow:function(q){this.cancel();var r=new l.stringBuilder();var s=a(this.columns,"edit");this.form(r,[{name:"update",attr:s.attr,buttonType:s.buttonType,imageAttr:s.imageAttr},{name:"cancel",attr:s.attr,buttonType:s.buttonType,imageAttr:s.imageAttr}],q.find(".t-hierarchy-cell").find(".t-icon").hasClass("t-plus"));var p=this.dataItem(q);var o=h(r.string());o.children().hide();var t=o.find("tr:first td:not(.t-group-cell, .t-hierarchy-cell)");var u=this.editing.mode;if(u!="PopUp"){q.html(o)}else{f({title:this.localization.edit,element:this.element,settings:this.editing.popup,content:o,update:h.proxy(function(w,v){this.save(w,h.proxy(function(){v.data("tr",q);this.updateRow(v);v.data("tWindow").close()},this))},this)})}h.each(this.columns,function(v){if(this.edit){o.find(':input[name$="'+this.member+'"]').val(this.edit(p)+"").parent().filter(".t-numerictextbox").each(h.proxy(function(x,w){h(w).data("tTextBox").value(this.edit(p))},this)).end().find(':checkbox[name$="'+this.member+'"]').attr("checked",this.edit(p)==true)}if(u=="InLine"&&this.readonly){t.eq(v).html(this.display(p))}});o.children().show();l.trigger(this.element,"edit",{mode:"edit",form:o.find("form")[0]||o[0],dataItem:p});this.validation()},addRow:function(){this.cancel();var r=new l.stringBuilder();var p=this.editing.mode;var q=a(this.columns,"edit");var o;if(p!="PopUp"){r.cat('');this.form(r,[{name:"insert",attr:q.attr,buttonType:q.buttonType,imageAttr:q.imageAttr},{name:"cancel",attr:q.attr,buttonType:q.buttonType,imageAttr:q.imageAttr}]);r.cat("");o=h(r.string()).prependTo(this.$tbody)}else{this.form(r,[{name:"insert",attr:q.attr,buttonType:q.buttonType,imageAttr:q.imageAttr},{name:"cancel",attr:q.attr,buttonType:q.buttonType,imageAttr:q.imageAttr}]);o=h(r.string());f({title:this.localization.insert,element:this.element,settings:this.editing.popup,content:o,insert:h.proxy(function(t,s){this.save(t,h.proxy(function(){this.insertRow(s);s.data("tWindow").close()},this))},this)})}l.trigger(this.element,"edit",{mode:"insert",form:o.find("form")[0]||o[0]});this.validation()},extractValues:function(o,r){var s={};h.each(this.columns,function(){var t=this.member;if(this.edit){o.find(':input[name$="'+t+'"]').each(function(){s[t]=h(this).val()}).end().find(':checkbox[name$="'+t+'"]').each(function(){s[t]=h(this).attr("checked")})}});if(r){var q=this.dataItem(o.data("tr")||o);for(var p in this.dataKeys){s[this.ws?p:this.dataKeys[p]]=this.valueFor({member:p})(q)}}return s},cancelRow:function(o){if(!o.length){return}if(o.is(".t-grid-new-row")){o.remove();return}var q=this.dataItem(o);var r=new l.stringBuilder();var p=o.find(".t-hierarchy-cell").find(".t-icon").hasClass("t-plus");r.rep('',this.groups.length).catIf('',this.detail);h.each(this.columns,h.proxy(function(s,t){r.cat("");if(t.display){r.cat(t.display(q))}this.appendCommandHtml(t.commands,r);r.cat("")},this));o.html(r.string());l.trigger(this.element,"rowDataBound",{row:o[0],dataItem:q})},form:function(r,o,s){var p=this.$tbody.siblings("colgroup");var t=this.editing.mode;if(t!="PopUp"){r.cat('')}r.cat('
');if(t=="InLine"){r.cat('');this.$tbody.siblings("colgroup").children().each(function(){var u=h(this).css("width");if(u!="0px"){r.cat('')}else{r.cat("")}});var q=new l.stringBuilder();q.cat('");r.cat("").rep('")},this));r.cat("
').catIf('',s!=undefined).cat("
',this.groups.length).catIf(q.string(),this.detail);h.each(this.columns,h.proxy(function(u,v){r.cat("").catIf(v.editor,v.editor).catIf(" ",!v.editor&&!v.commands);if(v.commands){this.appendCommandHtml(o,r)}r.cat("
")}else{r.cat('
').cat(this.editing.editor).cat("
");h.each(this.columns,h.proxy(function(u,v){if(v.commands){this.appendCommandHtml(o,r)}},this));r.cat("
")}r.cat("
");r.catIf("",t!="PopUp")},save:function(o,p){h(o).closest("form").validate().form()&&p()},cancel:function(){this.cancelRow(h("#"+this.formId()).closest("tr"))},sendValues:function(s,o){if(this.ws){for(var p in s){var r=this.columnFromMember(p);if(r&&r.type=="Date"){var q=l.datetime.parse(s[p],l.cultureInfo.shortDate).toDate();s[p]="\\/Date("+q.getTime()+")\\/"}}}h.ajax(this.ajaxOptions({data:this.ws?{value:s}:s,url:this.url(o)}))},formId:function(){return h(this.element).attr("id")+"form"},validation:function(){if(window.mvcClientValidationMetadata){var o=this.formId();var p=h.grep(window.mvcClientValidationMetadata,function(q){return q.FormId==o})[0];if(p){p.Fields=h.grep(p.Fields,h.proxy(function(q){var r=this.columnFromMember(q.FieldName);return !r||r.type!="Boolean"},this));i(p)}}}}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.filtering.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.filtering.min.js new file mode 100644 index 000000000..6600af174 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.filtering.min.js @@ -0,0 +1 @@ +(function(c){var b=c.telerik;var e=/'/ig;var d=b.fx.slide.defaults();function f(g){if(!g.format){return b.cultureInfo.shortDate}return/\{0(:([^\}]+))?\}/.exec(g.format)[2]}function a(h,g){if(h.type=="Date"){return b.formatString(h.format||"{0:G}",new Date(parseInt(g.replace(/\/Date\((.*?)\)\//,"$1"))))}return g}b.filtering={};b.filtering.initialize=function(g){c.extend(g,b.filtering.implementation);g.filterBy=g.filterExpr();c("> .t-grid-content",g.element).bind("scroll",function(){g.hideFilter()});c(document).click(function(h){if(h.which!=3){g.hideFilter()}});g.$header.find(".t-grid-filter").click(c.proxy(g.showFilter,g)).hover(function(){c(this).toggleClass("t-state-hover")})};b.filtering.implementation={createFilterCommands:function(h,g){var i={};c.each(this.localization,function(m,j){var k="filter"+g.type;var l=m.indexOf(k);if(l>-1){i[m.substring(l+k.length).toLowerCase()]=j}});h.cat('")},createTypeSpecificInput:function(j,g,h,i){if(g.type=="Date"){j.cat('
').cat('').cat('
')}else{if(g.type=="Boolean"){j.cat('
').cat('
")}else{if(g.type=="Enum"){j.cat("
")}else{if(g.type=="Number"){j.cat('
').cat('').cat("
")}else{j.cat('')}}}}},createFilterMenu:function(g){var j=new b.stringBuilder();j.cat('
");var i=c(j.string());c.each(g.filters||[],function(k){i.find(".t-filter-operator:eq("+k+")").val(this.operator).end().find(":text:eq("+k+"),select:not(.t-filter-operator):eq("+k+")").val(a(g,this.value));if(g.type=="Boolean"){i.find(":radio[id$="+this.value+"]").attr("checked",true)}});return i.find(".t-datepicker").each(function(){c(this).tDatePicker({format:f(g)})}).end().find(".t-numerictextbox").each(function(){c(this).tTextBox({type:"numeric",minValue:null,maxValue:null,numFormat:"",groupSeparator:""})}).end().appendTo(this.element)},showFilter:function(m){m.stopPropagation();var g=c(m.target).closest(".t-grid-filter");this.hideFilter(function(){return this.parentNode!=g[0]});var k=g.data("filter");if(!k){var h=this.columns[this.$columns().index(g.parent())];k=this.createFilterMenu(h).data("column",h).click(function(p){p.stopPropagation();if(c(p.target).parents(".t-datepicker").length==0){c(".t-datepicker",this).each(function(){c(this).data("tDatePicker").hidePopup()})}}).find(".t-filter-button").click(c.proxy(this.filterClick,this)).end().find(".t-clear-button").click(c.proxy(this.clearClick,this)).end().find("input[type=text]").keyup(c.proxy(function(p){if(p.keyCode==13){this.filterClick(p)}},this)).end();g.data("filter",k)}var l=0;c(this.element).find("> .t-grouping-header, > .t-grid-toolbar").add(this.$header).each(function(){l+=this.offsetHeight});var i={top:l};var n=-this.$headerWrap.scrollLeft()-1;g.parent().add(g.parent().prevAll("th")).each(function(){if(c(this).css("display")!="none"){n+=this.offsetWidth}});var j=n-g.outerWidth();var o=k.outerWidth()||k.find(".t-group").outerWidth();if(j+o>this.$header.outerWidth()){j=n-o+1}if(c(this.element).hasClass("t-grid-rtl")){i.right=j+(c.browser.mozilla||c.browser.safari?18:0)}else{i.left=j}k.css(i);b.fx[k.find(".t-filter-options").is(":visible")?"rewind":"play"](d,k.find(".t-filter-options"),{direction:"bottom"})},hideFilter:function(g){g=g||function(){return true};c(".t-grid .t-animation-container").find(".t-datepicker").each(function(){c(this).data("tDatePicker").hidePopup()}).end().find(".t-filter-options").filter(g).each(function(){b.fx.rewind(d,c(this),{direction:"bottom"})})},clearClick:function(i){i.preventDefault();var h=c(i.target);var g=h.closest(".t-animation-container").data("column");g.filters=null;h.parent().find("input, select").removeAttr("checked").removeClass("t-state-error").not(":radio").val("");this.filter(this.filterExpr())},filterClick:function(j){j.preventDefault();var i=c(j.target);var g=i.closest(".t-animation-container").data("column");g.filters=[];var h=false;i.parent().find("input[type=text]:visible,select:not(.t-filter-operator)").each(c.proxy(function(p,n){var l=c(n);var k=c.trim(l.val());if(!k){l.removeClass("t-state-error");return true}var m=this.isValidFilterValue(g,k);l.toggleClass("t-state-error",!m);if(!m){h=true;return true}var o=l.prev("select").val()||l.parent().prev("select").val();if(k!=this.localization.filterSelectValue){g.filters.push({operator:o,value:k})}},this));i.parent().find("input:checked").each(c.proxy(function(m,l){var n=c(l);var k=c(l).attr("value");g.filters.push({operator:"eq",value:k})},this));if(!h){if(g.filters.length>0){this.filter(this.filterExpr())}this.hideFilter()}},isValidFilterValue:function(h,g){if(h.type=="Number"){return !isNaN(g)}return true},encodeFilterValue:function(g,h){switch(g.type){case"String":return"'"+h.replace(e,"''")+"'";case"Date":var i;if(h.indexOf("Date(")>-1){i=new Date(parseInt(h.replace(/^\/Date\((.*?)\)\/$/,"$1")))}else{i=b.datetime.parse(h,f(g)).toDate()}return"datetime'"+b.formatString("{0:yyyy-MM-ddTHH-mm-ss}",i)+"'"}return h},filterExpr:function(){var g=[];c.each(this.columns,c.proxy(function(h,i){if(i.filters){c.each(i.filters,c.proxy(function(m,k){var j=new b.stringBuilder();var l=this.encodeFilterValue(i,k.value);if(/startswith|substringof|endswith/.test(k.operator)){j.cat(k.operator).cat("(").cat(i.member).cat(",").cat(l).cat(")")}else{j.cat(i.member).cat("~").cat(k.operator).cat("~").cat(l)}g.push(j.string())},this))}},this));return g.join("~and~")},filter:function(g){this.currentPage=1;this.filterBy=g;if(this.isAjax()){this.$columns().each(c.proxy(function(i,h){c(".t-grid-filter",h).toggleClass("t-active-filter",!!this.columns[i].filters)},this));this.ajaxRequest()}else{this.serverRequest()}}}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.grouping.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.grouping.min.js new file mode 100644 index 000000000..d0d55b828 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.grouping.min.js @@ -0,0 +1 @@ +(function(d){var b=d.telerik;var c=3;var a=0;b.grouping={};b.grouping.initialize=function(e){d.extend(e,b.grouping.implementation);e.$groupDropClue=d('
');e.$groupHeader=d("> .t-grouping-header",e.element);b.draganddrop(e.element.id,d.extend({useDragClue:true,draggables:[d(".t-link",e.$groupHeader[0]),d(".t-header:not(.t-group-cell,.t-hierarchy-cell)",e.$header[0])]},b.draganddrop.applyContext(b.draganddrop.grouping,e)));if(e.isAjax()){e.$groupHeader.delegate(".t-button","click",function(f){f.preventDefault();e.unGroup(d(this).parent().text())}).delegate(".t-link","click",function(g){g.preventDefault();var f=e.groupFromTitle(d(this).parent().text());f.order=f.order=="asc"?"desc":"asc";e.group(f.title)})}e.$groupHeader.delegate(".t-group-indicator","mouseenter",function(){e.$currentGroupItem=d(this)}).delegate(".t-group-indicator","mouseleave",function(){e.$currentGroupItem=null});e.$tbody.delegate(".t-grouping-row .t-collapse, .t-grouping-row .t-expand","click",b.stop(function(g){g.preventDefault();var f=d(this).closest("tr");if(d(this).hasClass("t-collapse")){e.collapseGroup(f)}else{e.expandGroup(f)}}))};b.grouping.implementation={columnFromTitle:function(e){return d.grep(this.columns,function(f){return f.title==e})[0]},groupFromTitle:function(e){return d.grep(this.groups,function(f){return f.title==e})[0]},expandGroup:function(f){var g=d(f);var e=g.find(".t-group-cell").length;g.find("~ tr").each(d.proxy(function(j,k){var h=d(k);var l=h.find(".t-group-cell").length;if(l<=e){return false}if(l==e+1&&!h.hasClass("t-detail-row")){h.show();if(h.hasClass("t-grouping-row")&&h.find(".t-icon").hasClass("t-collapse")){this.expandGroup(h)}if(h.hasClass("t-master-row")&&h.find(".t-icon").hasClass("t-minus")){h.next().show()}}},this));g.find(".t-icon").addClass("t-collapse").removeClass("t-expand")},collapseGroup:function(f){var g=d(f);var e=g.find(".t-group-cell").length;g.find("~ tr").each(function(){var h=d(this);var i=h.find(".t-group-cell").length;if(i<=e){return false}h.hide()});g.find(".t-icon").addClass("t-expand").removeClass("t-collapse")},group:function(f,i){if(this.groups.length==0&&this.isAjax()){this.$groupHeader.empty()}var g=d.grep(this.groups,function(k){return k.title==f})[0];if(!g){var h=this.columnFromTitle(f);g={order:"asc",member:h.member,title:f};this.groups.push(g)}if(i>=0){this.groups.splice(d.inArray(g,this.groups),1);this.groups.splice(i,0,g)}this.groupBy=d.map(this.groups,function(k){return k.member+"-"+k.order}).join("~");if(this.isAjax()){var j=this.$groupHeader.find('div:contains("'+f+'")');if(j.length==0){var e=new d.telerik.stringBuilder().cat('
').cat('').cat(f).cat("").cat('').cat("
").string();j=d(e).appendTo(this.$groupHeader)}if(this.$groupDropClue.is(":visible")){j.insertBefore(this.$groupDropClue)}j.find(".t-link .t-icon").toggleClass("t-arrow-up-small",g.order=="asc").toggleClass("t-arrow-down-small",g.order=="desc");this.ajaxRequest()}else{this.serverRequest()}},unGroup:function(f){var e=this.groupFromTitle(f);this.groups.splice(d.inArray(e,this.groups),1);if(this.groups.length==0){this.$groupHeader.html(this.localization.groupHint)}this.groupBy=d.map(this.groups,function(h){return h.member+"-"+h.order}).join("~");if(this.isAjax()){this.$groupHeader.find('div:contains("'+e.title+'")').remove();this.ajaxRequest()}else{this.serverRequest()}},normalizeColumns:function(g){var h=this.groups.length;var f=g-this.$tbody.parent().find("col").length;if(f==0){return}var i=this.$tbody.parent().add(this.$headerWrap.find("table"));if(d.browser.msie){if(f>0){d(new b.stringBuilder().rep('',f).string()).prependTo(i.find("colgroup"));d(new b.stringBuilder().rep(' ',f).string()).insertBefore(i.find("th.t-header:first"))}else{i.find("th:lt("+Math.abs(f)+")").remove().end().find("col:lt("+Math.abs(f)+")").remove()}if(document.documentMode==8){if(this.scrollable){i.css("table-layout","auto")}var j=this;var e=30;i.find("col").css("width",function(){return d(this).is(".t-group-col,.t-hierarchy-col")?e:(d(j.element).width()-h*e-16)/j.columns.length})}}else{i.find("col.t-group-col").remove();d(new b.stringBuilder().rep('',h).string()).prependTo(i.find("colgroup"));i.find("th.t-group-cell").remove();d(new b.stringBuilder().rep(' ',h).string()).insertBefore(i.find("th.t-header:first"))}this.$footer.attr("colspan",g)},bindGroup:function(g,m,k,j){var h=this.groups[j];var o=g.Key;var f=d.grep(this.columns,function(i){return h.member==i.member})[0];if(f&&(f.format||f.type=="Date")){o=b.formatString(f.format||"{0:G}",o)}k.cat('').rep('',j).cat('

').cat(h.title).cat(": ").cat(o).cat("

");if(g.HasSubgroups){for(var e=0,n=g.Items.length;e .t-grid-toolbar",this.element).outerHeight()+c;if(!i.length){this.$groupDropClue.css({top:l,left:a}).appendTo(this.$groupHeader);return"t-add"}var g=i[0];var n=i[i.length-1];var h=parseInt(g.$group.css("marginLeft"));var j=parseInt(g.$group.css("marginRight"));var k=d.grep(i,function(e){return m.pageX>=e.left-h-j&&m.pageX<=e.right})[0];if(!k&&g&&m.pageX0){var i=this.$groupHeader.find("div").index(this.$groupDropClue);var l=j-i;if(!g||(this.$groupDropClue.is(":visible")&&l!=0&&l!=-1)){this.group(h,i)}}else{if(f.parent().is(".t-group-indicator")){this.unGroup(h)}else{this.$groupDropClue.remove();return false}}this.$groupDropClue.remove();return true}}})})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.min.js new file mode 100644 index 000000000..1755a9e9b --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.min.js @@ -0,0 +1 @@ +(function(d){var a=d.telerik;var b=/"\\\/Date\((.*?)\)\\\/"/g;function c(e){return new Function("data",("var p=[];with(data){p.push('"+unescape(e).replace(/[\r\t\n]/g," ").replace(/'(?=[^#]*#>)/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/<#=(.+?)#>/g,"',$1,'").split("<#").join("');").split("#>").join("p.push('")+"');}return p.join('');"))}a.grid=function(f,g){this.element=f;this.groups=[];this.editing={};this.filterBy="";this.groupBy="";this.orderBy="";d.extend(this,g);this.sorted=d.grep(this.columns,function(i){return i.order});this.$tbody=d("> .t-grid-content > table tbody",f);this.scrollable=this.$tbody.length>0;if(!this.scrollable){this.$tbody=d("> table > tbody",f);this.$header=d("> table > thead tr",f);this.$footer=d("> table > tfoot .t-pager-wrapper",f)}else{this.$header=d("> .t-grid-header tr",f);this.$footer=d("> .t-grid-footer",f)}var l=this.$headerWrap=d("> .t-grid-header > .t-grid-header-wrap",f);d("> .t-grid-content",f).bind("scroll",function(){l.scrollLeft(this.scrollLeft)});this.$tbody.delegate(".t-hierarchy-cell .t-plus, .t-hierarchy-cell .t-minus","click",a.stopAll(function(o){var n=d(o.target);var m=n.hasClass("t-plus");n.toggleClass("t-minus",m).toggleClass("t-plus",!m);var i=n.closest("tr.t-master-row");if(this.detail&&!i.next().hasClass("t-detail-row")){d(new a.stringBuilder().cat('').rep('',i.find(".t-group-cell").length).cat('').cat('').cat(this.displayDetails(this.dataItem(i))).cat("").string()).insertAfter(i)}a.trigger(this.element,m?"detailViewExpand":"detailViewCollapse",{masterRow:i[0],detailRow:i.next(".t-detail-row")[0]});i.next().toggle(m)},this));this.$pager=d("> .t-pager-wrapper .t-pager",f).add(this.$footer.find(".t-pager"));this.$pager.delegate(".t-state-disabled","click",a.preventDefault).delegate(".t-link:not(.t-state-disabled)","hover",function(){d(this).toggleClass("t-state-hover")}).delegate("input[type=text]","keydown",d.proxy(this.pagerKeyDown,this));this.$footer.add(d("> .t-pager-wrapper",f)).delegate(".t-refresh","click",d.proxy(this.refreshClick,this));d(f).delegate(".t-button","hover",a.stop(function(){d(this).toggleClass("t-button-hover")}));if(this.sort){this.$header.delegate(".t-link","hover",function(){d(this).toggleClass("t-state-hover")})}var e="tr:not(.t-grouping-row,.t-detail-row)";if(this.selectable){var k=this.$tbody[0];var j=this;this.$tbody.delegate(e,"click",function(i){if(this.parentNode==k){j.rowClick(i)}}).delegate(e,"hover",function(){if(this.parentNode==k){d(this).toggleClass("t-state-hover")}})}if(this.isAjax()){this.$pager.delegate(".t-link:not(.t-state-disabled)","click",a.stop(this.pagerClick,this));if(this.sort){this.$header.delegate(".t-link","click",a.stop(this.headerClick,this))}}for(var h=0;h tr:not(.t-grouping-row,.t-detail-row)")},expandRow:function(e){d(e).find("> td .t-plus, > td .t-expand").click()},collapseRow:function(e){d(e).find("> td .t-minus, > td .t-collapse").click()},headerClick:function(f){f.preventDefault();this.toggleOrder(this.$columns().index(d(f.target).closest("th")));this.sort(this.sortExpr())},refreshClick:function(g,f){if(d(f).is(".t-loading")){return}if(this.isAjax()){g.preventDefault();this.ajaxRequest(true)}},sort:function(e){this.orderBy=e;this.ajaxRequest()},columnFromMember:function(e){var f=d.grep(this.columns,function(g){return g.member==e})[0];if(!f){f=d.grep(this.columns,function(h){var g="."+h.member;return e.substr(e.length-g.length)==g})[0]}return f},toggleOrder:function(e){e=typeof e=="number"?this.columns[e]:e;var g="asc";if(e.order=="asc"){g="desc"}else{if(e.order=="desc"){g=null}}e.order=g;var f=d.inArray(e,this.sorted);if(this.sortMode=="single"&&f<0){d.each(this.sorted,function(){this.order=null});this.sorted=[]}if(f<0&&g){this.sorted.push(e)}if(!g){this.sorted.splice(f,1)}},sortExpr:function(){return d.map(this.sorted,function(e){return e.member+"-"+e.order}).join("~")},pagerKeyDown:function(f){if(f.keyCode==13){var g=this.sanitizePage(d(f.target).val());if(g!=this.currentPage){this.pageTo(g)}else{d(element).val(g)}}},isAjax:function(){return this.ajax||this.ws||this.onDataBinding},url:function(e){return(this.ajax||this.ws)[e]},pagerClick:function(k){k.preventDefault();var g=d(k.target).closest(".t-link");var h=this.currentPage;var i=g.find(".t-icon");if(i.hasClass("t-arrow-next")){h++}else{if(i.hasClass("t-arrow-last")){h=this.totalPages()}else{if(i.hasClass("t-arrow-prev")){h--}else{if(i.hasClass("t-arrow-first")){h=1}else{var f=g.text();if(f=="..."){var j=g.parent().children().index(g);if(j==0){h=parseInt(g.next().text())-1}else{h=parseInt(g.prev().text())+1}}else{h=parseInt(f)}}}}}this.pageTo(h)},pageTo:function(e){this.currentPage=e;if(this.isAjax()){this.ajaxRequest()}else{this.serverRequest()}},ajaxOptions:function(f){var e={type:"POST",dataType:"text",dataFilter:function(h,i){return h.replace(b,"new Date($1)")},error:d.proxy(function(i,h){if(a.ajaxError(this.element,"error",i,h)){return}},this),complete:d.proxy(this.hideBusy,this),success:d.proxy(function(i,j,h){try{i=eval("("+i+")")}catch(k){if(!a.ajaxError(this.element,"error",h,"parseeror")){alert("Error! The requested URL did not return JSON.")}return}i=i.d||i;this.total=i.total||i.Total||0;this.dataBind(i.data||i.Data)},this)};d.extend(e,f);var g=this.ws?e.data.state={}:e.data;g[this.queryString.page]=this.currentPage;g[this.queryString.size]=this.pageSize;g[this.queryString.orderBy]=this.orderBy||"";g[this.queryString.groupBy]=this.groupBy;g[this.queryString.filter]=(this.filterBy||"").replace(/\"/g,'\\"');if(this.ws){e.data=a.toJson(e.data);e.contentType="application/json; charset=utf-8"}return e},showBusy:function(){this.busyTimeout=setTimeout(d.proxy(function(){this.$footer.find(".t-status .t-icon").addClass("t-loading")},this),100)},hideBusy:function(){clearTimeout(this.busyTimeout);this.$footer.find(".t-status .t-icon").removeClass("t-loading")},serverRequest:function(){location.href=a.formatString(unescape(this.urlFormat),this.currentPage,this.orderBy||"~",this.groupBy||"~",encodeURIComponent(this.filterBy)||"~")},ajaxRequest:function(){var f={page:this.currentPage,sortedColumns:this.sorted,filteredColumns:d.grep(this.columns,function(e){return e.filters})};if(a.trigger(this.element,"dataBinding",f)){return}if(!this.ajax&&!this.ws){return}this.showBusy();d.ajax(this.ajaxOptions({data:d.extend({},f.data),url:this.url("selectUrl")}))},valueFor:function(e){if(e.type=="Date"){return new Function("data","var value = data."+e.member+'; if (!value) return null; return value instanceof Date? value : new Date(parseInt(value.replace(/\\/Date\\((.*?)\\)\\//, "$1")));')}return new Function("data","return data."+e.member+";")},displayFor:function(e){if(!e.template){if(e.format||e.type=="Date"){return function(f){var g=e.value(f);return g==null?"":a.formatString(e.format||"{0:G}",g)}}return e.value}return c(e.template)},createColumnMappings:function(){d.each(this.columns,d.proxy(function(e,f){if(f.member){f.value=this.valueFor(f);f.display=this.displayFor(f);f.edit=f.type!="Date"?f.value:f.display}else{if(f.template){f.display=this.displayFor(f);f.readonly=true}}},this));if(this.detail){this.displayDetails=c(this.detail.template)}},bindData:function(f,j,l){Array.prototype.push.apply(this.data,f);var n=Math.min(this.pageSize,f.length);n=this.pageSize?n:f.length;if(d.browser.msie){d(this.element).find(".t-grid-content colgroup:first col").css("display","")}for(var o=0;o')}else{j.cat("")}j.rep('',l).catIf('',this.detail);for(var g=0,k=this.columns.length;g");var h=m.display;if(h){j.cat(h(f[o]))}this.appendCommandHtml(m.commands,j);j.cat("")}j.cat("")}},appendCommandHtml:function(g,h){if(g){var e=this.localization;var f=function(i,j){j.cat('")};d.each(g,function(){var j=h.cat('");var i=this.buttonType;if(i=="Image"){f(this,j)}else{if(i=="ImageAndText"){f(this,j);j.cat(e[this.name])}else{j.cat(e[this.name])}}j.cat("")})}},normalizeColumns:function(){},dataItem:function(e){return this.data[this.$tbody.find("> tr:not(.t-grouping-row,.t-detail-row)").index(d(e))]},bindTo:function(j){var g=new a.stringBuilder();if(j&&j.length){var h=this.groups.length+this.columns.length+(this.detail?1:0);this.normalizeColumns(h);if("HasSubgroups" in j[0]){for(var e=0,f=j.length;e=e).removeClass("t-state-hover");this.$pager.find(".t-arrow-prev").parent().add(this.$pager.find(".t-arrow-first").parent()).toggleClass("t-state-disabled",g==1).removeClass("t-state-hover");var f=this.localization;this.$pager.find(".t-page-i-of-n").each(function(){this.innerHTML=new a.stringBuilder().cat(f.page).cat(' ').cat(a.formatString(f.pageOf,e)).string()});this.$pager.find(".t-numeric").each(d.proxy(function(i,h){this.numericPager(h,g,e)},this));this.$pager.parent().find(".t-status-text").text(a.formatString(f.displayingItems,this.firstItemInPage(),this.lastItemInPage(),this.total))},numericPager:function(f,l,m){var j=10;var h=1;if(l>j){var e=(l%j);h=(e==0)?(l-j)+1:(l-e)+1}var i=(h+j)-1;i=Math.min(i,m);var g=new a.stringBuilder();if(h>1){g.cat('...')}for(var k=h;k<=i;k++){if(k==l){g.cat('').cat(k).cat("")}else{g.cat('').cat(k).cat("")}}if(i...')}f.innerHTML=g.string()},$columns:function(){return this.$header.find("th:not(.t-hierarchy-cell,.t-group-cell)")},updateSorting:function(){this.sorted=[];d.each(this.orderBy.split("~"),d.proxy(function(f,e){var g=e.split("-");var h=this.columnFromMember(g[0]);if(h){h.order=g[1];this.sorted.push(h)}},this));this.$columns().each(d.proxy(function(f,j){var g=this.columns[f].order;var e=d(j).children(".t-link");var h=e.children(".t-icon");if(!g){h.hide()}else{if(h.length==0){h=d('').appendTo(e)}h.toggleClass("t-arrow-up",g=="asc").toggleClass("t-arrow-down",g=="desc").show()}},this))},sanitizePage:function(f){var e=parseInt(f,10);if(isNaN(e)||e<1){return 1}return Math.min(e,this.totalPages())},totalPages:function(){return Math.ceil(this.total/this.pageSize)},firstItemInPage:function(){return this.total>0?(this.currentPage-1)*this.pageSize+1:0},lastItemInPage:function(){return Math.min(this.currentPage*this.pageSize,this.total)},dataBind:function(e){this.data=[];this.bindTo(e);this.updatePager();this.updateSorting();a.trigger(this.element,"dataBound")},rebind:function(f){this.sorted=[];this.filterBy="";this.currentPage=1;d.each(this.columns,function(){this.order=null;this.filters=[]});d(".t-filter-options",this.element).find('input[type="text"], select').val("").removeClass("t-state-error");for(var h in f){var g=new RegExp(a.formatString("({0})=([^&]*)",h),"g");if(g.test(this.ajax.selectUrl)){this.ajax.selectUrl=this.ajax.selectUrl.replace(g,"$1="+f[h])}else{var e=new a.stringBuilder();e.cat(this.ajax.selectUrl);if(this.ajax.selectUrl.indexOf("?")<0){e.cat("?")}else{e.cat("&")}this.ajax.selectUrl=e.cat(h).cat("=").cat(f[h]).string()}}this.ajaxRequest()}};d.fn.tGrid=function(e){return a.create(this,{name:"tGrid",init:function(f,g){return new a.grid(f,g)},options:e,success:function(f){if(f.$tbody.find("tr.t-no-data").length){f.ajaxRequest()}}})};d.fn.tGrid.defaults={columns:[],plugins:[],currentPage:1,pageSize:10,localization:{addNew:"Add new record","delete":"Delete",cancel:"Cancel",insert:"Insert",update:"Update",select:"Select",pageOf:"of {0}",displayingItems:"Displaying items {0} - {1} of {2}",edit:"Edit",page:"Page ",filter:"Filter",filterClear:"Clear Filter",filterShowRows:"Show rows with value that",filterAnd:"And",filterStringEq:"Is equal to",filterStringNe:"Is not equal to",filterStringStartsWith:"Starts with",filterStringSubstringOf:"Contains",filterStringEndsWith:"Ends with",filterNumberEq:"Is equal to",filterNumberNe:"Is not equal to",filterNumberLt:"Is less than",filterNumberLe:"Is less than or equal to",filterNumberGt:"Is greater than",filterNumberGe:"Is greater than or equal to",filterDateEq:"Is equal to",filterDateNe:"Is not equal to",filterDateLt:"Is before",filterDateLe:"Is before or equal to",filterDateGt:"Is after",filterDateGe:"Is after or equal to",filterEnumEq:"Is equal to",filterEnumNe:"Is not equal to",filterBoolIsTrue:"is true",filterBoolIsFalse:"is false",filterSelectValue:"-Select value-",filterOpenPopupHint:"Open the calendar popup",groupHint:"Drag a column header and drop it here to group by that column",deleteConfirmation:"Are you sure you want to delete this record?"},queryString:{page:"page",size:"size",orderBy:"orderBy",groupBy:"groupBy",filter:"filter"}}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.resizing.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.resizing.min.js new file mode 100644 index 000000000..0e2bc576e --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.grid.resizing.min.js @@ -0,0 +1 @@ +(function(a){var b=a.telerik;b.resizing={};b.resizing.initialize=function(r){var d,p=a('
'),k,e,j,n=3;function o(s,t){a("th, th .t-grid-filter, th .t-link",s).add(document.body).css("cursor",t)}function m(s){var t=0;a(".t-grouping-header, .t-grid-toolbar",s).each(function(){t+=this.offsetHeight});return t}function g(v){var t=0;a(".t-resize-handle",r.element).each(function(){t+=a(this).data("th").outerWidth();a(this).css("left",t-n)});t=-r.$tbody.closest(".t-grid-content").scrollLeft();v.prevAll("th").add(v).each(function(){t+=this.offsetWidth});var s=r.scrollable?a(".t-grid-content",r.element):a("tbody",r.element);var u=s.attr(r.scrollable?"clientWidth":"offsetWidth");if(t>=u){p.remove()}else{p.css({left:t,top:m(r.element),height:v.outerHeight()+s.attr(r.scrollable?"clientHeight":"offsetHeight")});if(!p.parent().length){p.appendTo(r.element)}}}function q(s){return true}function i(t,u){var s=u.data("th");d=a("colgroup",r.element).find("col:eq("+s.index()+")");j=t.pageX;e=s.outerWidth();k=r.$tbody.outerWidth()}function l(t,u){var s=e+t.pageX-j;if(s>10){d.css("width",s);if(r.scrollable){r.$tbody.parent().add(r.$headerWrap.find("table")).css("width",k+t.pageX-j)}g(u.data("th"))}}function f(s,t){p.remove();o(r.element,"")}function c(v,w,t){f();var u=w.data("th");var s=u.outerWidth();if(r.onColumnResize&&s!=e){b.trigger(r.element,"columnResize",{column:r.columns[r.$columns().index(u)],oldWidth:e,newWidth:s})}return true}var h=0;a(".t-header",r.element).each(function(){h+=this.offsetWidth;var s=a(this);if(!s.hasClass("t-group-cell")){a('
').css({left:h-n,top:r.scrollable?0:m(r.element),width:n*2}).appendTo(r.scrollable?r.$headerWrap:r.element).data("th",s).mousedown(function(){g(s);o(r.element,a(this).css("cursor"))}).mouseup(function(){o(r.element,"")})}});b.draganddrop(r.element.id+"Resize",{draggables:a(".t-resize-handle",r.element),hitTestOffset:0,shouldDrag:q,onDragStart:i,onDragMove:l,onDragCancelled:f,onDrop:c})}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.list.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.list.min.js new file mode 100644 index 000000000..c3decd0c1 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.list.min.js @@ -0,0 +1 @@ +(function(c){var f=c.telerik;var b=parseInt(c.browser.version.substring(0,5).replace(".",""));var d=c.browser.mozilla&&b>=180&&b<=191;f.dropDown=function(i){c.extend(this,i);this.$element=c(new f.stringBuilder().cat("
    ').cat("
").string()).hide();var h=this.$element[0];if(!h.style.width){h.style.width=(i.outerWidth?i.outerWidth-2:0)+"px"}if(!h.style.overflowY){h.style.overflowY="auto"}function g(m){var k=new f.stringBuilder();if(m){for(var j=0,n=m.length;j').cat(o.html).cat("")}}return k.string()}this.position=function(k,j){this.offset={top:k,left:j}};this.open=function(){if(this.isOpened()||(this.onOpen&&!this.onOpen())){return}var m=this.$element;var k=".t-reset > .t-item";m.delegate(k,"mouseenter",f.hover).delegate(k,"mouseleave",f.leave).delegate(k,"click",c.proxy(function(n){if(this.onClick){this.onClick(c.extend(n,{item:c(n.target).closest(".t-item")[0]}))}},this)).appendTo(document.body);var l=this.offset;l.top+=this.outerHeight;var j=this.zIndex||"auto";if(c.browser.msie&&j=="auto"){j=""}f.fx._wrap(m).css(c.extend({position:"absolute",zIndex:j},this.offset));if(d){m.css("overflow","hidden")}f.fx.play(this.effects,m,{direction:"bottom"},c.proxy(function(){if(d){m.css("overflow","auto")}var n=this.$items.filter(".t-state-selected");if(n.length){this.scrollTo(n[0])}},this))};this.close=function(){if(this.onClose&&!this.onClose()){return}var j=this.$element;if(d){j.css("overflow","hidden")}f.fx.rewind(this.effects,j,{direction:"bottom"},function(){if(d){j.css("overflow","auto")}j.parent().remove()})};this.dataBind=function(k){k=k||[];var n=this.$element;var m=n[0].style.height;var l=m&&m!="auto"?n[0].style.height:"200px";var j=c(g.call(this,k));n.find("> ul").html(j);n.css("height",j.length>10?l:"auto");this.$items=j};this.highlight=function(j){return c(j).addClass("t-state-selected").siblings().removeClass("t-state-selected").end().index()};this.isOpened=function(){return this.$element.is(":visible")};this.scrollTo=function(p){if(!p){return}var j=p.offsetTop;var n=p.offsetHeight;var k=this.$element[0];var l=k.scrollTop;var o=k.clientHeight;var m=j+n;k.scrollTop=l>j?j:m>(l+o)?m-o:l}};f.list={initialize:function(){this.$input=this.$element.find("input:last");this.previousValue=this.value();f.bind(this,{dataBinding:this.onDataBinding,dataBound:this.onDataBound,error:this.onError,open:this.onOpen,close:this.onClose,valueChange:this.onChange,load:this.onLoad});c(document).bind("mousedown",c.proxy(function(i){var g=this.dropDown.$element;var h=g&&g.parent().length>0;if(h&&!c.contains(this.element,i.target)&&!c.contains(g.parent()[0],i.target)){this.trigger.change();this.trigger.close()}},this))},common:function(){this.open=function(){if(this.data.length==0){return}var g=this.dropDown;if(g.$items){g.open()}else{this.fill(function(){g.open()})}};this.close=function(){this.dropDown.close()};this.dataBind=function(g){this.data=g||[];this.dropDown.dataBind(this.data)};this.highlight=function(k){var j=-1;var g=function(m){var i=m.previousValue;m.close();m.dataBind(m.data);m.previousValue=i;m.dropDown.$items.removeClass("t-state-selected").eq(j).addClass("t-state-selected")};if(!isNaN(k-0)){if(k>-1&&k0){n.filters[l](n,g,k);var h=n.filteredDataIndexes;if((h&&h.length>0)||(l==0&&n.selectedIndex!=-1)){t=false}}if(t){var q={};q[n.queryString.text]=k;n.loader.ajaxRequest(function(v){var w=n.trigger;var u=n.dropDown;if(v&&v.length==0){n.close();n.dataBind();return}n.data=v;f.trigger(n.element,"dataBound");n.filters[l](n,v,k);var x=u.$items;if(x.length>0){if(!u.isOpened()){w.open()}n.filtering.autoFill(n,x.first().text())}else{w.close()}},{data:q})}}else{t=false;n.filters[l](n,n.data,k)}if(!t){var s=m.$items;var i=s.length;var j=n.selectedIndex;var o=l==0?j!=-1?s[j].innerText||s[j].textContent:"":s.length>0?s.first().text():"";this.autoFill(n,o);if(i==0){p.close()}else{if(!m.isOpened()){p.open()}}}};this.multiple=function(g){return g}},filters:function(){this.filters=[function g(h,l,o){if(!l||l.length==0){return}var m=h.dropDown;var k=m.$items;if(k.length==0||h.loader.isAjax()){m.dataBind(l);k=m.$items}for(var j=0,n=l.length;j .t-dropdown-wrap .t-icon").addClass("t-loading")},this),100)},this.hideBusy=function(){clearTimeout(this.busyTimeout);this.component.$element.find("> .t-dropdown-wrap .t-icon").removeClass("t-loading")}},trigger:function(g){this.component=g;this.change=function(){var m=g.data;var o=g.text();var p=o.toLowerCase();var n=g.previousValue;for(var j=0,l=m.length;j0)&&!h.isOpened()&&!f.trigger(g.element,"open")){g.open()}};this.close=function(){if(!g.dropDown.$element.is(":animated")&&g.dropDown.isOpened()&&!f.trigger(g.element,"close")){g.close()}}},highlightFirstOnFilter:function(h,g){if(h.highlightFirst){g.first().addClass("t-state-selected");h.dropDown.scrollTo(g[0])}},moveToEnd:function(g){if(g.createTextRange){var h=g.createTextRange();h.moveStart("textedit",1);h.select()}},selection:function(g,j,h){if(g.createTextRange){var i=g.createTextRange();i.collapse(true);i.moveStart("character",j);i.moveEnd("character",h-j);i.select()}else{if(g.selectionStart){g.selectionStart=j;g.selectionEnd=h}}},updateTextAndValue:function(h,i,g){h.text(i);if(g||g==0){h.$input.val(g)}else{h.$input.val(i)}},getZIndex:function(g){var h="auto";c(g).parents().andSelf().each(function(){h=c(this).css("zIndex");if(Number(h)){h=Number(h)+1;return false}});return h},keycodes:[8,9,13,27,37,38,39,40,35,36,46]};function e(g,h){return function(j,n,o){if(!n||n.length==0){return}var m=c.map(n,function(q,p){if(h(o,q.Text||q)){return p}});var l=m.length;var i=new RegExp("(?![^&;]+;)(?!<[^<>]*)("+o.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)",g?"ig":"i");j.filteredDataIndexes=m;j.selectedIndex=-1;j.dropDown.onItemCreate=function(p){p.html=p.html.replace(i,"$1")};j.dropDown.dataBind(c.map(m,function(q,p){return n[q]}));var k=j.dropDown.$items;k.removeClass("t-state-selected");f.list.highlightFirstOnFilter(j,k)}}function a(g,j,l){if(!g||!j){return null}var m=l.length;l=l.toLowerCase();for(var h=0,k=g.length;h .t-dropdown-wrap > .t-input");this.dropDown=new f.dropDown({outerHeight:i.outerHeight(),outerWidth:i.outerWidth(),zIndex:f.list.getZIndex(i),attr:this.dropDownAttr,effects:this.effects,onOpen:c.proxy(function(){var o=this.dropDown;var n=i.offset();o.position(n.top,n.left);if(!o.outerHeight){o.outerHeight=i.outerHeight()}if(!o.outerWidth){o.outerWidth=i.outerWidth();o.$element.css("width",o.outerWidth-2)}return true},this),onClick:c.proxy(function(n){this.select(n.item);this.trigger.change();this.trigger.close()},this)});this.fill=function(q){function p(r){var s=r.dropDown.$items;var u=r.index;var t=s.filter(".t-state-selected");var v=t.length;var w=u!=-1&&u0?t[v-1]:s[0];r.select(w)}var n=this.dropDown;var o=this.loader;if(!n.$items&&!o.ajaxError){if(o.isAjax()){o.ajaxRequest(function(r){this.data=r;n.dataBind(r);p(this);f.trigger(this.element,"dataBound");this.trigger.change();if(q){q()}})}else{n.dataBind(this.data);p(this);if(q){q()}}}};this.reload=function(){this.dropDown.$items=null;this.fill()};this.select=function(o){var n=this.highlight(o);if(n==-1){return n}this.selectedIndex=n;f.list.updateTextAndValue(this,c(this.dropDown.$items[n]).text(),this.data[n].Value)},this.text=function(n){return this.$text.html(n)};this.value=function(o){if(arguments.length){var o=arguments[0];var n=this.select(function(p){return o==p.Value});if(n!=-1){this.previousValue=o}}else{return this.$input.val()}};f.list.common.call(this);f.list.initialize.call(this);i.bind({keydown:c.proxy(l,this),keypress:c.proxy(m,this),click:c.proxy(function(p){var o=this.trigger;var n=this.dropDown;i.focus();if(n.isOpened()){o.close()}else{if(!n.$items){this.fill(o.open)}else{o.open()}}},this)});function k(){clearTimeout(this.timeout);this.timeout=setTimeout(c.proxy(function(){j=""},this),1000)}function l(t){var q=this.trigger;var o=this.dropDown;var r=t.keyCode||t.which;if(t.altKey&&r==38){q.close();return}if(t.altKey&&r==40){q.open();return}if(r>34&&r<41){t.preventDefault();if(!o.$items){this.fill();return}var p=o.$items;var s=c(p[this.selectedIndex]);var n=(r==35)?p.last():(r==36)?p.first():(r==37||r==38)?s.prev():(r==39||r==40)?s.next():[];if(n.length){var u=n[0];this.select(u);o.scrollTo(u);if(!o.isOpened()){q.change()}}}if(r==8){k();t.preventDefault();j=j.slice(0,-1)}if(r==9||r==13||r==27){q.change();q.close()}}function m(r){var n=this.dropDown;var o=r.keyCode||r.charCode;if(o==0||c.inArray(o,f.list.keycodes)!=-1||r.ctrlKey||r.altKey||r.shiftKey){return}if(!n.$items){this.fill();return}var p=j;p+=String.fromCharCode(o);if(p){var q=a(this.data,n.$items,p);if(q){this.select(q);n.scrollTo(q)}j=p}k()}};c.fn.tDropDownList=function(g){return f.create(this,{name:"tDropDownList",init:function(h,i){return new f.dropDownList(h,i)},options:g})};c.fn.tDropDownList.defaults={effects:f.fx.slide.defaults(),index:0}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.menu.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.menu.min.js new file mode 100644 index 000000000..5ac73a5b1 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.menu.min.js @@ -0,0 +1 @@ +(function(d){var a=d.telerik;a.menu=function(e,f){this.element=e;this.nextItemZIndex=100;d.extend(this,f);d(".t-item:not(.t-state-disabled)",e).live("mouseenter",a.delegate(this,this.mouseenter),true).live("mouseleave",a.delegate(this,this.mouseleave),true).live("click",a.delegate(this,this.click));d(".t-item:not(.t-state-disabled) > .t-link",e).live("mouseenter",a.hover).live("mouseleave",a.leave);d(document).click(a.delegate(this,this.documentClick));a.bind(this,{select:this.onSelect,open:this.onOpen,close:this.onClose,load:this.onLoad})};function b(e){var f=e.parent();return{direction:f.hasClass("t-menu")?f.hasClass("t-menu-vertical")?"right":"bottom":"right"}}function c(f,g){try{return d.contains(f,g)}catch(h){return false}}a.menu.prototype={toggle:function(f,e){d(f).each(function(){d(this).toggleClass("t-state-default",e).toggleClass("t-state-disabled",!e)})},enable:function(e){this.toggle(e,true)},disable:function(e){this.toggle(e,false)},open:function(f){var e=this;d(f).each(function(){var g=d(this);clearTimeout(g.data("timer"));g.data("timer",setTimeout(function(){var h=g.find(".t-group:first");if(h.length){a.fx.play(e.effects,h,b(g));g.css("z-index",e.nextItemZIndex++)}},100))})},close:function(f){var e=this;d(f).each(function(h,i){var g=d(i);clearTimeout(g.data("timer"));g.data("timer",setTimeout(function(){var j=g.find(".t-group:first");if(j.length){a.fx.rewind(e.effects,j,b(g),function(){g.css("zIndex","");if(d(e.element).find(".t-group:visible").length==0){e.nextItemZIndex=100}});j.find(".t-group").stop(false,true)}},100))})},mouseenter:function(i,h){var g=d(h);if(!this.openOnClick||this.clicked){if(!c(h,i.relatedTarget)){this.triggerEvent("open",g);this.open(g);var f=g.parent().closest(".t-item")[0];if(f&&!c(f,i.relatedTarget)){this.mouseenter(i,f)}}}if(this.openOnClick&&this.clicked){this.triggerEvent("close",g);g.siblings().each(d.proxy(function(j,e){this.close(d(e))},this))}},mouseleave:function(i,h){if(!this.openOnClick&&!c(h,i.relatedTarget)){var g=d(h);this.triggerEvent("close",g);this.close(g);var f=g.parent().closest(".t-item")[0];if(f&&!c(f,i.relatedTarget)){this.mouseleave(i,f)}}},click:function(h,g){var f=d(g);a.trigger(this.element,"select",{item:f[0]});if(!f.parent().hasClass("t-menu")||!this.openOnClick){return}h.preventDefault();this.clicked=true;this.triggerEvent("open",f);this.open(f)},documentClick:function(g,f){if(d.contains(this.element,g.target)){return}if(this.clicked){this.clicked=false;d(this.element).children(".t-item").each(d.proxy(function(e,h){this.close(d(h))},this))}},hasChildren:function(e){return e.find(".t-group:first").length},triggerEvent:function(e,f){if(this.hasChildren(f)){a.trigger(this.element,e,{item:f[0]})}}};d.fn.tMenu=function(e){return a.create(this,{name:"tMenu",init:function(f,g){return new a.menu(f,g)},options:e})};d.fn.tMenu.defaults={orientation:"horizontal",effects:a.fx.slide.defaults(),openOnClick:false}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.panelbar.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.panelbar.min.js new file mode 100644 index 000000000..d3c48d751 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.panelbar.min.js @@ -0,0 +1 @@ +(function(c){var a=c.telerik;var b={single:0,multi:1};c.extend(a,{panelbar:function(f,g){this.element=f;var h=c(f);c.extend(this,g);var d=".t-item:not(.t-state-disabled) > .t-link";h.delegate(d,"click",a.delegate(this,this._click)).delegate(d,"mouseenter",a.hover).delegate(d,"mouseleave",a.leave).delegate(".t-item.t-state-disabled > .t-link","click",a.preventDefault);a.bind(this,{expand:this.onExpand,collapse:this.onCollapse,select:c.proxy(function(i){if(i.target==this.element&&this.onSelect){this.onSelect(i)}},this),error:this.onError,load:this.onLoad});var e=h.find("li.t-state-active > .t-content");if(e.length>0&&e.eq(0).children().length==0){this.expand(e.parent())}}});a.panelbar.prototype={expand:function(d){c(d).each(c.proxy(function(f,g){var e=c(g);if(!e.hasClass(".t-state-disabled")&&e.find("> .t-group, > .t-content").length>0){if(this.expandMode==b.single&&this._collapseAllExpanded(e)){return}this._toggleItem(e,false,null)}},this))},collapse:function(d){c(d).each(c.proxy(function(f,g){var e=c(g);if(!e.hasClass(".t-state-disabled")&&e.find("> .t-group, > .t-content").is(":visible")){this._toggleItem(e,true,null)}},this))},toggle:function(e,d){c(e).each(function(){c(this).toggleClass("t-state-default",d).toggleClass("t-state-disabled",!d)})},enable:function(d){this.toggle(d,true)},disable:function(d){this.toggle(d,false)},_click:function(m,d){var f=c(m.target);if(f.closest(".t-link")[0]!=d||f.closest(".t-widget")[0]!=this.element){return}var h=c(d);var j=h.closest(".t-item");h.find(".t-link").removeClass("t-state-selected").end().addClass("t-state-selected");if(a.trigger(this.element,"select",{item:j[0]})){m.preventDefault()}var l=j.find("> .t-content, > .t-group");var i=h.attr("href");var k=(i&&(i.charAt(i.length-1)=="#"||i.indexOf("#"+this.element.id+"-")!=-1));if(k||l.length>0){m.preventDefault()}else{return}if(this.expandMode==b.single){if(this._collapseAllExpanded(j)){return}}if(l.length!=0){var g=l.is(":visible");if(!a.trigger(this.element,!g?"expand":"collapse",{item:j[0]})){this._toggleItem(j,g,m)}}},_toggleItem:function(f,h,i){var j=f.find("> .t-group");if(j.length!=0){this._toggleGroup(j,h);if(i!=null){i.preventDefault()}}else{var g=f.parent().children().index(f);var d=f.find("> .t-content");if(d.length>0){if(i!=null){i.preventDefault()}if(c.trim(d.html()).length>0){this._toggleGroup(d,h)}else{this._ajaxRequest(f,d,h)}}}},_toggleGroup:function(d,e){if(d.data("animating")){return}d.data("animating",true).parent().toggleClass("t-state-default",e).toggleClass("t-state-active",!e).find("> .t-link > .t-icon").toggleClass("t-arrow-up",!e).toggleClass("t-panelbar-collapse",!e).toggleClass("t-arrow-down",e).toggleClass("t-panelbar-expand",e);a.fx[!e?"play":"rewind"](this.effects,d,null,function(){d.data("animating",false)})},_collapseAllExpanded:function(d){if(d.find("> .t-link").hasClass("t-header")){if(d.find("> .t-content, > .t-group").is(":visible")||d.find("> .t-content, > .t-group").length==0){return true}else{c(this.element).children().find("> .t-content, > .t-group").filter(function(){return c(this).is(":visible")}).each(c.proxy(function(f,e){this._toggleGroup(c(e),true)},this))}}},_ajaxRequest:function(e,d,g){var h=e.find(".t-panelbar-collapse, .t-panelbar-expand");var f=setTimeout(function(){h.addClass("t-loading")},100);var i={};c.ajax({type:"GET",cache:false,url:e.find(".t-link").attr("href"),dataType:"html",data:i,error:c.proxy(function(k,j){if(a.ajaxError(this.element,"error",k,j)){return}},this),complete:function(){clearTimeout(f);h.removeClass("t-loading")},success:c.proxy(function(j,l){d.html(j);this._toggleGroup(d,g);var k=d.prev(".t-link");k.data("ContentUrl",k.attr("href")).attr("href","#")},this)})}};c.fn.tPanelBar=function(d){return a.create(this,{name:"tPanelBar",init:function(e,f){return new a.panelbar(e,f)},options:d})};c.fn.tPanelBar.defaults={effects:a.fx.property.defaults("height")}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.tabstrip.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.tabstrip.min.js new file mode 100644 index 000000000..5fa032c86 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.tabstrip.min.js @@ -0,0 +1 @@ +(function(a){var b=a.telerik;a.extend(b,{tabstrip:function(c,d){this.element=c;var e=a(c);a.extend(this,d);var h=".t-tabstrip-items > .t-item:not(.t-state-disabled)";e.delegate(h,"mouseenter",b.hover).delegate(h,"mouseleave",b.leave).delegate(h,d.activateEvent,b.delegate(this,this._click)).delegate("> .t-reset > .t-item.t-state-disabled > .t-link","click",b.preventDefault);b.bind(this,{select:a.proxy(function(i){if(i.target==this.element&&this.onSelect){this.onSelect(i)}},this),error:this.onError,load:this.onLoad});var g=e.find("li.t-state-active");var f=this.getContentElement(e.find("> .t-content"),g.parent().children().index(g));if(f&&f.length>0&&f.children().length==0){this.activateTab(g.eq(0))}}});a.extend(b.tabstrip.prototype,{select:function(c){a(c).each(a.proxy(function(e,f){var d=a(f);if(d.is(".t-state-disabled,.t-state-active")){return}this.activateTab(d)},this))},enable:function(c){a(c).addClass("t-state-default").removeClass("t-state-disabled")},disable:function(c){a(c).removeClass("t-state-default").removeClass("t-state-active").addClass("t-state-disabled")},reload:function(d){var c=this;var e=a("> .t-content",this.element);a(d).each(function(){var g=a(this);var f=g.find(".t-link").data("ContentUrl");if(f){c.ajaxRequest(g,c.getContentElement(e,g.index()),null,f)}})},_click:function(j,f){var h=a(f);var c=h.find(".t-link");var d=c.attr("href");var g=a(this.getContentElement(a("> .t-content",this.element),h.parent().children().index(h)));if(h.is(".t-state-disabled,.t-state-active")){j.preventDefault();return}if(b.trigger(this.element,"select",{item:h[0],contentElement:g[0]})){j.preventDefault()}var i=(d&&(d.charAt(d.length-1)=="#"||d.indexOf("#"+this.element.id+"-")!=-1));if(i||(g.length>0&&g.children().length==0)||g.length==0){j.preventDefault()}else{return}if(this.activateTab(h)){j.preventDefault()}},activateTab:function(d){var f=d.parent().children().removeClass("t-state-active").addClass("t-state-default").index(d);d.removeClass("t-state-default").addClass("t-state-active");var h=d.parent().parent().find("> .t-content");if(h.length>0){var e=h.filter(".t-state-active");var j=this.getContentElement(h,f);var g=this;if(!j){e.removeClass("t-state-active");b.fx.rewind(g.effects,e,{});return false}var c=a.trim(j.html()).length==0;var i=function(){j.addClass("t-state-active");b.fx.play(g.effects,j,{})};e.removeClass("t-state-active").stop(false,true);b.fx.rewind(g.effects,e,{},function(){if(d.hasClass("t-state-active")){if(!c){i()}else{if(c){g.ajaxRequest(d,j,function(){if(d.hasClass("t-state-active")){i()}})}}}});return true}return false},getContentElement:function(g,f){var d=new RegExp("-"+(f+1)+"$");for(var c=0,e=g.length;c').prependTo(d.find(".t-link"))},100);var f={};a.ajax({type:"GET",cache:false,url:e||d.find(".t-link").attr("href"),dataType:"html",data:f,error:a.proxy(function(l,k){if(b.ajaxError(this.element,"error",l,k)){return}},this),complete:function(){clearTimeout(g);if(h!==null){h.remove()}},success:a.proxy(function(k,n){c.html(k);var l=d.find(".t-link");var m=l.attr("href");if(m&&m!="#"){l.data("ContentUrl",m).attr("href","#")}if(j){j.call(i,c)}},this)})}});a.fn.tTabStrip=function(c){return b.create(this,{name:"tTabStrip",init:function(d,e){return new b.tabstrip(d,e)},options:c})};a.fn.tTabStrip.defaults={activateEvent:"click",effects:b.fx.toggle.defaults()}})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.textbox.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.textbox.min.js new file mode 100644 index 000000000..269e507a0 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.textbox.min.js @@ -0,0 +1 @@ +(function(d){var g=d.telerik;var e={"190":".","110":".","188":","};var a=[8,9,37,38,39,40,46,35,36,44];g.textbox=function(h,i){this.element=h;d.extend(this,i);var o=new g.stringBuilder();o.cat("[ |").cat(this.groupSeparator).catIf("|"+this.symbol,this.symbol).cat("]");this.replaceRegExp=new RegExp(o.string(),"g");var n=d.browser.msie?"paste":"input";var k=d(".t-input",h);var l=k.attr("value");d("",{id:k.attr("id")+"-text",name:k.attr("name")+"-text","class":k.attr("class"),value:(l||this.text),style:k.attr("style")}).bind({blur:g.delegate(this,this.blur),focus:g.delegate(this,this.focus),keydown:g.delegate(this,this.keydown),keypress:g.delegate(this,this.keypress),change:function(p){p.stopPropagation();return false}}).bind(n,g.delegate(this,this[n])).insertBefore(k);k.hide().appendTo(h);var j=d(".t-arrow-up, .t-arrow-down",h).bind({mouseup:g.delegate(this,this.clearTimer),mouseout:g.delegate(this,this.clearTimer),click:g.preventDefault,dragstart:g.preventDefault,dblclick:g.delegate(this,this.clearTimer)});d(j[0]).mousedown(d.proxy(function(p){this.updateState();this.stepper(p,1)},this));d(j[1]).mousedown(d.proxy(function(p){this.updateState();this.stepper(p,-1)},this));this.numFormat=this.numFormat===undefined?this.type.charAt(0):this.numFormat;var m=this.separator;this.step=this.parse(this.step,m);this.val=this.parse(this.val,m);this.minValue=this.parse(this.minValue,m);this.maxValue=this.parse(this.maxValue,m);if(l!=""){this.value(l)}g.bind(this,{change:this.onChange,load:this.onLoad})};g.textbox.prototype={enable:function(){d(".t-input:first",this.element).first().attr("disabled",false);var h=d(".t-icon",this.element);d(h[0]).mousedown(d.proxy(function(i){this.updateState();this.stepper(i,1)},this));d(h[1]).mousedown(d.proxy(function(i){this.updateState();this.stepper(i,-1)},this))},disable:function(){d(".t-input:first",this.element).first().attr("disabled",true);d(".t-icon",this.element).unbind("mousedown")},updateState:function(){var h=d("> .t-input:first",this.element).val();if(this.val!=h.replace(this.replaceRegExp,"")){this.parseTrigger(h)}},input:function(k,i){var h=d(i).val();if(h=="-"){return true}var j=this.parse(h,this.separator);if(j||j==0){this.trigger(this.round(j,this.digits))}},paste:function(m,h){var j=d(h);var i=j.val();var k=h.document.selection.createRange().text;var n=window.clipboardData.getData("Text");if(k>0){i=i.replace(k,n)}else{i+=n}var l=this.parse(i,this.separator);if(l||l==0){this.trigger(this.round(l,this.digits))}},focus:function(j,i){this.focused=true;this.updateState();var h=this.formatEdit(this.val);d(i).val(h||(h==0?0:""));if(!d.browser.safari){i.select()}},blur:function(i){var j=d(i.target);this.focused=false;var h=j.val();if(!h&&h!="0"||!this.val&&this.val!=0){this.value(null);j.removeClass("t-state-error").val(this.text||"");return true}else{if(this.inRange(this.val,this.minValue,this.maxValue)){j.removeClass("t-state-error").val(this.format(this.val))}else{j.addClass("t-state-error")}}},keydown:function(m,h){var j=m.keyCode;var k=d(h);var l=this.separator;var i=e[j];if(i){if(i==l&&this.digits>0&&g.caretPos(k[0])!=0&&k.val().indexOf(l)==-1){return true}else{m.preventDefault()}}if(j==8||j==46){setTimeout(g.delegate(this,function(){this.parseTrigger(k.val())}));return true}if(j==38||j==40){this.modifyInput(k,this.step*(j==38?1:-1));return true}if(j==222){m.preventDefault()}},keypress:function(i){var j=d(i.target);var h=i.keyCode||i.which;if(h==0||d.inArray(h,a)!=-1||i.ctrlKey||(i.shiftKey&&h==45)){return true}if(((this.minValue!==null?this.minValue<0:true)&&String.fromCharCode(h)=="-"&&g.caretPos(j[0])==0&&j.val().indexOf("-")==-1)||this.inRange(h,48,57)){setTimeout(g.delegate(this,function(){this.parseTrigger(j.val())}));return true}i.preventDefault()},clearTimer:function(h){clearTimeout(this.timeout);clearInterval(this.timer);clearInterval(this.acceleration)},stepper:function(k,h){if(k.which==1){var i=d(".t-input:first",this.element);var j=this.step;this.modifyInput(i,h*j);this.timeout=setTimeout(g.delegate(this,function(){this.timer=setInterval(g.delegate(this,function(){this.modifyInput(i,h*j)}),80);this.acceleration=setInterval(function(){j+=1},1000)}),200)}},value:function(h){if(arguments.length==0){return this.val}var j=(typeof h===typeof 1)?h:this.parse(h,this.separator);var i=j===null;this.val=j;d(".t-input:last",this.element).val(i?"":this.formatEdit(j));d(".t-input:first",this.element).toggleClass("t-state-error",!this.inRange(this.val,this.minValue,this.maxValue)).val(i?this.text:this.format(j));return this},modifyInput:function(i,h){var k=this.val;var l=this.minValue;var n=this.maxValue;k=k?k+h:h;k=(l!==null&&kn)?n:k;var j=this.round(k,this.digits);this.trigger(j);var m=this.focused?this.formatEdit(j):this.format(j);i.removeClass("t-state-error").val(m)},formatEdit:function(i){var h=this.separator;if(i&&h!="."){i=i.toString().replace(".",h)}return i},format:function(h){return g.textbox.formatNumber(h,this.numFormat,this.digits,this.separator,this.groupSeparator,this.groupSize,this.positive,this.negative,this.symbol,true)},trigger:function(h){if(this.val!=h){if(g.trigger(this.element,"change",{oldValue:this.val,newValue:h})){return}d(".t-input:last",this.element).val(this.formatEdit(h));this.val=h}},parseTrigger:function(h){this.trigger(this.round(this.parse(h,this.separator),this.digits))},inRange:function(j,h,i){return(h!==null?j>=h:true)&&(i!==null?j<=i:true)},parse:function(h,j){var i=null;if(h||h=="0"){if(typeof h==typeof 1){return h}h=h.replace(this.replaceRegExp,"");if(j&&j!="."){h=h.replace(j,".")}i=parseFloat(h)}return isNaN(i)?null:i},round:function(i,h){if(i||i==0){return parseFloat(i.toFixed(h||2))}return null}};d.fn.tTextBox=function(j){var i=j.type;var h=d.fn.tTextBox.defaults[i];h.digits=g.cultureInfo[i+"decimaldigits"];h.separator=g.cultureInfo[i+"decimalseparator"];h.groupSeparator=g.cultureInfo[i+"groupseparator"];h.groupSize=g.cultureInfo[i+"groupsize"];h.positive=g.cultureInfo[i+"positive"];h.negative=g.cultureInfo[i+"negative"];h.symbol=g.cultureInfo[i+"symbol"];j=d.extend({},h,j);return this.each(function(){var k=d(this);j=d.meta?d.extend({},j,k.data()):j;if(!k.data("tTextBox")){k.data("tTextBox",new g.textbox(this,j));g.trigger(this,"load")}})};d.fn.tTextBox.defaults={numeric:{val:null,minValue:-100,maxValue:100,text:"",step:1},currency:{val:null,minValue:0,maxValue:1000,text:"",step:1},percent:{val:null,minValue:0,maxValue:100,text:"",step:1}};d.fn.tTextBox.patterns={numeric:{negative:["(n)","-n","- n","n-","n -"]},currency:{positive:["*n","n*","* n","n *"],negative:["(*n)","-*n","*-n","*n-","(n*)","-n*","n-*","n*-","-n *","-* n","n *-","* n-","* -n","n- *","(* n)","(n *)"]},percent:{positive:["n *","n*","*n"],negative:["-n *","-n*","-*n"]}};if(!g.cultureInfo.numericnegative){d.extend(g.cultureInfo,{currencydecimaldigits:2,currencydecimalseparator:".",currencygroupseparator:",",currencygroupsize:3,currencynegative:0,currencypositive:0,currencysymbol:"$",numericdecimaldigits:2,numericdecimalseparator:".",numericgroupseparator:",",numericgroupsize:3,numericnegative:1,percentdecimaldigits:2,percentdecimalseparator:".",percentgroupseparator:",",percentgroupsize:3,percentnegative:0,percentpositive:0,percentsymbol:"%"})}var c=/[0#?]/;function b(h){return h.split("").reverse().join("")}function f(n,h,k){var p=0,q=0;var s=h.length;var m=n.length;var u=new g.stringBuilder();while(p=0){if(h.charAt(p).match(c)){u.cat(n.charAt(q));q++}else{u.cat(h.charAt(p))}p++}u.catIf(n.substring(q),q1?n[1].replace("}",""):n[0];var l=n.search(c)!=-1;if(l){n=n.split(";");G=n[0];L=n[1];m=n[2];n=(J&&L?L:G).indexOf("%")!=-1?"p":"n"}switch(n){case"d":case"D":return Math.round(K).toString();case"c":case"C":P="currency";break;case"n":case"N":P="numeric";break;case"p":case"P":P="percent";if(!F){K=Math.abs(K)*100}break;default:return K.toString()}var z=function(T,R,S){for(var U=T.length;U1?C[1]:"";var h=g.lastIndexOf(A,"0");var x=g.lastIndexOf(A,"#");var s=(x>h?x:h)+1}var B=Math.pow(10,s);var N=(Math.round(K*B)/B);K=isFinite(N)?N:K;var v=K.toString().split(/e/i);y=v.length>1?parseInt(v[1]):0;v=v[0].split(".");j=v[0];j=J?j.replace("-",""):j;r=v.length>1?v[1]:"";if(y){if(!J){r=z(r,y,false);j+=r.slice(0,y);r=r.substr(y)}else{j=z(j,y+1,true);r=j.slice(y,j.length)+r;j=j.slice(0,y)}}var O=r.length;if(s<1||(l&&h==-1&&O===0)){r=""}else{r=O>s?r.slice(0,s):z(r,s,false)}var k;if(l){j=f(b(j),b(w),true);j=w.indexOf(",")!=-1?I(j,i,Q):j;r=r&&A?f(r,A):"";k=K===0&&m?m:(J&&!L?"-":"")+j+(r.length>0?u+r:"")}else{j=I(j,i,Q);H=H[P];var t=J?H.negative[q]:M?H.positive[o]:null;var p=j+(r.length>0?u+r:"");k=t?t.replace("n",p).replace("*",M):p}return k};d.extend(g.formatters,{number:g.textbox.formatNumber})})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/2010.2.825/telerik.treeview.min.js b/NzbDrone.Web/Scripts/2010.2.825/telerik.treeview.min.js new file mode 100644 index 000000000..cb87ddf55 --- /dev/null +++ b/NzbDrone.Web/Scripts/2010.2.825/telerik.treeview.min.js @@ -0,0 +1 @@ +(function(a){var b=a.telerik;b.treeview=function(e,f){this.element=e;var g=a(e);a.extend(this,f);var c=".t-in:not(.t-state-selected,.t-state-disabled)";a(".t-in.t-state-selected",e).live("mouseenter",b.preventDefault);g.delegate(c,"mouseenter",b.hover).delegate(c,"mouseleave",b.leave).delegate(c,"click",b.delegate(this,this.nodeSelect)).delegate("div:not(.t-state-disabled) .t-in","dblclick",b.delegate(this,this.nodeClick)).delegate(":checkbox","click",b.delegate(this,this.checkboxClick)).delegate(".t-plus, .t-minus","click",b.delegate(this,this.nodeClick));if(this.isAjax()){g.find(".t-plus").each(function(){var h=a(this.parentNode);h.parent().data("loaded",h.next(".t-group").length>0)})}if(this.dragAndDrop){b.bind(this,{nodeDragStart:this.onNodeDragStart,nodeDragging:this.onNodeDragging,nodeDragCancelled:this.onNodeDragCancelled,nodeDrop:this.onNodeDrop,nodeDropped:this.onNodeDropped});b.draganddrop(this.element.id,a.extend({useDragClue:true,draggables:a("div:not(.t-state-disabled) .t-in",e)},b.draganddrop.applyContext(b.draganddrop.treeview,this)))}var d=g.find(".t-item > .t-content");if(d.length>0&&a(d[0]).children().length==0){g.find(".t-icon").hide()}b.bind(this,{expand:this.onExpand,collapse:this.onCollapse,select:a.proxy(function(h){if(h.target==this.element&&this.onSelect){this.onSelect(h)}},this),checked:this.onChecked,error:this.onError,load:this.onLoad,dataBinding:this.onDataBinding,dataBound:this.onDataBound})};b.treeview.prototype={expand:function(c){a(c,this.element).each(a.proxy(function(f,g){var e=a(g);var d=e.find("> .t-group, > .t-content");if((d.length>0&&!d.is(":visible"))||this.isAjax()){this.nodeToggle(null,e)}},this))},collapse:function(c){a(c,this.element).each(a.proxy(function(f,g){var e=a(g);var d=e.find("> .t-group, > .t-content");if(d.length>0&&d.is(":visible")){this.nodeToggle(null,e)}},this))},enable:function(c){this.toggle(c,true)},disable:function(c){this.toggle(c,false)},toggle:function(d,c){a(d,this.element).each(a.proxy(function(f,g){var e=a(g);this.collapse(e);e.find("> div > .t-icon").toggleClass("t-state-default",c).toggleClass("t-state-disabled",!c);e.find("> div > .t-in").toggleClass("t-state-default",c).toggleClass("t-state-disabled",!c)},this))},reload:function(d){var c=this;a(d).each(function(){var e=a(this);e.find(".t-group").remove();c.ajaxRequest(e)})},shouldNavigate:function(d){var c=a(d).closest(".t-item").find("> .t-content, > .t-group");var e=a(d).attr("href");return !((e&&(e.charAt(e.length-1)=="#"||e.indexOf("#"+this.element.id+"-")!=-1))||(c.length>0&&c.children().length==0))},nodeSelect:function(f,d){if(!this.shouldNavigate(d)){f.preventDefault()}var c=a(d);if(!c.hasClass(".t-state-selected")&&!b.trigger(this.element,"select",{item:c.closest(".t-item")[0]})){a(".t-in",this.element).removeClass("t-state-hover t-state-selected");c.addClass("t-state-selected")}},nodeToggle:function(h,d,g){if(h!=null){h.preventDefault()}if(d.data("animating")||!d.find("> div > .t-icon").is(":visible")||d.find("> div > .t-in").hasClass("t-state-disabled")){return}d.data("animating",!g);var c=d.find("> .t-group, > .t-content");var f=!c.is(":visible");if(c.children().length>0&&d.data("loaded")!==false&&!b.trigger(this.element,f?"expand":"collapse",{item:d[0]})){d.find("> div > .t-icon").toggleClass("t-minus",f).toggleClass("t-plus",!f);if(!g){b.fx[f?"play":"rewind"](this.effects,c,{direction:"bottom"},function(){d.data("animating",false)})}else{c[f?"show":"hide"]()}}else{if(f&&this.isAjax()&&(c.length==0||d.data("loaded")===false)){this.ajaxRequest(d)}}},nodeClick:function(g,f){var d=a(f);var c=d.closest(".t-item");if(d.hasClass("t-plus-disabled")||d.hasClass("t-minus-disabled")){return}this.nodeToggle(g,c)},isAjax:function(){return this.ajax||this.ws||this.onDataBinding},url:function(c){return(this.ajax||this.ws)[c]},ajaxOptions:function(c,f){var d={type:"POST",dataType:"text",error:a.proxy(function(h,g){if(b.ajaxError(this.element,"error",h,g)){return}if(g=="parsererror"){alert("Error! The requested URL did not return JSON.")}},this),success:a.proxy(function(g){g=eval("("+g+")");g=g.d||g;this.dataBind(c,g)},this)};d=a.extend(d,f);var e=this.ws?d.data.node={}:d.data;if(c.hasClass("t-item")){e[this.queryString.value]=this.getItemValue(c);e[this.queryString.text]=this.getItemText(c)}if(this.ws){d.data=b.toJson(d.data);d.contentType="application/json; charset=utf-8"}return d},ajaxRequest:function(c){c=c||a(this.element);if(b.trigger(this.element,"dataBinding",{item:c[0]})||(!this.ajax&&!this.ws)){return}c.data("loadingIconTimeout",setTimeout(function(){c.find("> div > .t-icon").addClass("t-loading")},100));a.ajax(this.ajaxOptions(c,{data:{},url:this.url("selectUrl")}))},bindTo:function(c){var d=a(this.element);this.dataBind(d,c)},dataBind:function(c,g){c=a(c);if(g.length==0){a(".t-icon",c).hide();return}var d=c.find("> .t-group");var e=d.length==0;var f=new b.stringBuilder();b.treeview.getGroupHtml(g,f,this.isAjax(),c.hasClass("t-treeview"),this.showCheckBox,e?g[0].Expanded:false,e);c.data("animating",true);if(d.length>0&&c.data("loaded")===false){a(f.string()).prependTo(d)}else{if(d.length>0&&c.data("loaded")!==false){d.html(f.string())}else{if(d.length==0){d=a(f.string()).appendTo(c)}}}b.fx.play(this.effects,d,{direction:"bottom"},function(){c.data("animating",false)});clearTimeout(c.data("loadingIconTimeout"));if(c.hasClass("t-item")){c.data("loaded",true).find(".t-icon:first").removeClass("t-loading").removeClass("t-plus").addClass("t-minus")}b.trigger(this.element,"dataBound")},checkboxClick:function(g,d){var c=a(d).is(":checked");var f=b.trigger(this.element,"checked",{item:a(d).closest(".t-item")[0],checked:c});if(!f){this.nodeCheck(d,c)}else{g.preventDefault()}return f},nodeCheck:function(d,c){a(d,this.element).each(a.proxy(function(l,m){var h=a(m);var f=h.closest(".t-item");var k=a("> div > .t-checkbox",f);var j=this.element.id+"_checkedNodes";var g=k.find(':input[name="'+j+'.Index"]');var e=g.val();k.find(':input[name="'+j+"["+e+'].Text"]').remove();k.find(':input[name="'+j+"["+e+'].Value"]').remove();k.find(":checkbox").attr("checked",c?"checked":"");if(c){var i=new b.stringBuilder();i.cat('').cat('');a(i.string()).appendTo(k)}},this))},getItemText:function(c){return a(c).find("> div > .t-in").text()},getItemValue:function(c){return a(c).find('>div>:input[name="itemValue"]').val()||this.getItemText(c)}};a.extend(b.draganddrop,{treeview:{shouldDrag:function(c){return true},createDragClue:function(c){return c.closest(".t-top,.t-mid,.t-bot").text()},onDragStart:function(d,f){var c=b.trigger(this.element,"nodeDragStart",{item:f.closest(".t-item")[0]});if(!c){this.$dropClue=a('
').appendTo(this.element)}return c},onDragMove:function(n,i){var o;b.trigger(this.element,"nodeDragging",{pageY:n.pageY,dropTarget:n.target,setStatusClass:function(e){o=e},item:i.closest(".t-item")[0]});if(o){this.$dropClue.css("visibility","hidden");return o}if(this.dragAndDrop.dropTargets&&a(n.target).closest(this.dragAndDrop.dropTargets).length>0){return"t-add"}if(!a.contains(this.element,n.target)){this.$dropClue.css("visibility","hidden");return}else{if(a.contains(i.closest(".t-item")[0],n.target)){this.$dropClue.css("visibility","hidden");return"t-denied"}}this.$dropClue.css("visibility","visible");var m="t-insert-middle";var c=a(n.target);var q=c.closest(".t-top,.t-mid,.t-bot");if(q.length>0){var f=q.outerHeight();var l=q.offset().top;var d=c.closest(".t-in");var h=f/(d.length>0?4:2);var p=n.pageY<(l+h);var k=(l+f-h)0&&!p&&!k;d.toggleClass("t-state-hover",g);this.$dropClue.css("visibility",g?"hidden":"visible");if(g){m="t-add";this.$dropTarget=c}else{var j=q.position();j.top+=p?0:f;this.$dropClue.css(j)[p?"prependTo":"appendTo"](c.closest(".t-item").find("> div:first"));m="t-insert-middle";if(p&&q.hasClass("t-top")){m="t-insert-top"}if(k&&q.hasClass("t-bot")){m="t-insert-bottom"}}}return m},onDragCancelled:function(c,d){b.trigger(this.element,"nodeDragCancelled",{item:d.closest(".t-item")[0]});this.$dropClue.remove()},onDrop:function(f,g,c){var d=b.trigger(this.element,"nodeDrop",{isValid:!c.find(".t-drag-status").hasClass("t-denied"),dropTarget:f.target,item:g.closest(".t-item")[0]});if(d||!a.contains(this.element,f.target)){this.$dropClue.remove();return d}return d?true:a.proxy(function(e){var l=g.closest(".t-top,.t-mid,.t-bot");var n=l.parent();var p=l.closest(".t-group");if(a.contains(n[0],f.target)){e();this.$dropClue.remove();return}if(n.hasClass("t-last")){n.removeClass("t-last").prev().addClass("t-last").find("> div").removeClass("t-top t-mid").addClass("t-bot")}var j="over";var i;if(this.$dropClue.css("visibility")=="visible"){var m=this.$dropClue.closest(".t-item");j=this.$dropClue.prevAll(".t-in").length>0?"after":"before";i=m.find("> div");m[j](n)}else{i=this.$dropTarget.closest(".t-top,.t-mid,.t-bot");var h=i.next(".t-group");if(h.length===0){h=a('
    ').appendTo(i.parent());i.prepend('')}h.append(n);if(i.find("> .t-icon").hasClass("t-plus")){this.nodeToggle(null,i.parent(),true)}}b.trigger(this.element,"nodeDropped",{destinationItem:i.closest(".t-item")[0],dropPosition:j,item:l.parent(".t-item")[0]});var k=n.parents(".t-group").length;var o=function(r){var s=r.prev().length===0;var q=r.next().length===0;r.toggleClass("t-first",s&&k===1).toggleClass("t-last",q).find("> div").toggleClass("t-top",s&&!q).toggleClass("t-mid",!s&&!q).toggleClass("t-bot",q)};o(n);o(n.prev());o(n.next());if(p.children().length===0){p.prev("div").find(".t-plus,.t-minus").remove();p.remove()}e();this.$dropClue.remove()},this)}}});a.extend(b.treeview,{getItemHtml:function(i,f,g,d,h,e,c){f.cat('
  • ').cat('
    ');if((g&&i.LoadOnDemand)||(i.Items&&i.Items.length>0)){f.cat('')}if(h&&i.Checkable!==false){f.cat('")}f.cat(i.NavigateUrl?'');if(i.ImageUrl!=null){f.cat('')}f.catIf(i.Text,i.Encoded===false).catIf(i.Text.replace(//g,">"),i.Encoded!==false).cat(i.NavigateUrl?"":"");if(i.Value){f.cat('')}f.cat("
    ");if(i.Items&&i.Items.length>0){b.treeview.getGroupHtml(i.Items,f,g,false,h,i.Expanded)}f.cat("
  • ")},getGroupHtml:function(c,f,h,d,j,l,k){if(k!==false){f.cat('