Exceptions are now being stored in mongo.
This commit is contained in:
parent
34054f2178
commit
e0470e12ca
|
@ -0,0 +1,22 @@
|
|||
Copyright (c) 2010 Darren Cauthon
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,22 @@
|
|||
Copyright (c) 2010 Darren Cauthon
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -15,6 +15,11 @@ namespace NzbDrone.Common.Contract
|
|||
[JsonProperty("s")]
|
||||
public string String { get; set; }
|
||||
|
||||
[JsonProperty("xmessage")]
|
||||
public string ExceptionMessage { get; set; }
|
||||
|
||||
[JsonProperty("stk")]
|
||||
public string Stack { get; set; }
|
||||
|
||||
protected override Dictionary<string, string> GetString()
|
||||
{
|
||||
|
|
|
@ -62,7 +62,8 @@ namespace NzbDrone.Common
|
|||
|
||||
var report = new ExceptionReport();
|
||||
report.LogMessage = logEvent.FormattedMessage;
|
||||
report.String = logEvent.Exception.ToString();
|
||||
report.Stack = logEvent.Exception.StackTrace;
|
||||
report.ExceptionMessage = logEvent.Exception.Message;
|
||||
report.Logger = logEvent.LoggerName;
|
||||
report.Type = logEvent.Exception.GetType().Name;
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
Copyright (c) 2010 Darren Cauthon
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -1,7 +1,9 @@
|
|||
using MongoDB.Driver;
|
||||
using NzbDrone.Services.Service.Datastore;
|
||||
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
|
||||
using Ninject;
|
||||
using Ninject.Web.Mvc;
|
||||
using NzbDrone.Services.Service.Migrations;
|
||||
using Services.PetaPoco;
|
||||
|
||||
[assembly: WebActivator.PreApplicationStartMethod(typeof(NzbDrone.Services.Service.App_Start.NinjectMVC3), "Start")]
|
||||
|
@ -29,7 +31,11 @@ namespace NzbDrone.Services.Service.App_Start
|
|||
private static IKernel CreateKernel()
|
||||
{
|
||||
var kernel = new StandardKernel();
|
||||
MigrationsHelper.Run(Connection.GetConnectionString);
|
||||
kernel.Bind<IDatabase>().ToMethod(c => Connection.GetPetaPocoDb());
|
||||
kernel.Bind<MongoDatabase>().ToConstant(Connection.GetMongoDb());
|
||||
|
||||
|
||||
return kernel;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,23 +1,30 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using MongoDB.Driver;
|
||||
using NLog;
|
||||
using Ninject;
|
||||
using NzbDrone.Common.Contract;
|
||||
using NzbDrone.Services.Service.Exceptions;
|
||||
using NzbDrone.Services.Service.Repository.Reporting;
|
||||
using Services.PetaPoco;
|
||||
using ExceptionInstance = NzbDrone.Services.Service.Repository.Reporting.ExceptionInstance;
|
||||
using ExceptionReport = NzbDrone.Common.Contract.ExceptionReport;
|
||||
|
||||
namespace NzbDrone.Services.Service.Controllers
|
||||
{
|
||||
public class ExceptionController : Controller
|
||||
{
|
||||
private readonly IDatabase _database;
|
||||
private readonly ExceptionRepository _exceptionRepository;
|
||||
private readonly MongoDatabase _mongoDatabase;
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
[Inject]
|
||||
public ExceptionController(IDatabase database)
|
||||
public ExceptionController(IDatabase database, ExceptionRepository exceptionRepository)
|
||||
{
|
||||
_database = database;
|
||||
_exceptionRepository = exceptionRepository;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
|
@ -58,18 +65,31 @@ namespace NzbDrone.Services.Service.Controllers
|
|||
{
|
||||
try
|
||||
{
|
||||
var exceptionHash = GetExceptionDetailId(exceptionReport);
|
||||
|
||||
var exceptionInstance = new ExceptionInstance
|
||||
{
|
||||
ExceptionHash = exceptionHash,
|
||||
IsProduction = exceptionReport.IsProduction,
|
||||
LogMessage = exceptionReport.LogMessage,
|
||||
Timestamp = DateTime.Now,
|
||||
UGuid = exceptionReport.UGuid
|
||||
};
|
||||
var report = new Exceptions.ExceptionReport();
|
||||
report.AppVersion = exceptionReport.Version;
|
||||
report.ApplicationId = "NzbDrone";
|
||||
report.ExceptionMessage = exceptionReport.String;
|
||||
report.ExceptionType = exceptionReport.Type;
|
||||
report.Location = exceptionReport.Logger;
|
||||
report.Message = exceptionReport.LogMessage;
|
||||
report.Stack = exceptionReport.String;
|
||||
report.Uid = exceptionReport.UGuid.ToString();
|
||||
|
||||
_database.Insert(exceptionInstance);
|
||||
var exceptionHash = _exceptionRepository.Store(report);
|
||||
|
||||
//var exceptionHash = GetExceptionDetailId(exceptionReport);
|
||||
|
||||
//var exceptionInstance = new ExceptionInstance
|
||||
// {
|
||||
// ExceptionHash = exceptionHash,
|
||||
// IsProduction = exceptionReport.IsProduction,
|
||||
// LogMessage = exceptionReport.LogMessage,
|
||||
// Timestamp = DateTime.Now,
|
||||
// UGuid = exceptionReport.UGuid
|
||||
// };
|
||||
|
||||
//_database.Insert(exceptionInstance);
|
||||
|
||||
return new JsonResult { Data = new ExceptionReportResponse { ExceptionHash = exceptionHash } };
|
||||
}
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
using System.Configuration;
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Driver;
|
||||
using NzbDrone.Services.Service.Migrations;
|
||||
using Services.PetaPoco;
|
||||
|
||||
|
@ -15,9 +18,6 @@ namespace NzbDrone.Services.Service.Datastore
|
|||
|
||||
public static IDatabase GetPetaPocoDb()
|
||||
{
|
||||
|
||||
MigrationsHelper.Run(GetConnectionString);
|
||||
|
||||
var db = new Database("SqlExpress")
|
||||
{
|
||||
KeepConnectionAlive = false,
|
||||
|
@ -26,5 +26,24 @@ namespace NzbDrone.Services.Service.Datastore
|
|||
|
||||
return db;
|
||||
}
|
||||
|
||||
|
||||
public static MongoDatabase GetMongoDb()
|
||||
{
|
||||
var serverSettings = new MongoServerSettings()
|
||||
{
|
||||
ConnectionMode = ConnectionMode.Direct,
|
||||
ConnectTimeout = TimeSpan.FromSeconds(10),
|
||||
DefaultCredentials = new MongoCredentials("nzbdrone", "nzbdronepassword"),
|
||||
GuidRepresentation = GuidRepresentation.Standard,
|
||||
Server = new MongoServerAddress("ds031747.mongolab.com", 31747),
|
||||
SafeMode = new SafeMode(true) { J = true },
|
||||
};
|
||||
|
||||
|
||||
var server = MongoServer.Create(serverSettings);
|
||||
|
||||
return server.GetDatabase("nzbdrone_ex");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace NzbDrone.Services.Service.Exceptions
|
||||
{
|
||||
public class ExceptionInfo
|
||||
{
|
||||
public ExceptionInfo()
|
||||
{
|
||||
Instances = new ExceptionInstance[0];
|
||||
}
|
||||
|
||||
[BsonId]
|
||||
public string Hash { get; set; }
|
||||
|
||||
[BsonElement("xtype")]
|
||||
public string ExceptionType { get; set; }
|
||||
|
||||
[BsonElement("stk")]
|
||||
public string Stack { get; set; }
|
||||
|
||||
[BsonElement("loc")]
|
||||
public string Location { get; set; }
|
||||
|
||||
[BsonElement("inst")]
|
||||
public IEnumerable<ExceptionInstance> Instances { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
using System.Linq;
|
||||
using System;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace NzbDrone.Services.Service.Exceptions
|
||||
{
|
||||
public class ExceptionInstance
|
||||
{
|
||||
[BsonElement("ver")]
|
||||
public string AppVersion { get; set; }
|
||||
|
||||
[BsonElement("uid")]
|
||||
public string UserId { get; set; }
|
||||
|
||||
[BsonElement("xmsg")]
|
||||
public string ExceptionMessage { get; set; }
|
||||
|
||||
[BsonElement("msg")]
|
||||
public string Message { get; set; }
|
||||
|
||||
[BsonElement("time")]
|
||||
public DateTime Time { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using System.Linq;
|
||||
|
||||
namespace NzbDrone.Services.Service.Exceptions
|
||||
{
|
||||
public class ExceptionReport
|
||||
{
|
||||
public string ApplicationId { get; set; }
|
||||
public string AppVersion { get; set; }
|
||||
public string Uid { get; set; }
|
||||
public string ExceptionType { get; set; }
|
||||
public string ExceptionMessage { get; set; }
|
||||
public string Stack { get; set; }
|
||||
public string Location { get; set; }
|
||||
public string Message { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using MongoDB.Driver;
|
||||
using MongoDB.Driver.Builders;
|
||||
|
||||
namespace NzbDrone.Services.Service.Exceptions
|
||||
{
|
||||
public class ExceptionRepository
|
||||
{
|
||||
private readonly MongoDatabase _mongoDb;
|
||||
|
||||
public ExceptionRepository(MongoDatabase mongoDb)
|
||||
{
|
||||
_mongoDb = mongoDb;
|
||||
}
|
||||
|
||||
|
||||
public virtual string Store(NzbDrone.Services.Service.Exceptions.ExceptionReport exceptionReport)
|
||||
{
|
||||
var hash = GetExceptionDetailId(exceptionReport);
|
||||
|
||||
var exceptionInstance = new NzbDrone.Services.Service.Exceptions.ExceptionInstance
|
||||
{
|
||||
AppVersion = exceptionReport.AppVersion,
|
||||
ExceptionMessage = exceptionReport.ExceptionMessage,
|
||||
Message = exceptionReport.Message,
|
||||
Time = DateTime.UtcNow,
|
||||
UserId = exceptionReport.Uid
|
||||
};
|
||||
|
||||
|
||||
|
||||
var applicationExceptions = _mongoDb.GetCollection(exceptionReport.ApplicationId);
|
||||
|
||||
applicationExceptions.Update(Query.EQ("_id", hash), Update.PushWrapped("inst", exceptionInstance));
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
private string GetExceptionDetailId(NzbDrone.Services.Service.Exceptions.ExceptionReport exceptionReport)
|
||||
{
|
||||
var hash = Hash(String.Concat(exceptionReport.AppVersion, exceptionReport.Location, exceptionReport.ExceptionType, exceptionReport.Stack));
|
||||
|
||||
if (!ExceptionInfoExists(exceptionReport.ApplicationId, hash))
|
||||
{
|
||||
var exceptionInfo = new NzbDrone.Services.Service.Exceptions.ExceptionInfo
|
||||
{
|
||||
Hash = hash,
|
||||
Stack = exceptionReport.Stack,
|
||||
ExceptionType = exceptionReport.ExceptionType,
|
||||
Location = exceptionReport.Location
|
||||
};
|
||||
|
||||
_mongoDb.GetCollection(exceptionReport.ApplicationId).Insert(exceptionInfo);
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
public bool ExceptionInfoExists(string applicationId, string hash)
|
||||
{
|
||||
var appCollection = _mongoDb.GetCollection(applicationId);
|
||||
return appCollection.FindAs<NzbDrone.Services.Service.Exceptions.ExceptionInfo>(Query.EQ("_id", hash)).Any();
|
||||
}
|
||||
|
||||
private static string Hash(string input)
|
||||
{
|
||||
uint mCrc = 0xffffffff;
|
||||
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(input);
|
||||
foreach (byte myByte in bytes)
|
||||
{
|
||||
mCrc ^= ((uint)(myByte) << 24);
|
||||
for (var i = 0; i < 8; i++)
|
||||
{
|
||||
if ((Convert.ToUInt32(mCrc) & 0x80000000) == 0x80000000)
|
||||
{
|
||||
mCrc = (mCrc << 1) ^ 0x04C11DB7;
|
||||
}
|
||||
else
|
||||
{
|
||||
mCrc <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return String.Format("{0:x8}", mCrc);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -47,6 +47,9 @@
|
|||
<Reference Include="Elmah">
|
||||
<HintPath>..\..\packages\elmah.corelibrary.1.2.1\lib\Elmah.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Exceptrack.Core">
|
||||
<HintPath>..\..\Libraries\Exceptrack\Exceptrack.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<Private>True</Private>
|
||||
|
@ -64,6 +67,12 @@
|
|||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\Libraries\Migrator.NET\Migrator.Providers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MongoDB.Bson">
|
||||
<HintPath>..\..\packages\mongocsharpdriver.1.4\lib\net35\MongoDB.Bson.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MongoDB.Driver">
|
||||
<HintPath>..\..\packages\mongocsharpdriver.1.4\lib\net35\MongoDB.Driver.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=4.0.8.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Newtonsoft.Json.4.0.8\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
|
@ -216,6 +225,10 @@
|
|||
<Compile Include="App_Start\Logging.cs" />
|
||||
<Compile Include="App_Start\NinjectMVC3.cs" />
|
||||
<Compile Include="Controllers\ExceptionController.cs" />
|
||||
<Compile Include="Exceptions\ExceptionInfo.cs" />
|
||||
<Compile Include="Exceptions\ExceptionInstance.cs" />
|
||||
<Compile Include="Exceptions\ExceptionReport.cs" />
|
||||
<Compile Include="Exceptions\ExceptionRepository.cs" />
|
||||
<Compile Include="Helpers\HtmlIncludeExtentions.cs" />
|
||||
<Compile Include="Migrations\Migration20120226.cs" />
|
||||
<Compile Include="Migrations\Migration20120229.cs" />
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<package id="jQuery.UI.Combined" version="1.8.17" />
|
||||
<package id="jQuery.Validation" version="1.9" />
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
|
||||
<package id="mongocsharpdriver" version="1.4" />
|
||||
<package id="Newtonsoft.Json" version="4.0.8" />
|
||||
<package id="Ninject" version="2.2.1.4" />
|
||||
<package id="Ninject.MVC3" version="2.2.2.0" />
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
Copyright (c) 2010 Darren Cauthon
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,22 @@
|
|||
Copyright (c) 2010 Darren Cauthon
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,22 @@
|
|||
Copyright (c) 2010 Darren Cauthon
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
Binary file not shown.
|
@ -0,0 +1,22 @@
|
|||
Copyright (c) 2010 Darren Cauthon
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
Binary file not shown.
|
@ -0,0 +1,175 @@
|
|||
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
|
||||
{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
|
||||
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
|
||||
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
|
||||
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
|
||||
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
|
||||
{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
|
||||
{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f59\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f60\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}
|
||||
{\f62\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f63\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f64\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f65\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}
|
||||
{\f66\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f67\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f59\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f60\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}
|
||||
{\f62\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f63\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f64\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f65\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}
|
||||
{\f66\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f67\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f409\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f410\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
|
||||
{\f412\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f413\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f416\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f417\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}
|
||||
{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
|
||||
{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
|
||||
{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
|
||||
{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
|
||||
{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
|
||||
{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}
|
||||
{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}
|
||||
{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
|
||||
{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
|
||||
{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
|
||||
{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
|
||||
{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
|
||||
{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
|
||||
{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
|
||||
{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
|
||||
{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
|
||||
{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
|
||||
{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
|
||||
{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
|
||||
{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}
|
||||
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
|
||||
\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1
|
||||
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
|
||||
\f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 \styrsid6517486 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
|
||||
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
|
||||
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}}
|
||||
{\*\rsidtbl \rsid658138\rsid2448388\rsid6517486\rsid8002733\rsid11818273\rsid14620378}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Robert Stam}
|
||||
{\operator Sridhar Nanjundeswaran}{\creatim\yr2010\mo10\dy1\hr11\min43}{\revtim\yr2012\mo3\dy27\hr11\min52}{\version4}{\edmins2}{\nofpages1}{\nofwords82}{\nofchars471}{\*\company 10gen}{\nofcharsws552}{\vern49273}}{\*\xmlnstbl {\xmlns1 http://schemas.micr
|
||||
osoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect
|
||||
\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen
|
||||
\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1
|
||||
\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
|
||||
\asianbrkrule\rsidroot14620378\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0
|
||||
{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sectrsid658138\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}
|
||||
{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}
|
||||
{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar
|
||||
\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14620378 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
|
||||
\f2\fs20\lang1024\langfe1024\noproof\insrsid14620378 Copyright 2010}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid2448388 -2012}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid14620378
|
||||
10gen Inc.
|
||||
\par
|
||||
\par Licensed under the Apache License, Version 2.0 (the "License");}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid11818273 }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid14620378
|
||||
you may not use this file except in compliance with the License.}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid11818273 }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid14620378
|
||||
You may obtain a copy of the License at
|
||||
\par
|
||||
\par http://www.apache.org/licenses/LICENSE-2.0
|
||||
\par
|
||||
\par Unless required by applicable law or agreed to in writing, software}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid11818273 }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid14620378
|
||||
distributed under the License is distributed on an "AS IS" BASIS,}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid11818273 }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid14620378
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid11818273 }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid14620378
|
||||
See the License for the specific language governing permissions and}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid11818273 }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\lang1024\langfe1024\noproof\insrsid14620378
|
||||
limitations under the License.
|
||||
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6517486
|
||||
\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
|
||||
9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
|
||||
5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
|
||||
b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
|
||||
0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
|
||||
a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
|
||||
c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
|
||||
0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
|
||||
a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
|
||||
6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
|
||||
4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
|
||||
4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f
|
||||
7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87
|
||||
615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad
|
||||
79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b
|
||||
5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab
|
||||
999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9
|
||||
699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586
|
||||
8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6
|
||||
0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f
|
||||
9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be
|
||||
15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979
|
||||
3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d
|
||||
32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a
|
||||
f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86
|
||||
e877f0034e16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb
|
||||
44f95d843b5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a
|
||||
6409fb44d08741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c
|
||||
3d9058edf2c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db0256
|
||||
5e85f3b9660d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276
|
||||
b9f7dec44b7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8
|
||||
c33585b5fb9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e
|
||||
51440ca2e0088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95
|
||||
b21be5ceaf8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff
|
||||
6dce591a26ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec6
|
||||
9ffb9e65d028d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239
|
||||
b75a5bb1e6345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a449
|
||||
59d366ad93b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e8
|
||||
2db8df9f30254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468
|
||||
656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4
|
||||
350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d2624
|
||||
52282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe5141
|
||||
73d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000
|
||||
0000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000
|
||||
000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019
|
||||
0200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b00001600000000
|
||||
000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027
|
||||
00000000000000000000000000a00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d0100009b0a00000000}
|
||||
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
|
||||
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
|
||||
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
|
||||
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
|
||||
{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
|
||||
\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;
|
||||
\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;
|
||||
\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;
|
||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000
|
||||
4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000
|
||||
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000080d2
|
||||
51cc4a0ccd01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000105000000000000}}
|
|
@ -0,0 +1,348 @@
|
|||
C# Driver Version 1.4 Release Notes
|
||||
===================================
|
||||
|
||||
The major feature of this release is support for LINQ queries. Some of the other
|
||||
changes (e.g. new IBsonSerializer methods) are also in support of the new LINQ
|
||||
implementation.
|
||||
|
||||
File by file change logs are available at:
|
||||
|
||||
https://github.com/mongodb/mongo-csharp-driver/blob/master/Release%20Notes/Change%20Log%20v1.4-Bson.txt
|
||||
https://github.com/mongodb/mongo-csharp-driver/blob/master/Release%20Notes/Change%20Log%20v1.4-Driver.txt
|
||||
|
||||
These release notes describe the changes at a higher level, and omit describing
|
||||
some of the minor changes.
|
||||
|
||||
Breaking changes
|
||||
----------------
|
||||
|
||||
There are some breaking changes in this release. Some of them are only breaking
|
||||
at the binary level and are easily taken care of by simply recompiling your
|
||||
application. Others require minor changes to your source code. Many of the
|
||||
breaking changes are in low level classes, and these won't affect most users,
|
||||
unless for example you are doing things like writing custom serializers.
|
||||
|
||||
Please read these release notes carefully before adopting the new 1.4 release
|
||||
of the C# driver to determine if any of the breaking changes affect you.
|
||||
|
||||
LINQ query support
|
||||
------------------
|
||||
|
||||
As stated previously, the major feature of this release is support for LINQ
|
||||
queries. These release notes don't describe the new LINQ support, for that
|
||||
please refer to the online LINQ tutorial at:
|
||||
|
||||
http://www.mongodb.org/display/DOCS/CSharp+Driver+LINQ+Tutorial
|
||||
|
||||
(Please note that the LINQ tutorial won't be available until several weeks
|
||||
after the 1.4 release has been shipped. Sorry.)
|
||||
|
||||
CLS compliance
|
||||
--------------
|
||||
|
||||
Both the MongoDB.Bson.dll and MongoDB.Driver.dll libraries have been marked
|
||||
as CLS compliant, which should make them more useful from other .NET languages.
|
||||
Most of the changes required to make the libraries CLS compliant are not even
|
||||
visible in the public interface.
|
||||
|
||||
Release builds
|
||||
--------------
|
||||
|
||||
Starting with the 1.4 version we are shipping Release builds of the DLLs.
|
||||
|
||||
Code formatting changes
|
||||
-----------------------
|
||||
|
||||
In response to popular demand the code base has been reformatted using the
|
||||
default Visual Studio C# code formatting settings. We have also adopted
|
||||
the convention of prefixing instance field names with a single "_" and static
|
||||
fields names with a double "__" (while this convention for static fields is
|
||||
not common it is very useful). One of the nice benefits of these conventions
|
||||
is that the drop down menu in Visual Studio that displays class members ends
|
||||
up grouping all static fields first, followed by instance fields, followed by
|
||||
the rest of the properties and methods.
|
||||
|
||||
BSON library changes
|
||||
====================
|
||||
|
||||
ArraySerializationOptions
|
||||
-------------------------
|
||||
|
||||
This new class allows you to specify serialization options for array-like
|
||||
members. Initially the only option available is to specify serialization
|
||||
options for the items of the array. When using attributes to specify
|
||||
serialization options any attributes that don't apply to the collection as a
|
||||
whole implictly apply to the items of the collection.
|
||||
|
||||
BsonDateTime is now a pure BSON DateTime value
|
||||
----------------------------------------------
|
||||
|
||||
In previous versions the BsonDateTime class stored its value twice in two
|
||||
different private fields: _millisecondsSinceEpoch (a long) and _value (a .NET
|
||||
DateTime). The idea was that you could store a .NET DateTime without losing any
|
||||
precision. However, that turns out to be confusing because as soon as you save
|
||||
the BsonDateTime value to the database and read it back you are going to lose
|
||||
precision anyway, so you might as well lose it right up front and not make
|
||||
false promises.
|
||||
|
||||
BsonDateTime also has two new helper methods: ToLocalTime and ToUniversalTime.
|
||||
These methods convert the BSON DateTime to either local or UTC .NET DateTime
|
||||
values. There are also new AsLocalTime and AsUniversalTime properties in
|
||||
BsonValues that can be used to convert BsonValues to .NET DateTime values (like
|
||||
all AsXyz properties in BsonValue they throw an InvalidCastException if the
|
||||
BsonValue is not actually a BsonDateTime).
|
||||
|
||||
BsonIgnoreExtraElements attribute
|
||||
---------------------------------
|
||||
|
||||
The BsonIgnoreExtraElements attribute has a new property called Inherited. If
|
||||
this property is set to true then all classes derived from this one will
|
||||
automatically inherit this setting, which makes it easy to set it for an
|
||||
entire class hierarchy at once.
|
||||
|
||||
BsonIgnoreIfDefault attribute
|
||||
-----------------------------
|
||||
|
||||
This new attribute allows you to specify that you want a field to be ignored
|
||||
during serialization if it is equal to the default value. This replaces the
|
||||
SerializeDefaultValue parameter of the BsonDefaultValue attribute. By making
|
||||
this a separate attribute you can specify that you want the default value
|
||||
ignored without having to specify the default value as well.
|
||||
|
||||
BsonReader: CurrentBsonType vs GetCurrentBsonType
|
||||
-------------------------------------------------
|
||||
|
||||
In previous versions the CurrentBsonType property had side effects. In general
|
||||
it is bad form for the get accessor of a property to have side effects, as even
|
||||
something as simple as looking at the value of the property in a debugger can
|
||||
have unintended consequences. Therefore, in the 1.4 release the CurrentBsonType
|
||||
property has no side effects. The previous behavior is now implemented in the
|
||||
GetCurrentBsonType method. While this is mostly an internal change, *if* you
|
||||
have written a custom serializer that used the CurrentBsonType property and
|
||||
were relying on its side effects you will have to change your custom serializer
|
||||
to call GetCurrentBsonType instead.
|
||||
|
||||
ConventionProfile new conventions
|
||||
---------------------------------
|
||||
|
||||
The ConventionProfile class has two new conventions: IgnoreIfDefaultConvention
|
||||
and SerializationOptionsConvention. Also, the SerializeDefaultValueConvention
|
||||
has been obsoleted in favor of the new IgnoreIfDefaultConvention.
|
||||
|
||||
DictionarySerializationOptions
|
||||
------------------------------
|
||||
|
||||
This class has a new property called ItemSerializationOptions that can be used
|
||||
to specify the options to use when serializing the value of the items in the
|
||||
dictionary. When using attributes to specify serialization options, any
|
||||
attributes that don't apply to the dictionary as a whole implicitly apply to
|
||||
the value of the items in the dictionary.
|
||||
|
||||
ExtraElements
|
||||
-------------
|
||||
|
||||
Previous versions of the C# driver allowed you to specify a field of the class
|
||||
to be used to store any extra elements encountered during deserialization.
|
||||
However, this field *had* to be of type BsonDocument, which meant introducing
|
||||
a dependency on the driver into your data model classes (which some developers
|
||||
don't want to do). You now have the additional option of declaring your
|
||||
ExtraElements field to be of type IDictionary\<string, object\> instead.
|
||||
|
||||
IBsonSerializationOptions
|
||||
-------------------------
|
||||
|
||||
The IBsonSerializationOptions has several new methods. ApplyAttribute is used
|
||||
during the AutoMap process to apply an attribute to some serialization options
|
||||
that are being built incrementally (starting from the default serialization
|
||||
options). This provides an extensible mechanism for applying new attributes to
|
||||
new serialization options classes. The Clone and Freeze methods are introduced
|
||||
to allow serialization options to be converted to read-only once initialization
|
||||
is complete to provide thread safety.
|
||||
|
||||
IBsonSerializer
|
||||
---------------
|
||||
|
||||
The IBsonSerializer has several new methods. GetDefaultSerializationOptions
|
||||
provides an initial set of serialization options that any serialization
|
||||
attributes found can be applied against. GetItemSerializationInfo provides
|
||||
serialization info about the items and applies only to serializers for
|
||||
collection-like classes. GetMemberSerializationInfo provides serialization
|
||||
info about members of a class. The last two are used in the implementation
|
||||
of LINQ queries.
|
||||
|
||||
Image/Bitmap serializers
|
||||
------------------------
|
||||
|
||||
New serializers have been provided for the Image abstract base class and the
|
||||
Bitmap class derived from it.
|
||||
|
||||
ISupportInitialize
|
||||
------------------
|
||||
|
||||
The ISupportInitialize interface defines two methods: BeginInit and EndInit.
|
||||
The BsonClassMapSerializer now checks whether the class being deserialized
|
||||
implements this interface, and if so, calls BeginInit just before it starts
|
||||
to deserialize a class, and EndInit just after it has finished. You can
|
||||
use this feature to do any pre- or post-processing.
|
||||
|
||||
ObjectId/BsonObjectId creation
|
||||
------------------------------
|
||||
|
||||
ObjectId (and BsonObjectId) have a new constructor that allows you to supply
|
||||
the timestamp as a .NET DateTime value and it will automatically be converted
|
||||
to seconds since the Unix Epoch. These new constructors are useful if you want
|
||||
to create artificial ObjectIds to use in range based ObjectId queries (in
|
||||
which case you will usually set the machine, pid and increment fields to zero).
|
||||
|
||||
There are also two new overloads of GenerateNewId that allow you to provide
|
||||
the desired timestamp as either an int or a .NET DateTime. These new overloads
|
||||
are useful if you need to create backdated ObjectIds. When generating backdated
|
||||
ObjectIds there is a slight risk that you might create an ObjectId that is
|
||||
not unique (but that risk is very small).
|
||||
|
||||
TimeSpanSerializationOptions
|
||||
----------------------------
|
||||
|
||||
You can now choose any of the following representations for a TimeSpan: string,
|
||||
double, Int32 or Int64. In addition, when using any of the numeric
|
||||
representations, you can use the Units property to choose the units that the
|
||||
numeric value is in (choose from: Ticks, Days, Hours, Minutes, Seconds,
|
||||
Milliseconds and Nanoseconds).
|
||||
|
||||
Driver changes
|
||||
==============
|
||||
|
||||
Authentication support improved
|
||||
-------------------------------
|
||||
|
||||
Operations that require admin credentials previously required you to set the
|
||||
DefaultCredentials of MongoServerSetttings to admin credentials. But that is
|
||||
undesirable because it provides the client code full access to all databases,
|
||||
essentially negating the benefit of using authentication in the first place.
|
||||
In the 1.4 release all operations that require admin credentials have a new
|
||||
overload where you can provide the needed credentials; you no longer have to
|
||||
set the DefaultCredentials. Another option is to store credentials for the
|
||||
admin database in the new MongoCredentialsStore.
|
||||
|
||||
Connection pool defaults changed
|
||||
--------------------------------
|
||||
|
||||
The default value of WaitQueueMultiple has been changed from 1.0 to 5.0 and the
|
||||
default value of WaitQueueTimeout has been changed from 0.5 seconds to 2
|
||||
minutes. These new values are taken from the Java driver, where they have
|
||||
reportedly been working well for users running under heavy loads. These new
|
||||
values mean that many more threads can be waiting for a longer time before a
|
||||
timeout exception is thrown.
|
||||
|
||||
Exceptions are no longer caught and rethrown when possible
|
||||
----------------------------------------------------------
|
||||
|
||||
Wherever possible exception handling code that used to use catch exceptions
|
||||
and rethrow them after processing them has been changed to roughly equivalent
|
||||
code that uses try/finally to accomplish the same objective. This is specially
|
||||
helpful if you are running the debugger set to stop whenever an exception is
|
||||
thrown.
|
||||
|
||||
IBsonSerializable semi-deprecated
|
||||
---------------------------------
|
||||
|
||||
The LINQ support relies heavily on the new methods added to IBsonSerializer.
|
||||
Because of this it is highly encouraged that *if* you have to handle your own
|
||||
serialization that you always opt to write an IBsonSerializer for your class
|
||||
instead of having it implement IBsonSerializable (see the notes for MongoDBRef
|
||||
and SystemProfileInfo for examples of where the driver itself has switched
|
||||
from IBsonSerializable to using a IBsonSerializer). IBsonSerializable still
|
||||
has a modest role to play in classes that just need to be serialized quickly
|
||||
and simply and for which we won't be writing LINQ queries (for example, the
|
||||
driver's Builders and Wrappers still use IBsonSerializable).
|
||||
|
||||
LINQ query support
|
||||
------------------
|
||||
|
||||
As mentioned earlier in the release notes more information about the new
|
||||
support for LINQ queries can be found in the forthcoming LINQ tutorial:
|
||||
|
||||
http://www.mongodb.org/display/DOCS/CSharp+Driver+LINQ+Tutorial
|
||||
|
||||
Locking issues
|
||||
--------------
|
||||
|
||||
A number of locking issues related to connection pooling have been resolved.
|
||||
These issues were particularly likely to occur if you had more threads than
|
||||
the maximum size of the connection pool and were using the connections heavily
|
||||
enough that the connection pool could be used up.
|
||||
|
||||
MongoCredentialsStore
|
||||
---------------------
|
||||
|
||||
You can now create a credentials store which contains credentials for multiple
|
||||
databases (the name of the database is the key and the credentials are the
|
||||
value). The credentials store must be set up (in the MongoServerSettings)
|
||||
before you call MongoServer.Create, so it is only intended for scenarios
|
||||
where you have a fixed set of credentials that aren't going to change at runtime.
|
||||
|
||||
MongoDBRef no longer implements IBsonSerializable
|
||||
-------------------------------------------------
|
||||
|
||||
MongoDBRef used to handle its own serialization by virtue of implementing
|
||||
IBsonSerializable. But the IBsonSerializable interface is not helpful when we
|
||||
try to add support for writing LINQ queries against components of a MongoDBRef.
|
||||
Instead, there is now a MongoDBRefSerializer which handles serialization of
|
||||
MongoDBRefs, as well as implementing GetMemberSerializationInfo which enables
|
||||
the LINQ implementation to support LINQ queries against MongoDBRefs.
|
||||
|
||||
MongoInsertOptions/MongoUpdateOptions constructor changed
|
||||
---------------------------------------------------------
|
||||
|
||||
The constructors for MongoInsertOptions and MongoUpdateOptions used to require
|
||||
that the collection be passed in as a parameter. The purpose was to allow
|
||||
the constructor to inherit some of the options from the collection settings.
|
||||
To the developer however, this was awkward, as it required providing the
|
||||
collection where it seemed to be redundant. By handling default values in a
|
||||
different way we no longer require the collection to be supplied to the
|
||||
constructors. The old constructors (that require the collection parameter) are
|
||||
still temporarily supported but have been marked as deprecated with a warning.
|
||||
|
||||
MongoServer Admin properties and methods removed
|
||||
------------------------------------------------
|
||||
|
||||
The following Admin properties and methods have been removed from MongoServer:
|
||||
AdminDatabase, GetAdminDatabase, RunAdminCommand, and RunAdminCommandAs. The
|
||||
reason for removing them is that many developers would never use them anyway,
|
||||
and adding new overloads for providing admin credentials would have resulted
|
||||
in even more of these rarely used properties and methods. If you were using
|
||||
any of these methods or properties they can easily be replaced with calls to
|
||||
methods of an instance of MongoDatabase (use one of the overloads of
|
||||
GetDatabase with "admin" as the database name to get a reference to the admin
|
||||
database).
|
||||
|
||||
RequestStart/RequestDone
|
||||
------------------------
|
||||
|
||||
Recall that the purpose of RequestStart is to tell the driver that a series of
|
||||
operations should all be done using the same connection (which in the case of a
|
||||
replica set also implies using the same member of the connection set). Which
|
||||
member of a replica set was chosen depended on the slaveOk parameter: a value
|
||||
of false meant that the primary had to be used, and a value of true meant that
|
||||
an arbitrary secondary could be used. A new overload of RequestStart now allows
|
||||
the caller to specify which member should be used, which can be very useful for
|
||||
implementing custom query routing algorithms or for querying specific members
|
||||
of a replica set. In general though, keep in mind that you should *not* be
|
||||
using RequestStart unless you have an unusual scenario which requires it.
|
||||
|
||||
SocketTimeout default changed
|
||||
-----------------------------
|
||||
|
||||
The default value for SocketTimeout has been changed from 30 seconds to 0,
|
||||
which is a special value meaning to use the operating system default value,
|
||||
which in turn is infinity. If you actually want a SocketTimeout you now
|
||||
have to set it yourself. The SocketTimeout is currently a server level setting,
|
||||
but most likely in a future release it will be possible to set it at other
|
||||
levels, including for individual operations.
|
||||
|
||||
SystemProfileInfo no longer implements IBsonSerializable
|
||||
--------------------------------------------------------
|
||||
|
||||
See the notes for MongoDBRef. SystemProfileInfo no longer implements
|
||||
IBsonSerializable for the same reasons, and there is a new
|
||||
SystemProfileInfoSerializer instead.
|
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue