From 64027157fa93684deae097090c572a984290108d Mon Sep 17 00:00:00 2001 From: Flavien Charlon Date: Sat, 4 Jul 2015 01:26:48 +0100 Subject: [PATCH] Create the initial version of the project --- .gitattributes | 102 + .gitignore | 160 + OpenChain.sln | 76 + global.json | 6 + src/OpenChain.Console/OpenChain.Console.xproj | 20 + src/OpenChain.Console/Program.cs | 52 + src/OpenChain.Console/project.json | 31 + src/OpenChain.Console/project.lock.json | 225 ++ .../OpenChain.Core.Sqlite.xproj | 20 + .../SqliteTransactionStore.cs | 276 ++ src/OpenChain.Core.Sqlite/project.json | 42 + src/OpenChain.Core.Sqlite/project.lock.json | 197 ++ src/OpenChain.Core/AccountEntry.cs | 26 + src/OpenChain.Core/AccountKey.cs | 41 + .../AccountModifiedException.cs | 19 + src/OpenChain.Core/BinaryData.cs | 117 + src/OpenChain.Core/ITransactionStore.cs | 28 + src/OpenChain.Core/LedgerRecord.cs | 32 + src/OpenChain.Core/OpenChain.Core.xproj | 24 + src/OpenChain.Core/Transaction.cs | 29 + src/OpenChain.Core/TransactionSerializer.cs | 131 + src/OpenChain.Core/project.json | 42 + src/OpenChain.Core/project.lock.json | 90 + src/OpenChain.Core/transaction.proto | 13 + .../AuthenticationEvidence.cs | 32 + src/OpenChain.Server/BasicValidator.cs | 81 + src/OpenChain.Server/ITransactionValidator.cs | 11 + src/OpenChain.Server/LedgerController.cs | 52 + src/OpenChain.Server/LedgerPath.cs | 62 + src/OpenChain.Server/LedgerRecordMetadata.cs | 22 + src/OpenChain.Server/OpenChain.Server.xproj | 20 + src/OpenChain.Server/project.json | 31 + src/OpenChain.Server/project.lock.json | 119 + .../Controllers/OpenChainController.cs | 80 + .../TransactionStreamWebSocketHandler.cs | 25 + src/OpenChain/OpenChain.xproj | 22 + src/OpenChain/Properties/launchSettings.json | 12 + src/OpenChain/Startup.cs | 67 + src/OpenChain/project.json | 44 + src/OpenChain/project.lock.json | 2949 +++++++++++++++++ test/OpenChain.Core.Tests/BinaryDataTests.cs | 69 + .../OpenChain.Core.Tests.xproj | 21 + test/OpenChain.Core.Tests/project.json | 30 + test/OpenChain.Core.Tests/project.lock.json | 1195 +++++++ .../OpenChain.Server.Tests/LedgerPathTests.cs | 66 + .../OpenChain.Server.Tests.xproj | 21 + test/OpenChain.Server.Tests/project.json | 30 + test/OpenChain.Server.Tests/project.lock.json | 1229 +++++++ 48 files changed, 8089 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 OpenChain.sln create mode 100644 global.json create mode 100644 src/OpenChain.Console/OpenChain.Console.xproj create mode 100644 src/OpenChain.Console/Program.cs create mode 100644 src/OpenChain.Console/project.json create mode 100644 src/OpenChain.Console/project.lock.json create mode 100644 src/OpenChain.Core.Sqlite/OpenChain.Core.Sqlite.xproj create mode 100644 src/OpenChain.Core.Sqlite/SqliteTransactionStore.cs create mode 100644 src/OpenChain.Core.Sqlite/project.json create mode 100644 src/OpenChain.Core.Sqlite/project.lock.json create mode 100644 src/OpenChain.Core/AccountEntry.cs create mode 100644 src/OpenChain.Core/AccountKey.cs create mode 100644 src/OpenChain.Core/AccountModifiedException.cs create mode 100644 src/OpenChain.Core/BinaryData.cs create mode 100644 src/OpenChain.Core/ITransactionStore.cs create mode 100644 src/OpenChain.Core/LedgerRecord.cs create mode 100644 src/OpenChain.Core/OpenChain.Core.xproj create mode 100644 src/OpenChain.Core/Transaction.cs create mode 100644 src/OpenChain.Core/TransactionSerializer.cs create mode 100644 src/OpenChain.Core/project.json create mode 100644 src/OpenChain.Core/project.lock.json create mode 100644 src/OpenChain.Core/transaction.proto create mode 100644 src/OpenChain.Server/AuthenticationEvidence.cs create mode 100644 src/OpenChain.Server/BasicValidator.cs create mode 100644 src/OpenChain.Server/ITransactionValidator.cs create mode 100644 src/OpenChain.Server/LedgerController.cs create mode 100644 src/OpenChain.Server/LedgerPath.cs create mode 100644 src/OpenChain.Server/LedgerRecordMetadata.cs create mode 100644 src/OpenChain.Server/OpenChain.Server.xproj create mode 100644 src/OpenChain.Server/project.json create mode 100644 src/OpenChain.Server/project.lock.json create mode 100644 src/OpenChain/Controllers/OpenChainController.cs create mode 100644 src/OpenChain/Models/TransactionStreamWebSocketHandler.cs create mode 100644 src/OpenChain/OpenChain.xproj create mode 100644 src/OpenChain/Properties/launchSettings.json create mode 100644 src/OpenChain/Startup.cs create mode 100644 src/OpenChain/project.json create mode 100644 src/OpenChain/project.lock.json create mode 100644 test/OpenChain.Core.Tests/BinaryDataTests.cs create mode 100644 test/OpenChain.Core.Tests/OpenChain.Core.Tests.xproj create mode 100644 test/OpenChain.Core.Tests/project.json create mode 100644 test/OpenChain.Core.Tests/project.lock.json create mode 100644 test/OpenChain.Server.Tests/LedgerPathTests.cs create mode 100644 test/OpenChain.Server.Tests/OpenChain.Server.Tests.xproj create mode 100644 test/OpenChain.Server.Tests/project.json create mode 100644 test/OpenChain.Server.Tests/project.lock.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8772d11 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,102 @@ +############################################################################### +# attribute # Checkin behavior # Checkout behavior +############################################################################### +# text # Normalized to LF # Convert to native line endings +# [text] eol=crlf # Normalized to LF # Convert to CRLF +# [text] eol=lf # Normalized to LF # Convert to LF +# -text or binary # No conversion # No conversion +# text=auto # Like "text" if text file according to git, otherwise, like "binary" +# unspecified # Fall back to core.autocrlf setting of local environment +############################################################################### +# core.autocrlf +# false: same as binary +# true: same as eol=crlf +# input: same as eol=lf + +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +*.cs text diff=csharp +*.*proj text +*.sln text +*.html text diff=html +*.cshtml text diff=html +*.css text +*.less text +*.js text +*.config text +*.targets text +*.aspx text +*.asax text +*.xml text +*.xaml text +*.txt text +*.sql text +*.cmd text +*.md text +*.tt text +*.ps1 text +*.py text +*.sh eol=lf +*.conf eol=lf + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb182f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,160 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets +!packages/*/build/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc +*.db + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + + +#LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store + +# Other files +/ColorExplorer/ColorExplorer.Web/App_Data/version.txt diff --git a/OpenChain.sln b/OpenChain.sln new file mode 100644 index 0000000..d41caf0 --- /dev/null +++ b/OpenChain.sln @@ -0,0 +1,76 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.22823.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{69F65B5A-AA9C-4D9B-8F70-0D0D33052D87}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{959253DF-ED16-4D50-9611-54E666C30B5C}" + ProjectSection(SolutionItems) = preProject + global.json = global.json + EndProjectSection +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "OpenChain", "src\OpenChain\OpenChain.xproj", "{C24C1145-878A-476A-AC93-6A272BE3D139}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "OpenChain.Core", "src\OpenChain.Core\OpenChain.Core.xproj", "{CA9A2FB3-5BB1-4730-A65E-16BD9831F303}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "OpenChain.Console", "src\OpenChain.Console\OpenChain.Console.xproj", "{9A0755DF-BEE7-4095-AF90-8FFD2C86470F}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "OpenChain.Server", "src\OpenChain.Server\OpenChain.Server.xproj", "{E682BCFB-88A6-4426-BC8B-3236301BD6A6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{62976C02-9AC7-450D-8634-FB01F357F47B}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "OpenChain.Core.Tests", "test\OpenChain.Core.Tests\OpenChain.Core.Tests.xproj", "{38A38DEF-1B86-495E-8674-2AA135CE016A}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "OpenChain.Server.Tests", "test\OpenChain.Server.Tests\OpenChain.Server.Tests.xproj", "{91B5C8B9-602C-4843-A2BE-DA82B3F7449B}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "OpenChain.Core.Sqlite", "src\OpenChain.Core.Sqlite\OpenChain.Core.Sqlite.xproj", "{B76EC900-3DC6-42B0-B480-B758E00507B6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C24C1145-878A-476A-AC93-6A272BE3D139}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C24C1145-878A-476A-AC93-6A272BE3D139}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C24C1145-878A-476A-AC93-6A272BE3D139}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C24C1145-878A-476A-AC93-6A272BE3D139}.Release|Any CPU.Build.0 = Release|Any CPU + {CA9A2FB3-5BB1-4730-A65E-16BD9831F303}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA9A2FB3-5BB1-4730-A65E-16BD9831F303}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA9A2FB3-5BB1-4730-A65E-16BD9831F303}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA9A2FB3-5BB1-4730-A65E-16BD9831F303}.Release|Any CPU.Build.0 = Release|Any CPU + {9A0755DF-BEE7-4095-AF90-8FFD2C86470F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A0755DF-BEE7-4095-AF90-8FFD2C86470F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A0755DF-BEE7-4095-AF90-8FFD2C86470F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A0755DF-BEE7-4095-AF90-8FFD2C86470F}.Release|Any CPU.Build.0 = Release|Any CPU + {E682BCFB-88A6-4426-BC8B-3236301BD6A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E682BCFB-88A6-4426-BC8B-3236301BD6A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E682BCFB-88A6-4426-BC8B-3236301BD6A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E682BCFB-88A6-4426-BC8B-3236301BD6A6}.Release|Any CPU.Build.0 = Release|Any CPU + {38A38DEF-1B86-495E-8674-2AA135CE016A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38A38DEF-1B86-495E-8674-2AA135CE016A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38A38DEF-1B86-495E-8674-2AA135CE016A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38A38DEF-1B86-495E-8674-2AA135CE016A}.Release|Any CPU.Build.0 = Release|Any CPU + {91B5C8B9-602C-4843-A2BE-DA82B3F7449B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91B5C8B9-602C-4843-A2BE-DA82B3F7449B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91B5C8B9-602C-4843-A2BE-DA82B3F7449B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91B5C8B9-602C-4843-A2BE-DA82B3F7449B}.Release|Any CPU.Build.0 = Release|Any CPU + {B76EC900-3DC6-42B0-B480-B758E00507B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B76EC900-3DC6-42B0-B480-B758E00507B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B76EC900-3DC6-42B0-B480-B758E00507B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B76EC900-3DC6-42B0-B480-B758E00507B6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {C24C1145-878A-476A-AC93-6A272BE3D139} = {69F65B5A-AA9C-4D9B-8F70-0D0D33052D87} + {CA9A2FB3-5BB1-4730-A65E-16BD9831F303} = {69F65B5A-AA9C-4D9B-8F70-0D0D33052D87} + {9A0755DF-BEE7-4095-AF90-8FFD2C86470F} = {69F65B5A-AA9C-4D9B-8F70-0D0D33052D87} + {E682BCFB-88A6-4426-BC8B-3236301BD6A6} = {69F65B5A-AA9C-4D9B-8F70-0D0D33052D87} + {38A38DEF-1B86-495E-8674-2AA135CE016A} = {62976C02-9AC7-450D-8634-FB01F357F47B} + {91B5C8B9-602C-4843-A2BE-DA82B3F7449B} = {62976C02-9AC7-450D-8634-FB01F357F47B} + {B76EC900-3DC6-42B0-B480-B758E00507B6} = {69F65B5A-AA9C-4D9B-8F70-0D0D33052D87} + EndGlobalSection +EndGlobal diff --git a/global.json b/global.json new file mode 100644 index 0000000..e4370fd --- /dev/null +++ b/global.json @@ -0,0 +1,6 @@ +{ + "projects": [ "src", "test" ], + "sdk": { + "version": "1.0.0-beta4" + } +} diff --git a/src/OpenChain.Console/OpenChain.Console.xproj b/src/OpenChain.Console/OpenChain.Console.xproj new file mode 100644 index 0000000..3fbf9a0 --- /dev/null +++ b/src/OpenChain.Console/OpenChain.Console.xproj @@ -0,0 +1,20 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + 9a0755df-bee7-4095-af90-8ffd2c86470f + OpenChain.Console + ..\..\artifacts\obj\$(MSBuildProjectName) + ..\..\artifacts\bin\$(MSBuildProjectName)\ + + + + 2.0 + + + diff --git a/src/OpenChain.Console/Program.cs b/src/OpenChain.Console/Program.cs new file mode 100644 index 0000000..01b8ea4 --- /dev/null +++ b/src/OpenChain.Console/Program.cs @@ -0,0 +1,52 @@ +using OpenChain.Core; +using OpenChain.Core.Sqlite; +using OpenChain.Server; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace OpenChain.Console +{ + public class Program + { + static void Main(string[] args) + { + + Run().Wait(); + + + } + + private static async Task Run() + { + //LedgerController.VerifyEvidence(); + + SqliteTransactionStore store = new SqliteTransactionStore(@"D:\Flavien\Documents\Visual Studio 2015\Projects\OpenChain\Server\src\OpenChain.Console\ledger.db"); + await store.OpenDatabase(); + + // DB + var key = new AccountKey("a/b/cd", "d/e/f"); + var accounts = await store.GetAccounts(new[] { key }); + + BinaryData version = BinaryData.Parse(""); + Transaction transaction = new Transaction( + new[] + { + new AccountEntry(key, 250, accounts[key].Version), + new AccountEntry(new AccountKey("a/b/c", "d/e/g"), -250, version) + }, + version + ); + + byte[] b = TransactionSerializer.SerializeTransaction(transaction); + + Transaction res = TransactionSerializer.DeserializeTransaction(b); + + //LedgerRecord rec = new LedgerRecord(new BinaryData(b), DateTime.UtcNow, BinaryData.Parse("123456"), 1); + + //await store.AddLedgerRecord(rec); + await store.AddTransaction(new BinaryData(b), DateTime.UtcNow, BinaryData.Parse("123456")); + } + } +} diff --git a/src/OpenChain.Console/project.json b/src/OpenChain.Console/project.json new file mode 100644 index 0000000..c2046b7 --- /dev/null +++ b/src/OpenChain.Console/project.json @@ -0,0 +1,31 @@ +{ + "version": "1.0.0-*", + "description": "", + "authors": [ "" ], + "tags": [ "" ], + "projectUrl": "", + "licenseUrl": "", + + "dependencies": { + "OpenChain.Core": "1.0.0-*", + "OpenChain.Server": "1.0.0-*", + "OpenChain.Core.Sqlite": "1.0.0-*" + }, + + "commands": { + "OpenChain.Console": "OpenChain.Console" + }, + + "frameworks": { + "dnx451": { } + //"dnxcore50": { + // "dependencies": { + // "System.Console": "4.0.0-beta-22816", + // "System.Collections": "4.0.10-beta-22816", + // "System.Linq": "4.0.0-beta-22816", + // "System.Threading": "4.0.10-beta-22816", + // "Microsoft.CSharp": "4.0.0-beta-22816" + // } + //} + } +} diff --git a/src/OpenChain.Console/project.lock.json b/src/OpenChain.Console/project.lock.json new file mode 100644 index 0000000..30809df --- /dev/null +++ b/src/OpenChain.Console/project.lock.json @@ -0,0 +1,225 @@ +{ + "locked": false, + "version": -9998, + "projectFileDependencyGroups": { + "": [ + "OpenChain.Core >= 1.0.0-*", + "OpenChain.Server >= 1.0.0-*", + "OpenChain.Core.Sqlite >= 1.0.0-*" + ], + "DNX,Version=v4.5.1": [] + }, + "libraries": { + "Microsoft.Data.SQLite/1.0.0-beta1": { + "serviceable": false, + "sha": "Lgx+43A8cUn24jaehz0IuDNYVGc2EaSjp37xvbvh6ljSkyqrRDHIvuhX2HrHZnHg0k4LDydleKiCI9jwSUbStQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Data.Common": "1.0.0-beta1" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/aspnet50/Microsoft.Data.SQLite.dll" + ], + "compileAssemblies": [ + "lib/aspnet50/Microsoft.Data.SQLite.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Data.Common": "1.0.0-beta1" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net451/Microsoft.Data.SQLite.dll" + ], + "compileAssemblies": [ + "lib/net451/Microsoft.Data.SQLite.dll" + ] + } + }, + "files": [ + "Microsoft.Data.SQLite.1.0.0-beta1.nupkg", + "Microsoft.Data.SQLite.1.0.0-beta1.nupkg.sha512", + "Microsoft.Data.SQLite.nuspec", + "build/net451/Microsoft.Data.SQLite.targets", + "lib/aspnet50/Microsoft.Data.SQLite.dll", + "lib/aspnet50/Microsoft.Data.SQLite.xml", + "lib/aspnetcore50/Microsoft.Data.SQLite.dll", + "lib/aspnetcore50/Microsoft.Data.SQLite.xml", + "lib/net451/Microsoft.Data.SQLite.dll", + "lib/net451/Microsoft.Data.SQLite.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Data.SQLite.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Data.SQLite.xml", + "redist/x86/sqlite3.dll" + ] + }, + "MongoDB.Bson/2.0.1": { + "serviceable": false, + "sha": "dr8KYpTt5VIqGWQ5Bzud2BA/lH2csIfL5WLrfc90UzSWGF378ugvEo5tx4J0eZohvHzsRRiMS2YTmJOTRN+iYg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ], + "compileAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ], + "compileAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ] + } + }, + "files": [ + "License.rtf", + "MongoDB.Bson.2.0.1.nupkg", + "MongoDB.Bson.2.0.1.nupkg.sha512", + "MongoDB.Bson.nuspec", + "lib/net45/MongoDB.Bson.dll", + "lib/net45/MongoDB.Bson.XML" + ] + }, + "protobuf-net/2.0.0.668": { + "serviceable": false, + "sha": "Lgj+Kf1+RV0utKxX9u1WEcymPGrbWrj/AwFmFADFLLa/LLdc1ji2MIGcecFRAGUu6UO8BRbdjZAIYWvLlN1B/A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + } + }, + "files": [ + "protobuf-net.2.0.0.668.nupkg", + "protobuf-net.2.0.0.668.nupkg.sha512", + "protobuf-net.nuspec", + "lib/net20/protobuf-net.dll", + "lib/net20/protobuf-net.pdb", + "lib/net20/protobuf-net.xml", + "lib/net20-cf/protobuf-net.dll", + "lib/net20-cf/protobuf-net.pdb", + "lib/net20-cf/protobuf-net.xml", + "lib/net30/protobuf-net.dll", + "lib/net30/protobuf-net.pdb", + "lib/net30/protobuf-net.xml", + "lib/net35/protobuf-net.dll", + "lib/net35/protobuf-net.pdb", + "lib/net35/protobuf-net.xml", + "lib/net35-cf/protobuf-net.dll", + "lib/net35-cf/protobuf-net.pdb", + "lib/net35-cf/protobuf-net.xml", + "lib/net40/protobuf-net.dll", + "lib/net40/protobuf-net.pdb", + "lib/net40/protobuf-net.xml", + "lib/net40-cf/protobuf-net.dll", + "lib/net40-cf/protobuf-net.pdb", + "lib/net40-cf/protobuf-net.xml", + "lib/netcore45/protobuf-net.dll", + "lib/netcore45/protobuf-net.pdb", + "lib/netcore45/protobuf-net.pri", + "lib/netcore45/protobuf-net.XML", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.dll", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.pdb", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.xml", + "lib/sl3-wp/protobuf-net.dll", + "lib/sl3-wp/protobuf-net.pdb", + "lib/sl3-wp/protobuf-net.xml", + "lib/sl4/protobuf-net.dll", + "lib/sl4/protobuf-net.pdb", + "lib/sl4/protobuf-net.xml", + "lib/sl4-windowsphone71/protobuf-net.dll", + "lib/sl4-windowsphone71/protobuf-net.pdb", + "lib/sl4-windowsphone71/protobuf-net.xml", + "lib/windowsphone8/protobuf-net.dll", + "lib/windowsphone8/protobuf-net.pdb", + "lib/windowsphone8/protobuf-net.xml" + ] + }, + "System.Data.Common/1.0.0-beta1": { + "serviceable": false, + "sha": "cuIEw5cNVZZBYz2STud08Q5VBP+GKvDJPPP3AoApL72tlYhl9uHoW54Q3QTi5tElsXFCnFw868atiHqrGS7GIw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "System.Data", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/aspnet50/System.Data.Common.dll" + ], + "compileAssemblies": [ + "lib/aspnet50/System.Data.Common.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "System.Data", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net451/System.Data.Common.dll" + ], + "compileAssemblies": [ + "lib/net451/System.Data.Common.dll" + ] + } + }, + "files": [ + "System.Data.Common.1.0.0-beta1.nupkg", + "System.Data.Common.1.0.0-beta1.nupkg.sha512", + "System.Data.Common.nuspec", + "lib/aspnet50/System.Data.Common.dll", + "lib/aspnet50/System.Data.Common.xml", + "lib/aspnetcore50/System.Data.Common.dll", + "lib/aspnetcore50/System.Data.Common.xml", + "lib/net451/System.Data.Common.dll", + "lib/net451/System.Data.Common.xml", + "lib/portable-net451+win81+wpa81/System.Data.Common.dll", + "lib/portable-net451+win81+wpa81/System.Data.Common.xml" + ] + } + } +} \ No newline at end of file diff --git a/src/OpenChain.Core.Sqlite/OpenChain.Core.Sqlite.xproj b/src/OpenChain.Core.Sqlite/OpenChain.Core.Sqlite.xproj new file mode 100644 index 0000000..a1379aa --- /dev/null +++ b/src/OpenChain.Core.Sqlite/OpenChain.Core.Sqlite.xproj @@ -0,0 +1,20 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + b76ec900-3dc6-42b0-b480-b758e00507b6 + OpenChain.Core.Sqlite + ..\..\artifacts\obj\$(MSBuildProjectName) + ..\..\artifacts\bin\$(MSBuildProjectName)\ + + + + 2.0 + + + diff --git a/src/OpenChain.Core.Sqlite/SqliteTransactionStore.cs b/src/OpenChain.Core.Sqlite/SqliteTransactionStore.cs new file mode 100644 index 0000000..5ec0024 --- /dev/null +++ b/src/OpenChain.Core.Sqlite/SqliteTransactionStore.cs @@ -0,0 +1,276 @@ +using Microsoft.Data.SQLite; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Data.Common; +using System.Linq; +using System.Security.Cryptography; +using System.Threading.Tasks; + +namespace OpenChain.Core.Sqlite +{ + public class SqliteTransactionStore : ITransactionStore + { + private readonly SQLiteConnection connection; + + public SqliteTransactionStore(string filename) + { + this.connection = new SQLiteConnection(new SQLiteConnectionStringBuilder() { Filename = filename }.ToString()); + this.OpenDatabase().Wait(); + } + + public async Task AddTransaction(BinaryData rawTransaction, DateTime timestamp, BinaryData externalMetadata) + { + using (SQLiteTransaction context = connection.BeginTransaction(System.Data.IsolationLevel.Serializable)) + { + Tuple ledgerStatus = await GetLedgerStatus(context); + + LedgerRecord ledgerRecord = new LedgerRecord( + rawTransaction, + timestamp, + externalMetadata, + ledgerStatus.Item1); + + byte[] newLedgerHash = await InsertTransaction(context, ledgerRecord, TransactionSerializer.SerializeLedgerRecord(ledgerRecord), ledgerStatus.Item2 + 1); + + context.Commit(); + + return new BinaryData(newLedgerHash); + } + } + + public async Task AddLedgerRecord(BinaryData rawLedgerRecord) + { + using (SQLiteTransaction context = connection.BeginTransaction(System.Data.IsolationLevel.Serializable)) + { + Tuple ledgerStatus = await GetLedgerStatus(context); + + LedgerRecord record = TransactionSerializer.DeserializeLedgerRecord(rawLedgerRecord.ToArray()); + + if (!record.PreviousRecordHash.Equals(ledgerStatus.Item1)) + throw new InvalidOperationException(); + + byte[] newLedgerHash = await InsertTransaction(context, record, rawLedgerRecord.ToArray(), ledgerStatus.Item2 + 1); + context.Commit(); + + return new BinaryData(newLedgerHash); + } + } + + private async Task> GetLedgerStatus(SQLiteTransaction context) + { + SQLiteCommand ledgerVersion = connection.CreateCommand(); + ledgerVersion.CommandText = @" + SELECT LedgerHeight, LedgerHash + FROM Ledgers + WHERE Id = 0"; + + BinaryData lastTransactionHash; + long ledgerHeight; + using (DbDataReader reader = await ledgerVersion.ExecuteReaderAsync()) + { + bool ledgerFound = await reader.ReadAsync(); + if (!ledgerFound) + throw new InvalidOperationException(); + + ledgerHeight = reader.GetInt64(0); + lastTransactionHash = new BinaryData((byte[])reader.GetValue(1) ?? new byte[0]); + } + + return Tuple.Create(lastTransactionHash, ledgerHeight); + } + + private async Task InsertTransaction(SQLiteTransaction context, LedgerRecord ledgerRecord, byte[] rawLedgerRecord, long id) + { + byte[] rawTransaction = ledgerRecord.Payload.ToArray(); + byte[] recordHash; + byte[] transactionHash; + using (SHA256 hash = SHA256.Create()) + { + recordHash = hash.ComputeHash(rawLedgerRecord); + transactionHash = hash.ComputeHash(rawTransaction); + } + + SQLiteCommand command = connection.CreateCommand(); + command.CommandText = @" + INSERT INTO Transactions + (Id, TransactionHash, RecordHash, PreviousRecordHash, RawData) + VALUES (@id, @transactionHash, @recordHash, @previousRecordHash, @rawData)"; + + command.Parameters.AddWithValue("@id", id); + command.Parameters.AddWithValue("@transactionHash", transactionHash); + command.Parameters.AddWithValue("@recordHash", recordHash); + command.Parameters.AddWithValue("@previousRecordHash", ledgerRecord.PreviousRecordHash.ToArray()); + command.Parameters.AddWithValue("@rawData", rawLedgerRecord); + + await command.ExecuteNonQueryAsync(); + + SQLiteCommand updateLedgerHash = connection.CreateCommand(); + updateLedgerHash.CommandText = @" + UPDATE Ledgers + SET LedgerHash = @ledgerHash, + LedgerHeight = LedgerHeight + 1 + WHERE Id = 0"; + updateLedgerHash.Parameters.AddWithValue("@ledgerHash", recordHash); + await updateLedgerHash.ExecuteNonQueryAsync(); + + await UpdateAccounts(TransactionSerializer.DeserializeTransaction(rawTransaction), transactionHash); + + return recordHash; + } + + private async Task UpdateAccounts(Transaction transaction, byte[] transactionHash) + { + var accountEntries = transaction.AccountEntries + .GroupBy(entry => entry.AccountKey, entry => entry); + + if (accountEntries.Any(group => group.Count() > 1)) + throw new InvalidOperationException(); + + foreach (AccountEntry entry in transaction.AccountEntries) + { + if (!entry.Version.Equals(BinaryData.Empty)) + { + SQLiteCommand insertAccount = connection.CreateCommand(); + insertAccount.CommandText = @" + UPDATE Accounts + SET Balance = Balance + @balance, Version = @version + WHERE Account = @account AND Asset = @asset AND Version = @previousVersion"; + insertAccount.Parameters.AddWithValue("@account", entry.AccountKey.Account); + insertAccount.Parameters.AddWithValue("@asset", entry.AccountKey.Asset); + insertAccount.Parameters.AddWithValue("@previousVersion", entry.Version.Value.ToArray()); + insertAccount.Parameters.AddWithValue("@balance", entry.Amount); + insertAccount.Parameters.AddWithValue("@version", transactionHash); + + int count = await insertAccount.ExecuteNonQueryAsync(); + + if (count == 0) + throw new AccountModifiedException(entry); + } + else + { + SQLiteCommand insertAccount = connection.CreateCommand(); + insertAccount.CommandText = @" + INSERT INTO Accounts + (Account, Asset, Balance, Version) + VALUES (@account, @asset, @balance, @version)"; + insertAccount.Parameters.AddWithValue("@account", entry.AccountKey.Account); + insertAccount.Parameters.AddWithValue("@asset", entry.AccountKey.Asset); + insertAccount.Parameters.AddWithValue("@balance", entry.Amount); + insertAccount.Parameters.AddWithValue("@version", transactionHash); + + try + { + await insertAccount.ExecuteNonQueryAsync(); + } + catch (SQLiteException exception) when (exception.Message == "constraint failed") + { + throw new AccountModifiedException(entry); + } + } + } + } + + public async Task> GetAccounts(IEnumerable accountKeys) + { + Dictionary result = new Dictionary(); + + foreach (AccountKey accountKey in accountKeys) + { + SQLiteCommand selectAccount = connection.CreateCommand(); + selectAccount.CommandText = @" + SELECT Balance, Version + FROM Accounts + WHERE Account = @account AND Asset = @asset"; + + selectAccount.Parameters.AddWithValue("@account", accountKey.Account); + selectAccount.Parameters.AddWithValue("@asset", accountKey.Asset); + + using (DbDataReader reader = await selectAccount.ExecuteReaderAsync()) + { + bool exists = await reader.ReadAsync(); + + if (exists) + result[accountKey] = new AccountEntry(accountKey, reader.GetInt64(0), new BinaryData((byte[])reader.GetValue(1))); + else + result[accountKey] = new AccountEntry(accountKey, 0, BinaryData.Empty); + } + } + + return new ReadOnlyDictionary(result); + } + + public async Task> GetTransactionStream(BinaryData from) + { + SQLiteCommand query = connection.CreateCommand(); + if (from != null) + { + query.CommandText = @" + SELECT RawData + FROM Transactions + WHERE Id > (SELECT Id FROM Transactions WHERE RecordHash = @recordHash)"; + query.Parameters.AddWithValue("@recordHash", from.ToArray()); + } + else + { + query.CommandText = @" + SELECT RawData + FROM Transactions"; + } + + List result = new List(); + using (DbDataReader reader = await query.ExecuteReaderAsync()) + { + while (await reader.ReadAsync()) + result.Add(new BinaryData((byte[])reader.GetValue(0))); + } + + return result.AsReadOnly(); + } + + public async Task OpenDatabase() + { + await connection.OpenAsync(); + + SQLiteCommand command = connection.CreateCommand(); + command.CommandText = @" + CREATE TABLE IF NOT EXISTS Transactions + ( + Id INTEGER PRIMARY KEY, + TransactionHash BLOB UNIQUE, + RecordHash BLOB UNIQUE, + PreviousRecordHash BLOB, + RawData BLOB + ); + + CREATE TABLE IF NOT EXISTS Accounts + ( + Account TEXT, + Asset TEXT, + Balance INTEGER, + Version BLOB, + PRIMARY KEY (Account ASC, Asset ASC) + ); + + CREATE TABLE IF NOT EXISTS Ledgers + ( + Id INT, + LedgerHeight INT, + LedgerHash BLOB, + PRIMARY KEY (Id ASC) + ); + "; + + await command.ExecuteNonQueryAsync(); + + command = connection.CreateCommand(); + command.CommandText = @" + INSERT OR IGNORE INTO Ledgers + (Id, LedgerHeight, LedgerHash) + VALUES (0, 0, X''); + "; + + await command.ExecuteNonQueryAsync(); + } + } +} diff --git a/src/OpenChain.Core.Sqlite/project.json b/src/OpenChain.Core.Sqlite/project.json new file mode 100644 index 0000000..29d11fa --- /dev/null +++ b/src/OpenChain.Core.Sqlite/project.json @@ -0,0 +1,42 @@ +{ + "version": "1.0.0-*", + "description": "", + "authors": [ "" ], + "tags": [ "" ], + "projectUrl": "", + "licenseUrl": "", + + "dependencies": { + "Microsoft.Data.SQLite": "1.0.0-beta1", + "OpenChain.Core": "1.0.0-*" + }, + + "frameworks": { + "dnx451": { + "frameworkAssemblies": { + "System.Data": "4.0.0.0", + "System.Xml": "4.0.0.0" + }, + "dependencies": { + + } + }, + "net46": { + "frameworkAssemblies": { + "System.Data": "4.0.0.0", + "System.Xml": "4.0.0.0" + }, + "dependencies": { + + } + } + //"dnxcore50": { + // "dependencies": { + // "System.Collections": "4.0.10-beta-22816", + // "System.Linq": "4.0.0-beta-22816", + // "System.Threading": "4.0.10-beta-22816", + // "Microsoft.CSharp": "4.0.0-beta-22816" + // } + //} + } +} diff --git a/src/OpenChain.Core.Sqlite/project.lock.json b/src/OpenChain.Core.Sqlite/project.lock.json new file mode 100644 index 0000000..91c722e --- /dev/null +++ b/src/OpenChain.Core.Sqlite/project.lock.json @@ -0,0 +1,197 @@ +{ + "locked": false, + "version": -9998, + "projectFileDependencyGroups": { + "": [ + "Microsoft.Data.SQLite >= 1.0.0-beta1", + "OpenChain.Core >= 1.0.0-*" + ], + "DNX,Version=v4.5.1": [ + "framework/System.Data >= 4.0.0.0", + "framework/System.Xml >= 4.0.0.0" + ], + ".NETFramework,Version=v4.6": [ + "framework/System.Data >= 4.0.0.0", + "framework/System.Xml >= 4.0.0.0" + ] + }, + "libraries": { + "Microsoft.Data.SQLite/1.0.0-beta1": { + "serviceable": false, + "sha": "Lgx+43A8cUn24jaehz0IuDNYVGc2EaSjp37xvbvh6ljSkyqrRDHIvuhX2HrHZnHg0k4LDydleKiCI9jwSUbStQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Data.Common": "1.0.0-beta1" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/aspnet50/Microsoft.Data.SQLite.dll" + ], + "compileAssemblies": [ + "lib/aspnet50/Microsoft.Data.SQLite.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Data.Common": "1.0.0-beta1" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net451/Microsoft.Data.SQLite.dll" + ], + "compileAssemblies": [ + "lib/net451/Microsoft.Data.SQLite.dll" + ] + } + }, + "files": [ + "Microsoft.Data.SQLite.1.0.0-beta1.nupkg", + "Microsoft.Data.SQLite.1.0.0-beta1.nupkg.sha512", + "Microsoft.Data.SQLite.nuspec", + "build/net451/Microsoft.Data.SQLite.targets", + "lib/aspnet50/Microsoft.Data.SQLite.dll", + "lib/aspnet50/Microsoft.Data.SQLite.xml", + "lib/aspnetcore50/Microsoft.Data.SQLite.dll", + "lib/aspnetcore50/Microsoft.Data.SQLite.xml", + "lib/net451/Microsoft.Data.SQLite.dll", + "lib/net451/Microsoft.Data.SQLite.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Data.SQLite.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Data.SQLite.xml", + "redist/x86/sqlite3.dll" + ] + }, + "protobuf-net/2.0.0.668": { + "serviceable": false, + "sha": "Lgj+Kf1+RV0utKxX9u1WEcymPGrbWrj/AwFmFADFLLa/LLdc1ji2MIGcecFRAGUu6UO8BRbdjZAIYWvLlN1B/A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + } + }, + "files": [ + "protobuf-net.2.0.0.668.nupkg", + "protobuf-net.2.0.0.668.nupkg.sha512", + "protobuf-net.nuspec", + "lib/net20/protobuf-net.dll", + "lib/net20/protobuf-net.pdb", + "lib/net20/protobuf-net.xml", + "lib/net20-cf/protobuf-net.dll", + "lib/net20-cf/protobuf-net.pdb", + "lib/net20-cf/protobuf-net.xml", + "lib/net30/protobuf-net.dll", + "lib/net30/protobuf-net.pdb", + "lib/net30/protobuf-net.xml", + "lib/net35/protobuf-net.dll", + "lib/net35/protobuf-net.pdb", + "lib/net35/protobuf-net.xml", + "lib/net35-cf/protobuf-net.dll", + "lib/net35-cf/protobuf-net.pdb", + "lib/net35-cf/protobuf-net.xml", + "lib/net40/protobuf-net.dll", + "lib/net40/protobuf-net.pdb", + "lib/net40/protobuf-net.xml", + "lib/net40-cf/protobuf-net.dll", + "lib/net40-cf/protobuf-net.pdb", + "lib/net40-cf/protobuf-net.xml", + "lib/netcore45/protobuf-net.dll", + "lib/netcore45/protobuf-net.pdb", + "lib/netcore45/protobuf-net.pri", + "lib/netcore45/protobuf-net.XML", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.dll", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.pdb", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.xml", + "lib/sl3-wp/protobuf-net.dll", + "lib/sl3-wp/protobuf-net.pdb", + "lib/sl3-wp/protobuf-net.xml", + "lib/sl4/protobuf-net.dll", + "lib/sl4/protobuf-net.pdb", + "lib/sl4/protobuf-net.xml", + "lib/sl4-windowsphone71/protobuf-net.dll", + "lib/sl4-windowsphone71/protobuf-net.pdb", + "lib/sl4-windowsphone71/protobuf-net.xml", + "lib/windowsphone8/protobuf-net.dll", + "lib/windowsphone8/protobuf-net.pdb", + "lib/windowsphone8/protobuf-net.xml" + ] + }, + "System.Data.Common/1.0.0-beta1": { + "serviceable": false, + "sha": "cuIEw5cNVZZBYz2STud08Q5VBP+GKvDJPPP3AoApL72tlYhl9uHoW54Q3QTi5tElsXFCnFw868atiHqrGS7GIw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "System.Data", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/aspnet50/System.Data.Common.dll" + ], + "compileAssemblies": [ + "lib/aspnet50/System.Data.Common.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "System.Data", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net451/System.Data.Common.dll" + ], + "compileAssemblies": [ + "lib/net451/System.Data.Common.dll" + ] + } + }, + "files": [ + "System.Data.Common.1.0.0-beta1.nupkg", + "System.Data.Common.1.0.0-beta1.nupkg.sha512", + "System.Data.Common.nuspec", + "lib/aspnet50/System.Data.Common.dll", + "lib/aspnet50/System.Data.Common.xml", + "lib/aspnetcore50/System.Data.Common.dll", + "lib/aspnetcore50/System.Data.Common.xml", + "lib/net451/System.Data.Common.dll", + "lib/net451/System.Data.Common.xml", + "lib/portable-net451+win81+wpa81/System.Data.Common.dll", + "lib/portable-net451+win81+wpa81/System.Data.Common.xml" + ] + } + } +} \ No newline at end of file diff --git a/src/OpenChain.Core/AccountEntry.cs b/src/OpenChain.Core/AccountEntry.cs new file mode 100644 index 0000000..4bc10a5 --- /dev/null +++ b/src/OpenChain.Core/AccountEntry.cs @@ -0,0 +1,26 @@ +using System; + +namespace OpenChain.Core +{ + public class AccountEntry + { + public AccountEntry(AccountKey accountKey, long amount, BinaryData version) + { + if (accountKey == null) + throw new ArgumentNullException(nameof(accountKey)); + + if (version == null) + throw new ArgumentNullException(nameof(version)); + + this.AccountKey = accountKey; + this.Amount = amount; + this.Version = version; + } + + public AccountKey AccountKey { get; } + + public long Amount { get; } + + public BinaryData Version { get; } + } +} diff --git a/src/OpenChain.Core/AccountKey.cs b/src/OpenChain.Core/AccountKey.cs new file mode 100644 index 0000000..993f5ff --- /dev/null +++ b/src/OpenChain.Core/AccountKey.cs @@ -0,0 +1,41 @@ +using System; + +namespace OpenChain.Core +{ + public class AccountKey : IEquatable + { + public AccountKey(string account, string asset) + { + if (account == null) + throw new ArgumentNullException(nameof(account)); + + if (asset == null) + throw new ArgumentNullException(nameof(asset)); + + this.Account = account; + this.Asset = asset; + } + + public string Account { get; } + + public string Asset { get; } + + public bool Equals(AccountKey other) + { + if (other == null) + return false; + else + return this.Account.Equals(other.Account) && this.Asset.Equals(other.Asset); + } + + public override int GetHashCode() + { + return this.Account.GetHashCode() ^ this.Asset.GetHashCode(); + } + + public override bool Equals(object obj) + { + return this.Equals(obj as AccountKey); + } + } +} diff --git a/src/OpenChain.Core/AccountModifiedException.cs b/src/OpenChain.Core/AccountModifiedException.cs new file mode 100644 index 0000000..b2ba3bc --- /dev/null +++ b/src/OpenChain.Core/AccountModifiedException.cs @@ -0,0 +1,19 @@ +using System; + +namespace OpenChain.Core +{ + public class AccountModifiedException : Exception + { + public AccountModifiedException(AccountEntry failedEntry) + : base(string.Format( + "Version '{0}' of account '{1}' for asset '{2}' no longer exists.", + failedEntry.Version, + failedEntry.AccountKey.Account, + failedEntry.AccountKey.Asset)) + { + this.FailedEntry = failedEntry; + } + + public AccountEntry FailedEntry { get; } + } +} diff --git a/src/OpenChain.Core/BinaryData.cs b/src/OpenChain.Core/BinaryData.cs new file mode 100644 index 0000000..5a42727 --- /dev/null +++ b/src/OpenChain.Core/BinaryData.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; + +namespace OpenChain.Core +{ + public class BinaryData : IEquatable + { + private readonly byte[] data; + + static BinaryData() + { + Empty = new BinaryData(new byte[0]); + } + + public BinaryData(IEnumerable data) + { + this.data = data.ToArray(); + this.Value = new ReadOnlyCollection(this.data); + } + + public BinaryData(byte[] data) + { + this.data = new byte[data.Length]; + Buffer.BlockCopy(data, 0, this.data, 0, data.Length); + this.Value = new ReadOnlyCollection(this.data); + } + + public static BinaryData Empty { get; } + + public IReadOnlyList Value { get; } + + public static BinaryData Parse(string hexValue) + { + if (hexValue == null) + throw new FormatException("The hexValue parameter must not be null."); + + if (hexValue.Length % 2 == 1) + throw new FormatException("The hexValue parameter must have an even number of digits."); + + byte[] result = new byte[hexValue.Length >> 1]; + + for (int i = 0; i < hexValue.Length >> 1; ++i) + result[i] = (byte)((GetHexValue(hexValue[i << 1]) << 4) + (GetHexValue(hexValue[(i << 1) + 1]))); + + return new BinaryData(result); + } + + private static int GetHexValue(char hex) + { + int value = "0123456789ABCDEF".IndexOf(char.ToUpper(hex)); + + if (value < 0) + throw new FormatException(string.Format("The character '{0}' is not a hexadecimal digit.", hex)); + else + return value; + } + + public byte[] ToArray() + { + byte[] result = new byte[data.Length]; + Buffer.BlockCopy(data, 0, result, 0, data.Length); + return result; + } + + public bool Equals(BinaryData other) + { + if (other == null) + { + return false; + } + else + { + if (this.data.Length != other.data.Length) + return false; + + for (int i = 0; i < other.data.Length; i++) + if (this.data[i] != other.data[i]) + return false; + + return true; + } + } + + public override bool Equals(object obj) + { + if (obj is BinaryData) + return this.Equals((BinaryData)obj); + else + return false; + } + + public override int GetHashCode() + { + unchecked + { + int result = 0; + foreach (byte b in this.data) + result = (result * 31) ^ b; + + return result; + } + } + + public override string ToString() + { + StringBuilder hex = new StringBuilder(this.data.Length * 2); + + foreach (byte value in this.data) + hex.AppendFormat("{0:x2}", value); + + return hex.ToString(); + } + } +} diff --git a/src/OpenChain.Core/ITransactionStore.cs b/src/OpenChain.Core/ITransactionStore.cs new file mode 100644 index 0000000..ff63c85 --- /dev/null +++ b/src/OpenChain.Core/ITransactionStore.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace OpenChain.Core +{ + public interface ITransactionStore + { + /// + /// Adds a record to the ledger. + /// + /// An account has been modified and the transaction is no longer valid. + /// A task that represents the completion of the operation and contains the new ledger hash. + Task AddTransaction(BinaryData rawTransaction, DateTime timestamp, BinaryData externalMetadata); + + /// + /// Adds a record to the ledger. + /// + /// The serialized ledger record to add to the ledger. + /// An account has been modified and the transaction is no longer valid. + /// A task that represents the completion of the operation and contains the new ledger hash. + Task AddLedgerRecord(BinaryData rawLedgerRecord); + + Task> GetAccounts(IEnumerable accountKeys); + + Task> GetTransactionStream(BinaryData from); + } +} diff --git a/src/OpenChain.Core/LedgerRecord.cs b/src/OpenChain.Core/LedgerRecord.cs new file mode 100644 index 0000000..c035d09 --- /dev/null +++ b/src/OpenChain.Core/LedgerRecord.cs @@ -0,0 +1,32 @@ +using System; + +namespace OpenChain.Core +{ + public class LedgerRecord + { + public LedgerRecord(BinaryData payload, DateTime timestamp, BinaryData externalMetadata, BinaryData previousRecordHash) + { + if (payload == null) + throw new ArgumentNullException(nameof(payload)); + + if (externalMetadata == null) + throw new ArgumentNullException(nameof(externalMetadata)); + + if (previousRecordHash == null) + throw new ArgumentNullException(nameof(previousRecordHash)); + + this.Payload = payload; + this.Timestamp = timestamp; + this.ExternalMetadata = externalMetadata; + this.PreviousRecordHash = previousRecordHash; + } + + public BinaryData Payload { get; } + + public DateTime Timestamp { get; } + + public BinaryData ExternalMetadata { get; } + + public BinaryData PreviousRecordHash { get; } + } +} diff --git a/src/OpenChain.Core/OpenChain.Core.xproj b/src/OpenChain.Core/OpenChain.Core.xproj new file mode 100644 index 0000000..b14105b --- /dev/null +++ b/src/OpenChain.Core/OpenChain.Core.xproj @@ -0,0 +1,24 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + ca9a2fb3-5bb1-4730-a65e-16bd9831f303 + OpenChain.Core + ..\..\artifacts\obj\$(MSBuildProjectName) + ..\..\artifacts\bin\$(MSBuildProjectName)\ + + + OpenChain.Core + + + 2.0 + + + True + + + \ No newline at end of file diff --git a/src/OpenChain.Core/Transaction.cs b/src/OpenChain.Core/Transaction.cs new file mode 100644 index 0000000..984b10e --- /dev/null +++ b/src/OpenChain.Core/Transaction.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; + +namespace OpenChain.Core +{ + public class Transaction + { + public Transaction(IEnumerable accountEntries, BinaryData metadata) + { + if (accountEntries == null) + throw new ArgumentNullException(nameof(accountEntries)); + + if (metadata == null) + throw new ArgumentNullException(nameof(metadata)); + + this.AccountEntries = new ReadOnlyCollection(accountEntries.ToList()); + this.Metadata = metadata; + + if (this.AccountEntries.Any(entry => entry == null)) + throw new ArgumentNullException(nameof(accountEntries)); + } + + public IReadOnlyList AccountEntries { get; } + + public BinaryData Metadata { get; } + } +} diff --git a/src/OpenChain.Core/TransactionSerializer.cs b/src/OpenChain.Core/TransactionSerializer.cs new file mode 100644 index 0000000..05a621b --- /dev/null +++ b/src/OpenChain.Core/TransactionSerializer.cs @@ -0,0 +1,131 @@ +using ProtoBuf; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; + +namespace OpenChain.Core +{ + public static class TransactionSerializer + { + private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + + public static byte[] SerializeTransaction(Transaction transaction) + { + SerializableTransaction serializableTransaction = new SerializableTransaction() + { + AccountEntries = transaction.AccountEntries.Select( + operation => + new SerializableAccountEntry() + { + Account = operation.AccountKey.Account, + Asset = operation.AccountKey.Asset, + Amount = operation.Amount, + Version = operation.Version.Value.ToArray() + }) + .ToArray(), + Metadata = transaction.Metadata.Value.ToArray() + }; + + using (MemoryStream stream = new MemoryStream()) + { + Serializer.Serialize(stream, serializableTransaction); + return stream.ToArray(); + } + } + + public static Transaction DeserializeTransaction(byte[] data) + { + using (MemoryStream stream = new MemoryStream(data)) + { + SerializableTransaction result = Serializer.Deserialize(stream); + + return new Transaction( + result.AccountEntries.Select( + entry => new AccountEntry( + new AccountKey(entry.Account, entry.Asset), + entry.Amount, + new BinaryData(entry.Version))), + new BinaryData(result.Metadata)); + } + } + + public static byte[] SerializeLedgerRecord(this LedgerRecord record) + { + SerializableLedgerRecord serializableRecord = new SerializableLedgerRecord() + { + Transaction = record.Payload.Value.ToArray(), + Timestamp = (long)(record.Timestamp - epoch).TotalSeconds, + ExternalMetadata = record.ExternalMetadata.Value.ToArray(), + PreviousRecord = record.PreviousRecordHash.Value.ToArray() + }; + + using (MemoryStream stream = new MemoryStream()) + { + Serializer.Serialize(stream, serializableRecord); + return stream.ToArray(); + } + } + + public static LedgerRecord DeserializeLedgerRecord(byte[] data) + { + using (MemoryStream stream = new MemoryStream(data)) + { + SerializableLedgerRecord result = Serializer.Deserialize(stream); + + return new LedgerRecord( + new BinaryData(result.Transaction), + epoch + TimeSpan.FromSeconds(result.Timestamp), + new BinaryData(result.ExternalMetadata), + new BinaryData(result.PreviousRecord)); + } + } + + #region Protocol Buffers Contracts + + [ProtoContract] + private class SerializableTransaction + { + [ProtoMember(1, IsRequired = true)] + public IList AccountEntries { get; set; } + + [ProtoMember(2, IsRequired = true)] + public byte[] Metadata { get; set; } + } + + [ProtoContract] + private class SerializableAccountEntry + { + [ProtoMember(1, IsRequired = true)] + public string Account { get; set; } + + [ProtoMember(2, IsRequired = true)] + public string Asset { get; set; } + + [ProtoMember(3, IsRequired = true, DataFormat = DataFormat.ZigZag)] + public long Amount { get; set; } + + [ProtoMember(4, IsRequired = true)] + public byte[] Version { get; set; } + } + + [ProtoContract] + private class SerializableLedgerRecord + { + [ProtoMember(1, IsRequired = true)] + public byte[] Transaction { get; set; } + + [ProtoMember(2, IsRequired = true)] + public long Timestamp { get; set; } + + [ProtoMember(3, IsRequired = true)] + public byte[] ExternalMetadata { get; set; } + + [ProtoMember(4, IsRequired = true)] + public byte[] PreviousRecord { get; set; } + } + + #endregion + } +} diff --git a/src/OpenChain.Core/project.json b/src/OpenChain.Core/project.json new file mode 100644 index 0000000..365bfd7 --- /dev/null +++ b/src/OpenChain.Core/project.json @@ -0,0 +1,42 @@ +{ + "version": "1.0.0-*", + "description": "", + "authors": [ "" ], + "tags": [ "" ], + "projectUrl": "", + "licenseUrl": "", + "compilationOptions": { "languageVersion": "csharp6", "allowUnsafe": false }, + + "dependencies": { + "protobuf-net": "2.0.0.668" + }, + + "frameworks": { + "dnx451": { + "frameworkAssemblies": { + "System.Data": "4.0.0.0", + "System.Xml": "4.0.0.0" + }, + "dependencies": { + + } + }, + "net46": { + "frameworkAssemblies": { + "System.Data": "4.0.0.0", + "System.Xml": "4.0.0.0" + }, + "dependencies": { + + } + } + //"dnxcore50": { + // "dependencies": { + // "System.Collections": "4.0.10-beta-22816", + // "System.Linq": "4.0.0-beta-22816", + // "System.Threading": "4.0.10-beta-22816", + // "Microsoft.CSharp": "4.0.0-beta-22816" + // } + //} + } +} diff --git a/src/OpenChain.Core/project.lock.json b/src/OpenChain.Core/project.lock.json new file mode 100644 index 0000000..96af8ee --- /dev/null +++ b/src/OpenChain.Core/project.lock.json @@ -0,0 +1,90 @@ +{ + "locked": false, + "version": -9998, + "projectFileDependencyGroups": { + "": [ + "protobuf-net >= 2.0.0.668" + ], + "DNX,Version=v4.5.1": [ + "framework/System.Data >= 4.0.0.0", + "framework/System.Xml >= 4.0.0.0" + ], + ".NETFramework,Version=v4.6": [ + "framework/System.Data >= 4.0.0.0", + "framework/System.Xml >= 4.0.0.0" + ] + }, + "libraries": { + "protobuf-net/2.0.0.668": { + "serviceable": false, + "sha": "Lgj+Kf1+RV0utKxX9u1WEcymPGrbWrj/AwFmFADFLLa/LLdc1ji2MIGcecFRAGUu6UO8BRbdjZAIYWvLlN1B/A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + } + }, + "files": [ + "protobuf-net.2.0.0.668.nupkg", + "protobuf-net.2.0.0.668.nupkg.sha512", + "protobuf-net.nuspec", + "lib/net20/protobuf-net.dll", + "lib/net20/protobuf-net.pdb", + "lib/net20/protobuf-net.xml", + "lib/net20-cf/protobuf-net.dll", + "lib/net20-cf/protobuf-net.pdb", + "lib/net20-cf/protobuf-net.xml", + "lib/net30/protobuf-net.dll", + "lib/net30/protobuf-net.pdb", + "lib/net30/protobuf-net.xml", + "lib/net35/protobuf-net.dll", + "lib/net35/protobuf-net.pdb", + "lib/net35/protobuf-net.xml", + "lib/net35-cf/protobuf-net.dll", + "lib/net35-cf/protobuf-net.pdb", + "lib/net35-cf/protobuf-net.xml", + "lib/net40/protobuf-net.dll", + "lib/net40/protobuf-net.pdb", + "lib/net40/protobuf-net.xml", + "lib/net40-cf/protobuf-net.dll", + "lib/net40-cf/protobuf-net.pdb", + "lib/net40-cf/protobuf-net.xml", + "lib/netcore45/protobuf-net.dll", + "lib/netcore45/protobuf-net.pdb", + "lib/netcore45/protobuf-net.pri", + "lib/netcore45/protobuf-net.XML", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.dll", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.pdb", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.xml", + "lib/sl3-wp/protobuf-net.dll", + "lib/sl3-wp/protobuf-net.pdb", + "lib/sl3-wp/protobuf-net.xml", + "lib/sl4/protobuf-net.dll", + "lib/sl4/protobuf-net.pdb", + "lib/sl4/protobuf-net.xml", + "lib/sl4-windowsphone71/protobuf-net.dll", + "lib/sl4-windowsphone71/protobuf-net.pdb", + "lib/sl4-windowsphone71/protobuf-net.xml", + "lib/windowsphone8/protobuf-net.dll", + "lib/windowsphone8/protobuf-net.pdb", + "lib/windowsphone8/protobuf-net.xml" + ] + } + } +} \ No newline at end of file diff --git a/src/OpenChain.Core/transaction.proto b/src/OpenChain.Core/transaction.proto new file mode 100644 index 0000000..a703525 --- /dev/null +++ b/src/OpenChain.Core/transaction.proto @@ -0,0 +1,13 @@ +package OpenChain.Core; + +message AccountEntry { + required string account = 1; + required string asset = 2; + required sint64 amount = 3 [default = 0]; + required bytes version = 4; +} + +message Transaction { + repeated AccountEntry account_entries = 1; + required bytes metadata = 2; +} diff --git a/src/OpenChain.Server/AuthenticationEvidence.cs b/src/OpenChain.Server/AuthenticationEvidence.cs new file mode 100644 index 0000000..2ecb95b --- /dev/null +++ b/src/OpenChain.Server/AuthenticationEvidence.cs @@ -0,0 +1,32 @@ +using MongoDB.Bson.Serialization.Attributes; +using OpenChain.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace OpenChain.Server +{ + public class AuthenticationEvidence + { + public AuthenticationEvidence(string account, string asset, string identity, byte[] evidence) + { + this.Account = account; + this.Asset = asset; + this.Identity = identity; + this.Evidence = evidence; + } + + [BsonElement] + public string Account { get; private set; } + + [BsonElement] + public string Asset { get; private set; } + + [BsonElement] + public string Identity { get; private set; } + + [BsonElement] + public byte[] Evidence { get; private set; } + } +} diff --git a/src/OpenChain.Server/BasicValidator.cs b/src/OpenChain.Server/BasicValidator.cs new file mode 100644 index 0000000..b3bc461 --- /dev/null +++ b/src/OpenChain.Server/BasicValidator.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using OpenChain.Core; +using MongoDB.Bson.Serialization; + +namespace OpenChain.Server +{ + public class BasicValidator : ITransactionValidator + { + private readonly ITransactionStore store; + + public BasicValidator(ITransactionStore store) + { + this.store = store; + } + + public async Task IsValid(Transaction transaction, IReadOnlyList authentication) + { + //BsonSerializer.Deserialize(record.ExternalMetadata.Value.ToArray()); + IReadOnlyDictionary accounts = + await this.store.GetAccounts(transaction.AccountEntries.Select(entry => entry.AccountKey)); + + foreach (AccountEntry entry in transaction.AccountEntries) + { + LedgerPath accountPath; + LedgerPath assetPath; + if (!LedgerPath.TryParse(entry.AccountKey.Account, out accountPath) || !LedgerPath.TryParse(entry.AccountKey.Asset, out assetPath)) + return false; + + if (entry.Version.Equals(BinaryData.Empty)) + if (!await CheckCanCreate(transaction, authentication, accountPath, assetPath, accounts[entry.AccountKey], entry)) + return false; + + if (entry.Amount > 0) + { + if (!CheckCanReceive(transaction, authentication, accountPath, assetPath, accounts[entry.AccountKey], entry)) + return false; + } + else if (entry.Amount < 0) + { + if (!CheckCanSend(transaction, authentication, accountPath, assetPath, accounts[entry.AccountKey], entry)) + return false; + } + } + + return true; + } + + private bool CheckCanSend(Transaction transaction, IReadOnlyList authentication, LedgerPath accountPath, LedgerPath assetPath, AccountEntry currentState, AccountEntry proposedChange) + { + if (currentState.Amount + proposedChange.Amount < 0) + return false; + else + return true; + } + + private bool CheckCanReceive(Transaction transaction, IReadOnlyList authentication, LedgerPath accountPath, LedgerPath assetPath, AccountEntry currentState, AccountEntry proposedChange) + { + return !accountPath.IsDirectory; + } + + private async Task CheckCanCreate(Transaction transaction, IReadOnlyList authentication, LedgerPath accountPath, LedgerPath assetPath, AccountEntry currentState, AccountEntry proposedChange) + { + if (accountPath.Segments.Count < 3) + return false; + + if (accountPath.Segments[0] != "account" || accountPath.Segments[1] != "p2pkh") + return false; + + LedgerPath rootPath = LedgerPath.FromSegments(new[] { accountPath.Segments[0], accountPath.Segments[1], accountPath.Segments[2] }, true); + + AccountEntry parentAccount = (await this.store.GetAccounts(new[] { new AccountKey(rootPath.FullPath, currentState.AccountKey.Asset) })).First().Value; + if (parentAccount.Version.Equals(BinaryData.Empty)) + return false; + + return true; + } + } +} diff --git a/src/OpenChain.Server/ITransactionValidator.cs b/src/OpenChain.Server/ITransactionValidator.cs new file mode 100644 index 0000000..c677a6c --- /dev/null +++ b/src/OpenChain.Server/ITransactionValidator.cs @@ -0,0 +1,11 @@ +using OpenChain.Core; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace OpenChain.Server +{ + public interface ITransactionValidator + { + Task IsValid(Transaction transaction, IReadOnlyList authentication); + } +} diff --git a/src/OpenChain.Server/LedgerController.cs b/src/OpenChain.Server/LedgerController.cs new file mode 100644 index 0000000..01684f7 --- /dev/null +++ b/src/OpenChain.Server/LedgerController.cs @@ -0,0 +1,52 @@ +using MongoDB.Bson.IO; +using MongoDB.Bson.Serialization; +using OpenChain.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace OpenChain.Server +{ + public class LedgerController + { + private readonly ITransactionValidator validator; + + public LedgerController(ITransactionStore store, ITransactionValidator validator) + { + this.Store = store; + this.validator = validator; + } + + public ITransactionStore Store { get; } + + public async Task PostTransaction(BinaryData rawTransaction, IEnumerable authentication) + { + Transaction transaction = TransactionSerializer.DeserializeTransaction(rawTransaction.ToArray()); + + // All assets must have an overall zero balance + var groups = transaction.AccountEntries + .GroupBy(entry => entry.AccountKey.Asset) + .Select(group => group.Sum(entry => entry.Amount)); + + if (groups.Any(group => group != 0)) + return null; + + DateTime date = DateTime.UtcNow; + + LedgerRecordMetadata recordMetadata = new LedgerRecordMetadata(1, authentication); + + if (!await this.validator.IsValid(transaction, recordMetadata.Authentication)) + return null; + + byte[] metadata = MongoDB.Bson.BsonExtensionMethods.ToBson(recordMetadata); + + return await this.Store.AddTransaction(rawTransaction, date, new BinaryData(metadata)); + } + + public async Task AddRecord(BinaryData rawLedgerRecord) + { + return await this.Store.AddLedgerRecord(rawLedgerRecord); + } + } +} diff --git a/src/OpenChain.Server/LedgerPath.cs b/src/OpenChain.Server/LedgerPath.cs new file mode 100644 index 0000000..1503d67 --- /dev/null +++ b/src/OpenChain.Server/LedgerPath.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Threading.Tasks; + +namespace OpenChain.Server +{ + public class LedgerPath + { + private LedgerPath(string path, IEnumerable segments, bool isDirectory) + { + this.FullPath = path; + this.Segments = new ReadOnlyCollection(segments.ToList()); + this.IsDirectory = isDirectory; + } + + public static bool TryParse(string path, out LedgerPath result) + { + result = null; + string[] segments = path.Split('/'); + if (segments.Length < 2 || segments[0] != string.Empty) + return false; + + if (segments.Any(segment => !IsValidPathSegment(segment))) + return false; + + for (int i = 1; i < segments.Length - 1; i++) + if (segments[i] == string.Empty) + return false; + + if (segments[segments.Length - 1] == string.Empty) + result = new LedgerPath(path, segments.Skip(1).Take(segments.Length - 2), true); + else + result = new LedgerPath(path, segments.Skip(1), false); + + return true; + } + + public static LedgerPath FromSegments(string[] segments, bool isDirectory) + { + if (segments == null || segments.Any(segment => !IsValidPathSegment(segment) || segment == string.Empty)) + throw new ArgumentOutOfRangeException(nameof(segments)); + + return new LedgerPath( + "/" + string.Join("/", segments) + (isDirectory ? "/" : ""), + segments, + isDirectory); + } + + public static bool IsValidPathSegment(string path) + { + return !path.Contains("\0") && !path.Contains("/"); + } + + public string FullPath { get; } + + public IReadOnlyList Segments { get; } + + public bool IsDirectory { get; } + } +} diff --git a/src/OpenChain.Server/LedgerRecordMetadata.cs b/src/OpenChain.Server/LedgerRecordMetadata.cs new file mode 100644 index 0000000..f27a760 --- /dev/null +++ b/src/OpenChain.Server/LedgerRecordMetadata.cs @@ -0,0 +1,22 @@ +using MongoDB.Bson.Serialization.Attributes; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; + +namespace OpenChain.Server +{ + public class LedgerRecordMetadata + { + public LedgerRecordMetadata(int version, IEnumerable authentication) + { + this.Version = version; + this.Authentication = new ReadOnlyCollection(authentication.ToList()); + } + + [BsonElement] + public int Version { get; private set; } + + [BsonElement] + public IReadOnlyList Authentication { get; private set; } + } +} diff --git a/src/OpenChain.Server/OpenChain.Server.xproj b/src/OpenChain.Server/OpenChain.Server.xproj new file mode 100644 index 0000000..63cedd8 --- /dev/null +++ b/src/OpenChain.Server/OpenChain.Server.xproj @@ -0,0 +1,20 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + e682bcfb-88a6-4426-bc8b-3236301bd6a6 + OpenChain.Server + ..\..\artifacts\obj\$(MSBuildProjectName) + ..\..\artifacts\bin\$(MSBuildProjectName)\ + + + + 2.0 + + + diff --git a/src/OpenChain.Server/project.json b/src/OpenChain.Server/project.json new file mode 100644 index 0000000..96db44d --- /dev/null +++ b/src/OpenChain.Server/project.json @@ -0,0 +1,31 @@ +{ + "version": "1.0.0-*", + "description": "", + "authors": [ "" ], + "tags": [ "" ], + "projectUrl": "", + "licenseUrl": "", + + "dependencies": { + "OpenChain.Core": "1.0.0-*", + "MongoDB.Bson": "2.0.1" + }, + + "frameworks": { + "dnx451": { }, + "net46": { + "frameworkAssemblies": { + }, + "dependencies": { + } + } + //"dnxcore50": { + // "dependencies": { + // "System.Collections": "4.0.10-beta-22816", + // "System.Linq": "4.0.0-beta-22816", + // "System.Threading": "4.0.10-beta-22816", + // "Microsoft.CSharp": "4.0.0-beta-22816" + // } + //} + } +} diff --git a/src/OpenChain.Server/project.lock.json b/src/OpenChain.Server/project.lock.json new file mode 100644 index 0000000..1cb7472 --- /dev/null +++ b/src/OpenChain.Server/project.lock.json @@ -0,0 +1,119 @@ +{ + "locked": false, + "version": -9998, + "projectFileDependencyGroups": { + "": [ + "OpenChain.Core >= 1.0.0-*", + "MongoDB.Bson >= 2.0.1" + ], + "DNX,Version=v4.5.1": [], + ".NETFramework,Version=v4.6": [] + }, + "libraries": { + "MongoDB.Bson/2.0.1": { + "serviceable": false, + "sha": "dr8KYpTt5VIqGWQ5Bzud2BA/lH2csIfL5WLrfc90UzSWGF378ugvEo5tx4J0eZohvHzsRRiMS2YTmJOTRN+iYg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ], + "compileAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ], + "compileAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ] + } + }, + "files": [ + "License.rtf", + "MongoDB.Bson.2.0.1.nupkg", + "MongoDB.Bson.2.0.1.nupkg.sha512", + "MongoDB.Bson.nuspec", + "lib/net45/MongoDB.Bson.dll", + "lib/net45/MongoDB.Bson.XML" + ] + }, + "protobuf-net/2.0.0.668": { + "serviceable": false, + "sha": "Lgj+Kf1+RV0utKxX9u1WEcymPGrbWrj/AwFmFADFLLa/LLdc1ji2MIGcecFRAGUu6UO8BRbdjZAIYWvLlN1B/A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + } + }, + "files": [ + "protobuf-net.2.0.0.668.nupkg", + "protobuf-net.2.0.0.668.nupkg.sha512", + "protobuf-net.nuspec", + "lib/net20/protobuf-net.dll", + "lib/net20/protobuf-net.pdb", + "lib/net20/protobuf-net.xml", + "lib/net20-cf/protobuf-net.dll", + "lib/net20-cf/protobuf-net.pdb", + "lib/net20-cf/protobuf-net.xml", + "lib/net30/protobuf-net.dll", + "lib/net30/protobuf-net.pdb", + "lib/net30/protobuf-net.xml", + "lib/net35/protobuf-net.dll", + "lib/net35/protobuf-net.pdb", + "lib/net35/protobuf-net.xml", + "lib/net35-cf/protobuf-net.dll", + "lib/net35-cf/protobuf-net.pdb", + "lib/net35-cf/protobuf-net.xml", + "lib/net40/protobuf-net.dll", + "lib/net40/protobuf-net.pdb", + "lib/net40/protobuf-net.xml", + "lib/net40-cf/protobuf-net.dll", + "lib/net40-cf/protobuf-net.pdb", + "lib/net40-cf/protobuf-net.xml", + "lib/netcore45/protobuf-net.dll", + "lib/netcore45/protobuf-net.pdb", + "lib/netcore45/protobuf-net.pri", + "lib/netcore45/protobuf-net.XML", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.dll", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.pdb", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.xml", + "lib/sl3-wp/protobuf-net.dll", + "lib/sl3-wp/protobuf-net.pdb", + "lib/sl3-wp/protobuf-net.xml", + "lib/sl4/protobuf-net.dll", + "lib/sl4/protobuf-net.pdb", + "lib/sl4/protobuf-net.xml", + "lib/sl4-windowsphone71/protobuf-net.dll", + "lib/sl4-windowsphone71/protobuf-net.pdb", + "lib/sl4-windowsphone71/protobuf-net.xml", + "lib/windowsphone8/protobuf-net.dll", + "lib/windowsphone8/protobuf-net.pdb", + "lib/windowsphone8/protobuf-net.xml" + ] + } + } +} \ No newline at end of file diff --git a/src/OpenChain/Controllers/OpenChainController.cs b/src/OpenChain/Controllers/OpenChainController.cs new file mode 100644 index 0000000..8c374fc --- /dev/null +++ b/src/OpenChain/Controllers/OpenChainController.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNet.Mvc; +using Newtonsoft.Json.Linq; +using OpenChain.Core; +using OpenChain.Server; +using OpenChain.Core.Sqlite; +using Microsoft.AspNet.Http; +using OpenChain.Models; +using Microsoft.AspNet.WebSockets.Server; +using System.Net; +using System.Net.WebSockets; +using System.Text; +using System.Threading; + +// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 + +namespace OpenChain.Controllers +{ + [Route("")] + public class OpenChainController : Controller + { + private readonly LedgerController controller; + + public OpenChainController() + { + ITransactionStore store = new SqliteTransactionStore(@"D:\Flavien\Documents\Visual Studio 2015\Projects\OpenChain\Server\src\OpenChain.Console\ledger.db"); + this.controller = new LedgerController(store, new BasicValidator(store)); + } + + [HttpGet("transactionstream")] + public async Task GetStream(string from) + { + BinaryData ledgerRecordHash; + if (string.IsNullOrEmpty(from)) + ledgerRecordHash = null; + else + ledgerRecordHash = BinaryData.Parse(from); + + IReadOnlyList records = await this.controller.Store.GetTransactionStream(ledgerRecordHash); + + return Json(records.Select(record => new { raw = record.ToString() }).ToArray()); + + ////TransactionStreamWebSocketHandler handler = new TransactionStreamWebSocketHandler(ledgerRecordHash); + ////WebSocketMiddleware webSocket = new WebSocketMiddleware(handler.Process, new WebSocketOptions()); + + ////await webSocket.Invoke(this.Request.HttpContext); + + //if (Context.IsWebSocketRequest) + //{ + // WebSocket webSocket = await this.Context.AcceptWebSocketAsync(); + // ArraySegment segment = new ArraySegment(Encoding.UTF8.GetBytes("\"Hello world\"")); + // await webSocket.SendAsync(segment, WebSocketMessageType.Text, false, CancellationToken.None); + //} + + ////return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols); + //return new HttpStatusCodeResult((int)HttpStatusCode.SwitchingProtocols); + } + + // POST api/values + [HttpPost("submit")] + public async Task Post([FromBody]string transaction) + { + JObject body = JObject.Parse(transaction); + + BinaryData parsedTransaction = BinaryData.Parse((string)body["raw"]); + // Validate deserialization + Transaction deserializedTransaction = TransactionSerializer.DeserializeTransaction(parsedTransaction.ToArray()); + + BinaryData ledgerRecord = await this.controller.PostTransaction(parsedTransaction, null); + + return new JObject(new + { + ledger_record = ledgerRecord.ToString() + }); + } + } +} diff --git a/src/OpenChain/Models/TransactionStreamWebSocketHandler.cs b/src/OpenChain/Models/TransactionStreamWebSocketHandler.cs new file mode 100644 index 0000000..d6bc0c8 --- /dev/null +++ b/src/OpenChain/Models/TransactionStreamWebSocketHandler.cs @@ -0,0 +1,25 @@ +using Microsoft.AspNet.Http; +using Microsoft.Framework.Logging; +using OpenChain.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace OpenChain.Models +{ + public class TransactionStreamWebSocketHandler + { + private readonly BinaryData lastLedgerRecordHash; + + public TransactionStreamWebSocketHandler(BinaryData lastLedgerRecordHash) + { + this.lastLedgerRecordHash = lastLedgerRecordHash; + } + + public async Task Process(HttpContext context) + { + + } + } +} diff --git a/src/OpenChain/OpenChain.xproj b/src/OpenChain/OpenChain.xproj new file mode 100644 index 0000000..582465e --- /dev/null +++ b/src/OpenChain/OpenChain.xproj @@ -0,0 +1,22 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + c24c1145-878a-476a-ac93-6a272be3d139 + OpenChain + ..\..\artifacts\obj\$(MSBuildProjectName) + ..\..\artifacts\bin\$(MSBuildProjectName)\ + + + OpenChain + + + 2.0 + 2012 + + + \ No newline at end of file diff --git a/src/OpenChain/Properties/launchSettings.json b/src/OpenChain/Properties/launchSettings.json new file mode 100644 index 0000000..2145450 --- /dev/null +++ b/src/OpenChain/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "IIS Express": { + "commandName" : "IISExpress", + "launchBrowser": true, + "launchUrl": "", + "environmentVariables" : { + "ASPNET_ENV": "Development" + } + } + } +} diff --git a/src/OpenChain/Startup.cs b/src/OpenChain/Startup.cs new file mode 100644 index 0000000..04d4ecb --- /dev/null +++ b/src/OpenChain/Startup.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNet.Builder; +using Microsoft.AspNet.Hosting; +using Microsoft.AspNet.Http; +using Microsoft.AspNet.Routing; +using Microsoft.Framework.DependencyInjection; +using Microsoft.AspNet.WebSockets.Server; +using System.Text; +using System.Threading; + +namespace OpenChain +{ + public class Startup + { + public Startup(IHostingEnvironment env) + { + } + + // This method gets called by a runtime. + // Use this method to add services to the container + public void ConfigureServices(IServiceCollection services) + { + services.AddMvc(); + // Uncomment the following line to add Web API services which makes it easier to port Web API 2 controllers. + // You will also need to add the Microsoft.AspNet.Mvc.WebApiCompatShim package to the 'dependencies' section of project.json. + // services.AddWebApiConventions(); + } + + // Configure is called after ConfigureServices is called. + public void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + // Configure the HTTP request pipeline. + app.UseStaticFiles(); + + // Add MVC to the request pipeline. + app.UseMvc(); + // Add the following route for porting Web API 2 controllers. + // routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}"); + + app.UseWebSockets(new WebSocketOptions() { ReplaceFeature = true }); + + //app.Map("/Managed", managedWebSocketsApp => + //{ + // // Comment this out to test native server implementations + // managedWebSocketsApp.UseWebSockets(new WebSocketOptions() + // { + // ReplaceFeature = true, + // }); + + // managedWebSocketsApp.Use(async (context, next) => + // { + // //if (context.IsWebSocketRequest) + // { + // Console.WriteLine("Echo: " + context.Request.Path); + // var webSocket = await context.AcceptWebSocketAsync(); + // await webSocket.SendAsync(new ArraySegment(Encoding.UTF8.GetBytes("\"Hello World\"")), System.Net.WebSockets.WebSocketMessageType.Text, true, CancellationToken.None); + // return; + // } + // await next(); + // }); + //}); + } + } +} diff --git a/src/OpenChain/project.json b/src/OpenChain/project.json new file mode 100644 index 0000000..34244da --- /dev/null +++ b/src/OpenChain/project.json @@ -0,0 +1,44 @@ +{ + "webroot": "wwwroot", + "version": "1.0.0-*", + "compilationOptions": { "languageVersion": "csharp6" }, + + "dependencies": { + "Microsoft.AspNet.Mvc": "6.0.0-beta4", + "Microsoft.AspNet.Server.IIS": "1.0.0-beta4", + "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4", + "Microsoft.AspNet.StaticFiles": "1.0.0-beta4", + "Microsoft.AspNet.WebSockets.Server": "1.0.0-beta4", + "Microsoft.AspNet.Http": "1.0.0-beta4", + "OpenChain.Core": "1.0.0-*", + "Newtonsoft.Json": "7.0.1", + "OpenChain.Server": "1.0.0-*", + "OpenChain.Core.Sqlite": "1.0.0-*", + "System.Text.Encoding": "4.0.10-beta-22816" + }, + + "commands": { + "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000" + }, + + "frameworks": { + "dnx451": { } + //"dnxcore50": { + // "dependencies": { + // "System.Console": "4.0.0-beta-22816", + // "System.Collections": "4.0.10-beta-22816", + // "System.Linq": "4.0.0-beta-22816", + // "System.Threading": "4.0.10-beta-22816", + // "Microsoft.CSharp": "4.0.0-beta-22816" + // } + //} + }, + + "exclude": [ + ], + "publishExclude": [ + "**.xproj", + "**.user", + "**.vspscc" + ] +} diff --git a/src/OpenChain/project.lock.json b/src/OpenChain/project.lock.json new file mode 100644 index 0000000..b62fac6 --- /dev/null +++ b/src/OpenChain/project.lock.json @@ -0,0 +1,2949 @@ +{ + "locked": false, + "version": -9998, + "projectFileDependencyGroups": { + "": [ + "Microsoft.AspNet.Mvc >= 6.0.0-beta4", + "Microsoft.AspNet.Server.IIS >= 1.0.0-beta4", + "Microsoft.AspNet.Server.WebListener >= 1.0.0-beta4", + "Microsoft.AspNet.StaticFiles >= 1.0.0-beta4", + "Microsoft.AspNet.WebSockets.Server >= 1.0.0-beta4", + "Microsoft.AspNet.Http >= 1.0.0-beta4", + "OpenChain.Core >= 1.0.0-*", + "Newtonsoft.Json >= 7.0.1", + "OpenChain.Server >= 1.0.0-*", + "OpenChain.Core.Sqlite >= 1.0.0-*", + "System.Text.Encoding >= 4.0.10-beta-22816" + ], + "DNX,Version=v4.5.1": [] + }, + "libraries": { + "Microsoft.AspNet.Authentication/1.0.0-beta4": { + "serviceable": true, + "sha": "bF++RlseLYrzDjtzrwNsLlftnj65Gctg6AkW6QMmk3W5EcNCktynbfjZrAn/1JRr7jri5XAJ546kvoayYKMjEg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.DataProtection": "1.0.0-beta4", + "Microsoft.AspNet.Http.Interfaces": "1.0.0-beta4", + "Microsoft.AspNet.Http.Core": "1.0.0-beta4", + "Microsoft.AspNet.Http.Extensions": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Authentication.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Authentication.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Authentication.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Authentication.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Authentication.nuspec", + "lib/dnx451/Microsoft.AspNet.Authentication.dll", + "lib/dnx451/Microsoft.AspNet.Authentication.xml", + "lib/dnxcore50/Microsoft.AspNet.Authentication.dll", + "lib/dnxcore50/Microsoft.AspNet.Authentication.xml" + ] + }, + "Microsoft.AspNet.Authorization/1.0.0-beta4": { + "serviceable": true, + "sha": "3Nf8ksZ7jSJgN/0t8dfsI7EogSFr5pa6NUNdYSfvoo52Jl9c4XTdgH2mDugHNRXXrouZAu8jcrsH0P8iMn1baQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Http.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.OptionsModel": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Authorization.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Authorization.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Authorization.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Authorization.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Authorization.nuspec", + "lib/dnx451/Microsoft.AspNet.Authorization.dll", + "lib/dnx451/Microsoft.AspNet.Authorization.xml", + "lib/dnxcore50/Microsoft.AspNet.Authorization.dll", + "lib/dnxcore50/Microsoft.AspNet.Authorization.xml" + ] + }, + "Microsoft.AspNet.Cors/1.0.0-beta4": { + "serviceable": true, + "sha": "Zc6ED9sNTjbExEtJ59ajR5VAzKnvZ2Bg31QgSo9nmVOZwrEVgdQJjL+m4mW3cZbZuU1KWcpaTtML6dY8co72sA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Cors.Core": "1.0.0-beta4", + "Microsoft.AspNet.Http.Extensions": "1.0.0-beta4", + "Microsoft.AspNet.WebUtilities": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Cors.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Cors.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Cors.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Cors.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Cors.nuspec", + "lib/dnx451/Microsoft.AspNet.Cors.dll", + "lib/dnx451/Microsoft.AspNet.Cors.xml", + "lib/dnxcore50/Microsoft.AspNet.Cors.dll", + "lib/dnxcore50/Microsoft.AspNet.Cors.xml" + ] + }, + "Microsoft.AspNet.Cors.Core/1.0.0-beta4": { + "serviceable": true, + "sha": "4F0WoPwU3vasJj9RZErDGXde0mBtXj4zMe3UmQTjP3QTTSpelIV+cilrr2CnFB26CjRj17aHUeWbEYO19GUg0w==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.ConfigurationModel.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.OptionsModel": "1.0.0-beta4", + "Microsoft.AspNet.Http": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Cors.Core.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Cors.Core.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Cors.Core.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Cors.Core.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Cors.Core.nuspec", + "lib/dnx451/Microsoft.AspNet.Cors.Core.dll", + "lib/dnx451/Microsoft.AspNet.Cors.Core.xml", + "lib/dnxcore50/Microsoft.AspNet.Cors.Core.dll", + "lib/dnxcore50/Microsoft.AspNet.Cors.Core.xml" + ] + }, + "Microsoft.AspNet.Cryptography.Internal/1.0.0-beta4": { + "serviceable": true, + "sha": "ytSNFgyvBp0pyTDWy4Iq5y0xM8GU5tGG/gxaTbfR38qqnO4ZRKtgB8z6+1F+NCzFQNIdlvz9+qguS7aXH+gtbQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Cryptography.Internal.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Cryptography.Internal.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net451/Microsoft.AspNet.Cryptography.Internal.dll" + ], + "compileAssemblies": [ + "lib/net451/Microsoft.AspNet.Cryptography.Internal.dll" + ] + } + }, + "files": [ + "Microsoft.AspNet.Cryptography.Internal.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Cryptography.Internal.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Cryptography.Internal.nuspec", + "lib/dnx451/Microsoft.AspNet.Cryptography.Internal.dll", + "lib/dnx451/Microsoft.AspNet.Cryptography.Internal.xml", + "lib/dnxcore50/Microsoft.AspNet.Cryptography.Internal.dll", + "lib/dnxcore50/Microsoft.AspNet.Cryptography.Internal.xml", + "lib/net451/Microsoft.AspNet.Cryptography.Internal.dll", + "lib/net451/Microsoft.AspNet.Cryptography.Internal.xml" + ] + }, + "Microsoft.AspNet.DataProtection/1.0.0-beta4": { + "serviceable": true, + "sha": "HqfH0h9i81OuOTO7CTWVwmkJoUM1Fc9AuxQASywZmCww4WLZ3qHZMeKZxeeBZdERksc3PH2EGIqis1i6dyXfmw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Cryptography.Internal": "1.0.0-beta4", + "Microsoft.AspNet.DataProtection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.OptionsModel": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Security", + "System.Xml", + "System.Xml.Linq", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.DataProtection.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.DataProtection.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.AspNet.Cryptography.Internal": "1.0.0-beta4", + "Microsoft.AspNet.DataProtection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.OptionsModel": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Security", + "System.Xml", + "System.Xml.Linq", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net451/Microsoft.AspNet.DataProtection.dll" + ], + "compileAssemblies": [ + "lib/net451/Microsoft.AspNet.DataProtection.dll" + ] + } + }, + "files": [ + "Microsoft.AspNet.DataProtection.1.0.0-beta4.nupkg", + "Microsoft.AspNet.DataProtection.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.DataProtection.nuspec", + "lib/dnx451/Microsoft.AspNet.DataProtection.dll", + "lib/dnx451/Microsoft.AspNet.DataProtection.xml", + "lib/dnxcore50/Microsoft.AspNet.DataProtection.dll", + "lib/dnxcore50/Microsoft.AspNet.DataProtection.xml", + "lib/net451/Microsoft.AspNet.DataProtection.dll", + "lib/net451/Microsoft.AspNet.DataProtection.xml" + ] + }, + "Microsoft.AspNet.DataProtection.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "y0pyHIooDn15lJZEETy9+u9ynw+4ZRngRjHguIQuBKm30j1+dwQRqqyS6L1SnFCzAS0mq6+5GauzA8qWxHc60g==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.DataProtection.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.DataProtection.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net451/Microsoft.AspNet.DataProtection.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net451/Microsoft.AspNet.DataProtection.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.AspNet.DataProtection.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.AspNet.DataProtection.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.DataProtection.Interfaces.nuspec", + "lib/dnx451/Microsoft.AspNet.DataProtection.Interfaces.dll", + "lib/dnx451/Microsoft.AspNet.DataProtection.Interfaces.xml", + "lib/dnxcore50/Microsoft.AspNet.DataProtection.Interfaces.dll", + "lib/dnxcore50/Microsoft.AspNet.DataProtection.Interfaces.xml", + "lib/net451/Microsoft.AspNet.DataProtection.Interfaces.dll", + "lib/net451/Microsoft.AspNet.DataProtection.Interfaces.xml" + ] + }, + "Microsoft.AspNet.Diagnostics.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "25/Rs8HIc+Za9lQcDx2dTw5DffY1y2SvKaPLGJcNufJX0/prnJi0psdEagPbqVBJppRxbFZc3u8MdUILzHJqsA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Diagnostics.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Diagnostics.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Diagnostics.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Diagnostics.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Diagnostics.Interfaces.nuspec", + "lib/dnx451/Microsoft.AspNet.Diagnostics.Interfaces.dll", + "lib/dnx451/Microsoft.AspNet.Diagnostics.Interfaces.xml", + "lib/dnxcore50/Microsoft.AspNet.Diagnostics.Interfaces.dll", + "lib/dnxcore50/Microsoft.AspNet.Diagnostics.Interfaces.xml" + ] + }, + "Microsoft.AspNet.FeatureModel/1.0.0-beta4": { + "serviceable": true, + "sha": "Xewac6SajTjfxmPKZSSYWLsRu/ZI/hqx775ozDjHsSIl2xsl2bq6ZJu6PCIoEj16+Ws/Gl+cfbdNrhCa5LslHQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.FeatureModel.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.FeatureModel.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.FeatureModel.1.0.0-beta4.nupkg", + "Microsoft.AspNet.FeatureModel.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.FeatureModel.nuspec", + "lib/dnx451/Microsoft.AspNet.FeatureModel.dll", + "lib/dnx451/Microsoft.AspNet.FeatureModel.xml", + "lib/dnxcore50/Microsoft.AspNet.FeatureModel.dll", + "lib/dnxcore50/Microsoft.AspNet.FeatureModel.xml" + ] + }, + "Microsoft.AspNet.FileProviders/1.0.0-beta4": { + "serviceable": false, + "sha": "4/1d/nfCWZPZg9pod618gHGgPZTtDF3ol81NgAsY7i6G3K3gKNX0yekvhUG0LDR7J7p4eamFDb8oZC8E0OnFFg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.FileProviders.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.FileProviders.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.FileProviders.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.AspNet.FileProviders.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.AspNet.FileProviders.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.AspNet.FileProviders.dll" + ] + } + }, + "files": [ + "Microsoft.AspNet.FileProviders.1.0.0-beta4.nupkg", + "Microsoft.AspNet.FileProviders.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.FileProviders.nuspec", + "lib/dnx451/Microsoft.AspNet.FileProviders.dll", + "lib/dnx451/Microsoft.AspNet.FileProviders.xml", + "lib/dnxcore50/Microsoft.AspNet.FileProviders.dll", + "lib/dnxcore50/Microsoft.AspNet.FileProviders.xml", + "lib/net45/Microsoft.AspNet.FileProviders.dll", + "lib/net45/Microsoft.AspNet.FileProviders.xml" + ] + }, + "Microsoft.AspNet.FileProviders.Interfaces/1.0.0-beta4": { + "serviceable": false, + "sha": "nB1GlK79h0x/hEm7ro/TiRK58kv4VukyqSuAtMQGp7S8xkat9uPJJQFQh1MUysCU/gJlbK+5+PIq9srM3RS6Sw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Caching.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.FileProviders.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.FileProviders.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.Caching.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.AspNet.FileProviders.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.AspNet.FileProviders.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.AspNet.FileProviders.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.AspNet.FileProviders.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.FileProviders.Interfaces.nuspec", + "lib/dnx451/Microsoft.AspNet.FileProviders.Interfaces.dll", + "lib/dnx451/Microsoft.AspNet.FileProviders.Interfaces.xml", + "lib/dnxcore50/Microsoft.AspNet.FileProviders.Interfaces.dll", + "lib/dnxcore50/Microsoft.AspNet.FileProviders.Interfaces.xml", + "lib/net45/Microsoft.AspNet.FileProviders.Interfaces.dll", + "lib/net45/Microsoft.AspNet.FileProviders.Interfaces.xml" + ] + }, + "Microsoft.AspNet.Hosting/1.0.0-beta4": { + "serviceable": true, + "sha": "2rElL/y+eqvmUre+gVjruvslfTbhhe8o5wyUo/qicCr/UnL9GrDGi4ikIV9ulS9tqiRTTByUT+CGC1TnSeiCnw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Hosting.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Microsoft.AspNet.FileProviders": "1.0.0-beta4", + "Microsoft.AspNet.Http.Core": "1.0.0-beta4", + "Microsoft.AspNet.Http.Extensions": "1.0.0-beta4", + "Microsoft.Framework.Logging": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection": "1.0.0-beta4", + "Newtonsoft.Json": "6.0.6" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Hosting.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Hosting.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Hosting.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Hosting.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Hosting.nuspec", + "lib/dnx451/Microsoft.AspNet.Hosting.dll", + "lib/dnx451/Microsoft.AspNet.Hosting.xml", + "lib/dnxcore50/Microsoft.AspNet.Hosting.dll", + "lib/dnxcore50/Microsoft.AspNet.Hosting.xml" + ] + }, + "Microsoft.AspNet.Hosting.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "+0M9gAQ9rPnsWu4saQ4ZkC6yjwahEiiXM/XoA1PEO7wsZcuQ/yX7Oo794k+bn/HyzstDcyRV4UDc8nUwTuBFqg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Http": "1.0.0-beta4", + "Microsoft.AspNet.FeatureModel": "1.0.0-beta4", + "Microsoft.AspNet.FileProviders.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.ConfigurationModel": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Hosting.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Hosting.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Hosting.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Hosting.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Hosting.Interfaces.nuspec", + "lib/dnx451/Microsoft.AspNet.Hosting.Interfaces.dll", + "lib/dnx451/Microsoft.AspNet.Hosting.Interfaces.xml", + "lib/dnxcore50/Microsoft.AspNet.Hosting.Interfaces.dll", + "lib/dnxcore50/Microsoft.AspNet.Hosting.Interfaces.xml" + ] + }, + "Microsoft.AspNet.Http/1.0.0-beta4": { + "serviceable": true, + "sha": "XTs0bSEcxRP74nSZ8SFCLfcswV1CzwpNWbQDhKOmOFdJXP56sJtF6cDJBcvV/emUha75gz9zXRZErHVFH45MAg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.WebEncoders.Core": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Http.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Http.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Http.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Http.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Http.nuspec", + "lib/dnx451/Microsoft.AspNet.Http.dll", + "lib/dnx451/Microsoft.AspNet.Http.xml", + "lib/dnxcore50/Microsoft.AspNet.Http.dll", + "lib/dnxcore50/Microsoft.AspNet.Http.xml" + ] + }, + "Microsoft.AspNet.Http.Core/1.0.0-beta4": { + "serviceable": true, + "sha": "U6jZxua+mNfNTjm9lW/1W4sKd1aYUWiTp7KBY7hPs49IU4p7NMewvDKV34/svcaDYDOqhtuduyGJCdw62GrvqQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.FeatureModel": "1.0.0-beta4", + "Microsoft.AspNet.Http": "1.0.0-beta4", + "Microsoft.AspNet.Http.Interfaces": "1.0.0-beta4", + "Microsoft.AspNet.WebUtilities": "1.0.0-beta4", + "Microsoft.Framework.WebEncoders.Core": "1.0.0-beta4", + "Microsoft.Net.Http.Headers": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Http.Core.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Http.Core.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Http.Core.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Http.Core.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Http.Core.nuspec", + "lib/dnx451/Microsoft.AspNet.Http.Core.dll", + "lib/dnx451/Microsoft.AspNet.Http.Core.xml", + "lib/dnxcore50/Microsoft.AspNet.Http.Core.dll", + "lib/dnxcore50/Microsoft.AspNet.Http.Core.xml" + ] + }, + "Microsoft.AspNet.Http.Extensions/1.0.0-beta4": { + "serviceable": true, + "sha": "nhcRbawpD6g8ZiEfF/KE4N+VnrrPyosDqWqNzJQWZDAto/ntenbve6iNgRRuwatvczdlskwsdasmrHKw92ciWQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Http": "1.0.0-beta4", + "Microsoft.AspNet.Http.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.WebEncoders.Core": "1.0.0-beta4", + "Microsoft.Net.Http.Headers": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Http.Extensions.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Http.Extensions.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Http.Extensions.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Http.Extensions.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Http.Extensions.nuspec", + "lib/dnx451/Microsoft.AspNet.Http.Extensions.dll", + "lib/dnx451/Microsoft.AspNet.Http.Extensions.xml", + "lib/dnxcore50/Microsoft.AspNet.Http.Extensions.dll", + "lib/dnxcore50/Microsoft.AspNet.Http.Extensions.xml" + ] + }, + "Microsoft.AspNet.Http.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "31C78ja91ggo1ywLn83yNpTR0pnhMbPMcKhE72Gx3I5M0F1foDJQTHBOBFS0ebGkn8eiDMWkKGqjYucslaiu5Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Http.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Http.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Http.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Http.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Http.Interfaces.nuspec", + "lib/dnx451/Microsoft.AspNet.Http.Interfaces.dll", + "lib/dnx451/Microsoft.AspNet.Http.Interfaces.xml", + "lib/dnxcore50/Microsoft.AspNet.Http.Interfaces.dll", + "lib/dnxcore50/Microsoft.AspNet.Http.Interfaces.xml" + ] + }, + "Microsoft.AspNet.JsonPatch/1.0.0-beta4": { + "serviceable": true, + "sha": "osQ1Bsui45jlsUwMLEkQkEB2VBIFEc4Rn/Un3cUaDUXpCXU/F+xt9qyxGrC8NMHGxnoMCyltSZNNitGo1eDyLg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Http.Extensions": "1.0.0-beta4", + "Newtonsoft.Json": "6.0.6" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.JsonPatch.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.JsonPatch.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.JsonPatch.1.0.0-beta4.nupkg", + "Microsoft.AspNet.JsonPatch.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.JsonPatch.nuspec", + "lib/dnx451/Microsoft.AspNet.JsonPatch.dll", + "lib/dnx451/Microsoft.AspNet.JsonPatch.xml", + "lib/dnxcore50/Microsoft.AspNet.JsonPatch.dll", + "lib/dnxcore50/Microsoft.AspNet.JsonPatch.xml" + ] + }, + "Microsoft.AspNet.Loader.IIS/1.0.0-beta4": { + "serviceable": true, + "sha": "yuhp/0exkFrwOBLAhX29lXoA1D+ouoq/TZ8aeRNcVILqwJ5hTU6Gf5muGQVGK/PqRQKQDUaHTzRLx/TrhWa91A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.DataProtection.Interfaces": "1.0.0-beta4", + "Microsoft.AspNet.Hosting": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.WebEncoders.Core": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Loader.IIS.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Loader.IIS.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Loader.IIS.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Loader.IIS.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Loader.IIS.nuspec", + "lib/dnx451/Microsoft.AspNet.Loader.IIS.dll", + "lib/dnx451/Microsoft.AspNet.Loader.IIS.xml", + "lib/dnxcore50/Microsoft.AspNet.Loader.IIS.dll", + "lib/dnxcore50/Microsoft.AspNet.Loader.IIS.xml" + ] + }, + "Microsoft.AspNet.Loader.IIS.Interop/1.0.0-beta4": { + "serviceable": false, + "sha": "50FEL0+abeAABvCoPs1A0Vcl65PyBKyzg06aL0H+Y+WZMoLI+Bvd1M9WKDj8nfm6K5Jh033oI7fQbOfscd8wqw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Loader.IIS.Interop.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Loader.IIS.Interop.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Loader.IIS.Interop.nuspec", + "InteropAssemblies/amd64/Microsoft.AspNet.Loader.IIS.Interop.dll", + "InteropAssemblies/x86/Microsoft.AspNet.Loader.IIS.Interop.dll", + "tools/AspNet.Loader.dll" + ] + }, + "Microsoft.AspNet.Mvc/6.0.0-beta4": { + "serviceable": true, + "sha": "zff+4iCo+KYQo7RGa4fDXyi/xDQFW4CssRYqEiBjX26XWB3tNDSYBY5pETZ3aUina9ocR++09Yun8wsRpL37DA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Authorization": "1.0.0-beta4", + "Microsoft.AspNet.Cors": "1.0.0-beta4", + "Microsoft.AspNet.Mvc.Razor": "6.0.0-beta4", + "Microsoft.Framework.Caching.Memory": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Mvc.6.0.0-beta4.nupkg", + "Microsoft.AspNet.Mvc.6.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Mvc.nuspec", + "lib/dnx451/Microsoft.AspNet.Mvc.dll", + "lib/dnx451/Microsoft.AspNet.Mvc.xml", + "lib/dnxcore50/Microsoft.AspNet.Mvc.dll", + "lib/dnxcore50/Microsoft.AspNet.Mvc.xml" + ] + }, + "Microsoft.AspNet.Mvc.Core/6.0.0-beta4": { + "serviceable": true, + "sha": "fWm2n86dAR/oYcKE7RWT3gr9xQjpLPlwZyxEN8vBBUqLYkTzW9iPXNyckgNycpdFFpOqRX4alfK1XKhQZxvSTw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Authentication": "1.0.0-beta4", + "Microsoft.AspNet.Authorization": "1.0.0-beta4", + "Microsoft.AspNet.Cors.Core": "1.0.0-beta4", + "Microsoft.AspNet.DataProtection": "1.0.0-beta4", + "Microsoft.AspNet.Diagnostics.Interfaces": "1.0.0-beta4", + "Microsoft.AspNet.FileProviders": "1.0.0-beta4", + "Microsoft.AspNet.Hosting": "1.0.0-beta4", + "Microsoft.AspNet.Http.Extensions": "1.0.0-beta4", + "Microsoft.AspNet.Mvc.ModelBinding": "6.0.0-beta4", + "Microsoft.AspNet.Routing": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.WebEncoders": "1.0.0-beta4", + "Microsoft.AspNet.JsonPatch": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.Core.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.Core.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Mvc.Core.6.0.0-beta4.nupkg", + "Microsoft.AspNet.Mvc.Core.6.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Mvc.Core.nuspec", + "lib/dnx451/Microsoft.AspNet.Mvc.Core.dll", + "lib/dnx451/Microsoft.AspNet.Mvc.Core.xml", + "lib/dnxcore50/Microsoft.AspNet.Mvc.Core.dll", + "lib/dnxcore50/Microsoft.AspNet.Mvc.Core.xml" + ] + }, + "Microsoft.AspNet.Mvc.ModelBinding/6.0.0-beta4": { + "serviceable": true, + "sha": "diZfvlLlUsilyG6DL4wmKfWNjNvnwB1C14KxLfrVRhGi3HBXnd1bV4lFwEYFMHFvblCe77Pv6PKschmTr33TqA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Http.Core": "1.0.0-beta4", + "Microsoft.AspNet.Http.Extensions": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection": "1.0.0-beta4", + "Microsoft.Net.Http.Headers": "1.0.0-beta4", + "Newtonsoft.Json": "6.0.6" + }, + "frameworkAssemblies": [ + "System.ComponentModel.DataAnnotations", + "System.Runtime.Serialization", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.ModelBinding.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.ModelBinding.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Mvc.ModelBinding.6.0.0-beta4.nupkg", + "Microsoft.AspNet.Mvc.ModelBinding.6.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Mvc.ModelBinding.nuspec", + "lib/dnx451/Microsoft.AspNet.Mvc.ModelBinding.dll", + "lib/dnx451/Microsoft.AspNet.Mvc.ModelBinding.xml", + "lib/dnxcore50/Microsoft.AspNet.Mvc.ModelBinding.dll", + "lib/dnxcore50/Microsoft.AspNet.Mvc.ModelBinding.xml" + ] + }, + "Microsoft.AspNet.Mvc.Razor/6.0.0-beta4": { + "serviceable": true, + "sha": "zB21KW/wbvV1fAJuceZDikyC1mqfebLciF89969xY/6rUs4EhfSMcMfarRGnEgX7oJecQVWRFlh2QCk5EmCFPw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Diagnostics.Interfaces": "1.0.0-beta4", + "Microsoft.AspNet.Mvc.Core": "6.0.0-beta4", + "Microsoft.AspNet.Mvc.Razor.Host": "6.0.0-beta4", + "Microsoft.AspNet.PageExecutionInstrumentation.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Roslyn.Common": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Roslyn.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Collections", + "System.IO", + "System.Runtime", + "System.Text.Encoding", + "System.Threading.Tasks", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.Razor.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.Razor.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Mvc.Razor.6.0.0-beta4.nupkg", + "Microsoft.AspNet.Mvc.Razor.6.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Mvc.Razor.nuspec", + "lib/dnx451/Microsoft.AspNet.Mvc.Razor.dll", + "lib/dnx451/Microsoft.AspNet.Mvc.Razor.xml", + "lib/dnxcore50/Microsoft.AspNet.Mvc.Razor.dll", + "lib/dnxcore50/Microsoft.AspNet.Mvc.Razor.xml" + ] + }, + "Microsoft.AspNet.Mvc.Razor.Host/6.0.0-beta4": { + "serviceable": true, + "sha": "yPWG0jyetebIc53Ytbsd3UXkwMsqig4TBcVMciW0B1UlLjJbdbnEVook9YrubEVJqxYf3sq6AxCcLQB/e0qyBg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.FileProviders": "1.0.0-beta4", + "Microsoft.AspNet.Razor.Runtime": "4.0.0-beta4", + "Microsoft.Framework.Caching.Memory": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.Razor.Host.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Mvc.Razor.Host.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.AspNet.FileProviders": "1.0.0-beta4", + "Microsoft.AspNet.Razor.Runtime": "4.0.0-beta4", + "Microsoft.Framework.Caching.Memory": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.AspNet.Mvc.Razor.Host.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.AspNet.Mvc.Razor.Host.dll" + ] + } + }, + "files": [ + "Microsoft.AspNet.Mvc.Razor.Host.6.0.0-beta4.nupkg", + "Microsoft.AspNet.Mvc.Razor.Host.6.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Mvc.Razor.Host.nuspec", + "lib/dnx451/Microsoft.AspNet.Mvc.Razor.Host.dll", + "lib/dnx451/Microsoft.AspNet.Mvc.Razor.Host.xml", + "lib/dnxcore50/Microsoft.AspNet.Mvc.Razor.Host.dll", + "lib/dnxcore50/Microsoft.AspNet.Mvc.Razor.Host.xml", + "lib/net45/Microsoft.AspNet.Mvc.Razor.Host.dll", + "lib/net45/Microsoft.AspNet.Mvc.Razor.Host.xml" + ] + }, + "Microsoft.AspNet.PageExecutionInstrumentation.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "rKcHwgcdJlYxum4ZDc3BktlXEjCEDimBM4YThJ78a5VxnZDLMxwublkaq6ekHPwg5SSMuzNcFQnb+5u1KAF/Jg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.nuspec", + "lib/dnx451/Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.dll", + "lib/dnx451/Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.xml", + "lib/dnxcore50/Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.dll", + "lib/dnxcore50/Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.xml" + ] + }, + "Microsoft.AspNet.Razor/4.0.0-beta4": { + "serviceable": true, + "sha": "Q2+cwhdUOc3i0EJ/A//cbF2zmkvmC5WSMQhNHWpwASBECGI4oB10dzA+CazpsITOnwqlFlSgLsbpqlktvFGK7Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Razor.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Razor.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.AspNet.Razor.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.AspNet.Razor.dll" + ] + } + }, + "files": [ + "Microsoft.AspNet.Razor.4.0.0-beta4.nupkg", + "Microsoft.AspNet.Razor.4.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Razor.nuspec", + "lib/dnx451/Microsoft.AspNet.Razor.dll", + "lib/dnx451/Microsoft.AspNet.Razor.xml", + "lib/dnxcore50/Microsoft.AspNet.Razor.dll", + "lib/dnxcore50/Microsoft.AspNet.Razor.xml", + "lib/net45/Microsoft.AspNet.Razor.dll", + "lib/net45/Microsoft.AspNet.Razor.xml" + ] + }, + "Microsoft.AspNet.Razor.Runtime/4.0.0-beta4": { + "serviceable": true, + "sha": "7Cjl+l274C1jqwvqVWxYoJ2rsqvxvDmv2kBAeoYC/kYEjLi7exi/Baie39sngstlYWNBiA2nJZtnmv/5tUhDtA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Razor": "4.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Razor.Runtime.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Razor.Runtime.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.AspNet.Razor": "4.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.AspNet.Razor.Runtime.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.AspNet.Razor.Runtime.dll" + ] + } + }, + "files": [ + "Microsoft.AspNet.Razor.Runtime.4.0.0-beta4.nupkg", + "Microsoft.AspNet.Razor.Runtime.4.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Razor.Runtime.nuspec", + "lib/dnx451/Microsoft.AspNet.Razor.Runtime.dll", + "lib/dnx451/Microsoft.AspNet.Razor.Runtime.xml", + "lib/dnxcore50/Microsoft.AspNet.Razor.Runtime.dll", + "lib/dnxcore50/Microsoft.AspNet.Razor.Runtime.xml", + "lib/net45/Microsoft.AspNet.Razor.Runtime.dll", + "lib/net45/Microsoft.AspNet.Razor.Runtime.xml" + ] + }, + "Microsoft.AspNet.Routing/1.0.0-beta4": { + "serviceable": true, + "sha": "h2/S9nkGmSQT/gYZEzfCagdg66jLyZEV7m9j84sZ9teXOvUfynxg7Hcp+wk5kDwPyAwFuk+31/ya2oWwRD3RuA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Http.Extensions": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.OptionsModel": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Routing.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Routing.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Routing.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Routing.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Routing.nuspec", + "lib/dnx451/Microsoft.AspNet.Routing.dll", + "lib/dnx451/Microsoft.AspNet.Routing.xml", + "lib/dnxcore50/Microsoft.AspNet.Routing.dll", + "lib/dnxcore50/Microsoft.AspNet.Routing.xml" + ] + }, + "Microsoft.AspNet.Server.IIS/1.0.0-beta4": { + "serviceable": false, + "sha": "zPKpt9wna/Jw+PxywvKQDSVL5ZlzkE4arxpCcgrrJv2r1bwkWSAWiy6b9sp79aAzYSO9/qlt2FJPD6edeh29bg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Loader.IIS.Interop": "1.0.0-beta4", + "Microsoft.AspNet.Loader.IIS": "1.0.0-beta4" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.AspNet.Loader.IIS.Interop": "1.0.0-beta4", + "Microsoft.AspNet.Loader.IIS": "1.0.0-beta4" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Server.IIS.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Server.IIS.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Server.IIS.nuspec" + ] + }, + "Microsoft.AspNet.Server.WebListener/1.0.0-beta4": { + "serviceable": true, + "sha": "7i7WcLxrwlrrATJKipf7TXQxLpndK2RvBVG/PpnLRBEKG5Vlm9L4eMNG2OHLmmcNH+IONKZrPwYMeBaxXfql/Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.FeatureModel": "1.0.0-beta4", + "Microsoft.AspNet.Http": "1.0.0-beta4", + "Microsoft.AspNet.Http.Interfaces": "1.0.0-beta4", + "Microsoft.AspNet.Hosting.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.ConfigurationModel": "1.0.0-beta4", + "Microsoft.Framework.Logging": "1.0.0-beta4", + "Microsoft.Net.Http.Server": "1.0.0-beta4", + "Microsoft.Net.WebSocketAbstractions": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Server.WebListener.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.Server.WebListener.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.Server.WebListener.1.0.0-beta4.nupkg", + "Microsoft.AspNet.Server.WebListener.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.Server.WebListener.nuspec", + "lib/dnx451/Microsoft.AspNet.Server.WebListener.dll", + "lib/dnx451/Microsoft.AspNet.Server.WebListener.xml", + "lib/dnxcore50/Microsoft.AspNet.Server.WebListener.dll", + "lib/dnxcore50/Microsoft.AspNet.Server.WebListener.xml" + ] + }, + "Microsoft.AspNet.StaticFiles/1.0.0-beta4": { + "serviceable": true, + "sha": "jWxWQB8uTGOyVddlxP0kloTYtaQqnzUg+kMgUcNir4l58FbSTymbVTczOqjuy3Kdt3xy9nh/+kKGWpkCc3xf8g==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Http.Extensions": "1.0.0-beta4", + "Microsoft.AspNet.Http.Interfaces": "1.0.0-beta4", + "Microsoft.AspNet.FileProviders.Interfaces": "1.0.0-beta4", + "Microsoft.AspNet.Hosting.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging": "1.0.0-beta4", + "Microsoft.Framework.WebEncoders": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.StaticFiles.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.StaticFiles.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.StaticFiles.1.0.0-beta4.nupkg", + "Microsoft.AspNet.StaticFiles.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.StaticFiles.nuspec", + "lib/dnx451/Microsoft.AspNet.StaticFiles.dll", + "lib/dnx451/Microsoft.AspNet.StaticFiles.xml", + "lib/dnxcore50/Microsoft.AspNet.StaticFiles.dll", + "lib/dnxcore50/Microsoft.AspNet.StaticFiles.xml" + ] + }, + "Microsoft.AspNet.WebSockets.Protocol/1.0.0-beta4": { + "serviceable": true, + "sha": "ugTW8cKNmiEtOnBxTrgLVr03DMDXXxipQ9ZF5m5vuVb8OytNqRRkhUYhwIfbsTY9h82kF4JYTVTPplwjBMovbA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.AspNet.WebSockets.Protocol.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.AspNet.WebSockets.Protocol.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.AspNet.WebSockets.Protocol.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.AspNet.WebSockets.Protocol.dll" + ] + } + }, + "files": [ + "Microsoft.AspNet.WebSockets.Protocol.1.0.0-beta4.nupkg", + "Microsoft.AspNet.WebSockets.Protocol.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.WebSockets.Protocol.nuspec", + "lib/dnxcore50/Microsoft.AspNet.WebSockets.Protocol.dll", + "lib/dnxcore50/Microsoft.AspNet.WebSockets.Protocol.xml", + "lib/net45/Microsoft.AspNet.WebSockets.Protocol.dll", + "lib/net45/Microsoft.AspNet.WebSockets.Protocol.xml" + ] + }, + "Microsoft.AspNet.WebSockets.Server/1.0.0-beta4": { + "serviceable": true, + "sha": "OoO6BtyLwV3tnoW53TtOClEPzm/ihVkcMyLPJrSGUrllHhm9whEd7zmmDYM8lu9rvsjPjRahQLHH1k1p6dO8/Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.AspNet.Http": "1.0.0-beta4", + "Microsoft.AspNet.WebSockets.Protocol": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.WebSockets.Server.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.WebSockets.Server.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.WebSockets.Server.1.0.0-beta4.nupkg", + "Microsoft.AspNet.WebSockets.Server.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.WebSockets.Server.nuspec", + "lib/dnx451/Microsoft.AspNet.WebSockets.Server.dll", + "lib/dnx451/Microsoft.AspNet.WebSockets.Server.xml", + "lib/dnxcore50/Microsoft.AspNet.WebSockets.Server.dll", + "lib/dnxcore50/Microsoft.AspNet.WebSockets.Server.xml" + ] + }, + "Microsoft.AspNet.WebUtilities/1.0.0-beta4": { + "serviceable": true, + "sha": "EZJruvBXvVN78gAuL1Ei8HSgBfS9HvU/CiE4MjicXwdzHwyv+HZAvReDmGeWa+UaIW8kmmM4LzNAE8uEBjeQXA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.WebEncoders.Core": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.AspNet.WebUtilities.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.AspNet.WebUtilities.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.AspNet.WebUtilities.1.0.0-beta4.nupkg", + "Microsoft.AspNet.WebUtilities.1.0.0-beta4.nupkg.sha512", + "Microsoft.AspNet.WebUtilities.nuspec", + "lib/dnx451/Microsoft.AspNet.WebUtilities.dll", + "lib/dnx451/Microsoft.AspNet.WebUtilities.xml", + "lib/dnxcore50/Microsoft.AspNet.WebUtilities.dll", + "lib/dnxcore50/Microsoft.AspNet.WebUtilities.xml" + ] + }, + "Microsoft.CodeAnalysis.Analyzers/1.0.0-rc2": { + "serviceable": false, + "sha": "/4Z5es8TXCEn5sfzWz2uhUITmikgCfMAhehMJPQcSD2FRp2ooLTczDq3p4KOl+bcnsvaAu0aKrmdRgOvkrcwhw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "System" + ], + "runtimeAssemblies": [], + "compileAssemblies": [] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "System" + ], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.CodeAnalysis.Analyzers.1.0.0-rc2.nupkg", + "Microsoft.CodeAnalysis.Analyzers.1.0.0-rc2.nupkg.sha512", + "Microsoft.CodeAnalysis.Analyzers.nuspec", + "ThirdPartyNotices.rtf", + "tools/install.ps1", + "tools/uninstall.ps1", + "tools/analyzers/C#/Microsoft.CodeAnalysis.Analyzers.dll", + "tools/analyzers/C#/Microsoft.CodeAnalysis.CSharp.Analyzers.dll", + "tools/analyzers/VB.NET/Microsoft.CodeAnalysis.Analyzers.dll", + "tools/analyzers/VB.NET/Microsoft.CodeAnalysis.VisualBasic.Analyzers.dll" + ] + }, + "Microsoft.CodeAnalysis.Common/1.0.0-rc2": { + "serviceable": false, + "sha": "7ALXqeJxiEMgnSST2qlWMThc5CIhJNFsUKYITIXXXj7gf8mF+ktEuKgUE7NWePzUgi0gq/2WmBX/4yWJuF1j6w==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Collections.Immutable": "[1.1.33-beta]", + "System.Reflection.Metadata": "[1.0.18-beta]", + "Microsoft.CodeAnalysis.Analyzers": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Collections.Immutable": "[1.1.33-beta]", + "System.Reflection.Metadata": "[1.0.18-beta]", + "Microsoft.CodeAnalysis.Analyzers": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ] + } + }, + "files": [ + "Microsoft.CodeAnalysis.Common.1.0.0-rc2.nupkg", + "Microsoft.CodeAnalysis.Common.1.0.0-rc2.nupkg.sha512", + "Microsoft.CodeAnalysis.Common.nuspec", + "ThirdPartyNotices.rtf", + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.Desktop.xml", + "lib/net45/Microsoft.CodeAnalysis.dll", + "lib/net45/Microsoft.CodeAnalysis.xml", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.dll", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.xml" + ] + }, + "Microsoft.CodeAnalysis.CSharp/1.0.0-rc2": { + "serviceable": false, + "sha": "wsj0BdWRY+fsUINMEQ+uanN0pWMAMj2z0UiJKjwoUo/Xbrk7PqGklzpOB7lvlESHjO8+Eaw71PQnml6j7m7rdQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ] + } + }, + "files": [ + "Microsoft.CodeAnalysis.CSharp.1.0.0-rc2.nupkg", + "Microsoft.CodeAnalysis.CSharp.1.0.0-rc2.nupkg.sha512", + "Microsoft.CodeAnalysis.CSharp.nuspec", + "ThirdPartyNotices.rtf", + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.xml", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.xml", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.CSharp.dll", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.CSharp.xml" + ] + }, + "Microsoft.Data.SQLite/1.0.0-beta1": { + "serviceable": false, + "sha": "Lgx+43A8cUn24jaehz0IuDNYVGc2EaSjp37xvbvh6ljSkyqrRDHIvuhX2HrHZnHg0k4LDydleKiCI9jwSUbStQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Data.Common": "1.0.0-beta1" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/aspnet50/Microsoft.Data.SQLite.dll" + ], + "compileAssemblies": [ + "lib/aspnet50/Microsoft.Data.SQLite.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Data.Common": "1.0.0-beta1" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net451/Microsoft.Data.SQLite.dll" + ], + "compileAssemblies": [ + "lib/net451/Microsoft.Data.SQLite.dll" + ] + } + }, + "files": [ + "Microsoft.Data.SQLite.1.0.0-beta1.nupkg", + "Microsoft.Data.SQLite.1.0.0-beta1.nupkg.sha512", + "Microsoft.Data.SQLite.nuspec", + "build/net451/Microsoft.Data.SQLite.targets", + "lib/aspnet50/Microsoft.Data.SQLite.dll", + "lib/aspnet50/Microsoft.Data.SQLite.xml", + "lib/aspnetcore50/Microsoft.Data.SQLite.dll", + "lib/aspnetcore50/Microsoft.Data.SQLite.xml", + "lib/net451/Microsoft.Data.SQLite.dll", + "lib/net451/Microsoft.Data.SQLite.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Data.SQLite.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Data.SQLite.xml", + "redist/x86/sqlite3.dll" + ] + }, + "Microsoft.Framework.Caching.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "46cDLfehLNidWL55zPvLOinR/G3Z/hPtr6memnVenrt2BNPWmqujeXQaMyfklsYblxzeMhoE1ZhYsNuQdvj8zg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Caching.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Caching.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.Caching.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.Caching.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.Caching.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Caching.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Caching.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Caching.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Caching.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Caching.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Caching.Interfaces.xml", + "lib/net45/Microsoft.Framework.Caching.Interfaces.dll", + "lib/net45/Microsoft.Framework.Caching.Interfaces.xml" + ] + }, + "Microsoft.Framework.Caching.Memory/1.0.0-beta4": { + "serviceable": true, + "sha": "fRruSHyvGTRaHNe6CmYRxIzcRdR/IEv3BkNpyk15IDxcJp3HrghwTa3hRjpOjd42oSOswaYzlrF/6XbARCH/6A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.OptionsModel": "1.0.0-beta4", + "Microsoft.Framework.Caching.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Caching.Memory.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Caching.Memory.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.OptionsModel": "1.0.0-beta4", + "Microsoft.Framework.Caching.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.Caching.Memory.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.Caching.Memory.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.Caching.Memory.1.0.0-beta4.nupkg", + "Microsoft.Framework.Caching.Memory.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Caching.Memory.nuspec", + "lib/dnx451/Microsoft.Framework.Caching.Memory.dll", + "lib/dnx451/Microsoft.Framework.Caching.Memory.xml", + "lib/dnxcore50/Microsoft.Framework.Caching.Memory.dll", + "lib/dnxcore50/Microsoft.Framework.Caching.Memory.xml", + "lib/net45/Microsoft.Framework.Caching.Memory.dll", + "lib/net45/Microsoft.Framework.Caching.Memory.xml" + ] + }, + "Microsoft.Framework.ConfigurationModel/1.0.0-beta4": { + "serviceable": true, + "sha": "VD5MhmQRhYVfxyDs1fyruPTj3pYwLMV5dXJkPUVg1KKbJ9qr/tEn3frJA1NN1jdeVBt1RrW5FXr+wWG9YoO9Yg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.ConfigurationModel.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.ConfigurationModel.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.ConfigurationModel.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.ConfigurationModel.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.ConfigurationModel.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.ConfigurationModel.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.ConfigurationModel.1.0.0-beta4.nupkg", + "Microsoft.Framework.ConfigurationModel.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.ConfigurationModel.nuspec", + "lib/dnx451/Microsoft.Framework.ConfigurationModel.dll", + "lib/dnx451/Microsoft.Framework.ConfigurationModel.xml", + "lib/dnxcore50/Microsoft.Framework.ConfigurationModel.dll", + "lib/dnxcore50/Microsoft.Framework.ConfigurationModel.xml", + "lib/net45/Microsoft.Framework.ConfigurationModel.dll", + "lib/net45/Microsoft.Framework.ConfigurationModel.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.ConfigurationModel.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.ConfigurationModel.xml" + ] + }, + "Microsoft.Framework.ConfigurationModel.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "lU9+gyEz+jSeR+QsZxZtDf0U2DS/pl3I8/m7YeKjHMnjqoxUKFbSOpzegll7bhq0Alw7/8gF2Byrcy+PlzRc/g==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.ConfigurationModel.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.ConfigurationModel.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.ConfigurationModel.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.ConfigurationModel.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.ConfigurationModel.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.ConfigurationModel.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.ConfigurationModel.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.ConfigurationModel.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.ConfigurationModel.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.ConfigurationModel.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.ConfigurationModel.Interfaces.xml", + "lib/net45/Microsoft.Framework.ConfigurationModel.Interfaces.dll", + "lib/net45/Microsoft.Framework.ConfigurationModel.Interfaces.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.ConfigurationModel.Interfaces.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.ConfigurationModel.Interfaces.xml" + ] + }, + "Microsoft.Framework.DependencyInjection/1.0.0-beta4": { + "serviceable": true, + "sha": "PVzGSHq2lgQE4/Bje+lL7UNcj/ADVimsuAA10ACtA3qcLk0DkhgrXJsSMRyFBAv2vqvDXFTE2cLKHcsckWbSQw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.ConfigurationModel": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.DependencyInjection.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.DependencyInjection.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.ConfigurationModel": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.DependencyInjection.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.DependencyInjection.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.DependencyInjection.1.0.0-beta4.nupkg", + "Microsoft.Framework.DependencyInjection.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.DependencyInjection.nuspec", + "lib/dnx451/Microsoft.Framework.DependencyInjection.dll", + "lib/dnx451/Microsoft.Framework.DependencyInjection.xml", + "lib/dnxcore50/Microsoft.Framework.DependencyInjection.dll", + "lib/dnxcore50/Microsoft.Framework.DependencyInjection.xml", + "lib/net45/Microsoft.Framework.DependencyInjection.dll", + "lib/net45/Microsoft.Framework.DependencyInjection.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.DependencyInjection.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.DependencyInjection.xml" + ] + }, + "Microsoft.Framework.DependencyInjection.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "qbBGymgVdlrJZhJFg+35JaA0Tp8DYeFrDwv1Q3Di9hRWLZ3rAE7bvsnP+fmuo0XGlZDVXfGjINvtryFPyoQ58g==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.DependencyInjection.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.DependencyInjection.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.DependencyInjection.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.DependencyInjection.Interfaces.xml", + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.DependencyInjection.Interfaces.xml" + ] + }, + "Microsoft.Framework.Logging/1.0.0-beta4": { + "serviceable": true, + "sha": "aFlG7h0WMJn+TgKIqoDkXh6LOquu7e6HKCOSrLvAaOp93qOWycz0kNQ0oGXVHYP6QebAjHgz9UffcqeCqeWN1Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Collections.Concurrent", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Collections.Concurrent", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.Logging.1.0.0-beta4.nupkg", + "Microsoft.Framework.Logging.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Logging.nuspec", + "lib/dnx451/Microsoft.Framework.Logging.dll", + "lib/dnx451/Microsoft.Framework.Logging.xml", + "lib/dnxcore50/Microsoft.Framework.Logging.dll", + "lib/dnxcore50/Microsoft.Framework.Logging.xml", + "lib/net45/Microsoft.Framework.Logging.dll", + "lib/net45/Microsoft.Framework.Logging.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.xml" + ] + }, + "Microsoft.Framework.Logging.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "OK8v8gpDYfH01Gy1tvT4mS1r6ZWMAz1HXo872v7pswishE6oyTQwC44BpYM+Obq8GW7E6Ai/Vj3wE/CuLUDJGA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.Logging.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Logging.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Logging.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Logging.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Logging.Interfaces.xml", + "lib/net45/Microsoft.Framework.Logging.Interfaces.dll", + "lib/net45/Microsoft.Framework.Logging.Interfaces.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.Interfaces.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.Interfaces.xml" + ] + }, + "Microsoft.Framework.OptionsModel/1.0.0-beta4": { + "serviceable": true, + "sha": "xjr084yTcmBLI8F3gb+hIEhf+ttanmbCWl54GkMhSH/dU1bqbR2Ts6Ks51kwUaACfNEDNY9zRwblT4of51lA6w==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.ConfigurationModel": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.OptionsModel.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.OptionsModel.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.ConfigurationModel": "1.0.0-beta4", + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.OptionsModel.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.OptionsModel.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.OptionsModel.1.0.0-beta4.nupkg", + "Microsoft.Framework.OptionsModel.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.OptionsModel.nuspec", + "lib/dnx451/Microsoft.Framework.OptionsModel.dll", + "lib/dnx451/Microsoft.Framework.OptionsModel.xml", + "lib/dnxcore50/Microsoft.Framework.OptionsModel.dll", + "lib/dnxcore50/Microsoft.Framework.OptionsModel.xml", + "lib/net45/Microsoft.Framework.OptionsModel.dll", + "lib/net45/Microsoft.Framework.OptionsModel.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.OptionsModel.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.OptionsModel.xml" + ] + }, + "Microsoft.Framework.Runtime.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "RrZdqvUm8QbgxnZQuafYGo6NezoKx7VqAfAtHVzoKBm3GSV8xlPh90u1fsGhNCv37xJNk5PuRCa4Mq27ko7pLw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.Interfaces.xml" + ] + }, + "Microsoft.Framework.Runtime.Roslyn.Common/1.0.0-beta4": { + "serviceable": true, + "sha": "Zls0mzoTJEt7PoM/MB2gDaVs6bdYPrhr4Hp+pp68gy7rEIcF7kubCjXiCz7uf8WCMie48qUpT/8wUSUdOsTAww==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.CodeAnalysis.CSharp": "1.0.0-rc2", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Runtime", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Common.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Common.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.Roslyn.Common.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.Roslyn.Common.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.Roslyn.Common.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Common.dll", + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Common.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.Roslyn.Common.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.Roslyn.Common.xml" + ] + }, + "Microsoft.Framework.Runtime.Roslyn.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "iZNGlqBAWIT2zWI1Z4AWpx9loBvplEgyHp3lRfBJX30npClf9d3fMRRlO1K9wx9ho0tMLBU8CSXpUc/21Knm6Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Microsoft.CodeAnalysis.CSharp": "1.0.0-rc2" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.Roslyn.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.Roslyn.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.Roslyn.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.Roslyn.Interfaces.xml" + ] + }, + "Microsoft.Framework.WebEncoders/1.0.0-beta4": { + "serviceable": true, + "sha": "DCRv9DtaZB46YXhq4hRHCVsnGN9ESZgTQTaHNJNy+g04nFe2YpB65CPBavtmtF9xNR31jQoVamBJtduNrc9Jhw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.OptionsModel": "1.0.0-beta4", + "Microsoft.Framework.WebEncoders.Core": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.WebEncoders.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.WebEncoders.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.OptionsModel": "1.0.0-beta4", + "Microsoft.Framework.WebEncoders.Core": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.WebEncoders.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.WebEncoders.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.WebEncoders.1.0.0-beta4.nupkg", + "Microsoft.Framework.WebEncoders.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.WebEncoders.nuspec", + "lib/dnx451/Microsoft.Framework.WebEncoders.dll", + "lib/dnx451/Microsoft.Framework.WebEncoders.xml", + "lib/dnxcore50/Microsoft.Framework.WebEncoders.dll", + "lib/dnxcore50/Microsoft.Framework.WebEncoders.xml", + "lib/net45/Microsoft.Framework.WebEncoders.dll", + "lib/net45/Microsoft.Framework.WebEncoders.xml" + ] + }, + "Microsoft.Framework.WebEncoders.Core/1.0.0-beta4": { + "serviceable": true, + "sha": "pJqTs8EUFMcQmkEVYKZiN0hDk5IpHHVasesEa/hgD99a+uENKc7oSOnKbJ+PypatsBTkj/IzuxybJUCKlBLiew==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.WebEncoders.Core.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.WebEncoders.Core.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.WebEncoders.Core.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.WebEncoders.Core.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.WebEncoders.Core.1.0.0-beta4.nupkg", + "Microsoft.Framework.WebEncoders.Core.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.WebEncoders.Core.nuspec", + "lib/dnx451/Microsoft.Framework.WebEncoders.Core.dll", + "lib/dnx451/Microsoft.Framework.WebEncoders.Core.xml", + "lib/dnxcore50/Microsoft.Framework.WebEncoders.Core.dll", + "lib/dnxcore50/Microsoft.Framework.WebEncoders.Core.xml", + "lib/net45/Microsoft.Framework.WebEncoders.Core.dll", + "lib/net45/Microsoft.Framework.WebEncoders.Core.xml" + ] + }, + "Microsoft.Net.Http.Headers/1.0.0-beta4": { + "serviceable": true, + "sha": "dhN5q9MbljcAqWTv1GIpeAzB8HB7l9YTrN+zl/KXUj8OP4cTd2LZ7qeZ0tqDHkxOD+GyZwi/SnbqztKSjTnVOg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Net.Http.Headers.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Net.Http.Headers.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Net.Http.Headers.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Net.Http.Headers.dll" + ] + } + }, + "files": [ + "Microsoft.Net.Http.Headers.1.0.0-beta4.nupkg", + "Microsoft.Net.Http.Headers.1.0.0-beta4.nupkg.sha512", + "Microsoft.Net.Http.Headers.nuspec", + "lib/dnx451/Microsoft.Net.Http.Headers.dll", + "lib/dnx451/Microsoft.Net.Http.Headers.xml", + "lib/dnxcore50/Microsoft.Net.Http.Headers.dll", + "lib/dnxcore50/Microsoft.Net.Http.Headers.xml", + "lib/net45/Microsoft.Net.Http.Headers.dll", + "lib/net45/Microsoft.Net.Http.Headers.xml" + ] + }, + "Microsoft.Net.Http.Server/1.0.0-beta4": { + "serviceable": true, + "sha": "WFAzpWGbe0JHu6pSZdbxprui3XubKJZzrs+zUKMCc77I1DCAuHLY5ZTcZBy5u0mMC1S8tDnED3o5J8gXM3Y1Mg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Logging": "1.0.0-beta4", + "Microsoft.Net.WebSockets": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Net.Http.Server.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Net.Http.Server.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.Logging": "1.0.0-beta4", + "Microsoft.Net.WebSockets": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Net.Http.Server.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Net.Http.Server.dll" + ] + } + }, + "files": [ + "Microsoft.Net.Http.Server.1.0.0-beta4.nupkg", + "Microsoft.Net.Http.Server.1.0.0-beta4.nupkg.sha512", + "Microsoft.Net.Http.Server.nuspec", + "lib/dnx451/Microsoft.Net.Http.Server.dll", + "lib/dnx451/Microsoft.Net.Http.Server.xml", + "lib/dnxcore50/Microsoft.Net.Http.Server.dll", + "lib/dnxcore50/Microsoft.Net.Http.Server.xml", + "lib/net45/Microsoft.Net.Http.Server.dll", + "lib/net45/Microsoft.Net.Http.Server.xml" + ] + }, + "Microsoft.Net.WebSocketAbstractions/1.0.0-beta4": { + "serviceable": true, + "sha": "NmW6dLxY5zu7Dyb12PttLWje8wSjxrlBeUovtchbJfZe/OTRw5FFe/Z6yytLuWT3UcA+siGVv2t/br2xXkDqYg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Net.WebSocketAbstractions.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Net.WebSocketAbstractions.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Net.WebSocketAbstractions.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Net.WebSocketAbstractions.dll" + ] + } + }, + "files": [ + "Microsoft.Net.WebSocketAbstractions.1.0.0-beta4.nupkg", + "Microsoft.Net.WebSocketAbstractions.1.0.0-beta4.nupkg.sha512", + "Microsoft.Net.WebSocketAbstractions.nuspec", + "lib/dnxcore50/Microsoft.Net.WebSocketAbstractions.dll", + "lib/dnxcore50/Microsoft.Net.WebSocketAbstractions.xml", + "lib/net45/Microsoft.Net.WebSocketAbstractions.dll", + "lib/net45/Microsoft.Net.WebSocketAbstractions.xml" + ] + }, + "Microsoft.Net.WebSockets/1.0.0-beta4": { + "serviceable": true, + "sha": "//ixPg4sfxzF6O+t6cwciAcAV/fowB0HY+DrvQvc1J79MeGbwWATaUsPjdnAzqhfbrXPImfN1s1hQNOa02s79A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Net.WebSocketAbstractions": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Net.WebSockets.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Net.WebSockets.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Net.WebSocketAbstractions": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Net.WebSockets.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Net.WebSockets.dll" + ] + } + }, + "files": [ + "Microsoft.Net.WebSockets.1.0.0-beta4.nupkg", + "Microsoft.Net.WebSockets.1.0.0-beta4.nupkg.sha512", + "Microsoft.Net.WebSockets.nuspec", + "lib/dnxcore50/Microsoft.Net.WebSockets.dll", + "lib/dnxcore50/Microsoft.Net.WebSockets.xml", + "lib/net45/Microsoft.Net.WebSockets.dll", + "lib/net45/Microsoft.Net.WebSockets.xml" + ] + }, + "MongoDB.Bson/2.0.1": { + "serviceable": false, + "sha": "dr8KYpTt5VIqGWQ5Bzud2BA/lH2csIfL5WLrfc90UzSWGF378ugvEo5tx4J0eZohvHzsRRiMS2YTmJOTRN+iYg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ], + "compileAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ], + "compileAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ] + } + }, + "files": [ + "License.rtf", + "MongoDB.Bson.2.0.1.nupkg", + "MongoDB.Bson.2.0.1.nupkg.sha512", + "MongoDB.Bson.nuspec", + "lib/net45/MongoDB.Bson.dll", + "lib/net45/MongoDB.Bson.XML" + ] + }, + "Newtonsoft.Json/7.0.1": { + "serviceable": false, + "sha": "q3V4KLetMLnt1gpAVWgtXnHjKs0UG/RalBc29u2ZKxd5t5Ze4JBL5WiiYIklJyK/5CRiIiNwigVQUo0FgbsuWA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ], + "compileAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ], + "compileAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ] + } + }, + "files": [ + "Newtonsoft.Json.7.0.1.nupkg", + "Newtonsoft.Json.7.0.1.nupkg.sha512", + "Newtonsoft.Json.nuspec", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml", + "lib/portable-net45+wp80+win8+wpa81+dnxcore50/Newtonsoft.Json.dll", + "lib/portable-net45+wp80+win8+wpa81+dnxcore50/Newtonsoft.Json.xml", + "tools/install.ps1" + ] + }, + "protobuf-net/2.0.0.668": { + "serviceable": false, + "sha": "Lgj+Kf1+RV0utKxX9u1WEcymPGrbWrj/AwFmFADFLLa/LLdc1ji2MIGcecFRAGUu6UO8BRbdjZAIYWvLlN1B/A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + } + }, + "files": [ + "protobuf-net.2.0.0.668.nupkg", + "protobuf-net.2.0.0.668.nupkg.sha512", + "protobuf-net.nuspec", + "lib/net20/protobuf-net.dll", + "lib/net20/protobuf-net.pdb", + "lib/net20/protobuf-net.xml", + "lib/net20-cf/protobuf-net.dll", + "lib/net20-cf/protobuf-net.pdb", + "lib/net20-cf/protobuf-net.xml", + "lib/net30/protobuf-net.dll", + "lib/net30/protobuf-net.pdb", + "lib/net30/protobuf-net.xml", + "lib/net35/protobuf-net.dll", + "lib/net35/protobuf-net.pdb", + "lib/net35/protobuf-net.xml", + "lib/net35-cf/protobuf-net.dll", + "lib/net35-cf/protobuf-net.pdb", + "lib/net35-cf/protobuf-net.xml", + "lib/net40/protobuf-net.dll", + "lib/net40/protobuf-net.pdb", + "lib/net40/protobuf-net.xml", + "lib/net40-cf/protobuf-net.dll", + "lib/net40-cf/protobuf-net.pdb", + "lib/net40-cf/protobuf-net.xml", + "lib/netcore45/protobuf-net.dll", + "lib/netcore45/protobuf-net.pdb", + "lib/netcore45/protobuf-net.pri", + "lib/netcore45/protobuf-net.XML", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.dll", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.pdb", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.xml", + "lib/sl3-wp/protobuf-net.dll", + "lib/sl3-wp/protobuf-net.pdb", + "lib/sl3-wp/protobuf-net.xml", + "lib/sl4/protobuf-net.dll", + "lib/sl4/protobuf-net.pdb", + "lib/sl4/protobuf-net.xml", + "lib/sl4-windowsphone71/protobuf-net.dll", + "lib/sl4-windowsphone71/protobuf-net.pdb", + "lib/sl4-windowsphone71/protobuf-net.xml", + "lib/windowsphone8/protobuf-net.dll", + "lib/windowsphone8/protobuf-net.pdb", + "lib/windowsphone8/protobuf-net.xml" + ] + }, + "System.Collections.Immutable/1.1.33-beta": { + "serviceable": true, + "sha": "Qnv6M/BRf0w1xNoD5tH7V+jK0kdO+OZymwQS5Lj6FALt3AZMGVeJs+lHXi1PsKFll67UtGY+I7r8WDhRzspXCA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ] + } + }, + "files": [ + "License-Stable.rtf", + "System.Collections.Immutable.1.1.33-beta.nupkg", + "System.Collections.Immutable.1.1.33-beta.nupkg.sha512", + "System.Collections.Immutable.nuspec", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.xml" + ] + }, + "System.Data.Common/1.0.0-beta1": { + "serviceable": false, + "sha": "cuIEw5cNVZZBYz2STud08Q5VBP+GKvDJPPP3AoApL72tlYhl9uHoW54Q3QTi5tElsXFCnFw868atiHqrGS7GIw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "System.Data", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/aspnet50/System.Data.Common.dll" + ], + "compileAssemblies": [ + "lib/aspnet50/System.Data.Common.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "System.Data", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net451/System.Data.Common.dll" + ], + "compileAssemblies": [ + "lib/net451/System.Data.Common.dll" + ] + } + }, + "files": [ + "System.Data.Common.1.0.0-beta1.nupkg", + "System.Data.Common.1.0.0-beta1.nupkg.sha512", + "System.Data.Common.nuspec", + "lib/aspnet50/System.Data.Common.dll", + "lib/aspnet50/System.Data.Common.xml", + "lib/aspnetcore50/System.Data.Common.dll", + "lib/aspnetcore50/System.Data.Common.xml", + "lib/net451/System.Data.Common.dll", + "lib/net451/System.Data.Common.xml", + "lib/portable-net451+win81+wpa81/System.Data.Common.dll", + "lib/portable-net451+win81+wpa81/System.Data.Common.xml" + ] + }, + "System.Reflection.Metadata/1.0.18-beta": { + "serviceable": true, + "sha": "4PtC2U6seQthZMvXvGTxXZUqlF0oV9jzYNTkG0Yo/D6cLO5AH3lrxh2djGyKsDYnAZjBCoyA/z3vHRCeaBEp4w==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Collections.Immutable": "1.1.33-beta" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Collections.Immutable": "1.1.33-beta" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ] + } + }, + "files": [ + "License-Stable.rtf", + "System.Reflection.Metadata.1.0.18-beta.nupkg", + "System.Reflection.Metadata.1.0.18-beta.nupkg.sha512", + "System.Reflection.Metadata.nuspec", + "lib/portable-net45+win8/System.Reflection.Metadata.dll", + "lib/portable-net45+win8/System.Reflection.Metadata.xml" + ] + }, + "System.Runtime/4.0.20-beta-22816": { + "serviceable": false, + "sha": "sDSJEmM6Q5O7Nn9XxHTrsEJ4bv4hsBdeTWjuvyzd9/u9ujl9AWa3q1XFLrdPZetILPOC1P0+1LOCq4kZcsKF5Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.ComponentModel.Composition", + "System.Core" + ], + "runtimeAssemblies": [ + "lib/net45/System.Runtime.dll" + ], + "compileAssemblies": [ + "lib/net45/System.Runtime.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.ComponentModel.Composition", + "System.Core" + ], + "runtimeAssemblies": [ + "lib/net45/System.Runtime.dll" + ], + "compileAssemblies": [ + "lib/net45/System.Runtime.dll" + ] + } + }, + "files": [ + "License.rtf", + "System.Runtime.4.0.20-beta-22816.nupkg", + "System.Runtime.4.0.20-beta-22816.nupkg.sha512", + "System.Runtime.nuspec", + "lib/aspnetcore50/System.Runtime.dll", + "lib/contract/System.Runtime.dll", + "lib/net45/System.Runtime.dll", + "lib/portable-wpa81+wp80+win80+net45+aspnetcore50/System.Runtime.dll" + ] + }, + "System.Text.Encoding/4.0.10-beta-22816": { + "serviceable": false, + "sha": "QDKTAvat7aDGMWnVkGm6tJvvmc2zSTa/p8M4/OEBBkZKNx4SGkeGEjFUhl7b6AXZ220m4dACygkiAVoB/LqMHw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Runtime": "4.0.20-beta-22816" + }, + "frameworkAssemblies": [ + "mscorlib" + ], + "runtimeAssemblies": [ + "lib/net45/System.Text.Encoding.dll" + ], + "compileAssemblies": [ + "lib/net45/System.Text.Encoding.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Runtime": "4.0.20-beta-22816" + }, + "frameworkAssemblies": [ + "mscorlib" + ], + "runtimeAssemblies": [ + "lib/net45/System.Text.Encoding.dll" + ], + "compileAssemblies": [ + "lib/net45/System.Text.Encoding.dll" + ] + } + }, + "files": [ + "License.rtf", + "System.Text.Encoding.4.0.10-beta-22816.nupkg", + "System.Text.Encoding.4.0.10-beta-22816.nupkg.sha512", + "System.Text.Encoding.nuspec", + "lib/aspnetcore50/System.Text.Encoding.dll", + "lib/contract/System.Text.Encoding.dll", + "lib/net45/System.Text.Encoding.dll", + "lib/portable-wpa81+wp80+win80+net45+aspnetcore50/System.Text.Encoding.dll" + ] + } + } +} \ No newline at end of file diff --git a/test/OpenChain.Core.Tests/BinaryDataTests.cs b/test/OpenChain.Core.Tests/BinaryDataTests.cs new file mode 100644 index 0000000..9064305 --- /dev/null +++ b/test/OpenChain.Core.Tests/BinaryDataTests.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using Xunit; + +namespace OpenChain.Core.Tests +{ + public class BinaryDataTests + { + [Fact] + public void Constructor_Success() + { + byte[] sourceArray = new byte[] { 18, 178, 255, 70, 0 }; + BinaryData result = new BinaryData(sourceArray); + sourceArray[4] = 1; + + Assert.NotSame(sourceArray, result.Value); + Assert.Equal(new byte[] { 18, 178, 255, 70, 0 }, result.Value); + } + + [Fact] + public void Parse_Success() + { + BinaryData result = BinaryData.Parse("12b2FE460035789ACd"); + + Assert.Equal(new byte[] { 18, 178, 254, 70, 0, 53, 120, 154, 205 }, result.Value); + } + + [Fact] + public void Parse_InvalidLength() + { + Assert.Throws( + () => BinaryData.Parse("12b2ff460")); + } + + [Fact] + public void Parse_InvalidCharacter() + { + Assert.Throws( + () => BinaryData.Parse("1G")); + + Assert.Throws( + () => BinaryData.Parse("1/")); + } + + [Fact] + public void Parse_Null() + { + Assert.Throws( + () => BinaryData.Parse(null)); + } + + [Fact] + public void ToArray_Success() + { + byte[] sourceArray = new byte[] { 18, 178, 255, 70, 0 }; + BinaryData result = new BinaryData(sourceArray); + + Assert.Equal(new byte[] { 18, 178, 255, 70, 0 }, result.ToArray()); + } + + [Fact] + public void ToString_Success() + { + string result = new BinaryData(new byte[] { 18, 178, 255, 70, 0 }).ToString(); + + Assert.Equal("12b2ff4600", result); + } + } +} diff --git a/test/OpenChain.Core.Tests/OpenChain.Core.Tests.xproj b/test/OpenChain.Core.Tests/OpenChain.Core.Tests.xproj new file mode 100644 index 0000000..689e116 --- /dev/null +++ b/test/OpenChain.Core.Tests/OpenChain.Core.Tests.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + 38a38def-1b86-495e-8674-2aa135ce016a + OpenChain.Core.Tests + ..\artifacts\obj\$(MSBuildProjectName) + ..\artifacts\bin\$(MSBuildProjectName)\ + + + 2.0 + + + + + + \ No newline at end of file diff --git a/test/OpenChain.Core.Tests/project.json b/test/OpenChain.Core.Tests/project.json new file mode 100644 index 0000000..9fe881a --- /dev/null +++ b/test/OpenChain.Core.Tests/project.json @@ -0,0 +1,30 @@ +{ + "version": "1.0.0-*", + "description": "", + "authors": [ "" ], + "tags": [ "" ], + "projectUrl": "", + "licenseUrl": "", + + "dependencies": { + "OpenChain.Core": "1.0.0-*", + "xunit": "2.1.0-beta2-*", + "xunit.runner.dnx": "2.1.0-beta2-*" + }, + + "commands": { + "test": "xunit.runner.dnx" + }, + + "frameworks": { + "dnx451": { } + //"dnxcore50": { + // "dependencies": { + // "System.Collections": "4.0.10-beta-22816", + // "System.Linq": "4.0.0-beta-22816", + // "System.Threading": "4.0.10-beta-22816", + // "Microsoft.CSharp": "4.0.0-beta-22816" + // } + //} + } +} diff --git a/test/OpenChain.Core.Tests/project.lock.json b/test/OpenChain.Core.Tests/project.lock.json new file mode 100644 index 0000000..8c63292 --- /dev/null +++ b/test/OpenChain.Core.Tests/project.lock.json @@ -0,0 +1,1195 @@ +{ + "locked": false, + "version": -9998, + "projectFileDependencyGroups": { + "": [ + "OpenChain.Core >= 1.0.0-*", + "xunit >= 2.1.0-beta2-*", + "xunit.runner.dnx >= 2.1.0-beta2-*" + ], + "DNX,Version=v4.5.1": [] + }, + "libraries": { + "Microsoft.CodeAnalysis.Analyzers/1.0.0-rc2": { + "serviceable": false, + "sha": "/4Z5es8TXCEn5sfzWz2uhUITmikgCfMAhehMJPQcSD2FRp2ooLTczDq3p4KOl+bcnsvaAu0aKrmdRgOvkrcwhw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "System" + ], + "runtimeAssemblies": [], + "compileAssemblies": [] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "System" + ], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.CodeAnalysis.Analyzers.1.0.0-rc2.nupkg", + "Microsoft.CodeAnalysis.Analyzers.1.0.0-rc2.nupkg.sha512", + "Microsoft.CodeAnalysis.Analyzers.nuspec", + "ThirdPartyNotices.rtf", + "tools/install.ps1", + "tools/uninstall.ps1", + "tools/analyzers/C#/Microsoft.CodeAnalysis.Analyzers.dll", + "tools/analyzers/C#/Microsoft.CodeAnalysis.CSharp.Analyzers.dll", + "tools/analyzers/VB.NET/Microsoft.CodeAnalysis.Analyzers.dll", + "tools/analyzers/VB.NET/Microsoft.CodeAnalysis.VisualBasic.Analyzers.dll" + ] + }, + "Microsoft.CodeAnalysis.Common/1.0.0-rc2": { + "serviceable": false, + "sha": "7ALXqeJxiEMgnSST2qlWMThc5CIhJNFsUKYITIXXXj7gf8mF+ktEuKgUE7NWePzUgi0gq/2WmBX/4yWJuF1j6w==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Collections.Immutable": "[1.1.33-beta]", + "System.Reflection.Metadata": "[1.0.18-beta]", + "Microsoft.CodeAnalysis.Analyzers": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Collections.Immutable": "[1.1.33-beta]", + "System.Reflection.Metadata": "[1.0.18-beta]", + "Microsoft.CodeAnalysis.Analyzers": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ] + } + }, + "files": [ + "Microsoft.CodeAnalysis.Common.1.0.0-rc2.nupkg", + "Microsoft.CodeAnalysis.Common.1.0.0-rc2.nupkg.sha512", + "Microsoft.CodeAnalysis.Common.nuspec", + "ThirdPartyNotices.rtf", + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.Desktop.xml", + "lib/net45/Microsoft.CodeAnalysis.dll", + "lib/net45/Microsoft.CodeAnalysis.xml", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.dll", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.xml" + ] + }, + "Microsoft.CodeAnalysis.CSharp/1.0.0-rc2": { + "serviceable": false, + "sha": "wsj0BdWRY+fsUINMEQ+uanN0pWMAMj2z0UiJKjwoUo/Xbrk7PqGklzpOB7lvlESHjO8+Eaw71PQnml6j7m7rdQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ] + } + }, + "files": [ + "Microsoft.CodeAnalysis.CSharp.1.0.0-rc2.nupkg", + "Microsoft.CodeAnalysis.CSharp.1.0.0-rc2.nupkg.sha512", + "Microsoft.CodeAnalysis.CSharp.nuspec", + "ThirdPartyNotices.rtf", + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.xml", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.xml", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.CSharp.dll", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.CSharp.xml" + ] + }, + "Microsoft.Framework.ApplicationHost/1.0.0-beta4": { + "serviceable": false, + "sha": "U7frhgsqolI+AMUrX44WNgV7Xyoxj8UtttE21pkD5Wfeubo1mZyhtJUvcMN4zxAPCjFqdOfKizWfcEI+mZ0Rtg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.ApplicationHost.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.ApplicationHost.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.ApplicationHost.1.0.0-beta4.nupkg", + "Microsoft.Framework.ApplicationHost.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.ApplicationHost.nuspec", + "lib/dnx451/Microsoft.Framework.ApplicationHost.dll", + "lib/dnx451/Microsoft.Framework.ApplicationHost.xml", + "lib/dnxcore50/Microsoft.Framework.ApplicationHost.dll", + "lib/dnxcore50/Microsoft.Framework.ApplicationHost.xml" + ] + }, + "Microsoft.Framework.CommandLineUtils/1.0.0-beta4": { + "serviceable": false, + "sha": "sWFw8wo77BRWAzoS50mgDUzBVXkRAZySYSaIFfpk3W5oJYmjcFt0SHpGJoVbIO3ZcKMORYvrxgnwNXx1p0ZCxQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.CommandLineUtils.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.CommandLineUtils.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.CommandLineUtils.1.0.0-beta4.nupkg", + "Microsoft.Framework.CommandLineUtils.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.CommandLineUtils.nuspec", + "lib/dnx451/Microsoft.Framework.CommandLineUtils.dll", + "lib/dnx451/Microsoft.Framework.CommandLineUtils.xml", + "lib/dnxcore50/Microsoft.Framework.CommandLineUtils.dll", + "lib/dnxcore50/Microsoft.Framework.CommandLineUtils.xml", + "shared/AnsiConsole.cs", + "shared/CommandArgument.cs", + "shared/CommandLineApplication.cs", + "shared/CommandOption.cs", + "shared/CommandOptionType.cs" + ] + }, + "Microsoft.Framework.DependencyInjection.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "qbBGymgVdlrJZhJFg+35JaA0Tp8DYeFrDwv1Q3Di9hRWLZ3rAE7bvsnP+fmuo0XGlZDVXfGjINvtryFPyoQ58g==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.DependencyInjection.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.DependencyInjection.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.DependencyInjection.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.DependencyInjection.Interfaces.xml", + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.DependencyInjection.Interfaces.xml" + ] + }, + "Microsoft.Framework.Logging/1.0.0-beta4": { + "serviceable": true, + "sha": "aFlG7h0WMJn+TgKIqoDkXh6LOquu7e6HKCOSrLvAaOp93qOWycz0kNQ0oGXVHYP6QebAjHgz9UffcqeCqeWN1Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Collections.Concurrent", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Collections.Concurrent", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.Logging.1.0.0-beta4.nupkg", + "Microsoft.Framework.Logging.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Logging.nuspec", + "lib/dnx451/Microsoft.Framework.Logging.dll", + "lib/dnx451/Microsoft.Framework.Logging.xml", + "lib/dnxcore50/Microsoft.Framework.Logging.dll", + "lib/dnxcore50/Microsoft.Framework.Logging.xml", + "lib/net45/Microsoft.Framework.Logging.dll", + "lib/net45/Microsoft.Framework.Logging.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.xml" + ] + }, + "Microsoft.Framework.Logging.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "OK8v8gpDYfH01Gy1tvT4mS1r6ZWMAz1HXo872v7pswishE6oyTQwC44BpYM+Obq8GW7E6Ai/Vj3wE/CuLUDJGA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.Logging.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Logging.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Logging.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Logging.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Logging.Interfaces.xml", + "lib/net45/Microsoft.Framework.Logging.Interfaces.dll", + "lib/net45/Microsoft.Framework.Logging.Interfaces.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.Interfaces.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.Interfaces.xml" + ] + }, + "Microsoft.Framework.Runtime/1.0.0-beta4": { + "serviceable": true, + "sha": "R4Ob2q5tUb6ocw1itBO84HL8gXZMu52mi8jfxwtXoJU42gHt3ouBTEHX1WCzqcgLNGrIh89mjFV8iFTNShKXdA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Reflection.Metadata": "1.0.18-beta", + "Microsoft.CodeAnalysis.CSharp": "1.0.0-rc2", + "Microsoft.Framework.Runtime.Roslyn.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Loader": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Newtonsoft.Json": "6.0.6" + }, + "frameworkAssemblies": [ + "System.Collections", + "System.Text.Encoding", + "System.Threading.Tasks", + "System.IO", + "System.IO.Compression", + "System.IO.Compression.FileSystem", + "System.Runtime", + "System.Xml", + "System.Xml.Linq", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.dll", + "lib/dnx451/Microsoft.Framework.Runtime.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.xml" + ] + }, + "Microsoft.Framework.Runtime.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "RrZdqvUm8QbgxnZQuafYGo6NezoKx7VqAfAtHVzoKBm3GSV8xlPh90u1fsGhNCv37xJNk5PuRCa4Mq27ko7pLw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.Interfaces.xml" + ] + }, + "Microsoft.Framework.Runtime.Loader/1.0.0-beta4": { + "serviceable": true, + "sha": "XpLguvjD4bfhE2fu1SWaOXjUkVcKTRW8x1mZjPpxns250pcTg1v/sG70fmZKtoiaXHYZFzTai2SRtqfBB20hOA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Loader.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Loader.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.Loader.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.Loader.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.Loader.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.Loader.dll", + "lib/dnx451/Microsoft.Framework.Runtime.Loader.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.Loader.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.Loader.xml" + ] + }, + "Microsoft.Framework.Runtime.Roslyn.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "iZNGlqBAWIT2zWI1Z4AWpx9loBvplEgyHp3lRfBJX30npClf9d3fMRRlO1K9wx9ho0tMLBU8CSXpUc/21Knm6Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Microsoft.CodeAnalysis.CSharp": "1.0.0-rc2" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.Roslyn.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.Roslyn.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.Roslyn.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.Roslyn.Interfaces.xml" + ] + }, + "Microsoft.Framework.TestAdapter/1.0.0-beta4": { + "serviceable": false, + "sha": "s4vPz/frohp6tyjTY9cTOHqZLotEdiV5GScHqdpTxFc9cWG3coyf03WYUQx6Kia5o7CWRiAYURqF5pr+9gTD7A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.TestAdapter.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.TestAdapter.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.TestAdapter.1.0.0-beta4.nupkg", + "Microsoft.Framework.TestAdapter.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.TestAdapter.nuspec", + "lib/dnx451/Microsoft.Framework.TestAdapter.dll", + "lib/dnx451/Microsoft.Framework.TestAdapter.xml", + "lib/dnxcore50/Microsoft.Framework.TestAdapter.dll", + "lib/dnxcore50/Microsoft.Framework.TestAdapter.xml" + ] + }, + "Microsoft.Framework.TestHost/1.0.0-beta4": { + "serviceable": false, + "sha": "At1dKPJGTP3P6b9wNoyT4HkwpiJjUgBE9khzltAMY5U2va3csdPrCZPnU/jb4LA7RWGMkt34s7leB0w/DYovAQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.TestAdapter": "1.0.0-beta4", + "Microsoft.Framework.ApplicationHost": "1.0.0-beta4", + "Microsoft.Framework.CommandLineUtils": "1.0.0-beta4", + "Microsoft.Framework.Logging": "1.0.0-beta4", + "Microsoft.Framework.Runtime": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Newtonsoft.Json": "6.0.6" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.TestHost.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.TestHost.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.TestHost.1.0.0-beta4.nupkg", + "Microsoft.Framework.TestHost.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.TestHost.nuspec", + "app/project.json", + "lib/dnx451/Microsoft.Framework.TestHost.dll", + "lib/dnx451/Microsoft.Framework.TestHost.xml", + "lib/dnxcore50/Microsoft.Framework.TestHost.dll", + "lib/dnxcore50/Microsoft.Framework.TestHost.xml" + ] + }, + "Newtonsoft.Json/6.0.6": { + "serviceable": false, + "sha": "w26uZNyCG5VeoKiEOJ4+9/o8koSofLKwHl7WLreIcp0U6r57L7WiRXmjp8MTKFw6dYNZ9AE0lw69WYbIhUsU9Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ], + "compileAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ], + "compileAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ] + } + }, + "files": [ + "Newtonsoft.Json.6.0.6.nupkg", + "Newtonsoft.Json.6.0.6.nupkg.sha512", + "Newtonsoft.Json.nuspec", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/netcore45/Newtonsoft.Json.dll", + "lib/netcore45/Newtonsoft.Json.xml", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml", + "lib/portable-net45+wp80+win8+wpa81+aspnetcore50/Newtonsoft.Json.dll", + "lib/portable-net45+wp80+win8+wpa81+aspnetcore50/Newtonsoft.Json.xml", + "tools/install.ps1" + ] + }, + "protobuf-net/2.0.0.668": { + "serviceable": false, + "sha": "Lgj+Kf1+RV0utKxX9u1WEcymPGrbWrj/AwFmFADFLLa/LLdc1ji2MIGcecFRAGUu6UO8BRbdjZAIYWvLlN1B/A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + } + }, + "files": [ + "protobuf-net.2.0.0.668.nupkg", + "protobuf-net.2.0.0.668.nupkg.sha512", + "protobuf-net.nuspec", + "lib/net20/protobuf-net.dll", + "lib/net20/protobuf-net.pdb", + "lib/net20/protobuf-net.xml", + "lib/net20-cf/protobuf-net.dll", + "lib/net20-cf/protobuf-net.pdb", + "lib/net20-cf/protobuf-net.xml", + "lib/net30/protobuf-net.dll", + "lib/net30/protobuf-net.pdb", + "lib/net30/protobuf-net.xml", + "lib/net35/protobuf-net.dll", + "lib/net35/protobuf-net.pdb", + "lib/net35/protobuf-net.xml", + "lib/net35-cf/protobuf-net.dll", + "lib/net35-cf/protobuf-net.pdb", + "lib/net35-cf/protobuf-net.xml", + "lib/net40/protobuf-net.dll", + "lib/net40/protobuf-net.pdb", + "lib/net40/protobuf-net.xml", + "lib/net40-cf/protobuf-net.dll", + "lib/net40-cf/protobuf-net.pdb", + "lib/net40-cf/protobuf-net.xml", + "lib/netcore45/protobuf-net.dll", + "lib/netcore45/protobuf-net.pdb", + "lib/netcore45/protobuf-net.pri", + "lib/netcore45/protobuf-net.XML", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.dll", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.pdb", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.xml", + "lib/sl3-wp/protobuf-net.dll", + "lib/sl3-wp/protobuf-net.pdb", + "lib/sl3-wp/protobuf-net.xml", + "lib/sl4/protobuf-net.dll", + "lib/sl4/protobuf-net.pdb", + "lib/sl4/protobuf-net.xml", + "lib/sl4-windowsphone71/protobuf-net.dll", + "lib/sl4-windowsphone71/protobuf-net.pdb", + "lib/sl4-windowsphone71/protobuf-net.xml", + "lib/windowsphone8/protobuf-net.dll", + "lib/windowsphone8/protobuf-net.pdb", + "lib/windowsphone8/protobuf-net.xml" + ] + }, + "System.Collections.Immutable/1.1.33-beta": { + "serviceable": true, + "sha": "Qnv6M/BRf0w1xNoD5tH7V+jK0kdO+OZymwQS5Lj6FALt3AZMGVeJs+lHXi1PsKFll67UtGY+I7r8WDhRzspXCA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ] + } + }, + "files": [ + "License-Stable.rtf", + "System.Collections.Immutable.1.1.33-beta.nupkg", + "System.Collections.Immutable.1.1.33-beta.nupkg.sha512", + "System.Collections.Immutable.nuspec", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.xml" + ] + }, + "System.Reflection.Metadata/1.0.18-beta": { + "serviceable": true, + "sha": "4PtC2U6seQthZMvXvGTxXZUqlF0oV9jzYNTkG0Yo/D6cLO5AH3lrxh2djGyKsDYnAZjBCoyA/z3vHRCeaBEp4w==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Collections.Immutable": "1.1.33-beta" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Collections.Immutable": "1.1.33-beta" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ] + } + }, + "files": [ + "License-Stable.rtf", + "System.Reflection.Metadata.1.0.18-beta.nupkg", + "System.Reflection.Metadata.1.0.18-beta.nupkg.sha512", + "System.Reflection.Metadata.nuspec", + "lib/portable-net45+win8/System.Reflection.Metadata.dll", + "lib/portable-net45+win8/System.Reflection.Metadata.xml" + ] + }, + "xunit/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "qTzY4x9uJ+CXDpS7/mm+rmz4YvpwY4IwTgRs6bk9R71G2yXneuuSJ+XaZ5V8ytGHgXeIWfwp3h4sg8uRi2GNxw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.core": "[2.1.0-beta2-build2981]", + "xunit.assert": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.core": "[2.1.0-beta2-build2981]", + "xunit.assert": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "xunit.2.1.0-beta2-build2981.nupkg", + "xunit.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.nuspec" + ] + }, + "xunit.abstractions/2.0.0": { + "serviceable": false, + "sha": "NAdxKQRzuLnCZ0g++x6i87/8rMBpQoRiRlRNLAqfODm2zJPbteHRoSER3DXfxnqrHXyBJT8rFaZ8uveBeQyaMA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net35/xunit.abstractions.dll" + ], + "compileAssemblies": [ + "lib/net35/xunit.abstractions.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net35/xunit.abstractions.dll" + ], + "compileAssemblies": [ + "lib/net35/xunit.abstractions.dll" + ] + } + }, + "files": [ + "xunit.abstractions.2.0.0.nupkg", + "xunit.abstractions.2.0.0.nupkg.sha512", + "xunit.abstractions.nuspec", + "lib/net35/xunit.abstractions.dll", + "lib/net35/xunit.abstractions.xml", + "lib/portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.abstractions.dll", + "lib/portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.abstractions.xml" + ] + }, + "xunit.assert/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "jxJ7novf8W3LJweqThxddbS1burh8ptXu7mhSHbu4irVKuRWJ6hZpmXX9aIKhvfbBlm7b6HLtTR0WK0VOwaHXg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll" + ] + } + }, + "files": [ + "xunit.assert.2.1.0-beta2-build2981.nupkg", + "xunit.assert.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.assert.nuspec", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.pdb", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.xml" + ] + }, + "xunit.core/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "yxaLG6iKjRxx6UlY1XM0uUshzBb9vVHf9rBnHext1bjS3nG7C2C2To+jQYyR8iwvLOq1HyKi3e/KBlgEgSkxyA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.extensibility.core": "[2.1.0-beta2-build2981]", + "xunit.extensibility.execution": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.extensibility.core": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "xunit.core.2.1.0-beta2-build2981.nupkg", + "xunit.core.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.core.nuspec", + "build/monoandroid/xunit.core.props", + "build/monoandroid/xunit.execution.MonoAndroid.dll", + "build/monotouch/xunit.core.props", + "build/monotouch/xunit.execution.MonoTouch.dll", + "build/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.props", + "build/portable-win81+wpa81/xunit.core.props", + "build/portable-win81+wpa81/xunit.core.targets", + "build/portable-win81+wpa81/xunit.execution.universal.dll", + "build/portable-win81+wpa81/xunit.execution.universal.pri", + "build/win8/xunit.core.props", + "build/win8/xunit.core.targets", + "build/win8/xunit.execution.win8.dll", + "build/wp8/xunit.core.props", + "build/wp8/xunit.core.targets", + "build/wp8/xunit.execution.wp8.dll", + "build/Xamarin.iOS/xunit.core.props", + "build/Xamarin.iOS/xunit.execution.iOS-Universal.dll", + "build/_Desktop/xunit.execution.desktop.dll" + ] + }, + "xunit.extensibility.core/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "Q6ilaa1rwI1S8R+/5bxiWPIFCsqRfz63XFMJz1AAUDWdw4nL2MIDjQzbUvFJ77KWocQVDyqasVo679s2+Ex8dQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.abstractions": "[2.0.0]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.abstractions": "[2.0.0]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll" + ] + } + }, + "files": [ + "xunit.extensibility.core.2.1.0-beta2-build2981.nupkg", + "xunit.extensibility.core.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.extensibility.core.nuspec", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll.tdnet", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.pdb", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.xml", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.runner.tdnet.dll", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.runner.utility.desktop.dll" + ] + }, + "xunit.extensibility.execution/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "FCD7WyGybb/svGjuGfjs+Gqb5EYeP5LKyO+YZRxmSrWvHw55+T3P/kdmqO/84Rx0DAMmnh83CBifk51p9NrD4A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.extensibility.core": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [ + "Microsoft.CSharp", + "mscorlib", + "System", + "System.Core", + "System.Collections", + "System.Reflection", + "System.Runtime", + "System.Threading.Tasks" + ], + "runtimeAssemblies": [ + "lib/dnx451/xunit.execution.dnx.dll" + ], + "compileAssemblies": [ + "lib/dnx451/xunit.execution.dnx.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.extensibility.core": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/xunit.execution.desktop.dll" + ], + "compileAssemblies": [ + "lib/net45/xunit.execution.desktop.dll" + ] + } + }, + "files": [ + "xunit.extensibility.execution.2.1.0-beta2-build2981.nupkg", + "xunit.extensibility.execution.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.extensibility.execution.nuspec", + "lib/dnx451/xunit.execution.dnx.dll", + "lib/dnx451/xunit.execution.dnx.pdb", + "lib/dnx451/xunit.execution.dnx.xml", + "lib/dnxcore50/xunit.execution.dnx.dll", + "lib/dnxcore50/xunit.execution.dnx.pdb", + "lib/dnxcore50/xunit.execution.dnx.xml", + "lib/monoandroid/xunit.execution.MonoAndroid.dll", + "lib/monoandroid/xunit.execution.MonoAndroid.pdb", + "lib/monoandroid/xunit.execution.MonoAndroid.xml", + "lib/monotouch/xunit.execution.MonoTouch.dll", + "lib/monotouch/xunit.execution.MonoTouch.pdb", + "lib/monotouch/xunit.execution.MonoTouch.xml", + "lib/net45/xunit.execution.desktop.dll", + "lib/net45/xunit.execution.desktop.pdb", + "lib/net45/xunit.execution.desktop.xml", + "lib/portable-wpa81+win81/xunit.execution.universal.dll", + "lib/portable-wpa81+win81/xunit.execution.universal.pdb", + "lib/portable-wpa81+win81/xunit.execution.universal.pri", + "lib/portable-wpa81+win81/xunit.execution.universal.xml", + "lib/win8/xunit.execution.win8.dll", + "lib/win8/xunit.execution.win8.pdb", + "lib/win8/xunit.execution.win8.xml", + "lib/wp8/xunit.execution.wp8.dll", + "lib/wp8/xunit.execution.wp8.pdb", + "lib/wp8/xunit.execution.wp8.xml", + "lib/Xamarin.iOS/xunit.execution.iOS-Universal.dll", + "lib/Xamarin.iOS/xunit.execution.iOS-Universal.pdb", + "lib/Xamarin.iOS/xunit.execution.iOS-Universal.xml" + ] + }, + "xunit.runner.dnx/2.1.0-beta2-build79": { + "serviceable": false, + "sha": "RXeHTGiII/oOYLhFdNygRbspjV+PprxIosHOO/1fv3VBrLqqpPyOHnJWKG4hLYK2v4p0BT+KhrRduLorS8YLSQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.TestAdapter": "1.0.0-beta4", + "Microsoft.Framework.TestHost": "1.0.0-beta4", + "xunit.runner.utility": "2.1.0-beta2-build2981" + }, + "frameworkAssemblies": [ + "System.Collections", + "System.ObjectModel", + "System.Reflection", + "System.Runtime", + "System.Text.RegularExpressions", + "System.Xml", + "System.Xml.Linq", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/xunit.runner.dnx.dll" + ], + "compileAssemblies": [ + "lib/dnx451/xunit.runner.dnx.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "xunit.runner.dnx.2.1.0-beta2-build79.nupkg", + "xunit.runner.dnx.2.1.0-beta2-build79.nupkg.sha512", + "xunit.runner.dnx.nuspec", + "app/project.json", + "app/xunit", + "app/xunit.cmd", + "lib/dnx451/xunit.runner.dnx.dll", + "lib/dnx451/xunit.runner.dnx.xml", + "lib/dnxcore50/xunit.runner.dnx.dll", + "lib/dnxcore50/xunit.runner.dnx.xml" + ] + }, + "xunit.runner.utility/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "g7jIEcA3ghXVwPAqy55sqbLXnpqEjmCoup5DnqpRVdz7JL2vEQlO4ERJyGx7zRO46iJnwdVWHbHVT4N1bHbeiQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.abstractions": "[2.0.0]" + }, + "frameworkAssemblies": [ + "Microsoft.CSharp", + "mscorlib", + "System", + "System.Collections", + "System.Core", + "System.Reflection", + "System.Runtime", + "System.Web", + "System.Xml" + ], + "runtimeAssemblies": [ + "lib/dnx451/xunit.runner.utility.dnx.dll" + ], + "compileAssemblies": [ + "lib/dnx451/xunit.runner.utility.dnx.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.abstractions": "[2.0.0]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net35/xunit.runner.utility.desktop.dll" + ], + "compileAssemblies": [ + "lib/net35/xunit.runner.utility.desktop.dll" + ] + } + }, + "files": [ + "xunit.runner.utility.2.1.0-beta2-build2981.nupkg", + "xunit.runner.utility.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.runner.utility.nuspec", + "lib/dnx451/xunit.runner.utility.dnx.dll", + "lib/dnx451/xunit.runner.utility.dnx.pdb", + "lib/dnx451/xunit.runner.utility.dnx.xml", + "lib/dnxcore50/xunit.runner.utility.dnx.dll", + "lib/dnxcore50/xunit.runner.utility.dnx.pdb", + "lib/dnxcore50/xunit.runner.utility.dnx.xml", + "lib/monoandroid/xunit.runner.utility.MonoAndroid.dll", + "lib/monoandroid/xunit.runner.utility.MonoAndroid.pdb", + "lib/monoandroid/xunit.runner.utility.MonoAndroid.xml", + "lib/monotouch/xunit.runner.utility.MonoTouch.dll", + "lib/monotouch/xunit.runner.utility.MonoTouch.pdb", + "lib/monotouch/xunit.runner.utility.MonoTouch.xml", + "lib/net35/xunit.runner.utility.desktop.dll", + "lib/net35/xunit.runner.utility.desktop.pdb", + "lib/net35/xunit.runner.utility.desktop.xml", + "lib/portable-wpa81+win81/xunit.runner.utility.universal.dll", + "lib/portable-wpa81+win81/xunit.runner.utility.universal.pdb", + "lib/portable-wpa81+win81/xunit.runner.utility.universal.pri", + "lib/portable-wpa81+win81/xunit.runner.utility.universal.xml", + "lib/win8/xunit.runner.utility.win8.dll", + "lib/win8/xunit.runner.utility.win8.pdb", + "lib/win8/xunit.runner.utility.win8.xml", + "lib/wp8/xunit.runner.utility.wp8.dll", + "lib/wp8/xunit.runner.utility.wp8.pdb", + "lib/wp8/xunit.runner.utility.wp8.xml", + "lib/Xamarin.iOS/xunit.runner.utility.iOS-Universal.dll", + "lib/Xamarin.iOS/xunit.runner.utility.iOS-Universal.pdb", + "lib/Xamarin.iOS/xunit.runner.utility.iOS-Universal.xml" + ] + } + } +} \ No newline at end of file diff --git a/test/OpenChain.Server.Tests/LedgerPathTests.cs b/test/OpenChain.Server.Tests/LedgerPathTests.cs new file mode 100644 index 0000000..8ad813f --- /dev/null +++ b/test/OpenChain.Server.Tests/LedgerPathTests.cs @@ -0,0 +1,66 @@ +using Xunit; + +namespace OpenChain.Server.Tests +{ + // This project can output the Class library as a NuGet Package. + // To enable this option, right-click on the project and select the Properties menu item. In the Build tab select "Produce outputs on build". + public class LedgerPathTests + { + [Fact] + public void TryParse_Success() + { + // Normal case + LedgerPath path; + bool result = LedgerPath.TryParse("/abc/def", out path); + + Assert.Equal(true, result); + Assert.Equal("/abc/def", path.FullPath); + Assert.Equal(false, path.IsDirectory); + Assert.Equal(new[] { "abc", "def" }, path.Segments); + + // Directory + result = LedgerPath.TryParse("/abc/def/", out path); + + Assert.Equal(true, result); + Assert.Equal("/abc/def/", path.FullPath); + Assert.Equal(true, path.IsDirectory); + Assert.Equal(new[] { "abc", "def" }, path.Segments); + + // Root + result = LedgerPath.TryParse("/", out path); + + Assert.Equal(true, result); + Assert.Equal("/", path.FullPath); + Assert.Equal(true, path.IsDirectory); + Assert.Equal(new string[] { }, path.Segments); + + // Unicode characters + result = LedgerPath.TryParse("/abc%20c d/ef❤ ☀ ☆ ☂ ☻", out path); + + Assert.Equal(true, result); + Assert.Equal("/abc%20c d/ef❤ ☀ ☆ ☂ ☻", path.FullPath); + Assert.Equal(false, path.IsDirectory); + Assert.Equal(new[] { "abc%20c d", "ef❤ ☀ ☆ ☂ ☻" }, path.Segments); + } + + [Theory] + // Missing leading slash + [InlineData("abc/def")] + [InlineData("abc")] + // Null character + [InlineData("/abc" + "\x000")] + [InlineData("")] + // Empty segment + [InlineData("/abc//def")] + [InlineData("/abc/def//")] + public void TryParse_Invalid(string value) + { + // Missing leading slash + LedgerPath path; + bool result = LedgerPath.TryParse(value, out path); + + Assert.Equal(false, result); + Assert.Equal(null, path); + } + } +} diff --git a/test/OpenChain.Server.Tests/OpenChain.Server.Tests.xproj b/test/OpenChain.Server.Tests/OpenChain.Server.Tests.xproj new file mode 100644 index 0000000..3ac77fa --- /dev/null +++ b/test/OpenChain.Server.Tests/OpenChain.Server.Tests.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + 91b5c8b9-602c-4843-a2be-da82b3f7449b + OpenChain.Server.Tests + ..\artifacts\obj\$(MSBuildProjectName) + ..\artifacts\bin\$(MSBuildProjectName)\ + + + 2.0 + + + + + + \ No newline at end of file diff --git a/test/OpenChain.Server.Tests/project.json b/test/OpenChain.Server.Tests/project.json new file mode 100644 index 0000000..07adecc --- /dev/null +++ b/test/OpenChain.Server.Tests/project.json @@ -0,0 +1,30 @@ +{ + "version": "1.0.0-*", + "description": "", + "authors": [ "" ], + "tags": [ "" ], + "projectUrl": "", + "licenseUrl": "", + + "dependencies": { + "OpenChain.Server": "1.0.0-*", + "xunit": "2.1.0-beta2-*", + "xunit.runner.dnx": "2.1.0-beta2-*" + }, + + "commands": { + "test": "xunit.runner.dnx" + }, + + "frameworks": { + "dnx451": { } + //"dnxcore50": { + // "dependencies": { + // "System.Collections": "4.0.10-beta-22816", + // "System.Linq": "4.0.0-beta-22816", + // "System.Threading": "4.0.10-beta-22816", + // "Microsoft.CSharp": "4.0.0-beta-22816" + // } + //} + } +} diff --git a/test/OpenChain.Server.Tests/project.lock.json b/test/OpenChain.Server.Tests/project.lock.json new file mode 100644 index 0000000..f832c06 --- /dev/null +++ b/test/OpenChain.Server.Tests/project.lock.json @@ -0,0 +1,1229 @@ +{ + "locked": false, + "version": -9998, + "projectFileDependencyGroups": { + "": [ + "OpenChain.Server >= 1.0.0-*", + "xunit >= 2.1.0-beta2-*", + "xunit.runner.dnx >= 2.1.0-beta2-*" + ], + "DNX,Version=v4.5.1": [] + }, + "libraries": { + "Microsoft.CodeAnalysis.Analyzers/1.0.0-rc2": { + "serviceable": false, + "sha": "/4Z5es8TXCEn5sfzWz2uhUITmikgCfMAhehMJPQcSD2FRp2ooLTczDq3p4KOl+bcnsvaAu0aKrmdRgOvkrcwhw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "System" + ], + "runtimeAssemblies": [], + "compileAssemblies": [] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "System" + ], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.CodeAnalysis.Analyzers.1.0.0-rc2.nupkg", + "Microsoft.CodeAnalysis.Analyzers.1.0.0-rc2.nupkg.sha512", + "Microsoft.CodeAnalysis.Analyzers.nuspec", + "ThirdPartyNotices.rtf", + "tools/install.ps1", + "tools/uninstall.ps1", + "tools/analyzers/C#/Microsoft.CodeAnalysis.Analyzers.dll", + "tools/analyzers/C#/Microsoft.CodeAnalysis.CSharp.Analyzers.dll", + "tools/analyzers/VB.NET/Microsoft.CodeAnalysis.Analyzers.dll", + "tools/analyzers/VB.NET/Microsoft.CodeAnalysis.VisualBasic.Analyzers.dll" + ] + }, + "Microsoft.CodeAnalysis.Common/1.0.0-rc2": { + "serviceable": false, + "sha": "7ALXqeJxiEMgnSST2qlWMThc5CIhJNFsUKYITIXXXj7gf8mF+ktEuKgUE7NWePzUgi0gq/2WmBX/4yWJuF1j6w==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Collections.Immutable": "[1.1.33-beta]", + "System.Reflection.Metadata": "[1.0.18-beta]", + "Microsoft.CodeAnalysis.Analyzers": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Collections.Immutable": "[1.1.33-beta]", + "System.Reflection.Metadata": "[1.0.18-beta]", + "Microsoft.CodeAnalysis.Analyzers": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.dll" + ] + } + }, + "files": [ + "Microsoft.CodeAnalysis.Common.1.0.0-rc2.nupkg", + "Microsoft.CodeAnalysis.Common.1.0.0-rc2.nupkg.sha512", + "Microsoft.CodeAnalysis.Common.nuspec", + "ThirdPartyNotices.rtf", + "lib/net45/Microsoft.CodeAnalysis.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.Desktop.xml", + "lib/net45/Microsoft.CodeAnalysis.dll", + "lib/net45/Microsoft.CodeAnalysis.xml", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.dll", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.xml" + ] + }, + "Microsoft.CodeAnalysis.CSharp/1.0.0-rc2": { + "serviceable": false, + "sha": "wsj0BdWRY+fsUINMEQ+uanN0pWMAMj2z0UiJKjwoUo/Xbrk7PqGklzpOB7lvlESHjO8+Eaw71PQnml6j7m7rdQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[1.0.0-rc2]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll" + ] + } + }, + "files": [ + "Microsoft.CodeAnalysis.CSharp.1.0.0-rc2.nupkg", + "Microsoft.CodeAnalysis.CSharp.1.0.0-rc2.nupkg.sha512", + "Microsoft.CodeAnalysis.CSharp.nuspec", + "ThirdPartyNotices.rtf", + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.Desktop.xml", + "lib/net45/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net45/Microsoft.CodeAnalysis.CSharp.xml", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.CSharp.dll", + "lib/portable-net45+win8/Microsoft.CodeAnalysis.CSharp.xml" + ] + }, + "Microsoft.Framework.ApplicationHost/1.0.0-beta4": { + "serviceable": false, + "sha": "U7frhgsqolI+AMUrX44WNgV7Xyoxj8UtttE21pkD5Wfeubo1mZyhtJUvcMN4zxAPCjFqdOfKizWfcEI+mZ0Rtg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.ApplicationHost.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.ApplicationHost.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.ApplicationHost.1.0.0-beta4.nupkg", + "Microsoft.Framework.ApplicationHost.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.ApplicationHost.nuspec", + "lib/dnx451/Microsoft.Framework.ApplicationHost.dll", + "lib/dnx451/Microsoft.Framework.ApplicationHost.xml", + "lib/dnxcore50/Microsoft.Framework.ApplicationHost.dll", + "lib/dnxcore50/Microsoft.Framework.ApplicationHost.xml" + ] + }, + "Microsoft.Framework.CommandLineUtils/1.0.0-beta4": { + "serviceable": false, + "sha": "sWFw8wo77BRWAzoS50mgDUzBVXkRAZySYSaIFfpk3W5oJYmjcFt0SHpGJoVbIO3ZcKMORYvrxgnwNXx1p0ZCxQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.CommandLineUtils.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.CommandLineUtils.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.CommandLineUtils.1.0.0-beta4.nupkg", + "Microsoft.Framework.CommandLineUtils.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.CommandLineUtils.nuspec", + "lib/dnx451/Microsoft.Framework.CommandLineUtils.dll", + "lib/dnx451/Microsoft.Framework.CommandLineUtils.xml", + "lib/dnxcore50/Microsoft.Framework.CommandLineUtils.dll", + "lib/dnxcore50/Microsoft.Framework.CommandLineUtils.xml", + "shared/AnsiConsole.cs", + "shared/CommandArgument.cs", + "shared/CommandLineApplication.cs", + "shared/CommandOption.cs", + "shared/CommandOptionType.cs" + ] + }, + "Microsoft.Framework.DependencyInjection.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "qbBGymgVdlrJZhJFg+35JaA0Tp8DYeFrDwv1Q3Di9hRWLZ3rAE7bvsnP+fmuo0XGlZDVXfGjINvtryFPyoQ58g==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.DependencyInjection.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.DependencyInjection.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.DependencyInjection.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.DependencyInjection.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.DependencyInjection.Interfaces.xml", + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/net45/Microsoft.Framework.DependencyInjection.Interfaces.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.DependencyInjection.Interfaces.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.DependencyInjection.Interfaces.xml" + ] + }, + "Microsoft.Framework.Logging/1.0.0-beta4": { + "serviceable": true, + "sha": "aFlG7h0WMJn+TgKIqoDkXh6LOquu7e6HKCOSrLvAaOp93qOWycz0kNQ0oGXVHYP6QebAjHgz9UffcqeCqeWN1Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Collections.Concurrent", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Logging.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "System.Collections.Concurrent", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.Logging.1.0.0-beta4.nupkg", + "Microsoft.Framework.Logging.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Logging.nuspec", + "lib/dnx451/Microsoft.Framework.Logging.dll", + "lib/dnx451/Microsoft.Framework.Logging.xml", + "lib/dnxcore50/Microsoft.Framework.Logging.dll", + "lib/dnxcore50/Microsoft.Framework.Logging.xml", + "lib/net45/Microsoft.Framework.Logging.dll", + "lib/net45/Microsoft.Framework.Logging.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.xml" + ] + }, + "Microsoft.Framework.Logging.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "OK8v8gpDYfH01Gy1tvT4mS1r6ZWMAz1HXo872v7pswishE6oyTQwC44BpYM+Obq8GW7E6Ai/Vj3wE/CuLUDJGA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/net45/Microsoft.Framework.Logging.Interfaces.dll" + ] + } + }, + "files": [ + "Microsoft.Framework.Logging.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Logging.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Logging.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Logging.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Logging.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Logging.Interfaces.xml", + "lib/net45/Microsoft.Framework.Logging.Interfaces.dll", + "lib/net45/Microsoft.Framework.Logging.Interfaces.xml", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.Interfaces.dll", + "lib/portable-net451+win81+wpa81/Microsoft.Framework.Logging.Interfaces.xml" + ] + }, + "Microsoft.Framework.Runtime/1.0.0-beta4": { + "serviceable": true, + "sha": "R4Ob2q5tUb6ocw1itBO84HL8gXZMu52mi8jfxwtXoJU42gHt3ouBTEHX1WCzqcgLNGrIh89mjFV8iFTNShKXdA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Reflection.Metadata": "1.0.18-beta", + "Microsoft.CodeAnalysis.CSharp": "1.0.0-rc2", + "Microsoft.Framework.Runtime.Roslyn.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Loader": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Newtonsoft.Json": "6.0.6" + }, + "frameworkAssemblies": [ + "System.Collections", + "System.Text.Encoding", + "System.Threading.Tasks", + "System.IO", + "System.IO.Compression", + "System.IO.Compression.FileSystem", + "System.Runtime", + "System.Xml", + "System.Xml.Linq", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.dll", + "lib/dnx451/Microsoft.Framework.Runtime.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.xml" + ] + }, + "Microsoft.Framework.Runtime.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "RrZdqvUm8QbgxnZQuafYGo6NezoKx7VqAfAtHVzoKBm3GSV8xlPh90u1fsGhNCv37xJNk5PuRCa4Mq27ko7pLw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Runtime.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.Interfaces.xml" + ] + }, + "Microsoft.Framework.Runtime.Loader/1.0.0-beta4": { + "serviceable": true, + "sha": "XpLguvjD4bfhE2fu1SWaOXjUkVcKTRW8x1mZjPpxns250pcTg1v/sG70fmZKtoiaXHYZFzTai2SRtqfBB20hOA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Loader.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Loader.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.Loader.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.Loader.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.Loader.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.Loader.dll", + "lib/dnx451/Microsoft.Framework.Runtime.Loader.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.Loader.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.Loader.xml" + ] + }, + "Microsoft.Framework.Runtime.Roslyn.Interfaces/1.0.0-beta4": { + "serviceable": true, + "sha": "iZNGlqBAWIT2zWI1Z4AWpx9loBvplEgyHp3lRfBJX30npClf9d3fMRRlO1K9wx9ho0tMLBU8CSXpUc/21Knm6Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Microsoft.CodeAnalysis.CSharp": "1.0.0-rc2" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.Runtime.Roslyn.Interfaces.1.0.0-beta4.nupkg", + "Microsoft.Framework.Runtime.Roslyn.Interfaces.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.Runtime.Roslyn.Interfaces.nuspec", + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll", + "lib/dnx451/Microsoft.Framework.Runtime.Roslyn.Interfaces.xml", + "lib/dnxcore50/Microsoft.Framework.Runtime.Roslyn.Interfaces.dll", + "lib/dnxcore50/Microsoft.Framework.Runtime.Roslyn.Interfaces.xml" + ] + }, + "Microsoft.Framework.TestAdapter/1.0.0-beta4": { + "serviceable": false, + "sha": "s4vPz/frohp6tyjTY9cTOHqZLotEdiV5GScHqdpTxFc9cWG3coyf03WYUQx6Kia5o7CWRiAYURqF5pr+9gTD7A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.TestAdapter.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.TestAdapter.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.TestAdapter.1.0.0-beta4.nupkg", + "Microsoft.Framework.TestAdapter.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.TestAdapter.nuspec", + "lib/dnx451/Microsoft.Framework.TestAdapter.dll", + "lib/dnx451/Microsoft.Framework.TestAdapter.xml", + "lib/dnxcore50/Microsoft.Framework.TestAdapter.dll", + "lib/dnxcore50/Microsoft.Framework.TestAdapter.xml" + ] + }, + "Microsoft.Framework.TestHost/1.0.0-beta4": { + "serviceable": false, + "sha": "At1dKPJGTP3P6b9wNoyT4HkwpiJjUgBE9khzltAMY5U2va3csdPrCZPnU/jb4LA7RWGMkt34s7leB0w/DYovAQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.TestAdapter": "1.0.0-beta4", + "Microsoft.Framework.ApplicationHost": "1.0.0-beta4", + "Microsoft.Framework.CommandLineUtils": "1.0.0-beta4", + "Microsoft.Framework.Logging": "1.0.0-beta4", + "Microsoft.Framework.Runtime": "1.0.0-beta4", + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Newtonsoft.Json": "6.0.6" + }, + "frameworkAssemblies": [ + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/Microsoft.Framework.TestHost.dll" + ], + "compileAssemblies": [ + "lib/dnx451/Microsoft.Framework.TestHost.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "Microsoft.Framework.TestHost.1.0.0-beta4.nupkg", + "Microsoft.Framework.TestHost.1.0.0-beta4.nupkg.sha512", + "Microsoft.Framework.TestHost.nuspec", + "app/project.json", + "lib/dnx451/Microsoft.Framework.TestHost.dll", + "lib/dnx451/Microsoft.Framework.TestHost.xml", + "lib/dnxcore50/Microsoft.Framework.TestHost.dll", + "lib/dnxcore50/Microsoft.Framework.TestHost.xml" + ] + }, + "MongoDB.Bson/2.0.1": { + "serviceable": false, + "sha": "dr8KYpTt5VIqGWQ5Bzud2BA/lH2csIfL5WLrfc90UzSWGF378ugvEo5tx4J0eZohvHzsRRiMS2YTmJOTRN+iYg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ], + "compileAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ], + "compileAssemblies": [ + "lib/net45/MongoDB.Bson.dll" + ] + } + }, + "files": [ + "License.rtf", + "MongoDB.Bson.2.0.1.nupkg", + "MongoDB.Bson.2.0.1.nupkg.sha512", + "MongoDB.Bson.nuspec", + "lib/net45/MongoDB.Bson.dll", + "lib/net45/MongoDB.Bson.XML" + ] + }, + "Newtonsoft.Json/6.0.6": { + "serviceable": false, + "sha": "w26uZNyCG5VeoKiEOJ4+9/o8koSofLKwHl7WLreIcp0U6r57L7WiRXmjp8MTKFw6dYNZ9AE0lw69WYbIhUsU9Q==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ], + "compileAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ], + "compileAssemblies": [ + "lib/net45/Newtonsoft.Json.dll" + ] + } + }, + "files": [ + "Newtonsoft.Json.6.0.6.nupkg", + "Newtonsoft.Json.6.0.6.nupkg.sha512", + "Newtonsoft.Json.nuspec", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/netcore45/Newtonsoft.Json.dll", + "lib/netcore45/Newtonsoft.Json.xml", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml", + "lib/portable-net45+wp80+win8+wpa81+aspnetcore50/Newtonsoft.Json.dll", + "lib/portable-net45+wp80+win8+wpa81+aspnetcore50/Newtonsoft.Json.xml", + "tools/install.ps1" + ] + }, + "protobuf-net/2.0.0.668": { + "serviceable": false, + "sha": "Lgj+Kf1+RV0utKxX9u1WEcymPGrbWrj/AwFmFADFLLa/LLdc1ji2MIGcecFRAGUu6UO8BRbdjZAIYWvLlN1B/A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net40/protobuf-net.dll" + ], + "compileAssemblies": [ + "lib/net40/protobuf-net.dll" + ] + } + }, + "files": [ + "protobuf-net.2.0.0.668.nupkg", + "protobuf-net.2.0.0.668.nupkg.sha512", + "protobuf-net.nuspec", + "lib/net20/protobuf-net.dll", + "lib/net20/protobuf-net.pdb", + "lib/net20/protobuf-net.xml", + "lib/net20-cf/protobuf-net.dll", + "lib/net20-cf/protobuf-net.pdb", + "lib/net20-cf/protobuf-net.xml", + "lib/net30/protobuf-net.dll", + "lib/net30/protobuf-net.pdb", + "lib/net30/protobuf-net.xml", + "lib/net35/protobuf-net.dll", + "lib/net35/protobuf-net.pdb", + "lib/net35/protobuf-net.xml", + "lib/net35-cf/protobuf-net.dll", + "lib/net35-cf/protobuf-net.pdb", + "lib/net35-cf/protobuf-net.xml", + "lib/net40/protobuf-net.dll", + "lib/net40/protobuf-net.pdb", + "lib/net40/protobuf-net.xml", + "lib/net40-cf/protobuf-net.dll", + "lib/net40-cf/protobuf-net.pdb", + "lib/net40-cf/protobuf-net.xml", + "lib/netcore45/protobuf-net.dll", + "lib/netcore45/protobuf-net.pdb", + "lib/netcore45/protobuf-net.pri", + "lib/netcore45/protobuf-net.XML", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.dll", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.pdb", + "lib/portable-sl4+net40+wp7+windows8/protobuf-net.xml", + "lib/sl3-wp/protobuf-net.dll", + "lib/sl3-wp/protobuf-net.pdb", + "lib/sl3-wp/protobuf-net.xml", + "lib/sl4/protobuf-net.dll", + "lib/sl4/protobuf-net.pdb", + "lib/sl4/protobuf-net.xml", + "lib/sl4-windowsphone71/protobuf-net.dll", + "lib/sl4-windowsphone71/protobuf-net.pdb", + "lib/sl4-windowsphone71/protobuf-net.xml", + "lib/windowsphone8/protobuf-net.dll", + "lib/windowsphone8/protobuf-net.pdb", + "lib/windowsphone8/protobuf-net.xml" + ] + }, + "System.Collections.Immutable/1.1.33-beta": { + "serviceable": true, + "sha": "Qnv6M/BRf0w1xNoD5tH7V+jK0kdO+OZymwQS5Lj6FALt3AZMGVeJs+lHXi1PsKFll67UtGY+I7r8WDhRzspXCA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll" + ] + } + }, + "files": [ + "License-Stable.rtf", + "System.Collections.Immutable.1.1.33-beta.nupkg", + "System.Collections.Immutable.1.1.33-beta.nupkg.sha512", + "System.Collections.Immutable.nuspec", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.xml" + ] + }, + "System.Reflection.Metadata/1.0.18-beta": { + "serviceable": true, + "sha": "4PtC2U6seQthZMvXvGTxXZUqlF0oV9jzYNTkG0Yo/D6cLO5AH3lrxh2djGyKsDYnAZjBCoyA/z3vHRCeaBEp4w==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "System.Collections.Immutable": "1.1.33-beta" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "System.Collections.Immutable": "1.1.33-beta" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+win8/System.Reflection.Metadata.dll" + ] + } + }, + "files": [ + "License-Stable.rtf", + "System.Reflection.Metadata.1.0.18-beta.nupkg", + "System.Reflection.Metadata.1.0.18-beta.nupkg.sha512", + "System.Reflection.Metadata.nuspec", + "lib/portable-net45+win8/System.Reflection.Metadata.dll", + "lib/portable-net45+win8/System.Reflection.Metadata.xml" + ] + }, + "xunit/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "qTzY4x9uJ+CXDpS7/mm+rmz4YvpwY4IwTgRs6bk9R71G2yXneuuSJ+XaZ5V8ytGHgXeIWfwp3h4sg8uRi2GNxw==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.core": "[2.1.0-beta2-build2981]", + "xunit.assert": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.core": "[2.1.0-beta2-build2981]", + "xunit.assert": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "xunit.2.1.0-beta2-build2981.nupkg", + "xunit.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.nuspec" + ] + }, + "xunit.abstractions/2.0.0": { + "serviceable": false, + "sha": "NAdxKQRzuLnCZ0g++x6i87/8rMBpQoRiRlRNLAqfODm2zJPbteHRoSER3DXfxnqrHXyBJT8rFaZ8uveBeQyaMA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net35/xunit.abstractions.dll" + ], + "compileAssemblies": [ + "lib/net35/xunit.abstractions.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net35/xunit.abstractions.dll" + ], + "compileAssemblies": [ + "lib/net35/xunit.abstractions.dll" + ] + } + }, + "files": [ + "xunit.abstractions.2.0.0.nupkg", + "xunit.abstractions.2.0.0.nupkg.sha512", + "xunit.abstractions.nuspec", + "lib/net35/xunit.abstractions.dll", + "lib/net35/xunit.abstractions.xml", + "lib/portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.abstractions.dll", + "lib/portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.abstractions.xml" + ] + }, + "xunit.assert/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "jxJ7novf8W3LJweqThxddbS1burh8ptXu7mhSHbu4irVKuRWJ6hZpmXX9aIKhvfbBlm7b6HLtTR0WK0VOwaHXg==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll" + ] + } + }, + "files": [ + "xunit.assert.2.1.0-beta2-build2981.nupkg", + "xunit.assert.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.assert.nuspec", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.dll", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.pdb", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.assert.xml" + ] + }, + "xunit.core/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "yxaLG6iKjRxx6UlY1XM0uUshzBb9vVHf9rBnHext1bjS3nG7C2C2To+jQYyR8iwvLOq1HyKi3e/KBlgEgSkxyA==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.extensibility.core": "[2.1.0-beta2-build2981]", + "xunit.extensibility.execution": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.extensibility.core": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "xunit.core.2.1.0-beta2-build2981.nupkg", + "xunit.core.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.core.nuspec", + "build/monoandroid/xunit.core.props", + "build/monoandroid/xunit.execution.MonoAndroid.dll", + "build/monotouch/xunit.core.props", + "build/monotouch/xunit.execution.MonoTouch.dll", + "build/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.props", + "build/portable-win81+wpa81/xunit.core.props", + "build/portable-win81+wpa81/xunit.core.targets", + "build/portable-win81+wpa81/xunit.execution.universal.dll", + "build/portable-win81+wpa81/xunit.execution.universal.pri", + "build/win8/xunit.core.props", + "build/win8/xunit.core.targets", + "build/win8/xunit.execution.win8.dll", + "build/wp8/xunit.core.props", + "build/wp8/xunit.core.targets", + "build/wp8/xunit.execution.wp8.dll", + "build/Xamarin.iOS/xunit.core.props", + "build/Xamarin.iOS/xunit.execution.iOS-Universal.dll", + "build/_Desktop/xunit.execution.desktop.dll" + ] + }, + "xunit.extensibility.core/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "Q6ilaa1rwI1S8R+/5bxiWPIFCsqRfz63XFMJz1AAUDWdw4nL2MIDjQzbUvFJ77KWocQVDyqasVo679s2+Ex8dQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.abstractions": "[2.0.0]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.abstractions": "[2.0.0]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll" + ], + "compileAssemblies": [ + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll" + ] + } + }, + "files": [ + "xunit.extensibility.core.2.1.0-beta2-build2981.nupkg", + "xunit.extensibility.core.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.extensibility.core.nuspec", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.dll.tdnet", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.pdb", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.core.xml", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.runner.tdnet.dll", + "lib/portable-net45+dnxcore50+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS/xunit.runner.utility.desktop.dll" + ] + }, + "xunit.extensibility.execution/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "FCD7WyGybb/svGjuGfjs+Gqb5EYeP5LKyO+YZRxmSrWvHw55+T3P/kdmqO/84Rx0DAMmnh83CBifk51p9NrD4A==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.extensibility.core": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [ + "Microsoft.CSharp", + "mscorlib", + "System", + "System.Core", + "System.Collections", + "System.Reflection", + "System.Runtime", + "System.Threading.Tasks" + ], + "runtimeAssemblies": [ + "lib/dnx451/xunit.execution.dnx.dll" + ], + "compileAssemblies": [ + "lib/dnx451/xunit.execution.dnx.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.extensibility.core": "[2.1.0-beta2-build2981]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net45/xunit.execution.desktop.dll" + ], + "compileAssemblies": [ + "lib/net45/xunit.execution.desktop.dll" + ] + } + }, + "files": [ + "xunit.extensibility.execution.2.1.0-beta2-build2981.nupkg", + "xunit.extensibility.execution.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.extensibility.execution.nuspec", + "lib/dnx451/xunit.execution.dnx.dll", + "lib/dnx451/xunit.execution.dnx.pdb", + "lib/dnx451/xunit.execution.dnx.xml", + "lib/dnxcore50/xunit.execution.dnx.dll", + "lib/dnxcore50/xunit.execution.dnx.pdb", + "lib/dnxcore50/xunit.execution.dnx.xml", + "lib/monoandroid/xunit.execution.MonoAndroid.dll", + "lib/monoandroid/xunit.execution.MonoAndroid.pdb", + "lib/monoandroid/xunit.execution.MonoAndroid.xml", + "lib/monotouch/xunit.execution.MonoTouch.dll", + "lib/monotouch/xunit.execution.MonoTouch.pdb", + "lib/monotouch/xunit.execution.MonoTouch.xml", + "lib/net45/xunit.execution.desktop.dll", + "lib/net45/xunit.execution.desktop.pdb", + "lib/net45/xunit.execution.desktop.xml", + "lib/portable-wpa81+win81/xunit.execution.universal.dll", + "lib/portable-wpa81+win81/xunit.execution.universal.pdb", + "lib/portable-wpa81+win81/xunit.execution.universal.pri", + "lib/portable-wpa81+win81/xunit.execution.universal.xml", + "lib/win8/xunit.execution.win8.dll", + "lib/win8/xunit.execution.win8.pdb", + "lib/win8/xunit.execution.win8.xml", + "lib/wp8/xunit.execution.wp8.dll", + "lib/wp8/xunit.execution.wp8.pdb", + "lib/wp8/xunit.execution.wp8.xml", + "lib/Xamarin.iOS/xunit.execution.iOS-Universal.dll", + "lib/Xamarin.iOS/xunit.execution.iOS-Universal.pdb", + "lib/Xamarin.iOS/xunit.execution.iOS-Universal.xml" + ] + }, + "xunit.runner.dnx/2.1.0-beta2-build79": { + "serviceable": false, + "sha": "RXeHTGiII/oOYLhFdNygRbspjV+PprxIosHOO/1fv3VBrLqqpPyOHnJWKG4hLYK2v4p0BT+KhrRduLorS8YLSQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4", + "Microsoft.Framework.TestAdapter": "1.0.0-beta4", + "Microsoft.Framework.TestHost": "1.0.0-beta4", + "xunit.runner.utility": "2.1.0-beta2-build2981" + }, + "frameworkAssemblies": [ + "System.Collections", + "System.ObjectModel", + "System.Reflection", + "System.Runtime", + "System.Text.RegularExpressions", + "System.Xml", + "System.Xml.Linq", + "mscorlib", + "System", + "System.Core", + "Microsoft.CSharp" + ], + "runtimeAssemblies": [ + "lib/dnx451/xunit.runner.dnx.dll" + ], + "compileAssemblies": [ + "lib/dnx451/xunit.runner.dnx.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": {}, + "frameworkAssemblies": [], + "runtimeAssemblies": [], + "compileAssemblies": [] + } + }, + "files": [ + "xunit.runner.dnx.2.1.0-beta2-build79.nupkg", + "xunit.runner.dnx.2.1.0-beta2-build79.nupkg.sha512", + "xunit.runner.dnx.nuspec", + "app/project.json", + "app/xunit", + "app/xunit.cmd", + "lib/dnx451/xunit.runner.dnx.dll", + "lib/dnx451/xunit.runner.dnx.xml", + "lib/dnxcore50/xunit.runner.dnx.dll", + "lib/dnxcore50/xunit.runner.dnx.xml" + ] + }, + "xunit.runner.utility/2.1.0-beta2-build2981": { + "serviceable": false, + "sha": "g7jIEcA3ghXVwPAqy55sqbLXnpqEjmCoup5DnqpRVdz7JL2vEQlO4ERJyGx7zRO46iJnwdVWHbHVT4N1bHbeiQ==", + "frameworks": { + "DNX,Version=v4.5.1": { + "dependencies": { + "xunit.abstractions": "[2.0.0]" + }, + "frameworkAssemblies": [ + "Microsoft.CSharp", + "mscorlib", + "System", + "System.Collections", + "System.Core", + "System.Reflection", + "System.Runtime", + "System.Web", + "System.Xml" + ], + "runtimeAssemblies": [ + "lib/dnx451/xunit.runner.utility.dnx.dll" + ], + "compileAssemblies": [ + "lib/dnx451/xunit.runner.utility.dnx.dll" + ] + }, + ".NETFramework,Version=v4.6": { + "dependencies": { + "xunit.abstractions": "[2.0.0]" + }, + "frameworkAssemblies": [], + "runtimeAssemblies": [ + "lib/net35/xunit.runner.utility.desktop.dll" + ], + "compileAssemblies": [ + "lib/net35/xunit.runner.utility.desktop.dll" + ] + } + }, + "files": [ + "xunit.runner.utility.2.1.0-beta2-build2981.nupkg", + "xunit.runner.utility.2.1.0-beta2-build2981.nupkg.sha512", + "xunit.runner.utility.nuspec", + "lib/dnx451/xunit.runner.utility.dnx.dll", + "lib/dnx451/xunit.runner.utility.dnx.pdb", + "lib/dnx451/xunit.runner.utility.dnx.xml", + "lib/dnxcore50/xunit.runner.utility.dnx.dll", + "lib/dnxcore50/xunit.runner.utility.dnx.pdb", + "lib/dnxcore50/xunit.runner.utility.dnx.xml", + "lib/monoandroid/xunit.runner.utility.MonoAndroid.dll", + "lib/monoandroid/xunit.runner.utility.MonoAndroid.pdb", + "lib/monoandroid/xunit.runner.utility.MonoAndroid.xml", + "lib/monotouch/xunit.runner.utility.MonoTouch.dll", + "lib/monotouch/xunit.runner.utility.MonoTouch.pdb", + "lib/monotouch/xunit.runner.utility.MonoTouch.xml", + "lib/net35/xunit.runner.utility.desktop.dll", + "lib/net35/xunit.runner.utility.desktop.pdb", + "lib/net35/xunit.runner.utility.desktop.xml", + "lib/portable-wpa81+win81/xunit.runner.utility.universal.dll", + "lib/portable-wpa81+win81/xunit.runner.utility.universal.pdb", + "lib/portable-wpa81+win81/xunit.runner.utility.universal.pri", + "lib/portable-wpa81+win81/xunit.runner.utility.universal.xml", + "lib/win8/xunit.runner.utility.win8.dll", + "lib/win8/xunit.runner.utility.win8.pdb", + "lib/win8/xunit.runner.utility.win8.xml", + "lib/wp8/xunit.runner.utility.wp8.dll", + "lib/wp8/xunit.runner.utility.wp8.pdb", + "lib/wp8/xunit.runner.utility.wp8.xml", + "lib/Xamarin.iOS/xunit.runner.utility.iOS-Universal.dll", + "lib/Xamarin.iOS/xunit.runner.utility.iOS-Universal.pdb", + "lib/Xamarin.iOS/xunit.runner.utility.iOS-Universal.xml" + ] + } + } +} \ No newline at end of file