Foundatio 10.7.1

前缀已被保留
dotnet add package Foundatio --version 10.7.1                
NuGet\Install-Package Foundatio -Version 10.7.1                
该命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Foundatio" Version="10.7.1" />                
对于支持 PackageReference 的项目,将此 XML 节复制到项目文件中以引用包。
paket add Foundatio --version 10.7.1                
#r "nuget: Foundatio, 10.7.1"                
#r 指令可用于 F# Interactive 和多语言笔记本。将该指令复制到交互式工具或脚本的源代码中以引用包。
// Install Foundatio as a Cake Addin
#addin nuget:?package=Foundatio&version=10.7.1

// Install Foundatio as a Cake Tool
#tool nuget:?package=Foundatio&version=10.7.1                

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

构建松散耦合分布式应用的可插拔基础块。

包括 Redis、Azure、AWS、RabbitMQ、Kafka 和内存(开发使用)中的实现。

为什么选择 Foundatio?

当我们构建几个大型云应用时,我们发现缺少优秀的解决方案(这并不意味着没有解决方案),这对于构建可扩展的分布式应用程序(同时保持开发体验简单)的许多关键部分。以下是一些为什么我们构建和使用 Foundatio 的示例:

  • 希望针对抽象接口进行构建,以便我们可以轻松地更改实现。
  • 希望这些块能友好地支持依赖注入。
  • 缓存:我们最初使用的是一个开源的 Redis 缓存客户端,但后来它变成了一款具有高昂许可成本的商业产品。此外,没有内存中的实现,因此每个开发人员都必须设置和配置 Redis。
  • 消息总线:我们最初考虑了NServiceBus(优秀的产品),但由于高昂的许可费用(它们也需要养活自己)且不支持开源软件,所以放弃了。我们还研究了MassTransit(另一个优秀的产品),但当时发现Azure支持不足,本地设置也是个头疼的事情(对内存来说)。我们想要一个简单易用的消息总线,无论是在本地还是在云端都能正常工作。
  • 存储:我们找不到任何既支持解耦又支持内存、文件存储或Azure Blob存储的现有项目。

总结一下,如果您想在开发和测试过程中避免痛苦,同时允许您的应用程序实现扩展,那么请使用Foundatio!

实现方式

入门指南(开发)

您可以通过NuGet包管理器安装Foundatio。如果需要帮助,请提交问题或加入我们的Discord聊天室。如果您有任何问题,我们随时在这里帮助您!

本节仅用于开发目的!如果您试图使用Foundatio库,请从NuGet获取。

  1. 您需要安装Visual Studio Code
  2. 打开Foundatio.sln Visual Studio解决方案文件。

使用Foundatio

以下各节包含Foundatio可能实现功能的一小部分。我们建议您查看源代码获取更多信息。如果您有任何问题或需要帮助,请告知我们!

缓存

缓存允许您快速存储和访问数据,从而避免了创建或获取数据的昂贵的操作。我们提供了四种不同的缓存实现,这些实现源自于ICacheClient接口

  1. InMemoryCacheClient:一种内存缓存客户端实现。这种缓存实现在进程生存期内有效。值得注意的是,内存缓存客户端具有通过MaxItems属性缓存最后X项的能力。我们使用这个功能在Exceptionless中仅保存最后250个解决的geoip结果
  2. HybridCacheClient:这种缓存实现同时使用ICacheClientInMemoryCacheClient,并使用IMessageBus在进程间保持缓存同步。这可以带来显著的性能提升,因为您节省了序列化操作和调用远程缓存的调用,如果项目存在于本地缓存中。
  3. RedisCacheClient:Redis缓存客户端实现。
  4. RedisHybridCacheClient:一个使用RedisCacheClient作为ICacheClient和使用RedisMessageBus作为IMessageBusHybridCacheClient实现。
  5. ScopedCacheClient:此缓存实现采用一个ICacheClient的实例和一个字符串scope。该作用域会添加到每个缓存键的前面。这使得范围化所有缓存键以及轻松地删除它们变得非常简单。
示例
using Foundatio.Caching;

ICacheClient cache = new InMemoryCacheClient();
await cache.SetAsync("test", 1);
var value = await cache.GetAsync<int>("test");

队列

队列提供先进先出(FIFO)消息传递。我们提供了四个不同队列实现,这些实现都基于IQueue接口

  1. InMemoryQueue:内存队列实现。此队列实现仅在进程的生命周期内有效。
  2. RedisQueue:Redis队列实现。
  3. AzureServiceBusQueue:Azure Service Bus队列实现。
  4. AzureStorageQueue:Azure存储队列实现。
  5. SQSQueue:AWS SQS实现。
示例
using Foundatio.Queues;

IQueue<SimpleWorkItem> queue = new InMemoryQueue<SimpleWorkItem>();

await queue.EnqueueAsync(new SimpleWorkItem {
    Data = "Hello"
});

var workItem = await queue.DequeueAsync();

锁确保资源在任何给定时间只由一个消费者访问。我们提供了两个不同的锁实现,这些实现都基于ILockProvider接口

  1. CacheLockProvider:一个使用缓存在进程之间进行通信的锁实现。
  2. ThrottlingLockProvider:一个仅允许一定数量锁通过的锁实现。您可以使用此功能来限制对某些外部服务的API调用,它将在所有请求该锁的进程中限制它们。
  3. ScopedLockProvider:此锁实现接受一个ILockProvider的实例和一个字符串scope。该作用域会添加到每个锁键的前面。这使得范围化所有锁以及轻松地释放它们变得非常简单。

值得注意的是,所有锁提供者都接受一个ICacheClient。这使得您可以为跨机器上的代码确保适当的锁定。

示例
using Foundatio.Lock;

ILockProvider locker = new CacheLockProvider(new InMemoryCacheClient(), new InMemoryMessageBus());
var testLock = await locker.AcquireAsync("test");
// ...
await testLock.ReleaseAsync();

ILockProvider throttledLocker = new ThrottlingLockProvider(new InMemoryCacheClient(), 1, TimeSpan.FromMinutes(1));
var throttledLock = await throttledLocker.AcquireAsync("test");
// ...
await throttledLock.ReleaseAsync();

消息传递

允许您发布和订阅通过您的应用程序的消息流。我们提供了四个不同的消息总线实现,这些实现都基于IMessageBus接口

  1. InMemoryMessageBus:内存消息总线实现。此消息总线实现仅在进程的生命周期内有效。
  2. RedisMessageBus:Redis消息总线实现。
  3. RabbitMQMessageBus:RabbitMQ实现。
  4. KafkaMessageBus:Kafka实现。
  5. AzureServiceBusMessageBus:Azure Service Bus实现。
示例
using Foundatio.Messaging;

IMessageBus messageBus = new InMemoryMessageBus();
await messageBus.SubscribeAsync<SimpleMessageA>(msg => {
  // Got message
});

await messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" });

作业

允许您运行长时间运行的过程(进程中或进程外),无需担心其被提前终止。我们根据您的用例提供三种不同方式定义工作。

  1. 工作:所有工作都必须从IJob接口派生。我们还提供了一个JobBase基类,您可以从它派生,它提供了工作上下文和记录。然后,您可以通过在作业上调用RunAsync()来运行作业,或者创建一个JobRunner的实例并调用其中的一个运行方法来运行作业。JobRunner可以用来自动地将您的作业作为Azure Web Job运行。
示例
using Foundatio.Jobs;

public class HelloWorldJob : JobBase {
  public int RunCount { get; set; }

  protected override Task<JobResult> RunInternalAsync(JobContext context) {
     RunCount++;
     return Task.FromResult(JobResult.Success);
  }
}
var job = new HelloWorldJob();
await job.RunAsync(); // job.RunCount = 1;
await job.RunContinuousAsync(iterationLimit: 2); // job.RunCount = 3;
await job.RunContinuousAsync(cancellationToken: new CancellationTokenSource(10).Token); // job.RunCount > 10;
  1. 队列处理工作:队列处理工作非常适合处理将由此队列数据驱动的工作。队列处理工作必须从QueueJobBase<T>派生。然后,您可以通过在工作上调用RunAsync()来运行作业,或者将其传递给JobRunner来运行作业。JobRunner可以用来自动地将您的作业作为Azure Web Job运行。
示例
using Foundatio.Jobs;

public class HelloWorldQueueJob : QueueJobBase<HelloWorldQueueItem> {
  public int RunCount { get; set; }

  public HelloWorldQueueJob(IQueue<HelloWorldQueueItem> queue) : base(queue) {}

  protected override Task<JobResult> ProcessQueueEntryAsync(QueueEntryContext<HelloWorldQueueItem> context) {
     RunCount++;

     return Task.FromResult(JobResult.Success);
  }
}

public class HelloWorldQueueItem {
  public string Message { get; set; }
}
 // Register the queue for HelloWorldQueueItem.
container.AddSingleton<IQueue<HelloWorldQueueItem>>(s => new InMemoryQueue<HelloWorldQueueItem>());

// To trigger the job we need to queue the HelloWorldWorkItem message.
// This assumes that we injected an instance of IQueue<HelloWorldWorkItem> queue

IJob job = new HelloWorldQueueJob();
await job.RunAsync(); // job.RunCount = 0; The RunCount wasn't incremented because we didn't enqueue any data.

await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunAsync(); // job.RunCount = 1;

await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunUntilEmptyAsync(); // job.RunCount = 3;
  1. 工作项目工作:工作项目工作将在作业池中与其他工作项目作业一起运行。此类工作非常适合那些不经常发生但应包含在作业中的事情(例如:删除有多个子实体的实体)。当你在消息总线上发布消息时,它将触发生成。该作业必须从WorkItemHandlerBase派生。然后,您可以通过JobRunner运行所有共享作业。JobRunner可以用来自动地将您的作业作为Azure Web Job运行。
示例
using System.Threading.Tasks;
using Foundatio.Jobs;

public class HelloWorldWorkItemHandler : WorkItemHandlerBase {
  public override async Task HandleItemAsync(WorkItemContext ctx) {
    var workItem = ctx.GetData<HelloWorldWorkItem>();

    // We can report the progress over the message bus easily.
    // To receive these messages just inject IMessageSubscriber
    // and Subscribe to messages of type WorkItemStatus
    await ctx.ReportProgressAsync(0, "Starting Hello World Job");
    await Task.Delay(TimeSpan.FromSeconds(2.5));
    await ctx.ReportProgressAsync(50, "Reading value");
    await Task.Delay(TimeSpan.FromSeconds(.5));
    await ctx.ReportProgressAsync(70, "Reading value");
    await Task.Delay(TimeSpan.FromSeconds(.5));
    await ctx.ReportProgressAsync(90, "Reading value.");
    await Task.Delay(TimeSpan.FromSeconds(.5));

    await ctx.ReportProgressAsync(100, workItem.Message);
  }
}

public class HelloWorldWorkItem {
  public string Message { get; set; }
}
// Register the shared job.
var handlers = new WorkItemHandlers();
handlers.Register<HelloWorldWorkItem, HelloWorldWorkItemHandler>();

// Register the handlers with dependency injection.
container.AddSingleton(handlers);

// Register the queue for WorkItemData.
container.AddSingleton<IQueue<WorkItemData>>(s => new InMemoryQueue<WorkItemData>());

// The job runner will automatically look for and run all registered WorkItemHandlers.
new JobRunner(container.GetRequiredService<WorkItemJob>(), instanceCount: 2).RunInBackground();
 // To trigger the job we need to queue the HelloWorldWorkItem message.
 // This assumes that we injected an instance of IQueue<WorkItemData> queue

 // NOTE: You may have noticed that HelloWorldWorkItem doesn't derive from WorkItemData.
 // Foundatio has an extension method that takes the model you post and serializes it to the
 // WorkItemData.Data property.
 await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });

文件存储

我们提供不同的文件存储实现,这些实现来自IFileStorage接口

  1. InMemoryFileStorage:内存中的文件实现。此文件存储实现只在进程的生命周期内有效。
  2. FolderFileStorage:使用硬盘进行存储的文件存储实现。
  3. AzureFileStorage:Azure Blob存储实现。
  4. S3FileStorage:AWS S3文件存储实现。
  5. RedisFileStorage:Redis文件存储实现。
  6. MinioFileStorage:Minio文件存储实现。
  7. AliyunFileStorage:阿里云文件存储实现。
  8. SshNetFileStorage:SFTP文件存储实现。

我们建议将所有IFileStorage实现作为单例使用。

示例
using Foundatio.Storage;

IFileStorage storage = new InMemoryFileStorage();
await storage.SaveFileAsync("test.txt", "test");
string content = await storage.GetFileContentsAsync("test.txt")

指标

