Foundatio.Redis 10.5.0 The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved

.NET Standard 2.0
Install-Package Foundatio.Redis -Version 10.5.0
dotnet add package Foundatio.Redis --version 10.5.0
<PackageReference Include="Foundatio.Redis" Version="10.5.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Foundatio.Redis --version 10.5.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Foundatio.Redis, 10.5.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Foundatio.Redis as a Cake Addin
#addin nuget:?package=Foundatio.Redis&version=10.5.0

// Install Foundatio.Redis as a Cake Tool
#tool nuget:?package=Foundatio.Redis&version=10.5.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

Pluggable foundation blocks for building loosely coupled distributed apps.

Includes implementations in Redis, Azure, AWS, RabbitMQ and in memory (for development).

Why Foundatio?

When building several big cloud applications we found a lack of great solutions (that's not to say there isn't solutions out there) for many key pieces to building scalable distributed applications while keeping the development experience simple. Here are a few examples of why we built and use Foundatio:

  • Wanted to build against abstract interfaces so that we could easily change implementations.
  • Wanted the blocks to be dependency injection friendly.
  • Caching: We were initially using an open source Redis cache client but then it turned into a commercial product with high licensing costs. Not only that, but there weren't any in memory implementations so every developer was required to set up and configure Redis.
  • Message Bus: We initially looked at NServiceBus (great product) but it had high licensing costs (they have to eat too) but was not OSS friendly. We also looked into MassTransit but found Azure support lacking and local set up a pain. We wanted a simple message bus that just worked locally or in the cloud.
  • Storage: We couldn't find any existing project that was decoupled and supported in memory, file storage or Azure Blob Storage.

To summarize, if you want pain free development and testing while allowing your app to scale, use Foundatio!

Implementations

Getting Started (Development)

Foundatio can be installed via the NuGet package manager. If you need help, please open an issue or join our Discord chat room. We’re always here to help if you have any questions!

This section is for development purposes only! If you are trying to use the Foundatio libraries, please get them from NuGet.

  1. You will need to have Visual Studio Code installed.
  2. Open the Foundatio.sln Visual Studio solution file.

Using Foundatio

The sections below contain a small subset of what's possible with Foundatio. We recommend taking a peek at the source code for more information. Please let us know if you have any questions or need assistance!

Caching

Caching allows you to store and access data lightning fast, saving you exspensive operations to create or get data. We provide four different cache implementations that derive from the ICacheClient interface:

  1. InMemoryCacheClient: An in memory cache client implementation. This cache implementation is only valid for the lifetime of the process. It's worth noting that the in memory cache client has the ability to cache the last X items via the MaxItems property. We use this in Exceptionless to only keep the last 250 resolved geoip results.
  2. HybridCacheClient: This cache implementation uses the InMemoryCacheClient and uses the IMessageBus to keep the cache in sync across processes.
  3. RedisCacheClient: A Redis cache client implementation.
  4. RedisHybridCacheClient: This cache implementation uses both the RedisCacheClient and InMemoryCacheClient implementations and uses the RedisMessageBus to keep the in memory cache in sync across processes. This can lead to huge wins in performance as you are saving a serialization operation and call to Redis if the item exists in the local cache.
  5. ScopedCacheClient: This cache implementation takes an instance of ICacheClient and a string scope. The scope is prefixed onto every cache key. This makes it really easy to scope all cache keys and remove them with ease.
Sample
using Foundatio.Caching;

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

Queues

Queues offer First In, First Out (FIFO) message delivery. We provide four different queue implementations that derive from the IQueue interface:

  1. InMemoryQueue: An in memory queue implementation. This queue implementation is only valid for the lifetime of the process.
  2. RedisQueue: An Redis queue implementation.
  3. AzureServiceBusQueue: An Azure Service Bus Queue implementation.
  4. AzureStorageQueue: An Azure Storage Queue implementation.
  5. SQSQueue: An AWS SQS implementation.
Sample
using Foundatio.Queues;

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

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

var workItem = await queue.DequeueAsync();

Locks

