Foundatio.AzureServiceBus 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
dotnet add package Foundatio.AzureServiceBus --version 10.5.0
NuGet\Install-Package Foundatio.AzureServiceBus -Version 10.5.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Foundatio.AzureServiceBus" Version="10.5.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Foundatio.AzureServiceBus --version 10.5.0
#r "nuget: Foundatio.AzureServiceBus, 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.AzureServiceBus as a Cake Addin
#addin nuget:?package=Foundatio.AzureServiceBus&version=10.5.0

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

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 net7.0 net7.0-android net7.0-ios net7.0-maccatalyst net7.0-macos net7.0-tvos net7.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 (1)

Showing the top 1 NuGet packages that depend on Foundatio.AzureServiceBus:

Package Downloads
SoftwarePioniere.Fx.Hosting

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
10.5.0 4,960 5/18/2022
10.4.0 1,062 3/8/2022
10.3.0 720 1/20/2022
10.2.2 1,132 9/23/2021
10.2.0 21,643 7/8/2021
10.1.0 526 6/16/2021
10.0.2 1,863 1/20/2021
10.0.0 1,704 9/16/2020
10.0.0-beta9 353 8/25/2020
10.0.0-beta8 321 8/3/2020
10.0.0-beta7 332 7/29/2020
10.0.0-beta6 377 7/8/2020
10.0.0-beta5 496 6/20/2020
10.0.0-beta3 428 6/14/2020
10.0.0-beta2 417 6/6/2020
10.0.0-beta10 346 9/15/2020
10.0.0-beta1 388 5/26/2020
9.0.0 39,060 1/16/2020
8.1.1518 56,814 8/30/2019
8.0.1512 8,225 5/14/2019
8.0.1510 617 4/16/2019
8.0.1507 676 2/24/2019
8.0.1505 614 2/22/2019
7.0.1490 883 5/9/2018
6.0.1467 1,003 11/30/2017
5.1.1454 925 5/5/2017
5.0.1336 959 3/14/2017
5.0.1334 813 3/13/2017
5.0.1331 835 3/12/2017
5.0.1329-pre 696 3/12/2017
5.0.1328-pre 714 3/12/2017
5.0.1327-pre 715 3/12/2017
5.0.1326-pre 710 3/12/2017
5.0.1324-pre 714 3/12/2017
4.3.1323-pre 714 3/11/2017
4.3.1319 843 3/1/2017
4.3.1317 811 2/23/2017
4.3.1316 854 2/22/2017
4.3.1315 851 2/22/2017
4.3.1314 840 2/20/2017
4.3.1312 839 2/20/2017
4.3.1311-pre 769 2/20/2017
4.3.1307 861 2/16/2017
4.3.1306 847 2/15/2017
4.3.1305 839 2/15/2017
4.3.1304-pre 709 2/15/2017
4.3.1303-pre 729 2/14/2017
4.3.1301 830 2/14/2017
4.3.1299 822 2/14/2017
4.3.1293 856 2/12/2017
4.3.1292 817 2/10/2017
4.3.1291 877 2/10/2017
4.3.1290 841 2/10/2017
4.3.1289 847 2/9/2017
4.3.1288 822 2/9/2017
4.3.1286 837 2/8/2017
4.3.1282 827 2/5/2017
4.3.1281 833 2/5/2017
4.3.1280 823 2/5/2017
4.3.1276-pre 685 2/5/2017
4.3.1177-pre 739 9/2/2016
4.3.1164-pre 749 8/21/2016
4.2.1205-pre 1,061 9/19/2016
4.2.1183 977 9/9/2016
4.2.1179 856 9/8/2016
4.2.1176 847 9/2/2016
4.2.1172 823 9/1/2016
4.2.1171-pre 739 9/1/2016
4.2.1169 840 8/22/2016
4.2.1167-pre 700 8/22/2016
4.2.1166-pre 709 8/22/2016
4.2.1161 845 8/10/2016
4.2.1156-pre 742 8/2/2016
4.2.1155 842 8/1/2016
4.2.1150 882 7/20/2016
4.2.1149-pre 728 7/19/2016
4.2.1148-pre 729 7/19/2016
4.2.1147-pre 749 7/19/2016
4.2.1146-pre 714 7/19/2016
4.2.1137 898 7/19/2016
4.2.1129-pre 722 7/19/2016
4.2.1128-pre 755 7/19/2016
4.2.1127-pre 704 7/19/2016
4.2.1126-pre 730 7/19/2016
4.2.1125-pre 720 7/19/2016
4.2.1123-pre 740 7/19/2016
4.2.1119-pre 737 7/18/2016
4.2.1113-pre 765 7/16/2016
4.2.1108-pre 739 7/15/2016
4.2.1107-pre 757 7/15/2016
4.2.1104-pre 896 7/13/2016
4.2.1099-pre 912 7/12/2016
4.2.1098-pre 919 7/12/2016
4.2.1093-pre 787 7/8/2016
4.2.1091-pre 771 7/8/2016
4.2.1090-pre 777 7/8/2016
4.2.1089-pre 763 7/7/2016
4.2.1087-pre 784 7/7/2016
4.2.1083-pre 781 7/6/2016
4.2.1082-pre 767 7/6/2016
4.2.1081-pre 767 7/6/2016
4.2.1079-pre 787 7/6/2016
4.2.1078-pre 783 7/6/2016
4.2.1073-pre 784 7/5/2016
4.2.1070-pre 744 7/5/2016
4.2.1069-pre 743 7/1/2016
4.2.1059-pre 750 7/1/2016
4.2.1046-pre 715 6/24/2016
4.2.1031-pre 727 6/24/2016
4.2.1028-pre 727 6/24/2016
4.2.1027-pre 758 6/24/2016
4.1.1009 1,203 6/15/2016
4.1.1002-pre 1,038 6/14/2016
4.1.995-pre 1,124 6/13/2016
4.1.989-pre 746 5/26/2016
4.1.983-pre 748 5/25/2016
4.1.982-pre 762 5/25/2016
4.1.978-pre 746 5/6/2016
4.1.977-pre 748 5/5/2016
4.1.975-pre 728 5/5/2016
4.0.958 870 5/1/2016
4.0.957 1,062 4/29/2016
4.0.956 1,040 4/29/2016
4.0.955 879 4/28/2016
4.0.941 1,133 4/27/2016
4.0.940 1,092 4/27/2016
4.0.925 1,015 4/27/2016
4.0.922 1,003 4/27/2016
4.0.909 1,032 4/20/2016
4.0.880 893 4/7/2016
4.0.869 857 3/30/2016
4.0.864 880 3/29/2016
4.0.861 860 3/29/2016
4.0.860 859 3/29/2016
4.0.857 860 3/29/2016
4.0.855 852 3/29/2016
4.0.846 882 3/22/2016
4.0.842 1,072 3/21/2016
4.0.836 865 3/18/2016
4.0.835 871 3/18/2016
4.0.834 842 3/17/2016
4.0.832 875 3/17/2016
4.0.831 850 3/16/2016
4.0.829 843 3/16/2016
4.0.828 875 3/15/2016
4.0.827 880 3/15/2016
4.0.826 858 3/15/2016
4.0.825 930 3/13/2016
4.0.821 963 3/11/2016
4.0.819 886 3/11/2016
4.0.818 908 3/11/2016
4.0.816 936 3/11/2016
4.0.815 919 3/11/2016
4.0.814 938 3/11/2016
4.0.813 864 3/10/2016
4.0.812 969 3/10/2016
4.0.811 917 3/10/2016
4.0.810 873 3/10/2016
4.0.809 883 3/10/2016
4.0.805 834 3/9/2016
4.0.797 843 3/9/2016
4.0.796 866 3/9/2016
4.0.794 883 3/9/2016
4.0.793 838 3/9/2016
4.0.792 859 3/8/2016
4.0.791 836 3/8/2016
4.0.790 833 3/8/2016
4.0.788 881 3/8/2016
4.0.774 869 3/2/2016
4.0.773 1,021 3/1/2016
4.0.772 1,055 3/1/2016
4.0.770 856 3/1/2016
4.0.769 940 3/1/2016
4.0.762 886 3/1/2016
4.0.761 885 3/1/2016
4.0.760 902 2/29/2016
4.0.759 864 2/29/2016
4.0.758 860 2/29/2016
4.0.757 1,148 2/29/2016
4.0.756 1,181 2/27/2016
4.0.755 1,221 2/27/2016
4.0.754 1,192 2/27/2016
4.0.753 1,262 2/27/2016
4.0.752 956 2/27/2016
4.0.750 1,302 2/27/2016
4.0.749 1,331 2/27/2016
4.0.747 1,251 2/26/2016
4.0.746 1,268 2/26/2016
4.0.744 1,276 2/26/2016
4.0.743 964 2/26/2016
4.0.742 1,244 2/26/2016
4.0.741 1,118 2/26/2016
4.0.739 1,259 2/25/2016
4.0.738 1,109 2/25/2016
4.0.734 1,245 2/25/2016
4.0.733-beta 1,073 2/25/2016
4.0.672 896 2/16/2016
4.0.669 945 2/11/2016
4.0.668 951 2/11/2016
3.0.654 885 2/10/2016
3.0.646 884 2/5/2016
3.0.645 880 2/5/2016
3.0.644 831 2/5/2016
3.0.639 889 2/3/2016
3.0.638 874 2/2/2016
3.0.637 890 2/1/2016
3.0.635 847 2/1/2016
3.0.633 851 1/27/2016
3.0.632 883 1/27/2016
3.0.629 958 1/18/2016
3.0.626 922 1/18/2016
3.0.625 1,047 1/18/2016
3.0.624 883 12/17/2015
3.0.623 1,009 12/9/2015
3.0.622 876 12/9/2015
3.0.621 851 12/9/2015
3.0.620 857 12/8/2015
3.0.613 1,181 12/4/2015
3.0.611 1,140 12/3/2015
3.0.610 1,188 11/30/2015
3.0.606 1,150 11/30/2015
3.0.605 1,026 11/25/2015
3.0.603 969 11/23/2015
3.0.601 973 11/23/2015
3.0.600 964 11/19/2015
3.0.599 943 11/19/2015
3.0.598 933 11/17/2015
3.0.592 938 11/12/2015
3.0.589 914 11/10/2015
3.0.588 893 11/10/2015
3.0.586 939 11/10/2015
3.0.584 894 11/10/2015
3.0.583 907 11/10/2015
3.0.581 880 11/6/2015
3.0.579 893 11/6/2015
3.0.576 902 11/5/2015
3.0.575 885 11/4/2015
3.0.574 917 11/4/2015
3.0.569 908 11/3/2015
3.0.568 904 11/3/2015
3.0.566 896 11/3/2015
3.0.545 890 10/28/2015
3.0.538 924 10/22/2015
3.0.537 879 10/21/2015
3.0.536 868 10/21/2015
3.0.534 853 10/21/2015
3.0.532 920 10/21/2015
3.0.531 867 10/21/2015
3.0.524 895 10/15/2015
3.0.523 978 10/10/2015
3.0.522 898 10/10/2015
3.0.520 921 10/9/2015
3.0.519 976 10/9/2015
3.0.518 949 10/9/2015
3.0.517 899 10/9/2015
3.0.516 1,242 10/7/2015
3.0.514 1,029 10/6/2015
3.0.513 1,236 10/6/2015
3.0.512 1,116 10/6/2015
3.0.509 981 10/1/2015
3.0.507 1,003 10/1/2015
3.0.505 1,008 9/30/2015
3.0.503 1,032 9/30/2015
3.0.502 1,010 9/30/2015
3.0.479 981 9/25/2015
3.0.476 951 9/24/2015
3.0.471 966 9/24/2015
3.0.470 962 9/24/2015
3.0.469 949 9/24/2015
3.0.468 956 9/24/2015
3.0.467 940 9/24/2015
3.0.465 966 9/24/2015
3.0.459 968 9/23/2015
3.0.456 973 9/23/2015
3.0.455 955 9/22/2015
3.0.454 991 9/19/2015
3.0.453 1,007 9/19/2015
3.0.452 940 9/18/2015
3.0.451 964 9/18/2015
3.0.450 972 9/18/2015
3.0.447 923 9/18/2015
2.0.378 963 9/5/2015
2.0.372 935 9/4/2015
2.0.370 975 9/4/2015
2.0.368 919 9/4/2015
2.0.365 924 9/3/2015
2.0.363 915 9/3/2015
2.0.361 914 9/3/2015
1.0.360 896 9/1/2015
1.0.359 924 9/1/2015
1.0.358 911 9/1/2015
1.0.356 906 8/31/2015
1.0.355 978 8/31/2015
1.0.354 915 8/29/2015
1.0.305 937 8/19/2015
1.0.299 1,255 8/8/2015
1.0.293 952 7/20/2015
1.0.292 963 7/20/2015
1.0.289 928 7/10/2015
1.0.288 924 7/10/2015
1.0.286 944 7/7/2015
1.0.285 951 7/7/2015
1.0.284 933 7/7/2015
1.0.282 939 7/6/2015
1.0.281 921 7/6/2015
1.0.279 921 7/6/2015
1.0.277 875 6/18/2015
1.0.276 931 6/8/2015
1.0.275 918 6/8/2015
1.0.274 861 6/8/2015
1.0.272 948 6/1/2015
1.0.269 910 5/25/2015
1.0.268 922 5/24/2015
1.0.266 897 5/24/2015
1.0.263 923 5/21/2015
1.0.258 920 5/19/2015
1.0.257 910 5/18/2015
1.0.256 1,080 5/17/2015
1.0.254 884 5/13/2015
1.0.253 897 5/13/2015
1.0.250 904 5/13/2015
1.0.249 918 5/12/2015
1.0.248 898 5/12/2015
1.0.245 901 5/12/2015
1.0.241 927 5/12/2015
1.0.240 914 5/12/2015
1.0.237 917 5/11/2015
1.0.234 911 5/9/2015
1.0.233 888 5/9/2015
1.0.231 885 5/7/2015
1.0.230 939 5/7/2015
1.0.229 914 5/7/2015
1.0.226 910 5/7/2015
1.0.217 1,157 4/28/2015
1.0.215 1,054 4/27/2015
1.0.213 1,102 4/23/2015
1.0.210 1,062 4/23/2015
1.0.209 989 4/15/2015
1.0.202 998 4/15/2015
1.0.201 973 4/15/2015
1.0.198 988 4/15/2015
1.0.197 963 4/15/2015
1.0.196 961 4/15/2015
1.0.195 973 4/15/2015
1.0.194 975 4/15/2015
1.0.193 963 4/15/2015
1.0.192 995 4/15/2015
1.0.191 999 4/14/2015
1.0.189 974 4/10/2015
1.0.187 949 4/9/2015
1.0.186 974 4/8/2015
1.0.185 971 4/6/2015
1.0.183 952 4/3/2015
1.0.181 1,007 4/3/2015
1.0.180 981 4/2/2015
1.0.178 959 4/1/2015
1.0.177 962 4/1/2015
1.0.175 1,017 4/1/2015
1.0.171 955 3/31/2015
1.0.170 929 3/31/2015
1.0.168 935 3/31/2015
1.0.164 968 3/30/2015
1.0.162 930 3/28/2015
1.0.160 948 3/27/2015
1.0.159 924 3/26/2015
1.0.157 915 3/24/2015
1.0.156 961 3/24/2015
1.0.154 922 3/24/2015
1.0.152 906 3/24/2015
1.0.151 924 3/24/2015
1.0.150 965 3/23/2015
1.0.149 937 3/23/2015
1.0.148 909 3/23/2015
1.0.147 924 3/21/2015
1.0.146 921 3/20/2015
1.0.145 914 3/19/2015
1.0.143 999 3/18/2015
1.0.142 937 3/12/2015
1.0.141 900 3/12/2015
1.0.140 1,154 3/5/2015
1.0.139 961 3/5/2015
1.0.138 1,042 3/4/2015
1.0.137 898 3/3/2015
1.0.134 902 3/3/2015
1.0.129 1,157 3/3/2015
1.0.128 1,304 3/3/2015
1.0.125 1,213 2/28/2015
1.0.124 947 2/28/2015
1.0.122 1,396 2/28/2015
1.0.119 1,344 2/25/2015
1.0.117 1,280 2/24/2015
1.0.115 1,136 2/24/2015
1.0.114 1,269 2/23/2015
1.0.113 1,315 2/23/2015
1.0.112 1,321 2/23/2015
1.0.111 1,336 2/23/2015
1.0.110 1,357 2/23/2015
1.0.109 1,254 2/22/2015
1.0.108 1,266 2/22/2015
1.0.103 1,327 2/22/2015