我们提供了五个派生自IMetricsClient接口的实现。

  1. InMemoryMetricsClient:内存中的度量值实现。
  2. RedisMetricsClient:Redis度量值实现。
  3. StatsDMetricsClient:statsd 指标实现。
  4. MetricsNETClient:Metrics.NET 实现参考Metrics.NET
  5. AppMetricsClient:AppMetrics 实现参考AppMetrics
  6. CloudWatchMetricsClient:AWS CloudWatch 实现参考AWS CloudWatch

我们建议使用所有的 IMetricsClient 实现作为单例。

示例
IMetricsClient metrics = new InMemoryMetricsClient();
metrics.Counter("c1");
metrics.Gauge("g1", 2.534);
metrics.Timer("t1", 50788);

示例应用

我们提供幻灯片以及展示如何使用 Foundatio 的示例应用

感谢所有这些做出贡献的人们

contributors

产品 兼容以及额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard

NuGet 包 (50)

显示依赖于 Foundatio 的前 5 个 NuGet 包

下载
Foundatio.Redis

用于构建分布式应用的插件化基础块。

Foundatio.JsonNet

用于构建分布式应用的插件化基础块。

Foundatio.AzureStorage

用于构建分布式应用的插件化基础块。

Foundatio.AzureServiceBus

用于构建分布式应用的插件化基础块。

Foundatio.Repositories

适用于 Elasticsearch 的泛型仓库实现。

GitHub 仓库 (1)

显示依赖于 Foundatio 的最受欢迎的 1 个 GitHub 仓库