Locks ensure a resource is only accessed by one consumer at any given time. We provide two different locking implementations that derive from the ILockProvider interface:

  1. CacheLockProvider: A lock implementation that uses cache to communicate between processes.
  2. ThrottlingLockProvider: A lock implementation that only allows a certain amount of locks through. You could use this to throttle api calls to some external service and it will throttle them across all processes asking for that lock.
  3. ScopedLockProvider: This lock implementation takes an instance of ILockProvider and a string scope. The scope is prefixed onto every lock key. This makes it really easy to scope all locks and release them with ease.

It's worth noting that all lock providers take a ICacheClient. This allows you to ensure your code locks properly across machines.

Sample
using Foundatio.Lock;

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

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

Messaging

Allows you to publish and subscribe to messages flowing through your application. We provide four different message bus implementations that derive from the IMessageBus interface:

  1. InMemoryMessageBus: An in memory message bus implementation. This message bus implementation is only valid for the lifetime of the process.
  2. RedisMessageBus: A Redis message bus implementation.
  3. RabbitMQMessageBus: A RabbitMQ implementation.
  4. AzureServiceBusMessageBus: An Azure Service Bus implementation.
Sample
using Foundatio.Messaging;

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

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

Jobs

Allows you to run a long running process (in process or out of process) without worrying about it being terminated prematurely. We provide three different ways of defining a job, based on your use case:

  1. Jobs: All jobs must derive from the IJob interface. We also have a JobBase base class you can derive from which provides a JobContext and logging. You can then run jobs by calling RunAsync() on the job or by creating a instance of the JobRunner class and calling one of the Run methods. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
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. Queue Processor Jobs: A queue processor job works great for working with jobs that will be driven from queued data. Queue Processor jobs must derive from QueueJobBase<T> class. You can then run jobs by calling RunAsync() on the job or passing it to the JobRunner class. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
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. Work Item Jobs: A work item job will run in a job pool among other work item jobs. This type of job works great for things that don't happen often but should be in a job (Example: Deleting an entity that has many children.). It will be triggered when you publish a message on the message bus. The job must derive from the WorkItemHandlerBase class. You can then run all shared jobs via JobRunner class. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
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" });

File Storage

We provide different file storage implementations that derive from the IFileStorage interface:

  1. InMemoryFileStorage: An in memory file implementation. This file storage implementation is only valid for the lifetime of the process.
  2. FolderFileStorage: An file storage implementation that uses the hard drive for storage.
  3. AzureFileStorage: An Azure Blob storage implementation.
  4. S3FileStorage: An AWS S3 file storage implementation.
  5. RedisFileStorage: An Redis file storage implementation.
  6. MinioFileStorage An Minio file storage implementation.
  7. AliyunFileStorage: An Aliyun file storage implementation.
  8. SshNetFileStorage: An SFTP file storage implementation.

We recommend using all of the IFileStorage implementations as singletons.

Sample
using Foundatio.Storage;

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

Metrics

We provide five implementations that derive from the IMetricsClient interface:

  1. InMemoryMetricsClient: An in memory metrics implementation.
  2. RedisMetricsClient: An Redis metrics implementation.
  3. StatsDMetricsClient: An statsd metrics implementation.
  4. MetricsNETClient: An Metrics.NET implementation.
  5. AppMetricsClient: An AppMetrics implementation.
  6. CloudWatchMetricsClient: An AWS CloudWatch implementation.

We recommend using all of the IMetricsClient implementations as singletons.

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

Sample Application

We have both slides and a sample application that shows off how to use Foundatio.

Roadmap

This is a list of high level things that we are planning to do:

Product Versions
.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
.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
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on Foundatio.Redis:

Package Downloads
SoftwarePioniere.Fx.Redis

Package Description

SoftwarePioniere.Foundatio.Redis

Software Pioniere Fx Foundatio Redis Extensions

HttpRequester

Multiple http clients

IFramework.FoundatioRedis

Description

Tcg.Owin.Cookies.SessionStore.Redis

Package Description

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Foundatio.Redis:

