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
Install-Package Foundatio.AzureServiceBus -Version 10.5.0
dotnet add package Foundatio.AzureServiceBus --version 10.5.0
<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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#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
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 (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 34 5/18/2022
10.4.0 629 3/8/2022
10.3.0 287 1/20/2022
10.2.2 967 9/23/2021
10.2.0 5,544 7/8/2021
10.1.0 433 6/16/2021
10.0.2 1,767 1/20/2021
10.0.0 1,580 9/16/2020
10.0.0-beta9 317 8/25/2020
10.0.0-beta8 285 8/3/2020
10.0.0-beta7 296 7/29/2020
10.0.0-beta6 343 7/8/2020
10.0.0-beta5 461 6/20/2020
10.0.0-beta3 395 6/14/2020
10.0.0-beta2 382 6/6/2020
10.0.0-beta10 310 9/15/2020
10.0.0-beta1 351 5/26/2020
9.0.0 38,684 1/16/2020
8.1.1518 41,861 8/30/2019
8.0.1512 6,035 5/14/2019
8.0.1510 495 4/16/2019
8.0.1507 557 2/24/2019
8.0.1505 514 2/22/2019
7.0.1490 739 5/9/2018
6.0.1467 845 11/30/2017
5.1.1454 795 5/5/2017
5.0.1336 818 3/14/2017
5.0.1334 669 3/13/2017
5.0.1331 701 3/12/2017
5.0.1329-pre 637 3/12/2017
5.0.1328-pre 655 3/12/2017
5.0.1327-pre 656 3/12/2017
5.0.1326-pre 654 3/12/2017
5.0.1324-pre 644 3/12/2017
4.3.1323-pre 658 3/11/2017
4.3.1319 702 3/1/2017
4.3.1317 679 2/23/2017
4.3.1316 720 2/22/2017
4.3.1315 714 2/22/2017
4.3.1314 710 2/20/2017
4.3.1312 699 2/20/2017
4.3.1311-pre 705 2/20/2017
4.3.1307 714 2/16/2017
4.3.1306 712 2/15/2017
4.3.1305 702 2/15/2017
4.3.1304-pre 649 2/15/2017
4.3.1303-pre 670 2/14/2017
4.3.1301 690 2/14/2017
4.3.1299 692 2/14/2017
4.3.1293 720 2/12/2017
4.3.1292 684 2/10/2017
4.3.1291 745 2/10/2017
4.3.1290 706 2/10/2017
4.3.1289 702 2/9/2017
4.3.1288 688 2/9/2017
4.3.1286 702 2/8/2017
4.3.1282 686 2/5/2017
4.3.1281 691 2/5/2017
4.3.1280 687 2/5/2017
4.3.1276-pre 630 2/5/2017
4.3.1177-pre 682 9/2/2016
4.3.1164-pre 686 8/21/2016
4.2.1205-pre 999 9/19/2016
4.2.1183 850 9/9/2016
4.2.1179 717 9/8/2016
4.2.1176 719 9/2/2016
4.2.1172 691 9/1/2016
4.2.1171-pre 681 9/1/2016
4.2.1169 702 8/22/2016
4.2.1167-pre 642 8/22/2016
4.2.1166-pre 658 8/22/2016
4.2.1161 710 8/10/2016
4.2.1156-pre 680 8/2/2016
4.2.1155 713 8/1/2016
4.2.1150 733 7/20/2016
4.2.1149-pre 667 7/19/2016
4.2.1148-pre 673 7/19/2016
4.2.1147-pre 691 7/19/2016
4.2.1146-pre 658 7/19/2016
4.2.1137 767 7/19/2016
4.2.1129-pre 661 7/19/2016
4.2.1128-pre 697 7/19/2016
4.2.1127-pre 646 7/19/2016
4.2.1126-pre 672 7/19/2016
4.2.1125-pre 665 7/19/2016
4.2.1123-pre 680 7/19/2016
4.2.1119-pre 680 7/18/2016
4.2.1113-pre 706 7/16/2016
4.2.1108-pre 685 7/15/2016
4.2.1107-pre 700 7/15/2016
4.2.1104-pre 837 7/13/2016
4.2.1099-pre 858 7/12/2016
4.2.1098-pre 855 7/12/2016
4.2.1093-pre 732 7/8/2016
4.2.1091-pre 710 7/8/2016
4.2.1090-pre 716 7/8/2016
4.2.1089-pre 713 7/7/2016
4.2.1087-pre 725 7/7/2016
4.2.1083-pre 718 7/6/2016
4.2.1082-pre 702 7/6/2016
4.2.1081-pre 708 7/6/2016
4.2.1079-pre 729 7/6/2016
4.2.1078-pre 727 7/6/2016
4.2.1073-pre 726 7/5/2016
4.2.1070-pre 688 7/5/2016
4.2.1069-pre 685 7/1/2016
4.2.1059-pre 693 7/1/2016
4.2.1046-pre 662 6/24/2016
4.2.1031-pre 669 6/24/2016
4.2.1028-pre 673 6/24/2016
4.2.1027-pre 680 6/24/2016
4.1.1009 1,071 6/15/2016
4.1.1002-pre 979 6/14/2016
4.1.995-pre 1,064 6/13/2016
4.1.989-pre 677 5/26/2016
4.1.983-pre 669 5/25/2016
4.1.982-pre 698 5/25/2016
4.1.978-pre 689 5/6/2016
4.1.977-pre 689 5/5/2016
4.1.975-pre 673 5/5/2016
4.0.958 727 5/1/2016
4.0.957 918 4/29/2016
4.0.956 902 4/29/2016
4.0.955 724 4/28/2016
4.0.941 983 4/27/2016
4.0.940 956 4/27/2016
4.0.925 876 4/27/2016
4.0.922 865 4/27/2016
4.0.909 894 4/20/2016
4.0.880 767 4/7/2016
4.0.869 723 3/30/2016
4.0.864 739 3/29/2016
4.0.861 724 3/29/2016
4.0.860 731 3/29/2016
4.0.857 725 3/29/2016
4.0.855 708 3/29/2016
4.0.846 750 3/22/2016
4.0.842 937 3/21/2016
4.0.836 739 3/18/2016
4.0.835 735 3/18/2016
4.0.834 699 3/17/2016
4.0.832 743 3/17/2016
4.0.831 713 3/16/2016
4.0.829 707 3/16/2016
4.0.828 735 3/15/2016
4.0.827 742 3/15/2016
4.0.826 727 3/15/2016
4.0.825 786 3/13/2016
4.0.821 822 3/11/2016
4.0.819 750 3/11/2016
4.0.818 767 3/11/2016
4.0.816 789 3/11/2016
4.0.815 779 3/11/2016
4.0.814 799 3/11/2016
4.0.813 724 3/10/2016
4.0.812 826 3/10/2016
4.0.811 773 3/10/2016
4.0.810 737 3/10/2016
4.0.809 753 3/10/2016
4.0.805 700 3/9/2016
4.0.797 707 3/9/2016
4.0.796 727 3/9/2016
4.0.794 742 3/9/2016
4.0.793 708 3/9/2016
4.0.792 723 3/8/2016
4.0.791 699 3/8/2016
4.0.790 700 3/8/2016
4.0.788 743 3/8/2016
4.0.774 734 3/2/2016
4.0.773 876 3/1/2016
4.0.772 920 3/1/2016
4.0.770 718 3/1/2016
4.0.769 813 3/1/2016
4.0.762 754 3/1/2016
4.0.761 753 3/1/2016
4.0.760 765 2/29/2016
4.0.759 728 2/29/2016
4.0.758 728 2/29/2016
4.0.757 1,016 2/29/2016
4.0.756 1,045 2/27/2016
4.0.755 1,092 2/27/2016
4.0.754 1,056 2/27/2016
4.0.753 1,124 2/27/2016
4.0.752 821 2/27/2016
4.0.750 1,159 2/27/2016
4.0.749 1,187 2/27/2016
4.0.747 1,117 2/26/2016
4.0.746 1,132 2/26/2016
4.0.744 1,139 2/26/2016
4.0.743 837 2/26/2016
4.0.742 1,111 2/26/2016
4.0.741 989 2/26/2016
4.0.739 1,124 2/25/2016
4.0.738 968 2/25/2016
4.0.734 1,108 2/25/2016
4.0.733-beta 1,019 2/25/2016
4.0.672 760 2/16/2016
4.0.669 805 2/11/2016
4.0.668 806 2/11/2016
3.0.654 747 2/10/2016
3.0.646 750 2/5/2016
3.0.645 750 2/5/2016
3.0.644 703 2/5/2016
3.0.639 756 2/3/2016
3.0.638 739 2/2/2016
3.0.637 747 2/1/2016
3.0.635 713 2/1/2016
3.0.633 713 1/27/2016
3.0.632 752 1/27/2016
3.0.629 813 1/18/2016
3.0.626 791 1/18/2016
3.0.625 910 1/18/2016
3.0.624 749 12/17/2015
3.0.623 862 12/9/2015
3.0.622 737 12/9/2015
3.0.621 719 12/9/2015
3.0.620 724 12/8/2015
3.0.613 1,041 12/4/2015
3.0.611 1,009 12/3/2015
3.0.610 1,045 11/30/2015
3.0.606 1,027 11/30/2015
3.0.605 896 11/25/2015
3.0.603 839 11/23/2015
3.0.601 841 11/23/2015
3.0.600 822 11/19/2015
3.0.599 806 11/19/2015
3.0.598 800 11/17/2015
3.0.592 810 11/12/2015
3.0.589 789 11/10/2015
3.0.588 757 11/10/2015
3.0.586 802 11/10/2015
3.0.584 759 11/10/2015
3.0.583 781 11/10/2015
3.0.581 757 11/6/2015
3.0.579 761 11/6/2015
3.0.576 775 11/5/2015
3.0.575 759 11/4/2015
3.0.574 779 11/4/2015
3.0.569 776 11/3/2015
3.0.568 775 11/3/2015
3.0.566 772 11/3/2015
3.0.545 757 10/28/2015
3.0.538 778 10/22/2015
3.0.537 752 10/21/2015
3.0.536 741 10/21/2015
3.0.534 727 10/21/2015
3.0.532 787 10/21/2015
3.0.531 736 10/21/2015
3.0.524 760 10/15/2015
3.0.523 847 10/10/2015
3.0.522 772 10/10/2015
3.0.520 796 10/9/2015
3.0.519 847 10/9/2015
3.0.518 815 10/9/2015
3.0.517 767 10/9/2015
3.0.516 1,110 10/7/2015
3.0.514 904 10/6/2015
3.0.513 1,102 10/6/2015
3.0.512 986 10/6/2015
3.0.509 856 10/1/2015
3.0.507 864 10/1/2015
3.0.505 875 9/30/2015
3.0.503 903 9/30/2015
3.0.502 884 9/30/2015
3.0.479 844 9/25/2015
3.0.476 819 9/24/2015
3.0.471 842 9/24/2015
3.0.470 833 9/24/2015
3.0.469 827 9/24/2015
3.0.468 833 9/24/2015
3.0.467 819 9/24/2015
3.0.465 839 9/24/2015
3.0.459 843 9/23/2015
3.0.456 848 9/23/2015
3.0.455 828 9/22/2015
3.0.454 852 9/19/2015
3.0.453 871 9/19/2015
3.0.452 812 9/18/2015
3.0.451 832 9/18/2015
3.0.450 833 9/18/2015
3.0.447 795 9/18/2015
2.0.378 821 9/5/2015
2.0.372 792 9/4/2015
2.0.370 838 9/4/2015
2.0.368 783 9/4/2015
2.0.365 784 9/3/2015
2.0.363 775 9/3/2015
2.0.361 777 9/3/2015
1.0.360 764 9/1/2015
1.0.359 792 9/1/2015
1.0.358 782 9/1/2015
1.0.356 775 8/31/2015
1.0.355 859 8/31/2015
1.0.354 774 8/29/2015
1.0.305 797 8/19/2015
1.0.299 1,121 8/8/2015
1.0.293 819 7/20/2015
1.0.292 838 7/20/2015
1.0.289 797 7/10/2015
1.0.288 792 7/10/2015
1.0.286 819 7/7/2015
1.0.285 821 7/7/2015
1.0.284 796 7/7/2015
1.0.282 801 7/6/2015
1.0.281 787 7/6/2015
1.0.279 788 7/6/2015
1.0.277 742 6/18/2015
1.0.276 795 6/8/2015
1.0.275 786 6/8/2015
1.0.274 735 6/8/2015
1.0.272 813 6/1/2015
1.0.269 779 5/25/2015
1.0.268 796 5/24/2015
1.0.266 767 5/24/2015
1.0.263 792 5/21/2015
1.0.258 794 5/19/2015
1.0.257 775 5/18/2015
1.0.256 926 5/17/2015
1.0.254 750 5/13/2015
1.0.253 774 5/13/2015
1.0.250 777 5/13/2015
1.0.249 792 5/12/2015
1.0.248 768 5/12/2015
1.0.245 781 5/12/2015
1.0.241 796 5/12/2015
1.0.240 778 5/12/2015
1.0.237 782 5/11/2015
1.0.234 779 5/9/2015
1.0.233 762 5/9/2015
1.0.231 757 5/7/2015
1.0.230 803 5/7/2015
1.0.229 782 5/7/2015
1.0.226 782 5/7/2015
1.0.217 1,032 4/28/2015
1.0.215 920 4/27/2015
1.0.213 973 4/23/2015
1.0.210 925 4/23/2015
1.0.209 853 4/15/2015
1.0.202 858 4/15/2015
1.0.201 835 4/15/2015
1.0.198 856 4/15/2015
1.0.197 832 4/15/2015
1.0.196 842 4/15/2015
1.0.195 846 4/15/2015
1.0.194 844 4/15/2015
1.0.193 837 4/15/2015
1.0.192 867 4/15/2015
1.0.191 862 4/14/2015
1.0.189 839 4/10/2015
1.0.187 820 4/9/2015
1.0.186 850 4/8/2015
1.0.185 833 4/6/2015
1.0.183 819 4/3/2015
1.0.181 878 4/3/2015
1.0.180 839 4/2/2015
1.0.178 822 4/1/2015
1.0.177 831 4/1/2015
1.0.175 886 4/1/2015
1.0.171 825 3/31/2015
1.0.170 796 3/31/2015
1.0.168 804 3/31/2015
1.0.164 829 3/30/2015
1.0.162 805 3/28/2015
1.0.160 820 3/27/2015
1.0.159 793 3/26/2015
1.0.157 788 3/24/2015
1.0.156 825 3/24/2015
1.0.154 786 3/24/2015
1.0.152 777 3/24/2015
1.0.151 798 3/24/2015
1.0.150 837 3/23/2015
1.0.149 798 3/23/2015
1.0.148 776 3/23/2015
1.0.147 796 3/21/2015
1.0.146 789 3/20/2015
1.0.145 779 3/19/2015
1.0.143 867 3/18/2015
1.0.142 793 3/12/2015
1.0.141 766 3/12/2015
1.0.140 1,025 3/5/2015
1.0.139 821 3/5/2015
1.0.138 913 3/4/2015
1.0.137 774 3/3/2015
1.0.134 774 3/3/2015
1.0.129 1,029 3/3/2015
1.0.128 1,164 3/3/2015
1.0.125 1,084 2/28/2015
1.0.124 805 2/28/2015
1.0.122 1,246 2/28/2015
1.0.119 1,197 2/25/2015
1.0.117 1,153 2/24/2015
1.0.115 1,005 2/24/2015
1.0.114 1,136 2/23/2015
1.0.113 1,179 2/23/2015
1.0.112 1,193 2/23/2015
1.0.111 1,200 2/23/2015
1.0.110 1,224 2/23/2015
1.0.109 1,130 2/22/2015
1.0.108 1,124 2/22/2015
1.0.103 1,179 2/22/2015