仓库 星级
Kaioru/Edelstein
C# .NET 开发的 v.95.1 蘑菇游戏服务器模拟器
版本 下载 最后更新
10.7.1 336,556 3/27/2024
10.7.0 155,073 1/5/2024
10.6.1 312,837 6/23/2023
10.6.0 312,816 1/1/2023
10.5.0 145,358 5/18/2022
10.4.0 36,418 3/7/2022
10.3.1 25,418 1/20/2022
10.3.0 4,437 1/20/2022
10.2.5 158,527 12/7/2021
10.2.4 4,811 12/3/2021
10.2.3 6,965 11/22/2021
10.2.2 195,489 9/23/2021
10.2.1 31,964 7/19/2021
10.2.0 83,787 7/8/2021
10.1.4 19,917 6/16/2021
10.1.3 30,500 4/23/2021
10.1.2 3,292 4/23/2021
10.1.1 6,244 4/15/2021
10.1.0 4,072 4/13/2021
10.0.2 81,961 1/20/2021
10.0.1 38,635 11/2/2020
10.0.0 45,126 9/16/2020
10.0.0-beta9 6,098 8/25/2020
10.0.0-beta8 5,255 8/3/2020
10.0.0-beta7 4,435 7/29/2020
10.0.0-beta6 5,689 7/7/2020
10.0.0-beta5 5,214 6/20/2020
10.0.0-beta3 4,721 6/14/2020
10.0.0-beta2 4,751 6/6/2020
10.0.0-beta10 4,373 9/15/2020
10.0.0-beta1 5,443 5/26/2020
10.0.0-alpha3 2,824 5/5/2020
10.0.0-alpha2 2,854 4/27/2020
10.0.0-alpha1 2,736 4/25/2020
9.1.1 145,001 4/28/2020
9.1.0 4,278 4/28/2020
9.0.0 142,377 1/16/2020
8.1.2126 346,154 8/30/2019
8.1.2058 90,270 5/14/2019
8.1.2027 18,489 4/16/2019
8.0.1965 58,054 2/24/2019
8.0.1948 9,815 2/22/2019
7.1.1845 243,836 11/3/2018
7.1.1841 5,854 11/3/2018
7.1.1837 5,819 11/1/2018
7.1.1833 26,410 11/1/2018
7.0.1831 5,854 11/1/2018
7.0.1818 6,459 10/30/2018
7.0.1738 64,143 9/7/2018
7.0.1706 90,884 5/9/2018
6.0.1586 49,711 11/30/2017
5.1.1562 10,762 10/30/2017
5.1.1521 12,172 9/27/2017
5.1.1515 5,885 9/26/2017
5.1.1501 11,448 9/14/2017
5.1.1498 6,207 8/28/2017
5.1.1492 5,958 8/28/2017
5.1.1490 13,772 8/16/2017
5.1.1474 23,635 8/1/2017
5.1.1470 5,416 7/31/2017
5.1.1457 26,188 6/23/2017
5.1.1448 12,207 5/5/2017
5.1.1443 6,948 5/5/2017
5.0.1336 9,668 3/14/2017
5.0.1334 6,097 3/13/2017
5.0.1331 6,844 3/12/2017
5.0.1329-pre 4,784 3/12/2017
5.0.1328-pre 4,774 3/12/2017
5.0.1327-pre 4,816 3/12/2017
5.0.1326-pre 4,768 3/12/2017
5.0.1324-pre 4,712 3/12/2017
4.3.1323-pre 4,853 3/11/2017
4.3.1319 7,581 3/1/2017
4.3.1317 8,391 2/23/2017
4.3.1316 6,104 2/22/2017
4.3.1315 6,071 2/22/2017
4.3.1314 12,065 2/20/2017
4.3.1312 5,920 2/20/2017
4.3.1311-pre 4,722 2/20/2017
4.3.1307 10,385 2/16/2017
4.3.1306 5,901 2/15/2017
4.3.1305 6,957 2/15/2017
4.3.1304-pre 4,728 2/15/2017
4.3.1303-pre 4,670 2/14/2017
4.3.1301 6,340 2/14/2017
4.3.1299 6,448 2/14/2017
4.3.1297 4,180 2/14/2017
4.3.1293 5,914 2/12/2017
4.3.1292 5,898 2/10/2017
4.3.1291 5,869 2/10/2017
4.3.1290 5,994 2/10/2017
4.3.1289 5,939 2/9/2017
4.3.1288 5,917 2/9/2017
4.3.1286 5,977 2/8/2017
4.3.1282 7,316 2/5/2017
4.3.1281 4,231 2/5/2017
4.3.1280 4,282 2/5/2017
4.3.1276-pre 3,880 2/5/2017
4.3.1177-pre 8,034 9/2/2016
4.3.1164-pre 8,455 8/21/2016
4.2.1205-pre 4,059 9/19/2016
4.2.1183 55,244 9/9/2016
4.2.1179 4,131 9/8/2016
4.2.1176 9,063 9/2/2016
4.2.1172 4,052 9/1/2016
4.2.1171-pre 3,712 9/1/2016
4.2.1169 17,750 8/22/2016
4.2.1167-pre 3,691 8/22/2016
4.2.1166-pre 3,756 8/22/2016
4.2.1161 10,142 8/10/2016
4.2.1156-pre 3,690 8/2/2016
4.2.1155 5,468 8/1/2016
4.2.1150 7,319 7/20/2016
4.2.1149-pre 4,100 7/19/2016
4.2.1148-pre 4,069 7/19/2016
4.2.1147-pre 4,062 7/19/2016
4.2.1146-pre 4,091 7/19/2016
4.2.1137 4,099 7/19/2016
4.2.1129-pre 3,702 7/19/2016
4.2.1128-pre 3,718 7/19/2016
4.2.1127-pre 3,712 7/19/2016
4.2.1126-pre 3,738 7/19/2016
4.2.1125-pre 3,684 7/19/2016
4.2.1123-pre 3,703 7/19/2016
4.2.1119-pre 3,749 7/18/2016
4.2.1113-pre 4,122 7/16/2016
4.2.1108-pre 4,119 7/15/2016
4.2.1107-pre 4,114 7/15/2016
4.2.1104-pre 4,251 7/13/2016
4.2.1099-pre 7,303 7/12/2016
4.2.1098-pre 4,171 7/12/2016
4.2.1093-pre 4,029 7/8/2016
4.2.1091-pre 4,063 7/8/2016
4.2.1090-pre 4,086 7/8/2016
4.2.1089-pre 4,096 7/7/2016
4.2.1087-pre 4,083 7/7/2016
4.2.1083-pre 4,062 7/6/2016
4.2.1082-pre 4,039 7/6/2016
4.2.1081-pre 4,016 7/6/2016
4.2.1079-pre 4,080 7/6/2016
4.2.1078-pre 4,068 7/6/2016
4.2.1073-pre 3,964 7/5/2016
4.2.1070-pre 4,050 7/5/2016
4.2.1069-pre 4,051 7/1/2016
4.2.1059-pre 4,035 7/1/2016
4.2.1046-pre 3,961 6/24/2016
4.2.1031-pre 3,724 6/24/2016
4.2.1028-pre 3,717 6/24/2016
4.2.1027-pre 3,738 6/24/2016
4.1.1009 12,897 6/15/2016
4.1.1002-pre 5,040 6/14/2016
4.1.995-pre 5,237 6/13/2016
4.1.989-pre 5,041 5/26/2016
4.1.983-pre 4,680 5/25/2016
4.1.982-pre 4,691 5/25/2016
4.1.978-pre 4,843 5/6/2016
4.1.977-pre 4,730 5/5/2016
4.1.975-pre 5,257 5/5/2016
4.0.958 8,198 5/1/2016
4.0.957 6,453 4/29/2016
4.0.956 6,414 4/29/2016
4.0.955 6,415 4/28/2016
4.0.941 6,364 4/27/2016
4.0.940 6,438 4/27/2016
4.0.925 6,312 4/27/2016
4.0.922 6,145 4/27/2016
4.0.909 6,371 4/20/2016
4.0.880 6,756 4/7/2016
4.0.869 6,314 3/30/2016
4.0.864 6,131 3/29/2016
4.0.861 6,251 3/29/2016
4.0.860 6,316 3/29/2016
4.0.857 6,160 3/29/2016
4.0.855 6,203 3/29/2016
4.0.846 6,012 3/22/2016
4.0.842 6,161 3/21/2016
4.0.836 6,036 3/18/2016
4.0.835 6,129 3/18/2016
4.0.834 6,131 3/17/2016
4.0.832 5,954 3/17/2016
4.0.831 6,035 3/16/2016
4.0.829 5,966 3/16/2016
4.0.828 5,939 3/15/2016
4.0.827 6,021 3/15/2016
4.0.826 5,803 3/15/2016
4.0.825 6,108 3/13/2016
4.0.821 6,034 3/11/2016
4.0.819 5,993 3/11/2016
4.0.818 6,042 3/11/2016
4.0.816 6,007 3/11/2016
4.0.815 5,813 3/11/2016
4.0.814 5,994 3/11/2016
4.0.813 5,975 3/10/2016
4.0.812 6,065 3/10/2016
4.0.811 5,853 3/10/2016
4.0.810 5,974 3/10/2016
4.0.809 6,013 3/10/2016
4.0.805 6,003 3/9/2016
4.0.797 5,968 3/9/2016
4.0.796 5,966 3/9/2016
4.0.794 6,039 3/9/2016
4.0.793 5,916 3/9/2016
4.0.792 5,904 3/8/2016
4.0.791 11,108 3/8/2016
4.0.790 5,957 3/8/2016
4.0.788 5,992 3/8/2016
4.0.774 6,264 3/2/2016
4.0.773 6,063 3/1/2016
4.0.772 6,129 3/1/2016
4.0.770 5,996 3/1/2016
4.0.769 6,023 3/1/2016
4.0.762 6,007 3/1/2016
4.0.761 6,314 3/1/2016
4.0.760 7,385 2/29/2016
4.0.759 6,001 2/29/2016
4.0.758 6,201 2/29/2016
4.0.757 5,832 2/29/2016
4.0.756 6,378 2/27/2016
4.0.755 6,446 2/27/2016
4.0.754 6,326 2/27/2016
4.0.753 6,317 2/27/2016
4.0.752 6,138 2/27/2016
4.0.750 6,416 2/27/2016
4.0.749 6,320 2/27/2016
4.0.747 6,402 2/26/2016
4.0.746 6,401 2/26/2016
4.0.744 6,282 2/26/2016
4.0.743 6,431 2/26/2016
4.0.742 6,330 2/26/2016
4.0.741 6,272 2/26/2016
4.0.739 6,044 2/25/2016
4.0.738 6,137 2/25/2016
4.0.734 5,903 2/25/2016
4.0.733-beta 4,709 2/25/2016
4.0.672 6,492 2/16/2016
4.0.669 5,837 2/11/2016
4.0.668 30,518 2/11/2016
3.0.654 7,100 2/10/2016
3.0.646 5,651 2/5/2016
3.0.645 5,685 2/5/2016
3.0.644 5,542 2/5/2016
3.0.639 5,567 2/3/2016
3.0.638 5,700 2/2/2016
3.0.637 5,555 2/1/2016
3.0.635 5,548 2/1/2016
3.0.633 9,536 1/27/2016
3.0.632 5,552 1/27/2016
3.0.629 5,748 1/18/2016
3.0.626 5,494 1/18/2016
3.0.625 5,452 1/18/2016
3.0.624 15,931 12/17/2015
3.0.623 5,756 12/9/2015
3.0.622 5,589 12/9/2015
3.0.621 5,726 12/9/2015
3.0.620 5,580 12/8/2015
3.0.613 6,204 12/4/2015
3.0.611 5,713 12/3/2015
3.0.610 5,971 11/30/2015
3.0.606 5,916 11/30/2015
3.0.605 5,933 11/25/2015
3.0.603 5,848 11/23/2015
3.0.601 5,639 11/23/2015
3.0.600 5,587 11/19/2015
3.0.599 5,588 11/19/2015
3.0.598 5,610 11/17/2015
3.0.592 5,518 11/12/2015
3.0.589 5,693 11/10/2015
3.0.588 5,672 11/10/2015
3.0.586 5,660 11/10/2015
3.0.584 5,662 11/10/2015
3.0.583 5,652 11/10/2015
3.0.581 5,903 11/6/2015
3.0.579 5,546 11/6/2015
3.0.576 5,623 11/5/2015
3.0.575 5,601 11/4/2015
3.0.574 5,516 11/4/2015
3.0.569 5,615 11/3/2015
3.0.568 5,623 11/3/2015
3.0.566 5,601 11/3/2015
3.0.548 4,091 11/3/2015
3.0.545 5,797 10/28/2015
3.0.538 5,744 10/22/2015
3.0.537 5,665 10/21/2015
3.0.536 5,689 10/21/2015
3.0.534 5,637 10/21/2015
3.0.532 5,572 10/21/2015
3.0.531 5,666 10/21/2015
3.0.524 5,613 10/15/2015
3.0.523 5,859 10/10/2015
3.0.522 5,577 10/10/2015
3.0.520 5,656 10/9/2015
3.0.519 5,933 10/9/2015
3.0.518 5,803 10/9/2015
3.0.517 5,872 10/9/2015
3.0.516 5,788 10/7/2015
3.0.514 5,889 10/6/2015
3.0.513 5,677 10/6/2015
3.0.512 5,720 10/6/2015
3.0.509 5,846 10/1/2015
3.0.507 5,722 10/1/2015
3.0.505 5,628 9/30/2015
3.0.503 5,758 9/30/2015
3.0.502 5,722 9/30/2015
3.0.479 5,737 9/25/2015
3.0.476 5,675 9/24/2015
3.0.471 5,687 9/24/2015
3.0.470 5,737 9/24/2015
3.0.469 5,646 9/24/2015
3.0.468 5,650 9/24/2015
3.0.467 5,673 9/24/2015
3.0.465 5,666 9/24/2015
3.0.459 5,650 9/23/2015
3.0.456 5,686 9/23/2015
3.0.455 5,678 9/22/2015
3.0.454 5,861 9/19/2015
3.0.453 5,658 9/19/2015
3.0.452 5,571 9/18/2015
3.0.451 5,596 9/18/2015
3.0.450 5,620 9/18/2015
3.0.447 6,860 9/18/2015
2.0.378 5,713 9/5/2015
2.0.372 5,634 9/4/2015
2.0.370 5,698 9/4/2015
2.0.368 5,573 9/4/2015
2.0.365 6,559 9/3/2015
2.0.363 5,550 9/3/2015
2.0.361 5,607 9/3/2015
1.0.360 5,652 9/1/2015
1.0.359 5,594 9/1/2015
1.0.358 5,639 9/1/2015
1.0.356 5,624 8/31/2015
1.0.355 5,677 8/31/2015
1.0.354 5,641 8/29/2015
1.0.305 5,646 8/19/2015
1.0.299 6,083 8/8/2015
1.0.293 5,708 7/20/2015
1.0.292 5,715 7/20/2015
1.0.289 5,814 7/10/2015
1.0.288 5,725 7/10/2015
1.0.286 5,717 7/7/2015
1.0.285 5,786 7/7/2015
1.0.284 5,671 7/7/2015
1.0.282 5,682 7/6/2015
1.0.281 5,675 7/6/2015
1.0.279 5,618 7/6/2015
1.0.277 5,721 6/18/2015
1.0.276 5,711 6/8/2015
1.0.275 5,658 6/8/2015
1.0.274 5,492 6/8/2015
1.0.272 6,179 6/1/2015
1.0.269 5,569 5/25/2015
1.0.268 5,606 5/24/2015
1.0.266 5,587 5/24/2015
1.0.263 5,671 5/21/2015
1.0.258 5,658 5/19/2015
1.0.257 5,660 5/18/2015
1.0.256 5,757 5/17/2015
1.0.254 5,723 5/13/2015
1.0.253 5,610 5/13/2015
1.0.250 5,601 5/13/2015
1.0.249 5,679 5/12/2015
1.0.248 5,602 5/12/2015
1.0.245 5,588 5/12/2015
1.0.241 5,612 5/12/2015
1.0.240 5,414 5/12/2015
1.0.237 5,433 5/11/2015
1.0.234 5,397 5/9/2015
1.0.233 5,280 5/9/2015
1.0.231 5,390 5/7/2015
1.0.230 5,483 5/7/2015
1.0.229 5,358 5/7/2015
1.0.226 5,365 5/7/2015
1.0.217 5,629 4/28/2015
1.0.215 5,522 4/27/2015
1.0.213 5,604 4/23/2015
1.0.210 5,390 4/23/2015
1.0.209 5,374 4/15/2015
1.0.202 5,456 4/15/2015
1.0.201 5,425 4/15/2015
1.0.198 5,346 4/15/2015
1.0.197 5,396 4/15/2015
1.0.196 5,498 4/15/2015
1.0.195 5,456 4/15/2015
1.0.194 5,442 4/15/2015
1.0.193 5,425 4/15/2015
1.0.192 5,382 4/15/2015
1.0.191 5,525 4/14/2015
1.0.189 5,394 4/10/2015
1.0.187 5,469 4/9/2015
1.0.186 5,512 4/8/2015
1.0.185 5,603 4/6/2015
1.0.183 5,300 4/3/2015
1.0.181 5,454 4/3/2015
1.0.180 5,464 4/2/2015
1.0.178 5,394 4/1/2015
1.0.177 5,451 4/1/2015
1.0.175 5,350 4/1/2015
1.0.171 5,353 3/31/2015
1.0.170 5,283 3/31/2015
1.0.168 5,367 3/31/2015
1.0.164 5,634 3/30/2015
1.0.162 5,582 3/28/2015
1.0.160 5,593 3/27/2015
1.0.159 5,595 3/26/2015
1.0.157 5,176 3/24/2015
1.0.156 5,551 3/24/2015
1.0.154 5,496 3/24/2015
1.0.152 5,742 3/24/2015
1.0.151 5,541 3/23/2015
1.0.150 5,588 3/23/2015
1.0.149 5,623 3/23/2015
1.0.148 5,585 3/23/2015
1.0.147 5,499 3/21/2015
1.0.146 5,602 3/20/2015
1.0.145 5,604 3/19/2015
1.0.143 5,724 3/18/2015
1.0.142 5,709 3/12/2015
1.0.141 5,560 3/12/2015
1.0.140 5,532 3/5/2015
1.0.139 5,566 3/5/2015
1.0.138 5,574 3/4/2015
1.0.137 5,482 3/3/2015
1.0.134 5,922 3/3/2015
1.0.129 5,690 3/3/2015
1.0.128 5,636 3/3/2015
1.0.125 5,649 2/28/2015
1.0.124 5,886 2/28/2015
1.0.122 5,635 2/28/2015
1.0.119 5,939 2/25/2015
1.0.117 6,244 2/24/2015
1.0.115 5,972 2/24/2015
1.0.114 5,809 2/23/2015
1.0.113 5,768 2/23/2015
1.0.112 5,898 2/23/2015
1.0.111 5,983 2/23/2015
1.0.110 5,945 2/23/2015
1.0.109 5,865 2/22/2015
1.0.108 5,791 2/22/2015
1.0.103 5,973 2/22/2015
1.0.37 4,683 2/18/2015
1.0.36 4,790 2/18/2015
1.0.35 4,865 2/17/2015
1.0.34 4,807 2/17/2015
1.0.33 4,876 2/17/2015
1.0.32 4,839 2/15/2015
1.0.31 4,830 2/15/2015
1.0.30 4,272 2/15/2015
1.0.28 4,464 2/15/2015
1.0.27 4,324 2/15/2015
1.0.26 4,388 2/13/2015
1.0.25 4,364 2/13/2015
1.0.24 4,292 2/12/2015
1.0.23 4,326 2/12/2015
1.0.0 6,264 2/21/2015