Repository Stars
exceptionless/Exceptionless
Exceptionless server and jobs
Version Downloads Last updated
10.5.0 174 5/18/2022
10.4.0 6,979 3/8/2022
10.3.0 4,142 1/20/2022
10.2.3 52,514 9/24/2021
10.2.2 201 9/23/2021
10.2.0 29,283 7/8/2021
10.1.0 7,005 6/16/2021
10.0.2 35,307 1/20/2021
10.0.0 28,515 9/16/2020
10.0.0-beta9 900 8/25/2020
10.0.0-beta8 300 8/3/2020
10.0.0-beta6 763 7/8/2020
10.0.0-beta5 478 6/20/2020
10.0.0-beta3 398 6/14/2020
10.0.0-beta2 347 6/6/2020
10.0.0-beta10 296 9/16/2020
10.0.0-beta1 355 5/26/2020
9.0.0 54,472 1/16/2020
8.1.1662 69,385 8/30/2019
8.1.1651 12,077 8/1/2019
8.1.1648 1,124 7/20/2019
8.1.1642 10,299 5/14/2019
8.1.1638 2,131 4/16/2019
8.0.1631 1,112 4/3/2019
8.0.1627 8,390 2/24/2019
8.0.1621 779 2/22/2019
7.1.1608 82,050 11/9/2018
7.0.1584 3,436 10/18/2018
7.0.1570 2,081 9/7/2018
7.0.1564 17,264 5/9/2018
6.0.1496 5,591 11/30/2017
5.1.1478 8,915 8/21/2017
5.1.1468 4,901 6/23/2017
5.1.1460 1,344 5/5/2017
5.0.1336 993 3/14/2017
5.0.1334 798 3/13/2017
5.0.1331 809 3/12/2017
5.0.1329-pre 692 3/12/2017
5.0.1328-pre 691 3/12/2017
5.0.1327-pre 749 3/12/2017
5.0.1326-pre 749 3/12/2017
5.0.1324-pre 726 3/12/2017
4.3.1323-pre 718 3/11/2017
4.3.1317 2,688 2/23/2017
4.3.1316 855 2/22/2017
4.3.1315 922 2/22/2017
4.3.1314 1,075 2/20/2017
4.3.1312 835 2/20/2017
4.3.1311-pre 716 2/20/2017
4.3.1307 863 2/16/2017
4.3.1306 872 2/15/2017
4.3.1305 789 2/15/2017
4.3.1304-pre 715 2/15/2017
4.3.1303-pre 686 2/14/2017
4.3.1301 841 2/14/2017
4.3.1299 826 2/14/2017
4.3.1293 886 2/12/2017
4.3.1292 873 2/10/2017
4.3.1291 874 2/10/2017
4.3.1290 830 2/10/2017
4.3.1289 830 2/9/2017
4.3.1288 781 2/9/2017
4.3.1286 790 2/8/2017
4.3.1282 852 2/5/2017
4.3.1281 823 2/5/2017
4.3.1280 831 2/5/2017
4.3.1276-pre 707 2/5/2017
4.3.1177-pre 859 9/2/2016
4.3.1164-pre 703 8/21/2016
4.2.1205-pre 1,034 9/19/2016
4.2.1183 1,779 9/9/2016
4.2.1179 761 9/8/2016
4.2.1176 799 9/2/2016
4.2.1172 735 9/1/2016
4.2.1171-pre 724 9/1/2016
4.2.1169 806 8/22/2016
4.2.1167-pre 689 8/22/2016
4.2.1166-pre 715 8/22/2016
4.2.1161 761 8/10/2016
4.2.1156-pre 664 8/2/2016
4.2.1155 775 8/1/2016
4.2.1150 974 7/20/2016
4.2.1149-pre 722 7/19/2016
4.2.1148-pre 712 7/19/2016
4.2.1147-pre 681 7/19/2016
4.2.1146-pre 720 7/19/2016
4.2.1137 775 7/19/2016
4.2.1129-pre 693 7/19/2016
4.2.1128-pre 681 7/19/2016
4.2.1127-pre 660 7/19/2016
4.2.1126-pre 683 7/19/2016
4.2.1125-pre 685 7/19/2016
4.2.1123-pre 714 7/19/2016
4.2.1119-pre 685 7/18/2016
4.2.1113-pre 727 7/16/2016
4.2.1108-pre 764 7/15/2016
4.2.1107-pre 750 7/15/2016
4.2.1104-pre 919 7/13/2016
4.2.1099-pre 908 7/12/2016
4.2.1098-pre 893 7/12/2016
4.2.1093-pre 770 7/8/2016
4.2.1091-pre 786 7/8/2016
4.2.1090-pre 784 7/8/2016
4.2.1089-pre 780 7/7/2016
4.2.1087-pre 780 7/7/2016
4.2.1083-pre 773 7/6/2016
4.2.1082-pre 752 7/6/2016
4.2.1081-pre 757 7/6/2016
4.2.1079-pre 751 7/6/2016
4.2.1078-pre 733 7/6/2016
4.2.1073-pre 772 7/5/2016
4.2.1070-pre 787 7/5/2016
4.2.1069-pre 728 7/1/2016
4.2.1059-pre 744 7/1/2016
4.2.1046-pre 702 6/24/2016
4.2.1031-pre 677 6/24/2016
4.2.1028-pre 696 6/24/2016
4.2.1027-pre 699 6/24/2016
4.1.1009 1,018 6/15/2016
4.1.1002-pre 993 6/14/2016
4.1.995-pre 998 6/13/2016
4.1.989-pre 1,025 5/26/2016
4.1.983-pre 713 5/25/2016
4.1.982-pre 678 5/25/2016
4.1.978-pre 779 5/6/2016
4.1.977-pre 858 5/5/2016
4.1.975-pre 688 5/5/2016
4.0.958 2,383 5/1/2016
4.0.957 900 4/29/2016
4.0.956 918 4/29/2016
4.0.955 782 4/28/2016
4.0.941 1,079 4/27/2016
4.0.940 1,004 4/27/2016
4.0.925 934 4/27/2016
4.0.922 900 4/27/2016
4.0.909 1,003 4/20/2016
4.0.880 1,210 4/7/2016
4.0.869 835 3/30/2016
4.0.864 753 3/29/2016
4.0.861 747 3/29/2016
4.0.860 756 3/29/2016
4.0.857 747 3/29/2016
4.0.855 785 3/29/2016
4.0.846 902 3/22/2016
4.0.842 926 3/21/2016
4.0.836 830 3/18/2016
4.0.835 796 3/18/2016
4.0.834 756 3/17/2016
4.0.832 799 3/17/2016
4.0.831 749 3/16/2016
4.0.829 763 3/16/2016
4.0.828 765 3/15/2016
4.0.827 751 3/15/2016
4.0.826 765 3/15/2016
4.0.825 1,024 3/13/2016
4.0.821 825 3/11/2016
4.0.819 759 3/11/2016
4.0.818 814 3/11/2016
4.0.816 868 3/11/2016
4.0.815 757 3/11/2016
4.0.814 843 3/11/2016
4.0.813 768 3/10/2016
4.0.812 850 3/10/2016
4.0.811 811 3/10/2016
4.0.810 788 3/10/2016
4.0.809 777 3/10/2016
4.0.805 764 3/9/2016
4.0.797 745 3/9/2016
4.0.796 796 3/9/2016
4.0.794 774 3/9/2016
4.0.793 792 3/9/2016
4.0.792 758 3/8/2016
4.0.791 767 3/8/2016
4.0.790 756 3/8/2016
4.0.788 740 3/8/2016
4.0.774 912 3/2/2016
4.0.773 796 3/1/2016
4.0.772 839 3/1/2016
4.0.770 844 3/1/2016
4.0.769 762 3/1/2016
4.0.762 752 3/1/2016
4.0.761 734 3/1/2016
4.0.760 1,199 2/29/2016
4.0.759 735 2/29/2016
4.0.758 723 2/29/2016
4.0.757 763 2/29/2016
4.0.756 1,233 2/27/2016
4.0.755 1,204 2/27/2016
4.0.754 793 2/27/2016
4.0.753 1,118 2/27/2016
4.0.752 1,209 2/27/2016
4.0.750 1,243 2/27/2016
4.0.749 971 2/27/2016
4.0.747 877 2/26/2016
4.0.746 1,056 2/26/2016
4.0.744 913 2/26/2016
4.0.743 1,156 2/26/2016
4.0.742 842 2/26/2016
4.0.741 1,091 2/26/2016
4.0.739 1,013 2/25/2016
4.0.738 959 2/25/2016
4.0.734 900 2/25/2016
4.0.733-beta 998 2/25/2016
4.0.672 938 2/16/2016
4.0.669 933 2/11/2016
4.0.668 774 2/11/2016
3.0.654 2,166 2/10/2016
3.0.646 796 2/5/2016
3.0.645 768 2/5/2016
3.0.644 787 2/5/2016
3.0.639 789 2/3/2016
3.0.638 771 2/2/2016
3.0.637 788 2/1/2016
3.0.635 766 2/1/2016
3.0.633 886 1/27/2016
3.0.632 753 1/27/2016
3.0.629 1,133 1/18/2016
3.0.626 778 1/18/2016
3.0.625 1,012 1/18/2016
3.0.624 1,382 12/17/2015
3.0.623 860 12/9/2015
3.0.622 764 12/9/2015
3.0.621 819 12/9/2015
3.0.620 788 12/8/2015
3.0.613 805 12/4/2015
3.0.611 1,087 12/3/2015
3.0.610 1,116 11/30/2015
3.0.606 1,067 11/30/2015
3.0.605 901 11/25/2015
3.0.603 928 11/23/2015
3.0.601 859 11/23/2015
3.0.600 850 11/19/2015
3.0.599 846 11/19/2015
3.0.598 854 11/17/2015
3.0.592 824 11/12/2015
3.0.589 851 11/10/2015
3.0.588 777 11/10/2015
3.0.586 807 11/10/2015
3.0.584 811 11/10/2015
3.0.583 803 11/10/2015
3.0.581 791 11/6/2015
3.0.579 795 11/6/2015
3.0.576 837 11/5/2015
3.0.575 793 11/4/2015
3.0.574 808 11/4/2015
3.0.569 832 11/3/2015
3.0.568 844 11/3/2015
3.0.566 774 11/3/2015
3.0.545 959 10/28/2015
3.0.538 900 10/22/2015
3.0.537 785 10/21/2015
3.0.536 803 10/21/2015
3.0.534 794 10/21/2015
3.0.532 774 10/21/2015
3.0.531 857 10/21/2015
3.0.524 785 10/15/2015
3.0.523 853 10/10/2015
3.0.522 848 10/10/2015
3.0.520 939 10/9/2015
3.0.519 849 10/9/2015
3.0.518 1,062 10/9/2015
3.0.517 1,141 10/9/2015
3.0.516 881 10/7/2015
3.0.514 1,147 10/6/2015
3.0.513 1,097 10/6/2015
3.0.512 863 10/6/2015
3.0.509 971 10/1/2015
3.0.507 908 10/1/2015
3.0.505 921 9/30/2015
3.0.503 952 9/30/2015
3.0.502 904 9/30/2015
3.0.479 881 9/25/2015
3.0.476 883 9/24/2015
3.0.471 853 9/24/2015
3.0.470 857 9/24/2015
3.0.469 867 9/24/2015
3.0.468 860 9/24/2015
3.0.467 844 9/24/2015
3.0.465 853 9/24/2015
3.0.459 841 9/23/2015
3.0.456 836 9/23/2015
3.0.455 877 9/22/2015
3.0.454 891 9/19/2015
3.0.453 841 9/19/2015
3.0.452 831 9/18/2015
3.0.451 892 9/18/2015
3.0.450 827 9/18/2015
3.0.447 881 9/18/2015
2.0.378 891 9/5/2015
2.0.372 791 9/4/2015
2.0.370 843 9/4/2015
2.0.368 843 9/4/2015
2.0.365 1,686 9/3/2015
2.0.363 851 9/3/2015
2.0.361 832 9/3/2015
1.0.360 812 9/1/2015
1.0.359 792 9/1/2015
1.0.358 804 9/1/2015
1.0.356 821 8/31/2015
1.0.355 817 8/31/2015
1.0.354 817 8/29/2015
1.0.305 807 8/19/2015
1.0.299 1,167 8/8/2015
1.0.293 856 7/20/2015
1.0.292 925 7/20/2015
1.0.289 1,033 7/10/2015
1.0.288 800 7/10/2015
1.0.286 927 7/7/2015
1.0.285 827 7/7/2015
1.0.284 803 7/7/2015
1.0.282 826 7/6/2015
1.0.281 812 7/6/2015
1.0.279 794 7/6/2015
1.0.277 891 6/18/2015
1.0.276 842 6/8/2015
1.0.275 788 6/8/2015
1.0.274 803 6/8/2015
1.0.272 1,213 6/1/2015
1.0.269 845 5/25/2015
1.0.268 831 5/24/2015
1.0.266 768 5/24/2015
1.0.263 785 5/21/2015
1.0.258 806 5/19/2015
1.0.257 824 5/18/2015
1.0.256 909 5/17/2015
1.0.254 795 5/13/2015
1.0.253 771 5/13/2015
1.0.250 781 5/13/2015
1.0.249 786 5/12/2015
1.0.248 765 5/12/2015
1.0.245 767 5/12/2015
1.0.241 790 5/12/2015
1.0.240 785 5/12/2015
1.0.237 809 5/11/2015
1.0.234 785 5/9/2015
1.0.233 810 5/9/2015
1.0.231 780 5/7/2015
1.0.230 804 5/7/2015
1.0.229 797 5/7/2015
1.0.226 880 5/7/2015
1.0.217 1,037 4/28/2015
1.0.215 990 4/27/2015
1.0.213 1,034 4/23/2015
1.0.210 927 4/23/2015
1.0.209 848 4/15/2015
1.0.202 873 4/15/2015
1.0.201 843 4/15/2015
1.0.198 926 4/15/2015
1.0.197 856 4/15/2015
1.0.196 856 4/15/2015
1.0.195 856 4/15/2015
1.0.194 874 4/15/2015
1.0.193 865 4/15/2015
1.0.192 872 4/15/2015
1.0.191 905 4/14/2015
1.0.189 901 4/10/2015
1.0.187 815 4/9/2015
1.0.186 834 4/8/2015
1.0.185 935 4/6/2015
1.0.183 822 4/3/2015
1.0.181 872 4/3/2015
1.0.180 837 4/2/2015
1.0.178 866 4/1/2015
1.0.177 824 4/1/2015
1.0.175 819 4/1/2015
1.0.171 810 3/31/2015
1.0.170 839 3/31/2015
1.0.168 820 3/31/2015
1.0.164 818 3/30/2015
1.0.162 818 3/28/2015
1.0.160 857 3/27/2015
1.0.159 808 3/26/2015
1.0.157 1,060 3/24/2015
1.0.156 820 3/24/2015
1.0.154 799 3/24/2015
1.0.152 860 3/24/2015
1.0.151 808 3/24/2015
1.0.150 815 3/23/2015
1.0.149 818 3/23/2015
1.0.148 842 3/23/2015
1.0.147 821 3/21/2015
1.0.146 807 3/20/2015
1.0.145 824 3/19/2015
1.0.143 798 3/18/2015
1.0.142 954 3/12/2015
1.0.141 797 3/12/2015
1.0.140 979 3/5/2015
1.0.139 808 3/5/2015
1.0.138 850 3/4/2015
1.0.137 903 3/3/2015
1.0.134 800 3/3/2015
1.0.129 825 3/3/2015
1.0.128 1,117 3/3/2015
1.0.125 899 2/28/2015
1.0.124 930 2/28/2015
1.0.122 1,052 2/28/2015
1.0.119 1,226 2/25/2015
1.0.117 1,367 2/24/2015
1.0.115 1,166 2/24/2015
1.0.114 1,165 2/23/2015
1.0.113 1,167 2/23/2015
1.0.112 1,199 2/23/2015
1.0.111 1,135 2/23/2015
1.0.110 1,175 2/23/2015
1.0.109 1,231 2/22/2015
1.0.108 1,183 2/22/2015
1.0.103 1,067 2/22/2015
1.0.37 1,046 2/18/2015
1.0.36 1,089 2/18/2015
1.0.35 1,034 2/17/2015
1.0.34 1,041 2/17/2015
1.0.33 1,078 2/17/2015
1.0.32 813 2/15/2015
1.0.31 1,055 2/15/2015
1.0.30 1,057 2/15/2015
1.0.28 1,059 2/15/2015
1.0.27 1,077 2/15/2015
1.0.26 1,070 2/13/2015
1.0.25 1,021 2/13/2015
1.0.24 994 2/12/2015
1.0.23 1,048 2/12/2015
1.0.0 1,232 2/21/2015