From 3a88bf8a5d565ddd63ef281445a877721d7de5be Mon Sep 17 00:00:00 2001 From: Gavin Brennan Date: Thu, 30 Mar 2023 17:05:44 +0200 Subject: [PATCH] Qwack.Excel.Next (initial cut) --- Qwack.sln | 19 +- clients/Qwack.Excel.Next/Calendars.json | 1168 + .../Capital/CapitalFunctions.cs | 462 + clients/Qwack.Excel.Next/CategoryNames.cs | 22 + clients/Qwack.Excel.Next/ContainerStores.cs | 122 + .../Qwack.Excel.Next/Cubes/CubeFunctions.cs | 361 + clients/Qwack.Excel.Next/Currencies.json | 158 + .../Curves/CreditCurveFunctions.cs | 137 + .../Curves/IRCurveFunctions.cs | 497 + .../Curves/PriceCurveFunctions.cs | 552 + .../Dates/BusinessDateFunctions.cs | 362 + .../Dates/FuturesFunctions.cs | 163 + .../Qwack.Excel.Next/GlobalSuppressions.cs | 162 + .../Instruments/FundingInstrumentFunctions.cs | 685 + .../Instruments/InstrumentFunctions.cs | 1491 ++ .../Interpolation/InterpolatorFunctions.cs | 140 + .../Qwack.Excel.Next/Math/MathFunctions.cs | 91 + .../Qwack.Excel.Next/Models/ModelFunctions.cs | 440 + .../Options/AmericanFunctions.cs | 77 + .../Options/AsianFunctions.cs | 225 + .../Options/BlackFunctions.cs | 113 + .../Qwack.Excel.Next/Options/LMEFunctions.cs | 116 + .../Options/VolSurfaceFunctions.cs | 569 + .../Properties/launchSettings.json | 13 + .../Qwack.Excel.Next/Qwack.Excel.Next.csproj | 49 + clients/Qwack.Excel.Next/QwackDna.dna | 20 + clients/Qwack.Excel.Next/QwackDna.xll | Bin 0 -> 770048 bytes clients/Qwack.Excel.Next/QwackDna.xll.config | 154 + clients/Qwack.Excel.Next/QwackDna64.dna | 20 + clients/Qwack.Excel.Next/QwackDna64.xll | Bin 0 -> 660992 bytes .../Ribbon/CalendarViewer.xaml | 12 + .../Ribbon/CalendarViewer.xaml.cs | 28 + clients/Qwack.Excel.Next/Ribbon/Ribbon.cs | 69 + .../Qwack.Excel.Next/Risk/RiskFunctions.cs | 429 + .../SobolDirectionNumbers.txt | 21201 ++++++++++++++++ clients/Qwack.Excel.Next/StartUp.cs | 18 + clients/Qwack.Excel.Next/Utils/ExcelHelper.cs | 422 + .../Utils/ExcelObjectStore.cs | 45 + clients/Qwack.Excel.Next/Utils/ExcelUtils.cs | 458 + .../Qwack.Excel.Next/Utils/IObjectStore.cs | 22 + .../Qwack.Excel.Next/Utils/ISessionItem.cs | 14 + .../Qwack.Excel.Next/Utils/ISessionItemOfT.cs | 13 + clients/Qwack.Excel.Next/Utils/SessionItem.cs | 17 + .../Utils/SessionItemExtensions.cs | 15 + .../Qwack.Excel.Next/Utils/SortDirection.cs | 18 + clients/Qwack.Excel.Next/futuresettings.json | 14488 +++++++++++ clients/Qwack.Excel/Calendars.json | 48 +- clients/Qwack.Excel/Currencies.json | 27 +- clients/Qwack.Excel/futuresettings.json | 5120 +++- 49 files changed, 49939 insertions(+), 913 deletions(-) create mode 100644 clients/Qwack.Excel.Next/Calendars.json create mode 100644 clients/Qwack.Excel.Next/Capital/CapitalFunctions.cs create mode 100644 clients/Qwack.Excel.Next/CategoryNames.cs create mode 100644 clients/Qwack.Excel.Next/ContainerStores.cs create mode 100644 clients/Qwack.Excel.Next/Cubes/CubeFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Currencies.json create mode 100644 clients/Qwack.Excel.Next/Curves/CreditCurveFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Curves/IRCurveFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Curves/PriceCurveFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Dates/BusinessDateFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Dates/FuturesFunctions.cs create mode 100644 clients/Qwack.Excel.Next/GlobalSuppressions.cs create mode 100644 clients/Qwack.Excel.Next/Instruments/FundingInstrumentFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Instruments/InstrumentFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Interpolation/InterpolatorFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Math/MathFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Models/ModelFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Options/AmericanFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Options/AsianFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Options/BlackFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Options/LMEFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Options/VolSurfaceFunctions.cs create mode 100644 clients/Qwack.Excel.Next/Properties/launchSettings.json create mode 100644 clients/Qwack.Excel.Next/Qwack.Excel.Next.csproj create mode 100644 clients/Qwack.Excel.Next/QwackDna.dna create mode 100644 clients/Qwack.Excel.Next/QwackDna.xll create mode 100644 clients/Qwack.Excel.Next/QwackDna.xll.config create mode 100644 clients/Qwack.Excel.Next/QwackDna64.dna create mode 100644 clients/Qwack.Excel.Next/QwackDna64.xll create mode 100644 clients/Qwack.Excel.Next/Ribbon/CalendarViewer.xaml create mode 100644 clients/Qwack.Excel.Next/Ribbon/CalendarViewer.xaml.cs create mode 100644 clients/Qwack.Excel.Next/Ribbon/Ribbon.cs create mode 100644 clients/Qwack.Excel.Next/Risk/RiskFunctions.cs create mode 100644 clients/Qwack.Excel.Next/SobolDirectionNumbers.txt create mode 100644 clients/Qwack.Excel.Next/StartUp.cs create mode 100644 clients/Qwack.Excel.Next/Utils/ExcelHelper.cs create mode 100644 clients/Qwack.Excel.Next/Utils/ExcelObjectStore.cs create mode 100644 clients/Qwack.Excel.Next/Utils/ExcelUtils.cs create mode 100644 clients/Qwack.Excel.Next/Utils/IObjectStore.cs create mode 100644 clients/Qwack.Excel.Next/Utils/ISessionItem.cs create mode 100644 clients/Qwack.Excel.Next/Utils/ISessionItemOfT.cs create mode 100644 clients/Qwack.Excel.Next/Utils/SessionItem.cs create mode 100644 clients/Qwack.Excel.Next/Utils/SessionItemExtensions.cs create mode 100644 clients/Qwack.Excel.Next/Utils/SortDirection.cs create mode 100644 clients/Qwack.Excel.Next/futuresettings.json diff --git a/Qwack.sln b/Qwack.sln index 46b1b0a6..045bbe03 100644 --- a/Qwack.sln +++ b/Qwack.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29519.87 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33424.131 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{754E413D-24A5-4779-8B70-FC66F040D042}" ProjectSection(SolutionItems) = preProject @@ -98,6 +98,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Qwack.CLI", "clients\Qwack. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Qwack.Transport.Tests", "test\Qwack.Transport.Tests\Qwack.Transport.Tests.csproj", "{395E9B68-21B2-42CB-AE13-868726760EC3}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Qwack.Excel.Next", "clients\Qwack.Excel.Next\Qwack.Excel.Next.csproj", "{BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -432,6 +434,18 @@ Global {395E9B68-21B2-42CB-AE13-868726760EC3}.Release|x64.Build.0 = Release|Any CPU {395E9B68-21B2-42CB-AE13-868726760EC3}.Release|x86.ActiveCfg = Release|Any CPU {395E9B68-21B2-42CB-AE13-868726760EC3}.Release|x86.Build.0 = Release|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Debug|x64.ActiveCfg = Debug|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Debug|x64.Build.0 = Debug|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Debug|x86.ActiveCfg = Debug|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Debug|x86.Build.0 = Debug|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Release|Any CPU.Build.0 = Release|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Release|x64.ActiveCfg = Release|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Release|x64.Build.0 = Release|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Release|x86.ActiveCfg = Release|Any CPU + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -465,6 +479,7 @@ Global {B67D5804-1141-43CB-9068-F75C31621C63} = {58641E8B-8AB1-4D21-89DA-B8887907E082} {A38D741C-56D9-40D9-AD3E-C045F4D79637} = {58641E8B-8AB1-4D21-89DA-B8887907E082} {395E9B68-21B2-42CB-AE13-868726760EC3} = {9550BFAC-7055-4B8B-B391-BC93D2588A16} + {BAB9BC4F-3452-4A25-9F26-69C73D58AFDF} = {58641E8B-8AB1-4D21-89DA-B8887907E082} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {54AAD5D1-3F1A-43DC-80BB-2C61D8945F25} diff --git a/clients/Qwack.Excel.Next/Calendars.json b/clients/Qwack.Excel.Next/Calendars.json new file mode 100644 index 00000000..eb0f52c3 --- /dev/null +++ b/clients/Qwack.Excel.Next/Calendars.json @@ -0,0 +1,1168 @@ +{ + "NONE": { + "InheritedCalendar": [], + "Name": "NONE", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "US_NYD": { + "InheritedCalendar": [], + "Name": "US_NYD", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19800101", "19810101", "19820101", "19821231", "19840102", "19850101", "19860101", "19870101", "19880101", "19890102", "19900101", "19910101", "19920101", "19930101", "19931231", "19950102", "19960101", "19970101", "19980101", "19990101", "19991231", "20010101", "20020101", "20030101", "20040101", "20041231", "20060102", "20070101", "20080101", "20090101", "20100101", "20120102", "20130101", "20140101", "20150101", "20160101", "20170102", "20180101", "20190101", "20200101", "20210101", "20211231", "20230102", "20240101", "20250101", "20260101", "20270101", "20271231", "20290101", "20300101", "20310101", "20320101", "20321231", "20340102", "20350101", "20360101", "20370101", "20380101", "20381231", "20400102" ], + "MonthsToExclude": [] + }, + "US_MLK": { + "InheritedCalendar": [], + "Name": "US_MLK", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19860120", "19870119", "19880118", "19890116", "19900115", "19910121", "19920120", "19930118", "19940117", "19950116", "19960115", "19970120", "19980119", "19990118", "20000117", "20010115", "20020121", "20030120", "20040119", "20050117", "20060116", "20070115", "20080121", "20090119", "20100118", "20110117", "20120116", "20130121", "20140120", "20150119", "20160118", "20170116", "20180115", "20190121", "20200120", "20210118", "20220117", "20230116", "20240115", "20250120", "20260119", "20270118", "20280117", "20290115", "20300121", "20310120", "20320119", "20330117", "20340116", "20350115", "20360121", "20370119", "20380118", "20390117", "20400116" ], + "MonthsToExclude": [] + }, + "US_MLK98on": { + "InheritedCalendar": [], + "Name": "US_MLK98on", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19980119", "19990118", "20000117", "20010115", "20020121", "20030120", "20040119", "20050117", "20060116", "20070115", "20080121", "20090119", "20100118", "20110117", "20120116", "20130121", "20140120", "20150119", "20160118", "20170116", "20180115", "20190121", "20200120", "20210118", "20220117", "20230116", "20240115", "20250120", "20260119", "20270118", "20280117", "20290115", "20300121", "20310120", "20320119", "20330117", "20340116", "20350115", "20360121", "20370119", "20380118", "20390117", "20400116" ], + "MonthsToExclude": [] + }, + "US_WB": { + "InheritedCalendar": [], + "Name": "US_WB", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19800218", "19810216", "19820215", "19830221", "19840220", "19850218", "19860217", "19870216", "19880215", "19890220", "19900219", "19910218", "19920217", "19930215", "19940221", "19950220", "19960219", "19970217", "19980216", "19990215", "20000221", "20010219", "20020218", "20030217", "20040216", "20050221", "20060220", "20070219", "20080218", "20090216", "20100215", "20110221", "20120220", "20130218", "20140217", "20150216", "20160215", "20170220", "20180219", "20190218", "20200217", "20210215", "20220221", "20230220", "20240219", "20250217", "20260216", "20270215", "20280221", "20290219", "20300218", "20310217", "20320216", "20330221", "20340220", "20350219", "20360218", "20370216", "20380215", "20390221", "20400220" ], + "MonthsToExclude": [] + }, + "US_MEMORIAL": { + "InheritedCalendar": [], + "Name": "US_MEMORIAL", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19800526", "19810525", "19820531", "19830530", "19840528", "19850527", "19860526", "19870525", "19880530", "19890529", "19900528", "19910527", "19920525", "19930531", "19940530", "19950529", "19960527", "19970526", "19980525", "19990531", "20000529", "20010528", "20020527", "20030526", "20040531", "20050530", "20060529", "20070528", "20080526", "20090525", "20100531", "20110530", "20120528", "20130527", "20140526", "20150525", "20160530", "20170529", "20180528", "20190527", "20200525", "20210531", "20220530", "20230529", "20240527", "20250526", "20260525", "20270531", "20280529", "20290528", "20300527", "20310526", "20320531", "20330530", "20340529", "20350528", "20360526", "20370525", "20380531", "20390530", "20400528" ], + "MonthsToExclude": [] + }, + "US_IND": { + "InheritedCalendar": [], + "Name": "US_IND", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19800704", "19810703", "19820705", "19830704", "19840704", "19850704", "19860704", "19870703", "19880704", "19890704", "19900704", "19910704", "19920703", "19930705", "19940704", "19950704", "19960704", "19970704", "19980703", "19990705", "20000704", "20010704", "20020704", "20030704", "20040705", "20050704", "20060704", "20070704", "20080704", "20090703", "20100705", "20110704", "20120704", "20130704", "20140704", "20150703", "20160704", "20170704", "20180704", "20190704", "20200703", "20210705", "20220704", "20230704", "20240704", "20250704", "20260703", "20270705", "20280704", "20290704", "20300704", "20310704", "20320705", "20330704", "20340704", "20350704", "20360704", "20370703", "20380705", "20390704", "20400704" ], + "MonthsToExclude": [] + }, + "US_LABOR": { + "InheritedCalendar": [], + "Name": "US_LABOR", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19800901", "19810907", "19820906", "19830905", "19840903", "19850902", "19860901", "19870907", "19880905", "19890904", "19900903", "19910902", "19920907", "19930906", "19940905", "19950904", "19960902", "19970901", "19980907", "19990906", "20000904", "20010903", "20020902", "20030901", "20040906", "20050905", "20060904", "20070903", "20080901", "20090907", "20100906", "20110905", "20120903", "20130902", "20140901", "20150907", "20160905", "20170904", "20180903", "20190902", "20200907", "20210906", "20220905", "20230904", "20240902", "20250901", "20260907", "20270906", "20280904", "20290903", "20300902", "20310901", "20320906", "20330905", "20340904", "20350903", "20360901", "20370907", "20380906", "20390905", "20400903" ], + "MonthsToExclude": [] + }, + "US_TG": { + "InheritedCalendar": [], + "Name": "US_TG", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19801127", "19811126", "19821125", "19831124", "19841122", "19851128", "19861127", "19871126", "19881124", "19891123", "19901122", "19911128", "19921126", "19931125", "19941124", "19951123", "19961128", "19971127", "19981126", "19991125", "20001123", "20011122", "20021128", "20031127", "20041125", "20051124", "20061123", "20071122", "20081127", "20091126", "20101125", "20111124", "20121122", "20131128", "20141127", "20151126", "20161124", "20171123", "20181122", "20191128", "20201126", "20211125", "20221124", "20231123", "20241128", "20251127", "20261126", "20271125", "20281123", "20291122", "20301128", "20311127", "20321125", "20331124", "20341123", "20351122", "20361127", "20371126", "20381125", "20391124", "20401122" ], + "MonthsToExclude": [] + }, + "US_TGdayAfter": { + "InheritedCalendar": [], + "Name": "US_TGdayAfter", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19801128", "19811127", "19821126", "19831125", "19841123", "19851129", "19861128", "19871127", "19881125", "19891124", "19901123", "19911129", "19921127", "19931126", "19941125", "19951124", "19961129", "19971128", "19981127", "19991126", "20001124", "20011123", "20021129", "20031128", "20041126", "20051125", "20061124", "20071123", "20081128", "20091127", "20101126", "20111125", "20121123", "20131129", "20141128", "20151127", "20161125", "20171124", "20181123", "20191129", "20201127", "20211126", "20221125", "20231124", "20241129", "20251128", "20261127", "20271126", "20281124", "20291123", "20301129", "20311128", "20321126", "20331125", "20341124", "20351123", "20361128", "20371127", "20381126", "20391125", "20401123" ], + "MonthsToExclude": [] + }, + "US_XMAS": { + "InheritedCalendar": [], + "Name": "US_XMAS", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19801225", "19811225", "19821224", "19831226", "19841225", "19851225", "19861225", "19871225", "19881226", "19891225", "19901225", "19911225", "19921225", "19931224", "19941226", "19951225", "19961225", "19971225", "19981225", "19991224", "20001225", "20011225", "20021225", "20031225", "20041224", "20051226", "20061225", "20071225", "20081225", "20091225", "20101224", "20111226", "20121225", "20131225", "20141225", "20151225", "20161226", "20171225", "20181225", "20191225", "20201225", "20211224", "20221226", "20231225", "20241225", "20251225", "20261225", "20271224", "20281225", "20291225", "20301225", "20311225", "20321224", "20331226", "20341225", "20351225", "20361225", "20371225", "20381224", "20391226", "20401225" ], + "MonthsToExclude": [] + }, + "US_JUNETEENTH": { + "InheritedCalendar": [], + "Name": "US_JUNETEENTH", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "20210618","20220620","20230619","20240619","20250619","20260619","20270618","20280619","20290619","20300619","20310619","20320618","20330620","20340619","20350619","20360619","20370619","20380618","20390620","20400619","20410619","20420619","20430619","20440620","20450619","20460619","20470619","20480619","20490618","20500620","20510619","20520619","20530619","20540619","20550618","20560619","20570619","20580619","20590619","20600618"], + "MonthsToExclude": [] + }, + "US_FEDERAL": { + "InheritedCalendar": [ "US_NYD", "US_MLK", "US_WB", "US_MEMORIAL", "US_IND", "US_LABOR", "US_TG", "US_XMAS", "US_JUNETEENTH" ], + "Name": "US_FEDERAL", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "EASTER_GF": { + "InheritedCalendar": [], + "Name": "EASTER_GF", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "EasterGoodFriday", + "MonthsToExclude": [] + }, + "EASTER_MON": { + "InheritedCalendar": [], + "Name": "EASTER_MON", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "EasterMonday", + "MonthsToExclude": [] + }, + "EASTER": { + "InheritedCalendar": [ "EASTER_GF", "EASTER_MON" ], + "Name": "EASTER", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "ZA_HUMANRIGHTS": { + "InheritedCalendar": [], + "Name": "ZA_HUMANRIGHTS", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20000321", + "ValidFromYear": 1994, + "MonthsToExclude": [] + }, + "ZA_FREEDOM": { + "InheritedCalendar": [], + "Name": "ZA_FREEDOM", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20000427", + "ValidFromYear": 1994, + "MonthsToExclude": [] + }, + "ZA_WORKERS": { + "InheritedCalendar": [], + "Name": "ZA_WORKERS", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20000501", + "ValidFromYear": 1995, + "MonthsToExclude": [] + }, + "ZA_HERITAGE": { + "InheritedCalendar": [], + "Name": "ZA_HERITAGE", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20000924", + "ValidFromYear": 1995, + "MonthsToExclude": [] + }, + "ZA_NEWYEAR": { + "InheritedCalendar": [], + "Name": "ZA_NEWYEAR", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20000101", + "ValidFromYear": 1910, + "MonthsToExclude": [] + }, + "ZA_YOUTH": { + "InheritedCalendar": [], + "Name": "ZA_YOUTH", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20000616", + "ValidFromYear": 1995, + "MonthsToExclude": [] + }, + "ZA_WOMENS": { + "InheritedCalendar": [], + "Name": "ZA_WOMENS", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20000809", + "ValidFromYear": 1995, + "MonthsToExclude": [] + }, + "ZA_RECONCILLIATION": { + "InheritedCalendar": [], + "Name": "ZA_RECONCILLIATION", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20001216", + "ValidFromYear": 1995, + "MonthsToExclude": [] + }, + "ZA_XMAS": { + "InheritedCalendar": [], + "Name": "ZA_XMAS", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20001225", + "ValidFromYear": 1910, + "MonthsToExclude": [] + }, + "ZA_BOXING": { + "InheritedCalendar": [], + "Name": "ZA_BOXING", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "CalendarType": "FixedDateZARule", + "FixedDate": "20001226", + "ValidFromYear": 1910, + "MonthsToExclude": [] + }, + "FRA_LABOR": { + "InheritedCalendar": [], + "Name": "FRA_LABOR", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19950501", "19960501", "19970501", "19980501", "20000501", "20010501", "20020501", "20030501", "20050502", "20060501", "20070501", "20080501", "20090501", "20110502", "20120501", "20130501", "20140501", "20150501", "20160502", "20170501", "20180501", "20190501", "20200501", "20220502", "20230501", "20240501", "20250501", "20260501", "20280501", "20290501", "20300501", "20310501", "20330502", "20340501", "20350501", "20360501", "20370501", "20390502", "20400501", "20410501", "20420501", "20430501", "20440502", "20450501", "20460501", "20470501", "20480501", "20500502" ], + "MonthsToExclude": [] + }, + "BOXINGDAY": { + "InheritedCalendar": [], + "Name": "BOXINGDAY", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19951226", "19961226", "19971226", "19991227", "20001226", "20011226", "20021226", "20031226", "20041227", "20051226", "20061226", "20071226", "20081226", "20101227", "20111226", "20121226", "20131226", "20141226", "20161226", "20171226", "20181226", "20191226", "20211227", "20221226", "20231226", "20241226", "20251226", "20271227", "20281226", "20291226", "20301226", "20311226", "20321227", "20331226", "20341226", "20351226", "20361226", "20381227", "20391226", "20401226", "20411226", "20421226", "20441226", "20451226", "20461226", "20471226", "20491227", "20501226" ], + "MonthsToExclude": [] + }, + "LIFFE_PAR": { + "InheritedCalendar": [ "FRA_LABOR", "BOXINGDAY", "EASTER", "US_XMAS" ], + "Name": "LIFFE_PAR", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "ABU": { + "InheritedCalendar": [], + "Name": "ABU", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040201", "20040202", "20040221", "20040501", "20040807", "20040912", "20041114", "20041115", "20041202", "20041204", "20050101", "20050122", "20050123", "20050210", "20050421", "20050806", "20050901", "20051103", "20051105", "20051203", "20051204", "20060101", "20060105", "20060107", "20060109", "20060110", "20060111", "20060130", "20060410", "20060806", "20060821", "20061023", "20061024", "20061202", "20061203", "20061230", "20061231", "20070101", "20070120", "20070331", "20070806", "20070811", "20071013", "20071014", "20071202", "20071203", "20071218", "20071219", "20071220", "20071222", "20080101", "20080110", "20080320", "20080731", "20080930", "20081001", "20081002", "20081202", "20081203", "20081207", "20081208", "20081209", "20081210", "20081228", "20090101", "20090308", "20090719", "20090920", "20090921", "20090922", "20091126", "20091128", "20091129", "20091202", "20091203", "20100911", "20100912", "20101115", "20101116", "20101117", "20101118", "20101202", "20110101", "20110217", "20110630", "20110830", "20110831", "20110901", "20111105", "20111106", "20111107", "20111201", "20111203", "20120101", "20120204", "20120617", "20120819", "20120820", "20121025", "20121027", "20121028", "20121115", "20121202", "20121203", "20130101", "20130124", "20130606", "20130808", "20130810", "20131014", "20131015", "20131016", "20131104", "20131202", "20131203", "20140101", "20140113", "20140526", "20140728", "20140729", "20141004", "20141005", "20141006", "20141025", "20141202", "20141203", "20150101", "20150103", "20150516", "20150718", "20150922", "20150923", "20150924", "20151014", "20151202", "20151203", "20151223", "20160504", "20160706", "20160707", "20160910", "20160911", "20160912", "20161002", "20161203", "20161211", "20170101", "20170424", "20170625", "20170626", "20170831", "20170902", "20170903", "20170921", "20171130", "20171202", "20171203", "20180101", "20180616", "20180820", "20180821", "20180822", "20180911", "20181120", "20181202", "20181203", "20190101", "20190403", "20190604", "20190605", "20190810", "20190811", "20190812", "20190831", "20191109", "20191202", "20191203", "20200101", "20200322", "20200524", "20200525", "20200730", "20200801", "20200802", "20200820", "20201029", "20201202", "20201203", "20210311", "20210513", "20210515", "20210719", "20210720", "20210721", "20210809", "20211018", "20211202", "20220101", "20220228", "20220502", "20220503", "20220709", "20220710", "20220711", "20220730", "20221008", "20221203", "20230101", "20230218", "20230422", "20230627", "20230628", "20230629", "20230719", "20230927", "20231202", "20231203", "20240101", "20240208", "20240410", "20240411", "20240615", "20240616", "20240617", "20240707", "20240915", "20241202", "20241203", "20250101", "20250127", "20250330", "20250331", "20250605", "20250607", "20250608", "20250626", "20250904", "20251202", "20251203", "20260101", "20260321", "20260526", "20260527", "20260528", "20260616", "20260825", "20261202", "20261203", "20270105", "20270309", "20270310", "20270515", "20270516", "20270517", "20270606", "20270814", "20271202", "20271225", "20280101", "20280226", "20280227", "20280504", "20280506", "20280507", "20280525", "20280803", "20281202", "20281203", "20281214", "20290101", "20290214", "20290215", "20290423", "20290424", "20290425", "20290514", "20290724", "20291202", "20291203", "20300101", "20300204", "20300205", "20300413", "20300414", "20300415", "20300504", "20300713", "20301123", "20301202", "20301203", "20310101", "20310125", "20310401", "20310402", "20310403", "20310423", "20310702", "20311112", "20311202", "20311203", "20320101", "20320114", "20320115", "20320321", "20320322", "20320323", "20320324", "20320411", "20320620", "20321101", "20321202", "20330101", "20330102", "20330103", "20330310", "20330312", "20330313", "20330609", "20331203", "20331224", "20340101", "20340228", "20340301", "20340302", "20340321", "20340530", "20341010", "20341202", "20341203", "20341212", "20341213", "20350101", "20350217", "20350218", "20350219", "20350311", "20350520", "20350929", "20351201", "20351202", "20351203", "20360101", "20360206", "20360207", "20360228", "20360508", "20360918", "20361119", "20361120", "20361202", "20361203", "20370101", "20370125", "20370126", "20370127", "20370128", "20370216", "20370428", "20370907", "20371108", "20371109", "20371202", "20371203", "20380116", "20380117", "20380118", "20380417", "20380828", "20381030", "20381202", "20390101", "20390104", "20390105", "20390106", "20390126", "20390406", "20390817", "20391019", "20391020", "20391203", "20391225", "20391226", "20391227", "20391228", "20400101", "20400115", "20400325", "20400805", "20401007", "20401008", "20401202", "20401203", "20401213", "20401215", "20401216", "20410101", "20410725", "20410926", "20410928", "20411202", "20411203", "20411204", "20411205", "20411224", "20420101", "20420304", "20420715", "20420915", "20420916", "20421122", "20421123", "20421124", "20421202", "20421203", "20421214", "20430101", "20430222", "20430704", "20430905", "20431111", "20431112", "20431202", "20431203", "20440211", "20440623", "20440824", "20440825", "20441030", "20441031", "20441101", "20441102", "20441121", "20441203", "20450101", "20450130", "20450613", "20450814", "20450815", "20451021", "20451022", "20451023", "20451202", "20451203", "20460101", "20460602", "20460804", "20461009", "20461010", "20461011", "20461031", "20461202", "20461203", "20470101", "20470108", "20470522", "20470724", "20470725", "20470929", "20470930", "20471001", "20471002", "20471020", "20471202", "20471203", "20471229", "20480101", "20480510", "20480712", "20480713", "20480919", "20480920", "20480921", "20481202", "20481203", "20490429", "20490701", "20490703", "20490907", "20490908", "20490909", "20490928", "20491202", "20491207", "20500101", "20500419", "20500620", "20500621", "20500827", "20500828", "20500829", "20500917", "20501127", "20501203", "20510101", "20510409", "20510610", "20510611", "20510816", "20510817", "20510906", "20511116", "20511202", "20511203", "20520101", "20520328", "20520529", "20520530", "20520804", "20520805", "20520806", "20520807", "20520826", "20521104", "20521202", "20521203", "20530101", "20530318", "20530519", "20530520", "20530726", "20530727", "20530728", "20531202", "20531203", "20540101", "20540307", "20540509", "20540510", "20540714", "20540715", "20540716", "20540805", "20541013", "20541202", "20541203", "20550224", "20550428", "20550429", "20550704", "20550705", "20550706", "20550707", "20550725", "20551003", "20551202", "20560101", "20560213", "20560416", "20560417", "20560622", "20560624", "20560625", "20561202", "20561203", "20570101", "20570201", "20570405", "20570407", "20570611", "20570612", "20570613", "20570703", "20570911", "20571202", "20571203", "20580101", "20580122", "20580325", "20580326", "20580601", "20580602", "20580603", "20580622", "20580831", "20581202", "20581203", "20590101", "20590112", "20590315", "20590316", "20590521", "20590522", "20590611", "20590820", "20591202", "20591203", "20600101", "20600304", "20600306", "20600509", "20600510", "20600511", "20600512", "20600531", "20600808", "20601202", "20601220", "20610101", "20610221", "20610222", "20610430", "20610501", "20610502", "20611203" ], + "MonthsToExclude": [] + }, + "AMS": { + "InheritedCalendar": [], + "Name": "AMS", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880401", "19880404", "19880512", "19880523", "19881226", "19890324", "19890327", "19890501", "19890504", "19890515", "19891225", "19891226", "19900101", "19900413", "19900416", "19900430", "19900524", "19900604", "19901225", "19901226", "19910101", "19910329", "19910401", "19910430", "19910509", "19910520", "19911225", "19911226", "19920101", "19920417", "19920420", "19920430", "19920528", "19920608", "19921225", "19930101", "19930409", "19930412", "19930430", "19930520", "19930531", "19940401", "19940404", "19940512", "19940523", "19941226", "19950414", "19950417", "19950501", "19950525", "19950605", "19951225", "19951226", "19960101", "19960405", "19960408", "19960430", "19960516", "19960527", "19961225", "19961226", "19970101", "19970328", "19970331", "19970430", "19970508", "19970519", "19971225", "19971226", "19980101", "19980410", "19980413", "19980430", "19980521", "19980601", "19981225", "19990101", "19990402", "19990405", "19990430", "19990513", "19990524", "19991225", "19991231", "20000101", "20000421", "20000424", "20000430", "20000601", "20000612", "20001225", "20001226", "20010101", "20010413", "20010416", "20010430", "20010604", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020430", "20020501", "20020509", "20020520", "20021225", "20021226", "20030101", "20030418", "20030421", "20030430", "20030529", "20030609", "20031225", "20031226", "20040101", "20040409", "20040412", "20040430", "20040520", "20040531", "20050325", "20050328", "20050430", "20050505", "20050516", "20051226", "20060414", "20060417", "20060430", "20060525", "20060605", "20061225", "20061226", "20070101", "20070406", "20070409", "20070430", "20070517", "20070528", "20071225", "20071226", "20080101", "20080321", "20080324", "20080430", "20080501", "20080512", "20081225", "20081226", "20090101", "20090410", "20090413", "20090430", "20090521", "20090601", "20091225", "20100101", "20100402", "20100405", "20100430", "20100505", "20100513", "20100524", "20110422", "20110425", "20110602", "20110613", "20111226", "20120406", "20120409", "20120430", "20120517", "20120528", "20121225", "20121226", "20130101", "20130329", "20130401", "20130430", "20130509", "20130520", "20131225", "20131226", "20140101", "20140418", "20140421", "20140430", "20140529", "20140609", "20141225", "20141226", "20150101", "20150403", "20150406", "20150430", "20150505", "20150514", "20150525", "20151225", "20160101", "20160325", "20160328", "20160505", "20160516", "20161226", "20170414", "20170417", "20170525", "20170605", "20171225", "20171226", "20180101", "20180330", "20180402", "20180430", "20180510", "20180521", "20181225", "20181226", "20190101", "20190419", "20190422", "20190430", "20190530", "20190610", "20191225", "20191226", "20200101", "20200410", "20200413", "20200430", "20200505", "20200521", "20200601", "20201225", "20210101", "20210402", "20210405", "20210430", "20210513", "20210524", "20220415", "20220418", "20220526", "20220606", "20221226", "20230407", "20230410", "20230518", "20230529", "20231225", "20231226", "20240101", "20240329", "20240401", "20240430", "20240509", "20240520", "20241225", "20241226", "20250101", "20250418", "20250421", "20250430", "20250505", "20250529", "20250609", "20251225", "20251226", "20260101", "20260403", "20260406", "20260430", "20260514", "20260525", "20261225", "20270101", "20270326", "20270329", "20270430", "20270506", "20270517", "20280414", "20280417", "20280525", "20280605", "20281225", "20281226", "20290101", "20290330", "20290402", "20290430", "20290510", "20290521", "20291225", "20291226", "20300101", "20300419", "20300422", "20300430", "20300530", "20300610", "20301225", "20301226", "20310101", "20310411", "20310414", "20310430", "20310522", "20310602", "20311225", "20311226", "20320101", "20320326", "20320329", "20320430", "20320506", "20320517", "20330415", "20330418", "20330526", "20330606", "20331226", "20340407", "20340410", "20340518", "20340529", "20341225", "20341226", "20350101", "20350323", "20350326", "20350430", "20350503", "20350514", "20351225", "20351226", "20360101", "20360411", "20360414", "20360430", "20360522", "20360602", "20361225", "20361226", "20370101", "20370403", "20370406", "20370430", "20370514", "20370525", "20371225", "20380101", "20380423", "20380426", "20380430", "20380603", "20380614", "20390408", "20390411", "20390519", "20390530", "20391226", "20400330", "20400402", "20400430", "20400510", "20400521", "20401225", "20401226", "20410101", "20410419", "20410422", "20410430", "20410530", "20410610", "20411225", "20411226", "20420101", "20420404", "20420407", "20420430", "20420515", "20420526", "20421225", "20421226", "20430101", "20430327", "20430330", "20430430", "20430507", "20430518", "20431225", "20440101", "20440415", "20440418", "20440526", "20440606", "20441226", "20450407", "20450410", "20450505", "20450518", "20450529", "20451225", "20451226", "20460101", "20460323", "20460326", "20460430", "20460503", "20460514", "20461225", "20461226", "20470101", "20470412", "20470415", "20470430", "20470523", "20470603", "20471225", "20471226", "20480101", "20480403", "20480406", "20480430", "20480514", "20480525", "20481225", "20490101", "20490416", "20490419", "20490430", "20490527", "20490607", "20500408", "20500411", "20500505", "20500519", "20500530", "20501226", "20510331", "20510403", "20510511", "20510522", "20511225", "20511226", "20520101", "20520419", "20520422", "20520430", "20520530", "20520610", "20521225", "20521226", "20530101", "20530404", "20530407", "20530430", "20530515", "20530526", "20531225", "20531226", "20540101", "20540327", "20540330", "20540430", "20540507", "20540518", "20541225", "20550101", "20550416", "20550419", "20550430", "20550505", "20550527", "20550607", "20560331", "20560403", "20560511", "20560522", "20561225", "20561226", "20570101", "20570420", "20570423", "20570430", "20570531", "20570611", "20571225", "20571226", "20580101", "20580412", "20580415", "20580430", "20580523", "20580603", "20581225", "20581226", "20590101", "20590328", "20590331", "20590430", "20590508", "20590519", "20591225", "20591226", "20600101", "20600416", "20600419", "20600430", "20600505", "20600527", "20600607", "20610408", "20610411", "20610519", "20610530", "20611226" ], + "MonthsToExclude": [] + }, + "ATH": { + "InheritedCalendar": [], + "Name": "ATH", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880216", "19880331", "19880401", "19880425", "19880602", "19880610", "19880815", "19881005", "19881101", "19881201", "19881208", "19890207", "19890324", "19890425", "19890501", "19890525", "19890613", "19890815", "19891005", "19891101", "19891201", "19891208", "19891225", "19900101", "19900227", "19900413", "19900425", "19900501", "19900614", "19900815", "19901005", "19901101", "19901224", "19901225", "19910101", "19910212", "19910329", "19910425", "19910501", "19910530", "19910610", "19910815", "19911101", "19911225", "19920101", "19920303", "19920417", "19920501", "19920610", "19920618", "19921005", "19921201", "19921208", "19921224", "19921225", "19930101", "19930223", "19930409", "19930610", "19931005", "19931101", "19931201", "19931208", "19931224", "19940215", "19940401", "19940425", "19940610", "19940815", "19941005", "19941101", "19941201", "19941208", "19950228", "19950414", "19950425", "19950501", "19950615", "19950815", "19951005", "19951101", "19951201", "19951208", "19951225", "19960101", "19960220", "19960405", "19960425", "19960501", "19960516", "19960606", "19960610", "19960815", "19961101", "19961224", "19961225", "19970101", "19970211", "19970328", "19970425", "19970501", "19970529", "19970610", "19970815", "19971005", "19971101", "19971201", "19971208", "19971225", "19980101", "19980410", "19980425", "19980501", "19980610", "19980611", "19980815", "19981005", "19981101", "19981201", "19981208", "19981225", "19990101", "19990402", "19990531", "19990603", "19990610", "19990815", "19991005", "19991101", "19991231", "20000101", "20000102", "20000106", "20000313", "20000428", "20000501", "20000619", "20000622", "20000815", "20001005", "20001101", "20001225", "20010101", "20010106", "20010226", "20010325", "20010413", "20010416", "20010501", "20010604", "20010801", "20010815", "20011026", "20011225", "20011231", "20020101", "20020318", "20020325", "20020501", "20020503", "20020506", "20020507", "20020624", "20020815", "20021028", "20021225", "20021226", "20030101", "20030106", "20030310", "20030325", "20030425", "20030427", "20030428", "20030501", "20030616", "20030815", "20031028", "20031225", "20031226", "20040101", "20040106", "20040223", "20040325", "20040409", "20040412", "20040531", "20041028", "20050106", "20050314", "20050325", "20050429", "20050502", "20050620", "20050815", "20051028", "20051226", "20060106", "20060306", "20060421", "20060424", "20060501", "20060612", "20060815", "20061225", "20061226", "20070101", "20070219", "20070406", "20070409", "20070501", "20070528", "20070815", "20071225", "20071226", "20080101", "20080303", "20080304", "20080305", "20080310", "20080318", "20080319", "20080320", "20080321", "20080324", "20080325", "20080425", "20080428", "20080501", "20080616", "20080815", "20081028", "20081225", "20081226", "20090101", "20090106", "20090302", "20090325", "20090417", "20090420", "20090501", "20090608", "20091028", "20091225", "20100101", "20100106", "20100215", "20100325", "20100402", "20100405", "20100524", "20101028", "20110106", "20110307", "20110325", "20110422", "20110425", "20110613", "20110815", "20111028", "20111226", "20120106", "20120227", "20120413", "20120416", "20120501", "20120604", "20120815", "20121225", "20121226", "20130101", "20130318", "20130325", "20130501", "20130503", "20130506", "20130624", "20130815", "20131028", "20131225", "20131226", "20140101", "20140106", "20140303", "20140325", "20140418", "20140421", "20140501", "20140609", "20140815", "20141028", "20141225", "20141226", "20150101", "20150106", "20150223", "20150325", "20150410", "20150413", "20150501", "20150601", "20151028", "20151225", "20160101", "20160106", "20160314", "20160325", "20160429", "20160502", "20160620", "20160815", "20161028", "20161226", "20170106", "20170227", "20170414", "20170417", "20170501", "20170605", "20170815", "20171225", "20171226", "20180101", "20180219", "20180406", "20180409", "20180501", "20180528", "20180815", "20181225", "20181226", "20190101", "20190311", "20190325", "20190426", "20190429", "20190501", "20190617", "20190815", "20191028", "20191225", "20191226", "20200101", "20200106", "20200302", "20200325", "20200417", "20200420", "20200501", "20200608", "20201028", "20201225", "20210101", "20210106", "20210315", "20210325", "20210430", "20210503", "20210621", "20211028", "20220106", "20220307", "20220325", "20220422", "20220425", "20220613", "20220815", "20221028", "20221226", "20230106", "20230227", "20230414", "20230417", "20230501", "20230605", "20230815", "20231225", "20231226", "20240101", "20240318", "20240325", "20240501", "20240503", "20240506", "20240624", "20240815", "20241028", "20241225", "20241226", "20250101", "20250106", "20250303", "20250325", "20250418", "20250421", "20250501", "20250609", "20250815", "20251028", "20251225", "20251226", "20260101", "20260106", "20260223", "20260325", "20260410", "20260413", "20260501", "20260601", "20261028", "20261225", "20270101", "20270106", "20270315", "20270325", "20270430", "20270503", "20270621", "20271028", "20280106", "20280228", "20280414", "20280417", "20280501", "20280605", "20280815", "20281225", "20281226", "20290101", "20290219", "20290406", "20290409", "20290501", "20290528", "20290815", "20291225", "20291226", "20300101", "20300311", "20300325", "20300426", "20300429", "20300501", "20300617", "20300815", "20301028", "20301225", "20301226", "20310101", "20310106", "20310224", "20310325", "20310411", "20310414", "20310501", "20310602", "20310815", "20311028", "20311225", "20311226", "20320101", "20320106", "20320315", "20320325", "20320430", "20320503", "20320621", "20321028", "20330106", "20330307", "20330325", "20330422", "20330425", "20330613", "20330815", "20331028", "20331226", "20340106", "20340220", "20340407", "20340410", "20340501", "20340529", "20340815", "20341225", "20341226", "20350101", "20350312", "20350427", "20350430", "20350501", "20350618", "20350815", "20351225", "20351226", "20360101", "20360303", "20360325", "20360418", "20360421", "20360501", "20360609", "20360815", "20361028", "20361225", "20361226", "20370101", "20370106", "20370216", "20370325", "20370403", "20370406", "20370501", "20370525", "20371028", "20371225", "20380101", "20380106", "20380308", "20380325", "20380423", "20380426", "20380614", "20381028", "20390106", "20390228", "20390325", "20390415", "20390418", "20390606", "20390815", "20391028", "20391226", "20400106", "20400319", "20400501", "20400504", "20400507", "20400625", "20400815", "20401225", "20401226", "20410101", "20410304", "20410325", "20410419", "20410422", "20410501", "20410610", "20410815", "20411028", "20411225", "20411226", "20420101", "20420106", "20420224", "20420325", "20420411", "20420414", "20420501", "20420602", "20420815", "20421028", "20421225", "20421226", "20430101", "20430106", "20430316", "20430325", "20430501", "20430504", "20430622", "20431028", "20431225", "20440101", "20440106", "20440307", "20440325", "20440422", "20440425", "20440613", "20440815", "20441028", "20441226", "20450106", "20450220", "20450407", "20450410", "20450501", "20450529", "20450815", "20451225", "20451226", "20460101", "20460312", "20460427", "20460430", "20460501", "20460618", "20460815", "20461225", "20461226", "20470101", "20470304", "20470325", "20470419", "20470422", "20470501", "20470610", "20470815", "20471028", "20471225", "20471226", "20480101", "20480106", "20480217", "20480325", "20480403", "20480406", "20480501", "20480525", "20481028", "20481225", "20490101", "20490106", "20490308", "20490325", "20490423", "20490426", "20490614", "20491028", "20500106", "20500228", "20500325", "20500415", "20500418", "20500606", "20500815", "20501028", "20501226", "20510106", "20510320", "20510501", "20510505", "20510508", "20510626", "20510815", "20511225", "20511226", "20520101", "20520304", "20520325", "20520419", "20520422", "20520501", "20520610", "20520815", "20521028", "20521225", "20521226", "20530101", "20530106", "20530224", "20530325", "20530411", "20530414", "20530501", "20530602", "20530815", "20531028", "20531225", "20531226", "20540101", "20540106", "20540316", "20540325", "20540501", "20540504", "20540622", "20541028", "20541225", "20550101", "20550106", "20550301", "20550325", "20550416", "20550419", "20550607", "20551028", "20560106", "20560221", "20560407", "20560410", "20560501", "20560529", "20560815", "20561225", "20561226", "20570101", "20570312", "20570427", "20570430", "20570501", "20570618", "20570815", "20571225", "20571226", "20580101", "20580225", "20580325", "20580412", "20580415", "20580501", "20580603", "20580815", "20581028", "20581225", "20581226", "20590101", "20590106", "20590317", "20590325", "20590501", "20590502", "20590505", "20590623", "20590815", "20591028", "20591225", "20591226", "20600101", "20600106", "20600308", "20600325", "20600423", "20600426", "20600614", "20601028", "20610106", "20610221", "20610325", "20610408", "20610411", "20610530", "20610815", "20611028", "20611226" ], + "MonthsToExclude": [] + }, + "AUC": { + "InheritedCalendar": [], + "Name": "AUC", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20030425", "20030602", "20031027", "20031225", "20031226", "20040101", "20040102", "20040126", "20040206", "20040409", "20040412", "20040607", "20041025", "20041227", "20041228", "20050103", "20050104", "20050131", "20050325", "20050328", "20050425", "20050606", "20051024", "20051226", "20051227", "20060102", "20060103", "20060130", "20060206", "20060414", "20060417", "20060425", "20060605", "20061023", "20061225", "20061226", "20070101", "20070102", "20070129", "20070206", "20070406", "20070409", "20070425", "20070604", "20071022", "20071225", "20071226", "20080101", "20080102", "20080128", "20080206", "20080321", "20080324", "20080425", "20080602", "20081027", "20081225", "20081226", "20090101", "20090102", "20090126", "20090206", "20090410", "20090413", "20090601", "20091026", "20091225", "20091228", "20100101", "20100104", "20100201", "20100402", "20100405", "20100607", "20101025", "20101227", "20101228", "20110103", "20110104", "20110131", "20110422", "20110425", "20110606", "20111024", "20111226", "20111227", "20120102", "20120103", "20120130", "20120206", "20120406", "20120409", "20120425", "20120604", "20121022", "20121225", "20121226", "20130101", "20130102", "20130128", "20130206", "20130329", "20130401", "20130425", "20130603", "20131028", "20131225", "20131226", "20140101", "20140102", "20140127", "20140206", "20140418", "20140421", "20140425", "20140602", "20141027", "20141225", "20141226", "20150101", "20150102", "20150126", "20150206", "20150403", "20150406", "20150601", "20151026", "20151225", "20151228", "20160101", "20160104", "20160201", "20160325", "20160328", "20160425", "20160606", "20161024", "20161226", "20161227", "20170102", "20170103", "20170130", "20170206", "20170414", "20170417", "20170425", "20170605", "20171023", "20171225", "20171226", "20180101", "20180102", "20180129", "20180206", "20180330", "20180402", "20180425", "20180604", "20181022", "20181225", "20181226", "20190101", "20190102", "20190128", "20190206", "20190419", "20190422", "20190425", "20190603", "20191028", "20191225", "20191226", "20200101", "20200102", "20200127", "20200206", "20200410", "20200413", "20200601", "20201026", "20201225", "20201228", "20210101", "20210104", "20210201", "20210402", "20210405", "20210607", "20211025", "20211227", "20211228", "20220103", "20220104", "20220131", "20220415", "20220418", "20220425", "20220606", "20221024", "20221226", "20221227", "20230102", "20230103", "20230130", "20230206", "20230407", "20230410", "20230425", "20230605", "20231023", "20231225", "20231226", "20240101", "20240102", "20240129", "20240206", "20240329", "20240401", "20240425", "20240603", "20241028", "20241225", "20241226", "20250101", "20250102", "20250127", "20250206", "20250418", "20250421", "20250425", "20250602", "20251027", "20251225", "20251226", "20260101", "20260102", "20260126", "20260206", "20260403", "20260406", "20260601", "20261026", "20261225", "20261228", "20270101", "20270104", "20270201", "20270326", "20270329", "20270607", "20271025", "20271227", "20271228", "20280103", "20280104", "20280131", "20280414", "20280417", "20280425", "20280605", "20281023", "20281225", "20281226", "20290101", "20290102", "20290129", "20290206", "20290330", "20290402", "20290425", "20290604", "20291022", "20291225", "20291226", "20300101", "20300102", "20300128", "20300206", "20300419", "20300422", "20300425", "20300603", "20301028", "20301225", "20301226", "20310101", "20310102", "20310127", "20310206", "20310411", "20310414", "20310425", "20310602", "20311027", "20311225", "20311226", "20320101", "20320102", "20320126", "20320206", "20320326", "20320329", "20320607", "20321025", "20321227", "20321228", "20330103", "20330104", "20330131", "20330415", "20330418", "20330425", "20330606", "20331024", "20331226", "20331227", "20340102", "20340103", "20340130", "20340206", "20340407", "20340410", "20340425", "20340605", "20341023", "20341225", "20341226", "20350101", "20350102", "20350129", "20350206", "20350323", "20350326", "20350425", "20350604", "20351022", "20351225", "20351226", "20360101", "20360102", "20360128", "20360206", "20360411", "20360414", "20360425", "20360602", "20361027", "20361225", "20361226", "20370101", "20370102", "20370126", "20370206", "20370403", "20370406", "20370601", "20371026", "20371225", "20371228", "20380101", "20380104", "20380201", "20380423", "20380426", "20380607", "20381025", "20381227", "20381228", "20390103", "20390104", "20390131", "20390408", "20390411", "20390425", "20390606", "20391024", "20391226", "20391227", "20400102", "20400103", "20400130", "20400206", "20400330", "20400402", "20400425", "20400604", "20401022", "20401225", "20401226", "20410101", "20410102", "20410128", "20410206", "20410419", "20410422", "20410425", "20410603", "20411028", "20411225", "20411226", "20420101", "20420102", "20420127", "20420206", "20420404", "20420407", "20420425", "20420602", "20421027", "20421225", "20421226", "20430101", "20430102", "20430126", "20430206", "20430327", "20430330", "20430601", "20431026", "20431225", "20431228", "20440101", "20440104", "20440201", "20440415", "20440418", "20440425", "20440606", "20441024", "20441226", "20441227", "20450102", "20450103", "20450130", "20450206", "20450407", "20450410", "20450425", "20450605", "20451023", "20451225", "20451226", "20460101", "20460102", "20460129", "20460206", "20460323", "20460326", "20460425", "20460604", "20461022", "20461225", "20461226", "20470101", "20470102", "20470128", "20470206", "20470412", "20470415", "20470425", "20470603", "20471028", "20471225", "20471226", "20480101", "20480102", "20480127", "20480206", "20480403", "20480406", "20480601", "20481026", "20481225", "20481228", "20490101", "20490104", "20490201", "20490416", "20490419", "20490607", "20491025", "20491227", "20491228", "20500103", "20500104", "20500131", "20500408", "20500411", "20500425", "20500606", "20501024", "20501226", "20501227", "20510102", "20510103", "20510130", "20510206", "20510331", "20510403", "20510425", "20510605", "20511023", "20511225", "20511226", "20520101", "20520102", "20520129", "20520206", "20520419", "20520422", "20520425", "20520603", "20521028", "20521225", "20521226", "20530101", "20530102", "20530127", "20530206", "20530404", "20530407", "20530425", "20530602", "20531027", "20531225", "20531226", "20540101", "20540102", "20540126", "20540206", "20540327", "20540330", "20540601", "20541026", "20541225", "20541228", "20550101", "20550104", "20550201", "20550416", "20550419", "20550607", "20551025", "20551227", "20551228", "20560103", "20560104", "20560131", "20560331", "20560403", "20560425", "20560605", "20561023", "20561225", "20561226", "20570101", "20570102", "20570129", "20570206", "20570420", "20570423", "20570425", "20570604", "20571022", "20571225", "20571226", "20580101", "20580102", "20580128", "20580206", "20580412", "20580415", "20580425", "20580603", "20581028", "20581225", "20581226", "20590101", "20590102", "20590127", "20590206", "20590328", "20590331", "20590425", "20590602", "20591027", "20591225", "20591226", "20600101", "20600102", "20600126", "20600206", "20600416", "20600419", "20600607", "20601025", "20601227", "20601228", "20610103", "20610104", "20610131", "20610408", "20610411", "20610425", "20610606", "20611024", "20611226", "20611227" ], + "MonthsToExclude": [] + }, + "BAN": { + "InheritedCalendar": [], + "Name": "BAN", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19940103", "19940225", "19940406", "19940412", "19940414", "19940502", "19940505", "19940524", "19940701", "19940725", "19940812", "19941024", "19941205", "19941212", "20030217", "20030407", "20030414", "20030415", "20030501", "20030505", "20030515", "20030701", "20030714", "20030812", "20031023", "20031205", "20031210", "20031231", "20040101", "20040308", "20040406", "20040413", "20040414", "20040415", "20040503", "20040505", "20040603", "20040701", "20040802", "20040812", "20041025", "20041206", "20041210", "20041231", "20050103", "20050223", "20050406", "20050413", "20050414", "20050415", "20050502", "20050505", "20050523", "20050701", "20050722", "20050812", "20051024", "20051205", "20051212", "20060102", "20060213", "20060406", "20060413", "20060414", "20060419", "20060501", "20060505", "20060512", "20060612", "20060613", "20060711", "20060814", "20060920", "20061023", "20061205", "20061211", "20070101", "20070102", "20070305", "20070406", "20070413", "20070416", "20070501", "20070507", "20070531", "20070730", "20070813", "20071023", "20071205", "20071210", "20071224", "20071231", "20080101", "20080221", "20080407", "20080414", "20080415", "20080501", "20080505", "20080519", "20080701", "20080717", "20080812", "20081023", "20081205", "20081210", "20081231", "20090101", "20090102", "20090209", "20090406", "20090413", "20090414", "20090415", "20090501", "20090505", "20090508", "20090701", "20090706", "20090707", "20090812", "20091023", "20091207", "20091210", "20091231", "20100101", "20100301", "20100406", "20100413", "20100414", "20100415", "20100503", "20100505", "20100520", "20100521", "20100528", "20100701", "20100726", "20100812", "20100813", "20101025", "20101206", "20101210", "20101231", "20110103", "20110218", "20110406", "20110413", "20110414", "20110415", "20110502", "20110505", "20110516", "20110517", "20110701", "20110715", "20110812", "20111024", "20111205", "20111212", "20120102", "20120103", "20120307", "20120406", "20120409", "20120413", "20120416", "20120501", "20120507", "20120604", "20120802", "20120813", "20121023", "20121205", "20121210", "20121231", "20130101", "20130225", "20130408", "20130415", "20130416", "20130501", "20130506", "20130524", "20130701", "20130722", "20130812", "20131023", "20131205", "20131210", "20131231", "20140101", "20140214", "20140407", "20140414", "20140415", "20140501", "20140505", "20140513", "20140701", "20140711", "20140812", "20141023", "20141205", "20141210", "20141231", "20150101", "20150304", "20150406", "20150413", "20150414", "20150415", "20150501", "20150505", "20150601", "20150701", "20150730", "20150812", "20151023", "20151207", "20151210", "20151231", "20160101", "20160222", "20160406", "20160413", "20160414", "20160415", "20160502", "20160505", "20160520", "20160701", "20160719", "20160812", "20161024", "20161205", "20161212", "20170102", "20170213", "20170406", "20170413", "20170414", "20170501", "20170505", "20170510", "20170710", "20170814", "20171023", "20171205", "20171211", "20180101", "20180102", "20180301", "20180406", "20180413", "20180416", "20180501", "20180507", "20180529", "20180727", "20180813", "20181023", "20181205", "20181210", "20181231", "20190101", "20190219", "20190408", "20190415", "20190416", "20190501", "20190506", "20190520", "20190701", "20190716", "20190812", "20191023", "20191205", "20191210", "20191231", "20200101", "20200210", "20200406", "20200413", "20200414", "20200415", "20200501", "20200505", "20200506", "20200701", "20200706", "20200812", "20201023", "20201207", "20201210", "20201231", "20210101", "20210226", "20210406", "20210413", "20210414", "20210415", "20210503", "20210505", "20210526", "20210701", "20210726", "20210812", "20211025", "20211206", "20211210", "20211231", "20220103", "20220216", "20220406", "20220413", "20220414", "20220415", "20220502", "20220505", "20220516", "20220701", "20220713", "20220812", "20221024", "20221205", "20221212", "20230102", "20230306", "20230406", "20230413", "20230414", "20230501", "20230505", "20230605", "20230801", "20230814", "20231023", "20231205", "20231211", "20240101", "20240102", "20240226", "20240408", "20240415", "20240416", "20240501", "20240506", "20240522", "20240701", "20240722", "20240812", "20241023", "20241205", "20241210", "20241231", "20250101", "20250212", "20250407", "20250414", "20250415", "20250501", "20250505", "20250512", "20250701", "20250710", "20250812", "20251023", "20251205", "20251210", "20251231", "20260101", "20260303", "20260406", "20260413", "20260414", "20260415", "20260501", "20260505", "20260601", "20260701", "20260729", "20260812", "20261023", "20261207", "20261210", "20261231", "20270101", "20270222", "20270406", "20270413", "20270414", "20270415", "20270503", "20270505", "20270520", "20270701", "20270719", "20270812", "20271025", "20271206", "20271210", "20271231", "20280103", "20280210", "20280406", "20280413", "20280414", "20280501", "20280505", "20280508", "20280706", "20280814", "20281023", "20281205", "20281211", "20290101", "20290102", "20290227", "20290406", "20290413", "20290416", "20290501", "20290507", "20290528", "20290725", "20290813", "20291023", "20291205", "20291210", "20291231", "20300101", "20300218", "20300408", "20300415", "20300416", "20300501", "20300506", "20300516", "20300701", "20300715", "20300812", "20301023", "20301205", "20301210", "20301231", "20310101", "20310307", "20310407", "20310414", "20310415", "20310501", "20310505", "20310604", "20310701", "20310804", "20310812", "20311023", "20311205", "20311210", "20311231", "20320101", "20320225", "20320406", "20320413", "20320414", "20320415", "20320503", "20320505", "20320524", "20320701", "20320722", "20320812", "20321025", "20321206", "20321210", "20321231", "20330103", "20330214", "20330406", "20330413", "20330414", "20330415", "20330502", "20330505", "20330513", "20330701", "20330711", "20330812", "20331024", "20331205", "20331212", "20340102", "20340306", "20340406", "20340413", "20340414", "20340501", "20340505", "20340601", "20340731", "20340814", "20341023", "20341205", "20341211", "20350101", "20350102", "20350222", "20350406", "20350413", "20350416", "20350501", "20350507", "20350521", "20350720", "20350813", "20351023", "20351205", "20351210", "20351231", "20360101", "20360212", "20360407", "20360414", "20360415", "20360501", "20360505", "20360512", "20360701", "20360708", "20360812", "20361023", "20361205", "20361210", "20361231", "20370101", "20370302", "20370406", "20370413", "20370414", "20370415", "20370501", "20370505", "20370529", "20370701", "20370727", "20370812", "20371023", "20371207", "20371210", "20371231", "20380101", "20380219", "20380406", "20380413", "20380414", "20380415", "20380503", "20380505", "20380518", "20380701", "20380716", "20380812", "20381025", "20381206", "20381210", "20381231", "20390103", "20390208", "20390406", "20390413", "20390414", "20390415", "20390502", "20390505", "20390509", "20390701", "20390705", "20390812", "20391024", "20391205", "20391212", "20400102", "20400227", "20400406", "20400413", "20400416", "20400501", "20400507", "20400525", "20400723", "20400813", "20401023", "20401205", "20401210", "20401231", "20410101", "20410215", "20410408", "20410415", "20410416", "20410501", "20410506", "20410514", "20410701", "20410715", "20410812", "20411023", "20411205", "20411210", "20411231", "20420101", "20420306", "20420407", "20420414", "20420415", "20420501", "20420505", "20420603", "20420701", "20420801", "20420812", "20421023", "20421205", "20421210", "20421231", "20430101", "20430224", "20430406", "20430413", "20430414", "20430415", "20430501", "20430505", "20430525", "20430701", "20430721", "20430812", "20431023", "20431207", "20431210", "20431231", "20440101", "20440215", "20440406", "20440413", "20440414", "20440415", "20440502", "20440505", "20440511", "20440701", "20440711", "20440812", "20441024", "20441205", "20441212", "20450102", "20450302", "20450406", "20450413", "20450414", "20450501", "20450505", "20450530", "20450728", "20450814", "20451023", "20451205", "20451211", "20460101", "20460102", "20460220", "20460406", "20460413", "20460416", "20460501", "20460507", "20460521", "20460717", "20460813", "20461023", "20461205", "20461210", "20461231", "20470101", "20470211", "20470408", "20470415", "20470416", "20470501", "20470506", "20470508", "20470701", "20470708", "20470812", "20471023", "20471205", "20471210", "20471231", "20480101", "20480228", "20480406", "20480413", "20480414", "20480415", "20480501", "20480505", "20480527", "20480701", "20480727", "20480812", "20481023", "20481207", "20481210", "20481231", "20490101", "20490217", "20490406", "20490413", "20490414", "20490415", "20490503", "20490505", "20490517", "20490701", "20490714", "20490812", "20491025", "20491206", "20491210", "20491231", "20500103", "20500307", "20500406", "20500413", "20500414", "20500415", "20500502", "20500505", "20500606", "20500701", "20500802", "20500812", "20501024", "20501205", "20501212", "20510102", "20510227", "20510406", "20510413", "20510414", "20510501", "20510505", "20510524", "20510724", "20510814", "20511023", "20511205", "20511211", "20520101", "20520102", "20520214", "20520408", "20520415", "20520416", "20520501", "20520506", "20520513", "20520701", "20520711", "20520812", "20521023", "20521205", "20521210", "20521231", "20530101", "20530304", "20530407", "20530414", "20530415", "20530501", "20530505", "20530602", "20530701", "20530730", "20530812", "20531023", "20531205", "20531210", "20531231", "20540101", "20540223", "20540406", "20540413", "20540414", "20540415", "20540501", "20540505", "20540521", "20540701", "20540720", "20540812", "20541023", "20541207", "20541210", "20541231", "20550101", "20550211", "20550406", "20550413", "20550414", "20550415", "20550503", "20550505", "20550510", "20550701", "20550708", "20550812", "20551025", "20551206", "20551210", "20551231", "20560103", "20560229", "20560406", "20560413", "20560414", "20560501", "20560505", "20560529", "20560727", "20560814", "20561023", "20561205", "20561211", "20570101", "20570102", "20570219", "20570406", "20570413", "20570416", "20570501", "20570507", "20570518", "20570716", "20570813", "20571023", "20571205", "20571210", "20571231", "20580101", "20580208", "20580408", "20580415", "20580416", "20580501", "20580506", "20580507", "20580701", "20580705", "20580812", "20581023", "20581205", "20581210", "20581231", "20590101", "20590226", "20590407", "20590414", "20590415", "20590501", "20590505", "20590526", "20590701", "20590724", "20590812", "20591023", "20591205", "20591210", "20591231", "20600101", "20600216", "20600406", "20600413", "20600414", "20600415", "20600503", "20600505", "20600514", "20600701", "20600712", "20600812", "20601025", "20601206", "20601210", "20601231", "20610103", "20610307", "20610406", "20610413", "20610414", "20610415", "20610502", "20610505", "20610602", "20610701", "20610801", "20610812", "20611024", "20611205", "20611212" ], + "MonthsToExclude": [] + }, + "BAS": { + "InheritedCalendar": [], + "Name": "BAS", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20080101", "20080320", "20080321", "20080324", "20080402", "20080501", "20080616", "20080709", "20080818", "20081013", "20081106", "20081208", "20081225", "20090101", "20090324", "20090402", "20090409", "20090410", "20090501", "20090525", "20090615", "20090709", "20090710", "20090817", "20091012", "20091106", "20091208", "20091225", "20091231", "20100101", "20100324", "20100401", "20100402", "20100524", "20100525", "20100621", "20100709", "20100816", "20101011", "20101027", "20101122", "20101208", "20110307", "20110308", "20110324", "20110325", "20110421", "20110422", "20110525", "20110620", "20110822", "20111010", "20111128", "20111208", "20111209", "20111226", "20120102", "20120220", "20120221", "20120227", "20120402", "20120405", "20120406", "20120430", "20120501", "20120525", "20120620", "20120709", "20120820", "20121008", "20121106", "20121126", "20121224", "20121225", "20130101", "20130211", "20130212", "20130328", "20130329", "20130401", "20130402", "20130501", "20130620", "20130621", "20130709", "20130819", "20131014", "20131106", "20131125", "20131225", "20140101", "20140303", "20140304", "20140324", "20140402", "20140417", "20140418", "20140501", "20140620", "20140709", "20140818", "20141013", "20141106", "20141124", "20141208", "20141225", "20150101", "20150216", "20150217", "20150324", "20150402", "20150403", "20150501", "20150525", "20150709", "20150817", "20151012", "20151106", "20151123", "20151208", "20151225", "20160101", "20160208", "20160209", "20160324", "20160325", "20160525", "20160620", "20160815", "20161010", "20161128", "20161208", "20170227", "20170228", "20170324", "20170413", "20170414", "20170501", "20170525", "20170620", "20170821", "20171009", "20171106", "20171127", "20171208", "20171225", "20180101", "20180212", "20180213", "20180329", "20180330", "20180402", "20180501", "20180525", "20180620", "20180709", "20180820", "20181008", "20181106", "20181126", "20181225", "20190101", "20190304", "20190305", "20190402", "20190418", "20190419", "20190501", "20190620", "20190709", "20190819", "20191014", "20191106", "20191125", "20191225", "20200101", "20200224", "20200225", "20200324", "20200402", "20200409", "20200410", "20200501", "20200525", "20200709", "20200817", "20201012", "20201106", "20201123", "20201208", "20201225", "20210101", "20210215", "20210216", "20210324", "20210401", "20210402", "20210525", "20210709", "20210816", "20211011", "20211122", "20211208", "20220228", "20220301", "20220324", "20220414", "20220415", "20220525", "20220620", "20220815", "20221010", "20221128", "20221208", "20230220", "20230221", "20230324", "20230406", "20230407", "20230501", "20230525", "20230620", "20230821", "20231009", "20231106", "20231127", "20231208", "20231225", "20240101", "20240212", "20240213", "20240328", "20240329", "20240402", "20240501", "20240620", "20240709", "20240819", "20241014", "20241106", "20241125", "20241225", "20250101", "20250303", "20250304", "20250324", "20250402", "20250417", "20250418", "20250501", "20250620", "20250709", "20250818", "20251013", "20251106", "20251124", "20251208", "20251225", "20260101", "20260216", "20260217", "20260324", "20260402", "20260403", "20260501", "20260525", "20260709", "20260817", "20261012", "20261106", "20261123", "20261208", "20261225", "20270101", "20270208", "20270209", "20270324", "20270325", "20270326", "20270402", "20270525", "20270709", "20270816", "20271011", "20271122", "20271208", "20280228", "20280229", "20280324", "20280413", "20280414", "20280501", "20280525", "20280620", "20280821", "20281009", "20281106", "20281127", "20281208", "20281225", "20290101", "20290212", "20290213", "20290329", "20290330", "20290402", "20290501", "20290525", "20290620", "20290709", "20290820", "20291008", "20291106", "20291126", "20291225", "20300101", "20300304", "20300305", "20300402", "20300418", "20300419", "20300501", "20300620", "20300709", "20300819", "20301014", "20301106", "20301125", "20301225", "20310101", "20310224", "20310225", "20310324", "20310402", "20310410", "20310411", "20310501", "20310620", "20310709", "20310818", "20311013", "20311106", "20311124", "20311208", "20311225", "20320101", "20320209", "20320210", "20320324", "20320325", "20320326", "20320402", "20320525", "20320709", "20320816", "20321011", "20321122", "20321208", "20330228", "20330301", "20330324", "20330414", "20330415", "20330525", "20330620", "20330815", "20331010", "20331128", "20331208", "20340220", "20340221", "20340324", "20340406", "20340407", "20340501", "20340525", "20340620", "20340821", "20341009", "20341106", "20341127", "20341208", "20341225", "20350101", "20350205", "20350206", "20350322", "20350323", "20350402", "20350501", "20350525", "20350620", "20350709", "20350820", "20351008", "20351106", "20351126", "20351225", "20360101", "20360225", "20360226", "20360324", "20360402", "20360410", "20360411", "20360501", "20360620", "20360709", "20360818", "20361013", "20361106", "20361124", "20361208", "20361225", "20370101", "20370216", "20370217", "20370324", "20370402", "20370403", "20370501", "20370525", "20370709", "20370817", "20371012", "20371106", "20371123", "20371208", "20371225", "20380101", "20380308", "20380309", "20380324", "20380402", "20380422", "20380423", "20380525", "20380709", "20380816", "20381011", "20381122", "20381208", "20390221", "20390222", "20390324", "20390407", "20390408", "20390525", "20390620", "20390815", "20391010", "20391128", "20391208", "20400213", "20400214", "20400329", "20400330", "20400402", "20400501", "20400525", "20400620", "20400709", "20400820", "20401008", "20401106", "20401126", "20401225", "20410101", "20410304", "20410305", "20410402", "20410418", "20410419", "20410501", "20410620", "20410709", "20410819", "20411014", "20411106", "20411125", "20411225", "20420101", "20420217", "20420218", "20420324", "20420402", "20420403", "20420404", "20420501", "20420620", "20420709", "20420818", "20421013", "20421106", "20421124", "20421208", "20421225", "20430101", "20430209", "20430210", "20430324", "20430326", "20430327", "20430402", "20430501", "20430525", "20430709", "20430817", "20431012", "20431106", "20431123", "20431208", "20431225", "20440101", "20440229", "20440301", "20440324", "20440414", "20440415", "20440525", "20440620", "20440815", "20441010", "20441128", "20441208", "20450220", "20450221", "20450324", "20450406", "20450407", "20450501", "20450525", "20450620", "20450821", "20451009", "20451106", "20451127", "20451208", "20451225", "20460101", "20460205", "20460206", "20460322", "20460323", "20460402", "20460501", "20460525", "20460620", "20460709", "20460820", "20461008", "20461106", "20461126", "20461225", "20470101", "20470225", "20470226", "20470402", "20470411", "20470412", "20470501", "20470620", "20470709", "20470819", "20471014", "20471106", "20471125", "20471225", "20480101", "20480217", "20480218", "20480324", "20480402", "20480403", "20480501", "20480525", "20480709", "20480817", "20481012", "20481106", "20481123", "20481208", "20481225", "20490101", "20490301", "20490302", "20490324", "20490402", "20490415", "20490416", "20490525", "20490709", "20490816", "20491011", "20491122", "20491208", "20500221", "20500222", "20500324", "20500407", "20500408", "20500525", "20500620", "20500815", "20501010", "20501128", "20501208", "20510213", "20510214", "20510324", "20510330", "20510331", "20510501", "20510525", "20510620", "20510821", "20511009", "20511106", "20511127", "20511208", "20511225", "20520101", "20520304", "20520305", "20520402", "20520418", "20520419", "20520501", "20520620", "20520709", "20520819", "20521014", "20521106", "20521125", "20521225", "20530101", "20530217", "20530218", "20530324", "20530402", "20530403", "20530404", "20530501", "20530620", "20530709", "20530818", "20531013", "20531106", "20531124", "20531208", "20531225", "20540101", "20540209", "20540210", "20540324", "20540326", "20540327", "20540402", "20540501", "20540525", "20540709", "20540817", "20541012", "20541106", "20541123", "20541208", "20541225", "20550101", "20550301", "20550302", "20550324", "20550402", "20550415", "20550416", "20550525", "20550709", "20550816", "20551011", "20551122", "20551208", "20560214", "20560215", "20560324", "20560330", "20560331", "20560501", "20560525", "20560620", "20560821", "20561009", "20561106", "20561127", "20561208", "20561225", "20570101", "20570305", "20570306", "20570402", "20570419", "20570420", "20570501", "20570525", "20570620", "20570709", "20570820", "20571008", "20571106", "20571126", "20571225", "20580101", "20580225", "20580226", "20580402", "20580411", "20580412", "20580501", "20580620", "20580709", "20580819", "20581014", "20581106", "20581125", "20581225", "20590101", "20590210", "20590211", "20590324", "20590327", "20590328", "20590402", "20590501", "20590620", "20590709", "20590818", "20591013", "20591106", "20591124", "20591208", "20591225", "20600101", "20600301", "20600302", "20600324", "20600402", "20600415", "20600416", "20600525", "20600709", "20600816", "20601011", "20601122", "20601208", "20610221", "20610222", "20610324", "20610407", "20610408", "20610525", "20610620", "20610815", "20611010", "20611128", "20611208" ], + "MonthsToExclude": [] + }, + "BEB": { + "InheritedCalendar": [], + "Name": "BEB", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20030101", "20030104", "20030105", "20030111", "20030112", "20030118", "20030119", "20030125", "20030126", "20030201", "20030202", "20030203", "20030204", "20030205", "20030206", "20030207", "20030208", "20030209", "20030215", "20030216", "20030222", "20030223", "20030301", "20030302", "20030308", "20030309", "20030315", "20030316", "20030322", "20030323", "20030329", "20030330", "20030405", "20030406", "20030412", "20030413", "20030419", "20030420", "20030426", "20030427", "20030501", "20030502", "20030503", "20030504", "20030505", "20030507", "20030510", "20030511", "20030517", "20030518", "20030524", "20030525", "20030531", "20030601", "20030607", "20030608", "20030614", "20030615", "20030621", "20030622", "20030628", "20030629", "20030705", "20030706", "20030712", "20030713", "20030719", "20030720", "20030726", "20030727", "20030802", "20030803", "20030809", "20030810", "20030816", "20030817", "20030823", "20030824", "20030830", "20030831", "20030906", "20030907", "20030913", "20030914", "20030920", "20030921", "20030927", "20030928", "20031001", "20031002", "20031003", "20031004", "20031005", "20031006", "20031007", "20031011", "20031012", "20031018", "20031019", "20031025", "20031026", "20031101", "20031102", "20031108", "20031109", "20031115", "20031116", "20031122", "20031123", "20031129", "20031130", "20031206", "20031207", "20031213", "20031214", "20031220", "20031221", "20031227", "20031228", "20040101", "20040103", "20040104", "20040110", "20040111", "20040117", "20040118", "20040122", "20040123", "20040124", "20040125", "20040126", "20040127", "20040128", "20040131", "20040201", "20040207", "20040208", "20040214", "20040215", "20040221", "20040222", "20040228", "20040229", "20040306", "20040307", "20040313", "20040314", "20040320", "20040321", "20040327", "20040328", "20040403", "20040404", "20040410", "20040411", "20040417", "20040418", "20040424", "20040425", "20040501", "20040502", "20040503", "20040504", "20040505", "20040506", "20040507", "20040508", "20040509", "20040515", "20040516", "20040522", "20040523", "20040529", "20040530", "20040605", "20040606", "20040612", "20040613", "20040619", "20040620", "20040626", "20040627", "20040703", "20040704", "20040710", "20040711", "20040717", "20040718", "20040724", "20040725", "20040731", "20040801", "20040807", "20040808", "20040814", "20040815", "20040821", "20040822", "20040828", "20040829", "20040904", "20040905", "20040911", "20040912", "20040918", "20040919", "20040925", "20040926", "20041001", "20041002", "20041003", "20041004", "20041005", "20041006", "20041007", "20041009", "20041010", "20041016", "20041017", "20041023", "20041024", "20041030", "20041031", "20041106", "20041107", "20041113", "20041114", "20041120", "20041121", "20041127", "20041128", "20041204", "20041205", "20041211", "20041212", "20041218", "20041219", "20041225", "20041226", "20050101", "20050102", "20050103", "20050108", "20050109", "20050115", "20050116", "20050122", "20050123", "20050129", "20050130", "20050205", "20050206", "20050209", "20050210", "20050211", "20050212", "20050213", "20050214", "20050215", "20050219", "20050220", "20050226", "20050227", "20050305", "20050306", "20050312", "20050313", "20050319", "20050320", "20050326", "20050327", "20050402", "20050403", "20050409", "20050410", "20050416", "20050417", "20050423", "20050424", "20050430", "20050501", "20050502", "20050503", "20050504", "20050505", "20050506", "20050507", "20050508", "20050514", "20050515", "20050521", "20050522", "20050528", "20050529", "20050604", "20050605", "20050611", "20050612", "20050618", "20050619", "20050625", "20050626", "20050702", "20050703", "20050709", "20050710", "20050716", "20050717", "20050723", "20050724", "20050730", "20050731", "20050806", "20050807", "20050813", "20050814", "20050820", "20050821", "20050827", "20050828", "20050903", "20050904", "20050910", "20050911", "20050917", "20050918", "20050924", "20050925", "20051001", "20051002", "20051003", "20051004", "20051005", "20051006", "20051007", "20051008", "20051009", "20051015", "20051016", "20051022", "20051023", "20051029", "20051030", "20051105", "20051106", "20051112", "20051113", "20051119", "20051120", "20051126", "20051127", "20051203", "20051204", "20051210", "20051211", "20051217", "20051218", "20051224", "20051225", "20051231", "20060101", "20060102", "20060107", "20060108", "20060114", "20060115", "20060121", "20060122", "20060128", "20060129", "20060130", "20060131", "20060201", "20060202", "20060203", "20060204", "20060205", "20060211", "20060212", "20060218", "20060219", "20060225", "20060226", "20060304", "20060305", "20060311", "20060312", "20060318", "20060319", "20060325", "20060326", "20060401", "20060402", "20060408", "20060409", "20060415", "20060416", "20060422", "20060423", "20060429", "20060430", "20060501", "20060502", "20060503", "20060504", "20060505", "20060506", "20060507", "20060513", "20060514", "20060520", "20060521", "20060527", "20060528", "20060603", "20060604", "20060610", "20060611", "20060617", "20060618", "20060624", "20060625", "20060701", "20060702", "20060708", "20060709", "20060715", "20060716", "20060722", "20060723", "20060729", "20060730", "20060805", "20060806", "20060812", "20060813", "20060819", "20060820", "20060826", "20060827", "20060902", "20060903", "20060909", "20060910", "20060916", "20060917", "20060923", "20060924", "20060930", "20061001", "20061002", "20061003", "20061004", "20061005", "20061006", "20061007", "20061008", "20061014", "20061015", "20061021", "20061022", "20061028", "20061029", "20061104", "20061105", "20061111", "20061112", "20061118", "20061119", "20061125", "20061126", "20061202", "20061203", "20061209", "20061210", "20061216", "20061217", "20061223", "20061224", "20061230", "20061231", "20070101", "20070102", "20070103", "20070106", "20070107", "20070113", "20070114", "20070120", "20070121", "20070127", "20070128", "20070203", "20070204", "20070210", "20070211", "20070218", "20070219", "20070220", "20070221", "20070222", "20070223", "20070224", "20070303", "20070304", "20070310", "20070311", "20070317", "20070318", "20070324", "20070325", "20070331", "20070401", "20070407", "20070408", "20070414", "20070415", "20070421", "20070422", "20070501", "20070502", "20070503", "20070504", "20070505", "20070506", "20070507", "20070512", "20070513", "20070519", "20070520", "20070526", "20070527", "20070602", "20070603", "20070609", "20070610", "20070616", "20070617", "20070623", "20070624", "20070630", "20070701", "20070707", "20070708", "20070714", "20070715", "20070721", "20070722", "20070728", "20070729", "20070804", "20070805", "20070811", "20070812", "20070818", "20070819", "20070825", "20070826", "20070901", "20070902", "20070908", "20070909", "20070915", "20070916", "20070922", "20070923", "20070929", "20070930", "20071001", "20071002", "20071003", "20071004", "20071005", "20071006", "20071007", "20071013", "20071014", "20071020", "20071021", "20071027", "20071028", "20071103", "20071104", "20071110", "20071111", "20071117", "20071118", "20071124", "20071125", "20071201", "20071202", "20071208", "20071209", "20071215", "20071216", "20071222", "20071223", "20071230", "20071231", "20080101", "20080105", "20080106", "20080112", "20080113", "20080119", "20080120", "20080126", "20080127", "20080206", "20080207", "20080208", "20080209", "20080210", "20080211", "20080212", "20080216", "20080217", "20080223", "20080224", "20080301", "20080302", "20080308", "20080309", "20080315", "20080316", "20080322", "20080323", "20080329", "20080330", "20080404", "20080405", "20080406", "20080412", "20080413", "20080419", "20080420", "20080426", "20080427", "20080501", "20080502", "20080503", "20080510", "20080511", "20080517", "20080518", "20080524", "20080525", "20080531", "20080601", "20080607", "20080608", "20080609", "20080614", "20080615", "20080621", "20080622", "20080628", "20080629", "20080705", "20080706", "20080712", "20080713", "20080719", "20080720", "20080726", "20080727", "20080802", "20080803", "20080809", "20080810", "20080816", "20080817", "20080823", "20080824", "20080830", "20080831", "20080906", "20080907", "20080913", "20080914", "20080915", "20080920", "20080921", "20080929", "20080930", "20081001", "20081002", "20081003", "20081004", "20081005", "20081011", "20081012", "20081018", "20081019", "20081025", "20081026", "20081101", "20081102", "20081108", "20081109", "20081115", "20081116", "20081122", "20081123", "20081129", "20081130", "20081206", "20081207", "20081213", "20081214", "20081220", "20081221", "20081227", "20081228", "20090101", "20090102", "20090103", "20090110", "20090111", "20090117", "20090118", "20090125", "20090126", "20090127", "20090128", "20090129", "20090130", "20090131", "20090207", "20090208", "20090214", "20090215", "20090221", "20090222", "20090228", "20090301", "20090307", "20090308", "20090314", "20090315", "20090321", "20090322", "20090328", "20090329", "20090404", "20090405", "20090406", "20090411", "20090412", "20090418", "20090419", "20090425", "20090426", "20090501", "20090502", "20090503", "20090509", "20090510", "20090516", "20090517", "20090523", "20090524", "20090528", "20090529", "20090530", "20090606", "20090607", "20090613", "20090614", "20090620", "20090621", "20090627", "20090628", "20090704", "20090705", "20090711", "20090712", "20090718", "20090719", "20090725", "20090726", "20090801", "20090802", "20090808", "20090809", "20090815", "20090816", "20090822", "20090823", "20090829", "20090830", "20090905", "20090906", "20090912", "20090913", "20090919", "20090920", "20090926", "20091001", "20091002", "20091003", "20091004", "20091005", "20091006", "20091007", "20091008", "20091011", "20091017", "20091018", "20091024", "20091025", "20091031", "20091101", "20091107", "20091108", "20091114", "20091115", "20091121", "20091122", "20091128", "20091129", "20091205", "20091206", "20091212", "20091213", "20091219", "20091220", "20091226", "20091227", "20100101", "20100102", "20100103", "20100109", "20100110", "20100116", "20100117", "20100123", "20100124", "20100130", "20100131", "20100206", "20100207", "20100213", "20100214", "20100215", "20100216", "20100217", "20100218", "20100219", "20100227", "20100228", "20100306", "20100307", "20100313", "20100314", "20100320", "20100321", "20100327", "20100328", "20100403", "20100404", "20100405", "20100410", "20100411", "20100417", "20100418", "20100424", "20100425", "20100501", "20100502", "20100503", "20100508", "20100509", "20100515", "20100516", "20100522", "20100523", "20100529", "20100530", "20100605", "20100606", "20100614", "20100615", "20100616", "20100619", "20100620", "20100626", "20100627", "20100703", "20100704", "20100710", "20100711", "20100717", "20100718", "20100724", "20100725", "20100731", "20100801", "20100807", "20100808", "20100814", "20100815", "20100821", "20100822", "20100828", "20100829", "20100904", "20100905", "20100911", "20100912", "20100918", "20100922", "20100923", "20100924", "20101001", "20101002", "20101003", "20101004", "20101005", "20101006", "20101007", "20101010", "20101016", "20101017", "20101023", "20101024", "20101030", "20101031", "20101106", "20101107", "20101113", "20101114", "20101120", "20101121", "20101127", "20101128", "20101204", "20101205", "20101211", "20101212", "20101218", "20101219", "20101225", "20101226", "20110101", "20110102", "20110103", "20110108", "20110109", "20110115", "20110116", "20110122", "20110123", "20110129", "20110202", "20110203", "20110204", "20110205", "20110206", "20110207", "20110208", "20110213", "20110219", "20110220", "20110226", "20110227", "20110305", "20110306", "20110312", "20110313", "20110319", "20110320", "20110326", "20110327", "20110403", "20110404", "20110405", "20110409", "20110410", "20110416", "20110417", "20110423", "20110424", "20110430", "20110501", "20110502", "20110507", "20110508", "20110514", "20110515", "20110521", "20110522", "20110528", "20110529", "20110604", "20110605", "20110606", "20110611", "20110612", "20110618", "20110619", "20110625", "20110626", "20110702", "20110703", "20110709", "20110710", "20110716", "20110717", "20110723", "20110724", "20110730", "20110731", "20110806", "20110807", "20110813", "20110814", "20110820", "20110821", "20110827", "20110828", "20110903", "20110904", "20110910", "20110911", "20110912", "20110917", "20110918", "20110924", "20110925", "20111001", "20111002", "20111003", "20111004", "20111005", "20111006", "20111007", "20111015", "20111016", "20111022", "20111023", "20111029", "20111030", "20111105", "20111106", "20111112", "20111113", "20111119", "20111120", "20111126", "20111127", "20111203", "20111204", "20111210", "20111211", "20111217", "20111218", "20111224", "20111225", "20120101", "20120102", "20120103", "20120107", "20120108", "20120114", "20120115", "20120122", "20120123", "20120124", "20120125", "20120126", "20120127", "20120128", "20120204", "20120205", "20120211", "20120212", "20120218", "20120219", "20120225", "20120226", "20120303", "20120304", "20120310", "20120311", "20120317", "20120318", "20120324", "20120325", "20120402", "20120403", "20120404", "20120407", "20120408", "20120414", "20120415", "20120421", "20120422", "20120429", "20120430", "20120501", "20120505", "20120506", "20120512", "20120513", "20120519", "20120520", "20120526", "20120527", "20120602", "20120603", "20120609", "20120610", "20120616", "20120617", "20120622", "20120623", "20120624", "20120630", "20120701", "20120707", "20120708", "20120714", "20120715", "20120721", "20120722", "20120728", "20120729", "20120804", "20120805", "20120811", "20120812", "20120818", "20120819", "20120825", "20120826", "20120901", "20120902", "20120908", "20120909", "20120915", "20120916", "20120922", "20120923", "20120930", "20121001", "20121002", "20121003", "20121004", "20121005", "20121006", "20121007", "20121013", "20121014", "20121020", "20121021", "20121027", "20121028", "20121103", "20121104", "20121110", "20121111", "20121117", "20121118", "20121124", "20121125", "20121201", "20121202", "20121208", "20121209", "20121215", "20121216", "20121222", "20121223", "20121229", "20121230", "20130101", "20130105", "20130106", "20130112", "20130113", "20130119", "20130120", "20130126", "20130127", "20130202", "20130203", "20130209", "20130210", "20130211", "20130212", "20130213", "20130214", "20130215", "20130223", "20130224", "20130302", "20130303", "20130309", "20130310", "20130316", "20130317", "20130323", "20130324", "20130330", "20130331", "20130404", "20130405", "20130406", "20130413", "20130414", "20130420", "20130421", "20130427", "20130428", "20130501", "20130504", "20130505", "20130511", "20130512", "20130518", "20130519", "20130525", "20130526", "20130601", "20130602", "20130610", "20130611", "20130612", "20130615", "20130616", "20130622", "20130623", "20130629", "20130630", "20130706", "20130707", "20130713", "20130714", "20130720", "20130721", "20130727", "20130728", "20130803", "20130804", "20130810", "20130811", "20130817", "20130818", "20130824", "20130825", "20130831", "20130901", "20130907", "20130908", "20130914", "20130915", "20130919", "20130921", "20130922", "20130930", "20131001", "20131002", "20131003", "20131004", "20131005", "20131006", "20131012", "20131013", "20131019", "20131020", "20131026", "20131027", "20131102", "20131103", "20131109", "20131110", "20131116", "20131117", "20131123", "20131124", "20131130", "20131201", "20131207", "20131208", "20131214", "20131215", "20131221", "20131222", "20131228", "20131229", "20140101", "20140104", "20140105", "20140111", "20140112", "20140118", "20140119", "20140130", "20140131", "20140201", "20140202", "20140203", "20140204", "20140205", "20140208", "20140209", "20140215", "20140216", "20140222", "20140223", "20140301", "20140302", "20140308", "20140309", "20140315", "20140316", "20140322", "20140323", "20140329", "20140330", "20140405", "20140406", "20140407", "20140412", "20140413", "20140419", "20140420", "20140426", "20140427", "20140501", "20140502", "20140503", "20140510", "20140511", "20140517", "20140518", "20140524", "20140525", "20140531", "20140601", "20140602", "20140607", "20140608", "20140614", "20140615", "20140621", "20140622", "20140628", "20140629", "20140705", "20140706", "20140712", "20140713", "20140719", "20140720", "20140726", "20140727", "20140802", "20140803", "20140809", "20140810", "20140816", "20140817", "20140823", "20140824", "20140830", "20140831", "20140906", "20140907", "20140908", "20140913", "20140914", "20140920", "20140921", "20140929", "20140930", "20141001", "20141002", "20141003", "20141004", "20141005", "20141011", "20141012", "20141018", "20141019", "20141025", "20141026", "20141101", "20141102", "20141108", "20141109", "20141115", "20141116", "20141122", "20141123", "20141129", "20141130", "20141206", "20141207", "20141213", "20141214", "20141220", "20141221", "20141227", "20141228", "20150101", "20150102", "20150103", "20150110", "20150111", "20150117", "20150118", "20150124", "20150125", "20150131", "20150201", "20150207", "20150208", "20150214", "20150218", "20150219", "20150220", "20150221", "20150222", "20150223", "20150224", "20150301", "20150307", "20150308", "20150314", "20150315", "20150321", "20150322", "20150328", "20150329", "20150404", "20150405", "20150406", "20150411", "20150412", "20150418", "20150419", "20150425", "20150426", "20150501", "20150502", "20150503", "20150509", "20150510", "20150516", "20150517", "20150523", "20150524", "20150530", "20150531", "20150606", "20150607", "20150613", "20150614", "20150619", "20150620", "20150621", "20150627", "20150628", "20150704", "20150705", "20150711", "20150712", "20150718", "20150719", "20150725", "20150726", "20150801", "20150802", "20150808", "20150809", "20150815", "20150816", "20150822", "20150823", "20150829", "20150830", "20150905", "20150906", "20150912", "20150913", "20150919", "20150920", "20150926", "20150928", "20151001", "20151002", "20151003", "20151004", "20151005", "20151006", "20151007", "20151008", "20151011", "20151017", "20151018", "20151024", "20151025", "20151031", "20151101", "20151107", "20151108", "20151114", "20151115", "20151121", "20151122", "20151128", "20151129", "20151205", "20151206", "20151212", "20151213", "20151219", "20151220", "20151226", "20151227", "20160101", "20160102", "20160103", "20160109", "20160110", "20160116", "20160117", "20160123", "20160124", "20160130", "20160131", "20160207", "20160208", "20160209", "20160210", "20160211", "20160212", "20160213", "20160220", "20160221", "20160227", "20160228", "20160305", "20160306", "20160312", "20160313", "20160319", "20160320", "20160326", "20160327", "20160402", "20160403", "20160404", "20160409", "20160410", "20160416", "20160417", "20160423", "20160424", "20160430", "20160501", "20160502", "20160507", "20160508", "20160514", "20160515", "20160521", "20160522", "20160528", "20160529", "20160604", "20160605", "20160609", "20160610", "20160611", "20160618", "20160619", "20160625", "20160626", "20160702", "20160703", "20160709", "20160710", "20160716", "20160717", "20160723", "20160724", "20160730", "20160731", "20160806", "20160807", "20160813", "20160814", "20160820", "20160821", "20160827", "20160828", "20160903", "20160904", "20160910", "20160911", "20160915", "20160917", "20160918", "20160924", "20160925", "20161001", "20161002", "20161003", "20161004", "20161005", "20161006", "20161007", "20161015", "20161016", "20161022", "20161023", "20161029", "20161030", "20161105", "20161106", "20161112", "20161113", "20161119", "20161120", "20161126", "20161127", "20161203", "20161204", "20161210", "20161211", "20161217", "20161218", "20161224", "20161225", "20170101", "20170102", "20170103", "20170107", "20170108", "20170114", "20170115", "20170121", "20170122", "20170127", "20170128", "20170129", "20170130", "20170131", "20170201", "20170202", "20170211", "20170212", "20170218", "20170219", "20170225", "20170226", "20170304", "20170305", "20170311", "20170312", "20170318", "20170319", "20170325", "20170326", "20170402", "20170403", "20170404", "20170408", "20170409", "20170415", "20170416", "20170422", "20170423", "20170429", "20170430", "20170501", "20170506", "20170507", "20170513", "20170514", "20170520", "20170521", "20170528", "20170529", "20170530", "20170603", "20170604", "20170610", "20170611", "20170617", "20170618", "20170624", "20170625", "20170701", "20170702", "20170708", "20170709", "20170715", "20170716", "20170722", "20170723", "20170729", "20170730", "20170805", "20170806", "20170812", "20170813", "20170819", "20170820", "20170826", "20170827", "20170902", "20170903", "20170909", "20170910", "20170916", "20170917", "20170923", "20170924", "20171001", "20171002", "20171003", "20171004", "20171005", "20171006", "20171007", "20171014", "20171015", "20171021", "20171022", "20171028", "20171029", "20171104", "20171105", "20171111", "20171112", "20171118", "20171119", "20171125", "20171126", "20171202", "20171203", "20171209", "20171210", "20171216", "20171217", "20171223", "20171224", "20171230", "20171231", "20180101", "20180106", "20180107", "20180113", "20180114", "20180120", "20180121", "20180127", "20180128", "20180203", "20180204", "20180215", "20180216", "20180217", "20180218", "20180219", "20180220", "20180221", "20180224", "20180225", "20180303", "20180304", "20180310", "20180311", "20180317", "20180318", "20180324", "20180325", "20180331", "20180401", "20180405", "20180406", "20180407", "20180414", "20180415", "20180421", "20180422", "20180429", "20180430", "20180501", "20180505", "20180506", "20180512", "20180513", "20180519", "20180520", "20180526", "20180527", "20180602", "20180603", "20180609", "20180610", "20180616", "20180617", "20180618", "20180623", "20180624", "20180630", "20180701", "20180707", "20180708", "20180714", "20180715", "20180721", "20180722", "20180728", "20180729", "20180804", "20180805", "20180811", "20180812", "20180818", "20180819", "20180825", "20180826", "20180901", "20180902", "20180908", "20180909", "20180915", "20180916", "20180922", "20180923", "20180924", "20180930", "20181001", "20181002", "20181003", "20181004", "20181005", "20181006", "20181007", "20181013", "20181014", "20181020", "20181021", "20181027", "20181028", "20181103", "20181104", "20181110", "20181111", "20181117", "20181118", "20181124", "20181125", "20181201", "20181202", "20181208", "20181209", "20181215", "20181216", "20181222", "20181223", "20181229", "20181230", "20190101", "20190105", "20190106", "20190112", "20190113", "20190119", "20190120", "20190126", "20190127", "20190204", "20190205", "20190206", "20190207", "20190208", "20190209", "20190210", "20190216", "20190217", "20190223", "20190224", "20190302", "20190303", "20190309", "20190310", "20190316", "20190317", "20190323", "20190324", "20190330", "20190331", "20190405", "20190406", "20190407", "20190413", "20190414", "20190420", "20190421", "20190427", "20190428", "20190501", "20190504", "20190505", "20190511", "20190512", "20190518", "20190519", "20190525", "20190526", "20190601", "20190602", "20190607", "20190608", "20190609", "20190615", "20190616", "20190622", "20190623", "20190629", "20190630", "20190706", "20190707", "20190713", "20190714", "20190720", "20190721", "20190727", "20190728", "20190803", "20190804", "20190810", "20190811", "20190817", "20190818", "20190824", "20190825", "20190831", "20190901", "20190907", "20190908", "20190913", "20190914", "20190915", "20190921", "20190922", "20190930", "20191001", "20191002", "20191003", "20191004", "20191005", "20191006", "20191012", "20191013", "20191019", "20191020", "20191026", "20191027", "20191102", "20191103", "20191109", "20191110", "20191116", "20191117", "20191123", "20191124", "20191130", "20191201", "20191207", "20191208", "20191214", "20191215", "20191221", "20191222", "20191228", "20191229", "20200101", "20200104", "20200105", "20200111", "20200112", "20200118", "20200119", "20200124", "20200125", "20200126", "20200127", "20200128", "20200129", "20200130", "20200208", "20200209", "20200215", "20200216", "20200222", "20200223", "20200229", "20200301", "20200307", "20200308", "20200314", "20200315", "20200321", "20200322", "20200328", "20200329", "20200404", "20200405", "20200406", "20200411", "20200412", "20200418", "20200419", "20200425", "20200426", "20200501", "20200502", "20200503", "20200509", "20200510", "20200516", "20200517", "20200523", "20200524", "20200530", "20200531", "20200606", "20200607", "20200613", "20200614", "20200620", "20200621", "20200625", "20200626", "20200627", "20200704", "20200705", "20200711", "20200712", "20200718", "20200719", "20200725", "20200726", "20200801", "20200802", "20200808", "20200809", "20200815", "20200816", "20200822", "20200823", "20200829", "20200830", "20200905", "20200906", "20200912", "20200913", "20200919", "20200920", "20200926", "20201001", "20201002", "20201003", "20201004", "20201005", "20201006", "20201007", "20201008", "20201011", "20201017", "20201018", "20201024", "20201025", "20201031", "20201101", "20201107", "20201108", "20201114", "20201115", "20201121", "20201122", "20201128", "20201129", "20201205", "20201206", "20201212", "20201213", "20201219", "20201220", "20201226", "20201227", "20210101", "20210102", "20210103", "20210109", "20210110", "20210116", "20210117", "20210123", "20210124", "20210130", "20210131", "20210211", "20210212", "20210213", "20210214", "20210215", "20210216", "20210217", "20210220", "20210221", "20210227", "20210228", "20210306", "20210307", "20210313", "20210314", "20210320", "20210321", "20210327", "20210328", "20210403", "20210404", "20210405", "20210410", "20210411", "20210417", "20210418", "20210424", "20210425", "20210501", "20210502", "20210503", "20210508", "20210509", "20210515", "20210516", "20210522", "20210523", "20210529", "20210530", "20210605", "20210606", "20210612", "20210613", "20210614", "20210619", "20210620", "20210626", "20210627", "20210703", "20210704", "20210710", "20210711", "20210717", "20210718", "20210724", "20210725", "20210731", "20210801", "20210807", "20210808", "20210814", "20210815", "20210821", "20210822", "20210828", "20210829", "20210904", "20210905", "20210911", "20210912", "20210918", "20210919", "20210921", "20211001", "20211002", "20211003", "20211004", "20211005", "20211006", "20211007", "20211010", "20211016", "20211017", "20211023", "20211024", "20211030", "20211031", "20211106", "20211107", "20211113", "20211114", "20211120", "20211121", "20211127", "20211128", "20211204", "20211205", "20211211", "20211212", "20211218", "20211219", "20211225", "20211226", "20220101", "20220102", "20220103", "20220108", "20220109", "20220115", "20220116", "20220122", "20220123", "20220131", "20220201", "20220202", "20220203", "20220204", "20220205", "20220206", "20220212", "20220213", "20220219", "20220220", "20220226", "20220227", "20220305", "20220306", "20220312", "20220313", "20220319", "20220320", "20220326", "20220327", "20220403", "20220404", "20220405", "20220409", "20220410", "20220416", "20220417", "20220423", "20220424", "20220430", "20220501", "20220502", "20220507", "20220508", "20220514", "20220515", "20220521", "20220522", "20220528", "20220529", "20220603", "20220604", "20220605", "20220611", "20220612", "20220618", "20220619", "20220625", "20220626", "20220702", "20220703", "20220709", "20220710", "20220716", "20220717", "20220723", "20220724", "20220730", "20220731", "20220806", "20220807", "20220813", "20220814", "20220820", "20220821", "20220827", "20220828", "20220903", "20220904", "20220910", "20220911", "20220912", "20220917", "20220918", "20220924", "20220925", "20221001", "20221002", "20221003", "20221004", "20221005", "20221006", "20221007", "20221015", "20221016", "20221022", "20221023", "20221029", "20221030", "20221105", "20221106", "20221112", "20221113", "20221119", "20221120", "20221126", "20221127", "20221203", "20221204", "20221210", "20221211", "20221217", "20221218", "20221224", "20221225", "20230101", "20230102", "20230103", "20230107", "20230108", "20230114", "20230115", "20230121", "20230122", "20230123", "20230124", "20230125", "20230126", "20230127", "20230204", "20230205", "20230211", "20230212", "20230218", "20230219", "20230225", "20230226", "20230304", "20230305", "20230311", "20230312", "20230318", "20230319", "20230325", "20230326", "20230403", "20230404", "20230405", "20230408", "20230409", "20230415", "20230416", "20230422", "20230423", "20230429", "20230430", "20230501", "20230506", "20230507", "20230513", "20230514", "20230520", "20230521", "20230527", "20230528", "20230603", "20230604", "20230610", "20230611", "20230617", "20230618", "20230622", "20230623", "20230624", "20230701", "20230702", "20230708", "20230709", "20230715", "20230716", "20230722", "20230723", "20230729", "20230730", "20230805", "20230806", "20230812", "20230813", "20230819", "20230820", "20230826", "20230827", "20230902", "20230903", "20230909", "20230910", "20230916", "20230917", "20230923", "20230924", "20230929", "20231001", "20231002", "20231003", "20231004", "20231005", "20231006", "20231007", "20231014", "20231015", "20231021", "20231022", "20231028", "20231029", "20231104", "20231105", "20231111", "20231112", "20231118", "20231119", "20231125", "20231126", "20231202", "20231203", "20231209", "20231210", "20231216", "20231217", "20231223", "20231224", "20231230", "20231231", "20240101", "20240106", "20240107", "20240113", "20240114", "20240120", "20240121", "20240127", "20240128", "20240203", "20240204", "20240209", "20240210", "20240211", "20240212", "20240213", "20240214", "20240215", "20240224", "20240225", "20240302", "20240303", "20240309", "20240310", "20240316", "20240317", "20240323", "20240324", "20240330", "20240331", "20240404", "20240405", "20240406", "20240413", "20240414", "20240420", "20240421", "20240427", "20240428", "20240501", "20240504", "20240505", "20240511", "20240512", "20240518", "20240519", "20240525", "20240526", "20240601", "20240602", "20240608", "20240609", "20240610", "20240615", "20240616", "20240622", "20240623", "20240629", "20240630", "20240706", "20240707", "20240713", "20240714", "20240720", "20240721", "20240727", "20240728", "20240803", "20240804", "20240810", "20240811", "20240817", "20240818", "20240824", "20240825", "20240831", "20240901", "20240907", "20240908", "20240914", "20240915", "20240917", "20240921", "20240922", "20240930", "20241001", "20241002", "20241003", "20241004", "20241005", "20241006", "20241012", "20241013", "20241019", "20241020", "20241026", "20241027", "20241102", "20241103", "20241109", "20241110", "20241116", "20241117", "20241123", "20241124", "20241130", "20241201", "20241207", "20241208", "20241214", "20241215", "20241221", "20241222", "20241228", "20241229", "20250101", "20250104", "20250105", "20250111", "20250112", "20250118", "20250119", "20250128", "20250129", "20250130", "20250131", "20250201", "20250202", "20250203", "20250208", "20250209", "20250215", "20250216", "20250222", "20250223", "20250301", "20250302", "20250308", "20250309", "20250315", "20250316", "20250322", "20250323", "20250329", "20250330", "20250404", "20250405", "20250406", "20250412", "20250413", "20250419", "20250420", "20250426", "20250427", "20250501", "20250502", "20250503", "20250510", "20250511", "20250517", "20250518", "20250524", "20250525", "20250530", "20250531", "20250601", "20250607", "20250608", "20250614", "20250615", "20250621", "20250622", "20250628", "20250629", "20250705", "20250706", "20250712", "20250713", "20250719", "20250720", "20250726", "20250727", "20250802", "20250803", "20250809", "20250810", "20250816", "20250817", "20250823", "20250824", "20250830", "20250831", "20250906", "20250907", "20250913", "20250914", "20250920", "20250921", "20250929", "20250930", "20251001", "20251002", "20251003", "20251004", "20251005", "20251006", "20251011", "20251012", "20251018", "20251019", "20251025", "20251026", "20251101", "20251102", "20251108", "20251109", "20251115", "20251116", "20251122", "20251123", "20251129", "20251130", "20251206", "20251207", "20251213", "20251214", "20251220", "20251221", "20251227", "20251228", "20260101", "20260102", "20260103", "20260110", "20260111", "20260117", "20260118", "20260124", "20260125", "20260131", "20260201", "20260207", "20260208", "20260216", "20260217", "20260218", "20260219", "20260220", "20260221", "20260222", "20260228", "20260301", "20260307", "20260308", "20260314", "20260315", "20260321", "20260322", "20260328", "20260329", "20260404", "20260405", "20260406", "20260411", "20260412", "20260418", "20260419", "20260425", "20260426", "20260501", "20260502", "20260503", "20260509", "20260510", "20260516", "20260517", "20260523", "20260524", "20260530", "20260531", "20260606", "20260607", "20260613", "20260614", "20260619", "20260620", "20260621", "20260627", "20260628", "20260704", "20260705", "20260711", "20260712", "20260718", "20260719", "20260725", "20260726", "20260801", "20260802", "20260808", "20260809", "20260815", "20260816", "20260822", "20260823", "20260829", "20260830", "20260905", "20260906", "20260912", "20260913", "20260919", "20260920", "20260925", "20260926", "20261001", "20261002", "20261003", "20261004", "20261005", "20261006", "20261007", "20261008", "20261011", "20261017", "20261018", "20261024", "20261025", "20261031", "20261101", "20261107", "20261108", "20261114", "20261115", "20261121", "20261122", "20261128", "20261129", "20261205", "20261206", "20261212", "20261213", "20261219", "20261220", "20261226", "20261227", "20270101", "20270102", "20270103", "20270109", "20270110", "20270116", "20270117", "20270123", "20270124", "20270130", "20270131", "20270205", "20270206", "20270207", "20270208", "20270209", "20270210", "20270211", "20270220", "20270221", "20270227", "20270228", "20270306", "20270307", "20270313", "20270314", "20270320", "20270321", "20270327", "20270328", "20270403", "20270404", "20270405", "20270410", "20270411", "20270417", "20270418", "20270424", "20270425", "20270501", "20270502", "20270503", "20270508", "20270509", "20270515", "20270516", "20270522", "20270523", "20270529", "20270530", "20270607", "20270608", "20270609", "20270612", "20270613", "20270619", "20270620", "20270626", "20270627", "20270703", "20270704", "20270710", "20270711", "20270717", "20270718", "20270724", "20270725", "20270731", "20270801", "20270807", "20270808", "20270814", "20270815", "20270821", "20270822", "20270828", "20270829", "20270904", "20270905", "20270911", "20270915", "20270916", "20270917", "20270918", "20270919", "20271001", "20271002", "20271003", "20271004", "20271005", "20271006", "20271007", "20271010", "20271016", "20271017", "20271023", "20271024", "20271030", "20271031", "20271106", "20271107", "20271113", "20271114", "20271120", "20271121", "20271127", "20271128", "20271204", "20271205", "20271211", "20271212", "20271218", "20271219", "20271225", "20271226", "20280101", "20280102", "20280103", "20280108", "20280109", "20280115", "20280116", "20280125", "20280126", "20280127", "20280128", "20280129", "20280130", "20280131", "20280205", "20280206", "20280212", "20280213", "20280219", "20280220", "20280226", "20280227", "20280304", "20280305", "20280311", "20280312", "20280318", "20280319", "20280325", "20280326", "20280402", "20280403", "20280404", "20280408", "20280409", "20280415", "20280416", "20280422", "20280423", "20280429", "20280430", "20280501", "20280506", "20280507", "20280513", "20280514", "20280520", "20280521", "20280527", "20280528", "20280529", "20280603", "20280604", "20280610", "20280611", "20280617", "20280618", "20280624", "20280625", "20280701", "20280702", "20280708", "20280709", "20280715", "20280716", "20280722", "20280723", "20280729", "20280730", "20280805", "20280806", "20280812", "20280813", "20280819", "20280820", "20280826", "20280827", "20280902", "20280903", "20280909", "20280910", "20280916", "20280917", "20280923", "20280924", "20281001", "20281002", "20281003", "20281004", "20281005", "20281006", "20281007", "20281014", "20281015", "20281021", "20281022", "20281028", "20281029", "20281104", "20281105", "20281111", "20281112", "20281118", "20281119", "20281125", "20281126", "20281202", "20281203", "20281209", "20281210", "20281216", "20281217", "20281223", "20281224", "20281230", "20281231", "20290101", "20290106", "20290107", "20290113", "20290114", "20290120", "20290121", "20290127", "20290128", "20290203", "20290204", "20290212", "20290213", "20290214", "20290215", "20290216", "20290217", "20290218", "20290224", "20290225", "20290303", "20290304", "20290310", "20290311", "20290317", "20290318", "20290324", "20290325", "20290402", "20290403", "20290404", "20290407", "20290408", "20290414", "20290415", "20290421", "20290422", "20290429", "20290430", "20290501", "20290505", "20290506", "20290512", "20290513", "20290519", "20290520", "20290526", "20290527", "20290602", "20290603", "20290609", "20290610", "20290615", "20290616", "20290617", "20290623", "20290624", "20290630", "20290701", "20290707", "20290708", "20290714", "20290715", "20290721", "20290722", "20290728", "20290729", "20290804", "20290805", "20290811", "20290812", "20290818", "20290819", "20290825", "20290826", "20290901", "20290902", "20290908", "20290909", "20290915", "20290916", "20290922", "20290923", "20290924", "20290930", "20291001", "20291002", "20291003", "20291004", "20291005", "20291006", "20291007", "20291013", "20291014", "20291020", "20291021", "20291027", "20291028", "20291103", "20291104", "20291110", "20291111", "20291117", "20291118", "20291124", "20291125", "20291201", "20291202", "20291208", "20291209", "20291215", "20291216", "20291222", "20291223", "20291229", "20291230", "20300101", "20300105", "20300106", "20300112", "20300113", "20300119", "20300120", "20300126", "20300127", "20300202", "20300203", "20300204", "20300205", "20300206", "20300207", "20300208", "20300216", "20300217", "20300223", "20300224", "20300302", "20300303", "20300309", "20300310", "20300316", "20300317", "20300323", "20300324", "20300330", "20300331", "20300405", "20300406", "20300407", "20300413", "20300414", "20300420", "20300421", "20300427", "20300428", "20300501", "20300504", "20300505", "20300511", "20300512", "20300518", "20300519", "20300525", "20300526", "20300603", "20300604", "20300605", "20300608", "20300609", "20300615", "20300616", "20300622", "20300623", "20300629", "20300630", "20300706", "20300707", "20300713", "20300714", "20300720", "20300721", "20300727", "20300728", "20300803", "20300804", "20300810", "20300811", "20300817", "20300818", "20300824", "20300825", "20300831", "20300901", "20300907", "20300908", "20300912", "20300914", "20300915", "20300921", "20300922", "20300930", "20301001", "20301002", "20301003", "20301004", "20301005", "20301006", "20301012", "20301013", "20301019", "20301020", "20301026", "20301027", "20301102", "20301103", "20301109", "20301110", "20301116", "20301117", "20301123", "20301124", "20301130", "20301201", "20301207", "20301208", "20301214", "20301215", "20301221", "20301222", "20301228", "20301229", "20310101", "20310104", "20310105", "20310111", "20310112", "20310118", "20310122", "20310123", "20310124", "20310125", "20310126", "20310127", "20310128", "20310202", "20310208", "20310209", "20310215", "20310216", "20310222", "20310223", "20310301", "20310302", "20310308", "20310309", "20310315", "20310316", "20310322", "20310323", "20310329", "20310330", "20310405", "20310406", "20310407", "20310412", "20310413", "20310419", "20310420", "20310426", "20310427", "20310501", "20310502", "20310503", "20310510", "20310511", "20310517", "20310518", "20310524", "20310525", "20310531", "20310601", "20310607", "20310608", "20310614", "20310615", "20310622", "20310623", "20310624", "20310628", "20310629", "20310705", "20310706", "20310712", "20310713", "20310719", "20310720", "20310726", "20310727", "20310802", "20310803", "20310809", "20310810", "20310816", "20310817", "20310823", "20310824", "20310830", "20310831", "20310906", "20310907", "20310913", "20310914", "20310920", "20310921", "20310929", "20310930", "20311001", "20311002", "20311003", "20311004", "20311005", "20311011", "20311012", "20311018", "20311019", "20311025", "20311026", "20311101", "20311102", "20311108", "20311109", "20311115", "20311116", "20311122", "20311123", "20311129", "20311130", "20311206", "20311207", "20311213", "20311214", "20311220", "20311221", "20311227", "20311228", "20320101", "20320102", "20320103", "20320110", "20320111", "20320117", "20320118", "20320124", "20320125", "20320131", "20320201", "20320210", "20320211", "20320212", "20320213", "20320214", "20320215", "20320216", "20320221", "20320222", "20320228", "20320229", "20320306", "20320307", "20320313", "20320314", "20320320", "20320321", "20320327", "20320328", "20320403", "20320404", "20320405", "20320410", "20320411", "20320417", "20320418", "20320424", "20320425", "20320501", "20320502", "20320503", "20320508", "20320509", "20320515", "20320516", "20320522", "20320523", "20320529", "20320530", "20320605", "20320606", "20320611", "20320612", "20320613", "20320619", "20320620", "20320626", "20320627", "20320703", "20320704", "20320710", "20320711", "20320717", "20320718", "20320724", "20320725", "20320731", "20320801", "20320807", "20320808", "20320814", "20320815", "20320821", "20320822", "20320828", "20320829", "20320904", "20320905", "20320911", "20320912", "20320918", "20320919", "20320920", "20321001", "20321002", "20321003", "20321004", "20321005", "20321006", "20321007", "20321010", "20321016", "20321017", "20321023", "20321024", "20321030", "20321031", "20321106", "20321107", "20321113", "20321114", "20321120", "20321121", "20321127", "20321128", "20321204", "20321205", "20321211", "20321212", "20321218", "20321219", "20321225", "20321226", "20330101", "20330102", "20330103", "20330108", "20330109", "20330115", "20330116", "20330122", "20330123", "20330130", "20330131", "20330201", "20330202", "20330203", "20330204", "20330205", "20330212", "20330213", "20330219", "20330220", "20330226", "20330227", "20330305", "20330306", "20330312", "20330313", "20330319", "20330320", "20330326", "20330327", "20330402", "20330403", "20330404", "20330409", "20330410", "20330416", "20330417", "20330423", "20330424", "20330430", "20330501", "20330502", "20330507", "20330508", "20330514", "20330515", "20330521", "20330522", "20330530", "20330531", "20330601", "20330604", "20330605", "20330611", "20330612", "20330618", "20330619", "20330625", "20330626", "20330702", "20330703", "20330709", "20330710", "20330716", "20330717", "20330723", "20330724", "20330730", "20330731", "20330806", "20330807", "20330813", "20330814", "20330820", "20330821", "20330827", "20330828", "20330903", "20330904", "20330908", "20330910", "20330911", "20330917", "20330918", "20330924", "20330925", "20331001", "20331002", "20331003", "20331004", "20331005", "20331006", "20331007", "20331015", "20331016", "20331022", "20331023", "20331029", "20331030", "20331105", "20331106", "20331112", "20331113", "20331119", "20331120", "20331126", "20331127", "20331203", "20331204", "20331210", "20331211", "20331217", "20331218", "20331224", "20331225", "20340101", "20340102", "20340103", "20340107", "20340108", "20340114", "20340115", "20340121", "20340122", "20340128", "20340129", "20340204", "20340205", "20340211", "20340212", "20340218", "20340219", "20340220", "20340221", "20340222", "20340223", "20340224", "20340304", "20340305", "20340311", "20340312", "20340318", "20340319", "20340325", "20340326", "20340403", "20340404", "20340405", "20340408", "20340409", "20340415", "20340416", "20340422", "20340423", "20340429", "20340430", "20340501", "20340506", "20340507", "20340513", "20340514", "20340520", "20340521", "20340527", "20340528", "20340603", "20340604", "20340610", "20340611", "20340618", "20340619", "20340620", "20340624", "20340625", "20340701", "20340702", "20340708", "20340709", "20340715", "20340716", "20340722", "20340723", "20340729", "20340730", "20340805", "20340806", "20340812", "20340813", "20340819", "20340820", "20340826", "20340827", "20340902", "20340903", "20340909", "20340910", "20340916", "20340917", "20340923", "20340927", "20340928", "20340929", "20341001", "20341002", "20341003", "20341004", "20341005", "20341006", "20341007", "20341014", "20341015", "20341021", "20341022", "20341028", "20341029", "20341104", "20341105", "20341111", "20341112", "20341118", "20341119", "20341125", "20341126", "20341202", "20341203", "20341209", "20341210", "20341216", "20341217", "20341223", "20341224", "20341230", "20341231", "20350101", "20350106", "20350107", "20350113", "20350114", "20350120", "20350121", "20350127", "20350128", "20350203", "20350207", "20350208", "20350209", "20350210", "20350211", "20350212", "20350213", "20350218", "20350224", "20350225", "20350303", "20350304", "20350310", "20350311", "20350317", "20350318", "20350324", "20350325", "20350331", "20350401", "20350405", "20350406", "20350407", "20350414", "20350415", "20350421", "20350422", "20350429", "20350430", "20350501", "20350505", "20350506", "20350512", "20350513", "20350519", "20350520", "20350526", "20350527", "20350602", "20350603", "20350609", "20350610", "20350611", "20350616", "20350617", "20350623", "20350624", "20350630", "20350701", "20350707", "20350708", "20350714", "20350715", "20350721", "20350722", "20350728", "20350729", "20350804", "20350805", "20350811", "20350812", "20350818", "20350819", "20350825", "20350826", "20350901", "20350902", "20350908", "20350909", "20350915", "20350916", "20350917", "20350922", "20350923", "20350930", "20351001", "20351002", "20351003", "20351004", "20351005", "20351006", "20351007", "20351013", "20351014", "20351020", "20351021", "20351027", "20351028", "20351103", "20351104", "20351110", "20351111", "20351117", "20351118", "20351124", "20351125", "20351201", "20351202", "20351208", "20351209", "20351215", "20351216", "20351222", "20351223", "20351229", "20351230", "20360101", "20360105", "20360106", "20360112", "20360113", "20360119", "20360120", "20360127", "20360128", "20360129", "20360130", "20360131", "20360201", "20360202", "20360209", "20360210", "20360216", "20360217", "20360223", "20360224", "20360301", "20360302", "20360308", "20360309", "20360315", "20360316", "20360322", "20360323", "20360329", "20360330", "20360404", "20360405", "20360406", "20360412", "20360413", "20360419", "20360420", "20360426", "20360427", "20360501", "20360502", "20360503", "20360510", "20360511", "20360517", "20360518", "20360524", "20360525", "20360530", "20360531", "20360601", "20360607", "20360608", "20360614", "20360615", "20360621", "20360622", "20360628", "20360629", "20360705", "20360706", "20360712", "20360713", "20360719", "20360720", "20360726", "20360727", "20360802", "20360803", "20360809", "20360810", "20360816", "20360817", "20360823", "20360824", "20360830", "20360831", "20360906", "20360907", "20360913", "20360914", "20360920", "20360921", "20360929", "20360930", "20361001", "20361002", "20361003", "20361004", "20361005", "20361006", "20361011", "20361012", "20361018", "20361019", "20361025", "20361026", "20361101", "20361102", "20361108", "20361109", "20361115", "20361116", "20361122", "20361123", "20361129", "20361130", "20361206", "20361207", "20361213", "20361214", "20361220", "20361221", "20361227", "20361228", "20370101", "20370102", "20370103", "20370110", "20370111", "20370117", "20370118", "20370124", "20370125", "20370131", "20370201", "20370207", "20370208", "20370214", "20370215", "20370216", "20370217", "20370218", "20370219", "20370220", "20370228", "20370301", "20370307", "20370308", "20370314", "20370315", "20370321", "20370322", "20370328", "20370329", "20370404", "20370405", "20370406", "20370411", "20370412", "20370418", "20370419", "20370425", "20370426", "20370501", "20370502", "20370503", "20370509", "20370510", "20370516", "20370517", "20370523", "20370524", "20370530", "20370531", "20370606", "20370607", "20370613", "20370614", "20370618", "20370619", "20370620", "20370627", "20370628", "20370704", "20370705", "20370711", "20370712", "20370718", "20370719", "20370725", "20370726", "20370801", "20370802", "20370808", "20370809", "20370815", "20370816", "20370822", "20370823", "20370829", "20370830", "20370905", "20370906", "20370912", "20370913", "20370919", "20370920", "20370924", "20370926", "20371001", "20371002", "20371003", "20371004", "20371005", "20371006", "20371007", "20371008", "20371011", "20371017", "20371018", "20371024", "20371025", "20371031", "20371101", "20371107", "20371108", "20371114", "20371115", "20371121", "20371122", "20371128", "20371129", "20371205", "20371206", "20371212", "20371213", "20371219", "20371220", "20371226", "20371227", "20380101", "20380102", "20380103", "20380109", "20380110", "20380116", "20380117", "20380123", "20380124", "20380130", "20380203", "20380204", "20380205", "20380206", "20380207", "20380208", "20380209", "20380214", "20380220", "20380221", "20380227", "20380228", "20380306", "20380307", "20380313", "20380314", "20380320", "20380321", "20380327", "20380328", "20380403", "20380404", "20380405", "20380410", "20380411", "20380417", "20380418", "20380424", "20380425", "20380501", "20380502", "20380503", "20380508", "20380509", "20380515", "20380516", "20380522", "20380523", "20380529", "20380530", "20380605", "20380606", "20380607", "20380612", "20380613", "20380619", "20380620", "20380626", "20380627", "20380703", "20380704", "20380710", "20380711", "20380717", "20380718", "20380724", "20380725", "20380731", "20380801", "20380807", "20380808", "20380814", "20380815", "20380821", "20380822", "20380828", "20380829", "20380904", "20380905", "20380911", "20380912", "20380913", "20380918", "20380919", "20381001", "20381002", "20381003", "20381004", "20381005", "20381006", "20381007", "20381010", "20381016", "20381017", "20381023", "20381024", "20381030", "20381031", "20381106", "20381107", "20381113", "20381114", "20381120", "20381121", "20381127", "20381128", "20381204", "20381205", "20381211", "20381212", "20381218", "20381219", "20381225", "20381226", "20390101", "20390102", "20390103", "20390108", "20390109", "20390115", "20390116", "20390123", "20390124", "20390125", "20390126", "20390127", "20390128", "20390129", "20390205", "20390206", "20390212", "20390213", "20390219", "20390220", "20390226", "20390227", "20390305", "20390306", "20390312", "20390313", "20390319", "20390320", "20390326", "20390327", "20390403", "20390404", "20390405", "20390409", "20390410", "20390416", "20390417", "20390423", "20390424", "20390430", "20390501", "20390502", "20390507", "20390508", "20390514", "20390515", "20390521", "20390522", "20390527", "20390528", "20390529", "20390604", "20390605", "20390611", "20390612", "20390618", "20390619", "20390625", "20390626", "20390702", "20390703", "20390709", "20390710", "20390716", "20390717", "20390723", "20390724", "20390730", "20390731", "20390806", "20390807", "20390813", "20390814", "20390820", "20390821", "20390827", "20390828", "20390903", "20390904", "20390910", "20390911", "20390917", "20390918", "20390924", "20390925", "20391001", "20391002", "20391003", "20391004", "20391005", "20391006", "20391007", "20391015", "20391016", "20391022", "20391023", "20391029", "20391030", "20391105", "20391106", "20391112", "20391113", "20391119", "20391120", "20391126", "20391127", "20391203", "20391204", "20391210", "20391211", "20391217", "20391218", "20391224", "20391225", "20400101", "20400102", "20400103", "20400107", "20400108", "20400114", "20400115", "20400121", "20400122", "20400128", "20400129", "20400204", "20400205", "20400211", "20400212", "20400213", "20400214", "20400215", "20400216", "20400217", "20400225", "20400226", "20400303", "20400304", "20400310", "20400311", "20400317", "20400318", "20400324", "20400325", "20400402", "20400403", "20400404", "20400407", "20400408", "20400414", "20400415", "20400421", "20400422", "20400429", "20400430", "20400501", "20400505", "20400506", "20400512", "20400513", "20400519", "20400520", "20400526", "20400527", "20400602", "20400603", "20400609", "20400610", "20400614", "20400615", "20400616", "20400623", "20400624", "20400630", "20400701", "20400707", "20400708", "20400714", "20400715", "20400721", "20400722", "20400728", "20400729", "20400804", "20400805", "20400811", "20400812", "20400818", "20400819", "20400825", "20400826", "20400901", "20400902", "20400908", "20400909", "20400915", "20400916", "20400920", "20400922", "20400923", "20400930", "20401001", "20401002", "20401003", "20401004", "20401005", "20401006", "20401007", "20401013", "20401014", "20401020", "20401021", "20401027", "20401028", "20401103", "20401104", "20401110", "20401111", "20401117", "20401118", "20401124", "20401125", "20401201", "20401202", "20401208", "20401209", "20401215", "20401216", "20401222", "20401223", "20401229", "20401230", "20410101", "20410105", "20410106", "20410112", "20410113", "20410119", "20410120", "20410131", "20410201", "20410202", "20410203", "20410204", "20410205", "20410206", "20410209", "20410210", "20410216", "20410217", "20410223", "20410224", "20410302", "20410303", "20410309", "20410310", "20410316", "20410317", "20410323", "20410324", "20410330", "20410331", "20410404", "20410405", "20410406", "20410413", "20410414", "20410420", "20410421", "20410427", "20410428", "20410501", "20410504", "20410505", "20410511", "20410512", "20410518", "20410519", "20410525", "20410526", "20410601", "20410602", "20410603", "20410608", "20410609", "20410615", "20410616", "20410622", "20410623", "20410629", "20410630", "20410706", "20410707", "20410713", "20410714", "20410720", "20410721", "20410727", "20410728", "20410803", "20410804", "20410810", "20410811", "20410817", "20410818", "20410824", "20410825", "20410831", "20410901", "20410907", "20410908", "20410910", "20410914", "20410915", "20410921", "20410922", "20410930", "20411001", "20411002", "20411003", "20411004", "20411005", "20411006", "20411012", "20411013", "20411019", "20411020", "20411026", "20411027", "20411102", "20411103", "20411109", "20411110", "20411116", "20411117", "20411123", "20411124", "20411130", "20411201", "20411207", "20411208", "20411214", "20411215", "20411221", "20411222", "20411228", "20411229", "20420101", "20420104", "20420105", "20420111", "20420112", "20420121", "20420122", "20420123", "20420124", "20420125", "20420126", "20420127", "20420201", "20420202", "20420208", "20420209", "20420215", "20420216", "20420222", "20420223", "20420301", "20420302", "20420308", "20420309", "20420315", "20420316", "20420322", "20420323", "20420329", "20420330", "20420404", "20420405", "20420406", "20420412", "20420413", "20420419", "20420420", "20420426", "20420427", "20420501", "20420502", "20420503", "20420510", "20420511", "20420517", "20420518", "20420524", "20420525", "20420531", "20420601", "20420607", "20420608", "20420614", "20420615", "20420621", "20420622", "20420623", "20420628", "20420629", "20420705", "20420706", "20420712", "20420713", "20420719", "20420720", "20420726", "20420727", "20420802", "20420803", "20420809", "20420810", "20420816", "20420817", "20420823", "20420824", "20420830", "20420831", "20420906", "20420907", "20420913", "20420914", "20420920", "20420921", "20420929", "20420930", "20421001", "20421002", "20421003", "20421004", "20421005", "20421011", "20421012", "20421018", "20421019", "20421025", "20421026", "20421101", "20421102", "20421108", "20421109", "20421115", "20421116", "20421122", "20421123", "20421129", "20421130", "20421206", "20421207", "20421213", "20421214", "20421220", "20421221", "20421227", "20421228", "20430101", "20430102", "20430103", "20430110", "20430111", "20430117", "20430118", "20430124", "20430125", "20430131", "20430201", "20430209", "20430210", "20430211", "20430212", "20430213", "20430214", "20430215", "20430221", "20430222", "20430228", "20430301", "20430307", "20430308", "20430314", "20430315", "20430321", "20430322", "20430328", "20430329", "20430404", "20430405", "20430406", "20430411", "20430412", "20430418", "20430419", "20430425", "20430426", "20430501", "20430502", "20430503", "20430509", "20430510", "20430516", "20430517", "20430523", "20430524", "20430530", "20430531", "20430606", "20430607", "20430611", "20430612", "20430613", "20430620", "20430621", "20430627", "20430628", "20430704", "20430705", "20430711", "20430712", "20430718", "20430719", "20430725", "20430726", "20430801", "20430802", "20430808", "20430809", "20430815", "20430816", "20430822", "20430823", "20430829", "20430830", "20430905", "20430906", "20430912", "20430913", "20430917", "20430919", "20430920", "20430926", "20431001", "20431002", "20431003", "20431004", "20431005", "20431006", "20431007", "20431008", "20431011", "20431017", "20431018", "20431024", "20431025", "20431031", "20431101", "20431107", "20431108", "20431114", "20431115", "20431121", "20431122", "20431128", "20431129", "20431205", "20431206", "20431212", "20431213", "20431219", "20431220", "20431226", "20431227", "20440101", "20440102", "20440103", "20440109", "20440110", "20440116", "20440117", "20440123", "20440124", "20440129", "20440130", "20440131", "20440201", "20440202", "20440203", "20440204", "20440213", "20440214", "20440220", "20440221", "20440227", "20440228", "20440305", "20440306", "20440312", "20440313", "20440319", "20440320", "20440326", "20440327", "20440402", "20440403", "20440404", "20440409", "20440410", "20440416", "20440417", "20440423", "20440424", "20440430", "20440501", "20440502", "20440507", "20440508", "20440514", "20440515", "20440521", "20440522", "20440529", "20440530", "20440531", "20440604", "20440605", "20440611", "20440612", "20440618", "20440619", "20440625", "20440626", "20440702", "20440703", "20440709", "20440710", "20440716", "20440717", "20440723", "20440724", "20440730", "20440731", "20440806", "20440807", "20440813", "20440814", "20440820", "20440821", "20440827", "20440828", "20440903", "20440904", "20440910", "20440911", "20440917", "20440918", "20440924", "20440925", "20441001", "20441003", "20441004", "20441005", "20441006", "20441007", "20441015", "20441016", "20441022", "20441023", "20441029", "20441030", "20441105", "20441106", "20441112", "20441113", "20441119", "20441120", "20441126", "20441127", "20441203", "20441204", "20441210", "20441211", "20441217", "20441218", "20441224", "20441225", "20450101", "20450102", "20450103", "20450107", "20450108", "20450114", "20450115", "20450121", "20450122", "20450128", "20450129", "20450204", "20450205", "20450216", "20450217", "20450218", "20450219", "20450220", "20450221", "20450222", "20450225", "20450226", "20450304", "20450305", "20450311", "20450312", "20450318", "20450319", "20450325", "20450326", "20450402", "20450403", "20450404", "20450408", "20450409", "20450415", "20450416", "20450422", "20450423", "20450429", "20450430", "20450501", "20450506", "20450507", "20450513", "20450514", "20450520", "20450521", "20450527", "20450528", "20450603", "20450604", "20450610", "20450611", "20450617", "20450618", "20450619", "20450624", "20450625", "20450701", "20450702", "20450708", "20450709", "20450715", "20450716", "20450722", "20450723", "20450729", "20450730", "20450805", "20450806", "20450812", "20450813", "20450819", "20450820", "20450826", "20450827", "20450902", "20450903", "20450909", "20450910", "20450916", "20450917", "20450923", "20450924", "20450925", "20451001", "20451002", "20451003", "20451004", "20451005", "20451006", "20451007", "20451014", "20451015", "20451021", "20451022", "20451028", "20451029", "20451104", "20451105", "20451111", "20451112", "20451118", "20451119", "20451125", "20451126", "20451202", "20451203", "20451209", "20451210", "20451216", "20451217", "20451223", "20451224", "20451230", "20451231", "20460101", "20460106", "20460107", "20460113", "20460114", "20460120", "20460121", "20460127", "20460128", "20460205", "20460206", "20460207", "20460208", "20460209", "20460210", "20460211", "20460217", "20460218", "20460224", "20460225", "20460303", "20460304", "20460310", "20460311", "20460317", "20460318", "20460324", "20460325", "20460402", "20460403", "20460404", "20460407", "20460408", "20460414", "20460415", "20460421", "20460422", "20460429", "20460430", "20460501", "20460505", "20460506", "20460512", "20460513", "20460519", "20460520", "20460526", "20460527", "20460602", "20460603", "20460608", "20460609", "20460610", "20460616", "20460617", "20460623", "20460624", "20460630", "20460701", "20460707", "20460708", "20460714", "20460715", "20460721", "20460722", "20460728", "20460729", "20460804", "20460805", "20460811", "20460812", "20460818", "20460819", "20460825", "20460826", "20460901", "20460902", "20460908", "20460909", "20460915", "20460916", "20460917", "20460922", "20460923", "20460930", "20461001", "20461002", "20461003", "20461004", "20461005", "20461006", "20461007", "20461013", "20461014", "20461020", "20461021", "20461027", "20461028", "20461103", "20461104", "20461110", "20461111", "20461117", "20461118", "20461124", "20461125", "20461201", "20461202", "20461208", "20461209", "20461215", "20461216", "20461222", "20461223", "20461229", "20461230", "20470101", "20470105", "20470106", "20470112", "20470113", "20470119", "20470120", "20470125", "20470126", "20470127", "20470128", "20470129", "20470130", "20470131", "20470209", "20470210", "20470216", "20470217", "20470223", "20470224", "20470302", "20470303", "20470309", "20470310", "20470316", "20470317", "20470323", "20470324", "20470330", "20470331", "20470405", "20470406", "20470407", "20470413", "20470414", "20470420", "20470421", "20470427", "20470428", "20470501", "20470504", "20470505", "20470511", "20470512", "20470518", "20470519", "20470527", "20470528", "20470529", "20470601", "20470602", "20470608", "20470609", "20470615", "20470616", "20470622", "20470623", "20470629", "20470630", "20470706", "20470707", "20470713", "20470714", "20470720", "20470721", "20470727", "20470728", "20470803", "20470804", "20470810", "20470811", "20470817", "20470818", "20470824", "20470825", "20470831", "20470901", "20470907", "20470908", "20470914", "20470915", "20470921", "20470922", "20470930", "20471001", "20471002", "20471003", "20471004", "20471005", "20471006", "20471012", "20471013", "20471019", "20471020", "20471026", "20471027", "20471102", "20471103", "20471109", "20471110", "20471116", "20471117", "20471123", "20471124", "20471130", "20471201", "20471207", "20471208", "20471214", "20471215", "20471221", "20471222", "20471228", "20471229", "20480101", "20480104", "20480105", "20480111", "20480112", "20480118", "20480119", "20480125", "20480126", "20480201", "20480202", "20480213", "20480214", "20480215", "20480216", "20480217", "20480218", "20480219", "20480222", "20480223", "20480229", "20480301", "20480307", "20480308", "20480314", "20480315", "20480321", "20480322", "20480328", "20480329", "20480404", "20480405", "20480406", "20480411", "20480412", "20480418", "20480419", "20480425", "20480426", "20480501", "20480502", "20480503", "20480509", "20480510", "20480516", "20480517", "20480523", "20480524", "20480530", "20480531", "20480606", "20480607", "20480613", "20480614", "20480615", "20480620", "20480621", "20480627", "20480628", "20480704", "20480705", "20480711", "20480712", "20480718", "20480719", "20480725", "20480726", "20480801", "20480802", "20480808", "20480809", "20480815", "20480816", "20480822", "20480823", "20480829", "20480830", "20480905", "20480906", "20480912", "20480913", "20480919", "20480920", "20480922", "20480926", "20481001", "20481002", "20481003", "20481004", "20481005", "20481006", "20481007", "20481008", "20481011", "20481017", "20481018", "20481024", "20481025", "20481031", "20481101", "20481107", "20481108", "20481114", "20481115", "20481121", "20481122", "20481128", "20481129", "20481205", "20481206", "20481212", "20481213", "20481219", "20481220", "20481226", "20481227", "20490101", "20490102", "20490103", "20490109", "20490110", "20490116", "20490117", "20490123", "20490124", "20490201", "20490202", "20490203", "20490204", "20490205", "20490206", "20490207", "20490213", "20490214", "20490220", "20490221", "20490227", "20490228", "20490306", "20490307", "20490313", "20490314", "20490320", "20490321", "20490327", "20490328", "20490403", "20490404", "20490405", "20490410", "20490411", "20490417", "20490418", "20490424", "20490425", "20490501", "20490502", "20490503", "20490508", "20490509", "20490515", "20490516", "20490522", "20490523", "20490529", "20490530", "20490604", "20490605", "20490606", "20490612", "20490613", "20490619", "20490620", "20490626", "20490627", "20490703", "20490704", "20490710", "20490711", "20490717", "20490718", "20490724", "20490725", "20490731", "20490801", "20490807", "20490808", "20490814", "20490815", "20490821", "20490822", "20490828", "20490829", "20490904", "20490905", "20490911", "20490912", "20490913", "20490918", "20490919", "20491001", "20491002", "20491003", "20491004", "20491005", "20491006", "20491007", "20491010", "20491016", "20491017", "20491023", "20491024", "20491030", "20491031", "20491106", "20491107", "20491113", "20491114", "20491120", "20491121", "20491127", "20491128", "20491204", "20491205", "20491211", "20491212", "20491218", "20491219", "20491225", "20491226", "20500101", "20500102", "20500103", "20500108", "20500109", "20500115", "20500116", "20500122", "20500123", "20500124", "20500125", "20500126", "20500127", "20500128", "20500205", "20500206", "20500212", "20500213", "20500219", "20500220", "20500226", "20500227", "20500305", "20500306", "20500312", "20500313", "20500319", "20500320", "20500326", "20500327", "20500402", "20500403", "20500404", "20500409", "20500410", "20500416", "20500417", "20500423", "20500424", "20500430", "20500501", "20500502", "20500507", "20500508", "20500514", "20500515", "20500521", "20500522", "20500528", "20500529", "20500604", "20500605", "20500611", "20500612", "20500618", "20500619", "20500623", "20500624", "20500625", "20500702", "20500703", "20500709", "20500710", "20500716", "20500717", "20500723", "20500724", "20500730", "20500731", "20500806", "20500807", "20500813", "20500814", "20500820", "20500821", "20500827", "20500828", "20500903", "20500904", "20500910", "20500911", "20500917", "20500918", "20500924", "20500925", "20500930", "20501001", "20501002", "20501003", "20501004", "20501005", "20501006", "20501007", "20501015", "20501016", "20501022", "20501023", "20501029", "20501030", "20501105", "20501106", "20501112", "20501113", "20501119", "20501120", "20501126", "20501127", "20501203", "20501204", "20501210", "20501211", "20501217", "20501218", "20501224", "20501225", "20510101", "20510102", "20510103", "20510107", "20510108", "20510114", "20510115", "20510121", "20510122", "20510128", "20510129", "20510204", "20510205", "20510210", "20510211", "20510212", "20510213", "20510214", "20510215", "20510216", "20510225", "20510226", "20510304", "20510305", "20510311", "20510312", "20510318", "20510319", "20510325", "20510326", "20510403", "20510404", "20510405", "20510408", "20510409", "20510415", "20510416", "20510422", "20510423", "20510429", "20510430", "20510501", "20510506", "20510507", "20510513", "20510514", "20510520", "20510521", "20510527", "20510528", "20510603", "20510604", "20510611", "20510612", "20510613", "20510617", "20510618", "20510624", "20510625", "20510701", "20510702", "20510708", "20510709", "20510715", "20510716", "20510722", "20510723", "20510729", "20510730", "20510805", "20510806", "20510812", "20510813", "20510819", "20510820", "20510826", "20510827", "20510902", "20510903", "20510909", "20510910", "20510916", "20510917", "20510919", "20510923", "20510924", "20511001", "20511002", "20511003", "20511004", "20511005", "20511006", "20511007", "20511014", "20511015", "20511021", "20511022", "20511028", "20511029", "20511104", "20511105", "20511111", "20511112", "20511118", "20511119", "20511125", "20511126", "20511202", "20511203", "20511209", "20511210", "20511216", "20511217", "20511223", "20511224", "20511230", "20511231", "20520101", "20520106", "20520107", "20520113", "20520114", "20520120", "20520121", "20520127", "20520131", "20520201", "20520202", "20520203", "20520204", "20520205", "20520206", "20520211", "20520217", "20520218", "20520224", "20520225", "20520302", "20520303", "20520309", "20520310", "20520316", "20520317", "20520323", "20520324", "20520330", "20520331", "20520404", "20520405", "20520406", "20520413", "20520414", "20520420", "20520421", "20520427", "20520428", "20520501", "20520504", "20520505", "20520511", "20520512", "20520518", "20520519", "20520525", "20520526", "20520531", "20520601", "20520602", "20520608", "20520609", "20520615", "20520616", "20520622", "20520623", "20520629", "20520630", "20520706", "20520707", "20520713", "20520714", "20520720", "20520721", "20520727", "20520728", "20520803", "20520804", "20520810", "20520811", "20520817", "20520818", "20520824", "20520825", "20520831", "20520901", "20520907", "20520908", "20520909", "20520914", "20520915", "20520921", "20520922", "20520930", "20521001", "20521002", "20521003", "20521004", "20521005", "20521006", "20521012", "20521013", "20521019", "20521020", "20521026", "20521027", "20521102", "20521103", "20521109", "20521110", "20521116", "20521117", "20521123", "20521124", "20521130", "20521201", "20521207", "20521208", "20521214", "20521215", "20521221", "20521222", "20521228", "20521229", "20530101", "20530104", "20530105", "20530111", "20530112", "20530118", "20530119", "20530125", "20530126", "20530201", "20530202", "20530208", "20530209", "20530218", "20530219", "20530220", "20530221", "20530222", "20530223", "20530224", "20530301", "20530302", "20530308", "20530309", "20530315", "20530316", "20530322", "20530323", "20530329", "20530330", "20530404", "20530405", "20530406", "20530412", "20530413", "20530419", "20530420", "20530426", "20530427", "20530501", "20530502", "20530503", "20530510", "20530511", "20530517", "20530518", "20530524", "20530525", "20530531", "20530601", "20530607", "20530608", "20530614", "20530615", "20530620", "20530621", "20530622", "20530628", "20530629", "20530705", "20530706", "20530712", "20530713", "20530719", "20530720", "20530726", "20530727", "20530802", "20530803", "20530809", "20530810", "20530816", "20530817", "20530823", "20530824", "20530830", "20530831", "20530906", "20530907", "20530913", "20530914", "20530920", "20530921", "20530926", "20530929", "20530930", "20531001", "20531002", "20531003", "20531004", "20531005", "20531011", "20531012", "20531018", "20531019", "20531025", "20531026", "20531101", "20531102", "20531108", "20531109", "20531115", "20531116", "20531122", "20531123", "20531129", "20531130", "20531206", "20531207", "20531213", "20531214", "20531220", "20531221", "20531227", "20531228", "20540101", "20540102", "20540103", "20540110", "20540111", "20540117", "20540118", "20540124", "20540125", "20540131", "20540201", "20540207", "20540208", "20540209", "20540210", "20540211", "20540212", "20540213", "20540221", "20540222", "20540228", "20540301", "20540307", "20540308", "20540314", "20540315", "20540321", "20540322", "20540328", "20540329", "20540404", "20540405", "20540406", "20540411", "20540412", "20540418", "20540419", "20540425", "20540426", "20540501", "20540502", "20540503", "20540509", "20540510", "20540516", "20540517", "20540523", "20540524", "20540530", "20540531", "20540608", "20540609", "20540610", "20540613", "20540614", "20540620", "20540621", "20540627", "20540628", "20540704", "20540705", "20540711", "20540712", "20540718", "20540719", "20540725", "20540726", "20540801", "20540802", "20540808", "20540809", "20540815", "20540816", "20540822", "20540823", "20540829", "20540830", "20540905", "20540906", "20540912", "20540916", "20540917", "20540918", "20540919", "20540920", "20540926", "20541001", "20541002", "20541003", "20541004", "20541005", "20541006", "20541007", "20541008", "20541011", "20541017", "20541018", "20541024", "20541025", "20541031", "20541101", "20541107", "20541108", "20541114", "20541115", "20541121", "20541122", "20541128", "20541129", "20541205", "20541206", "20541212", "20541213", "20541219", "20541220", "20541226", "20541227", "20550101", "20550102", "20550103", "20550109", "20550110", "20550116", "20550117", "20550123", "20550127", "20550128", "20550129", "20550130", "20550131", "20550201", "20550202", "20550207", "20550213", "20550214", "20550220", "20550221", "20550227", "20550228", "20550306", "20550307", "20550313", "20550314", "20550320", "20550321", "20550327", "20550328", "20550403", "20550404", "20550405", "20550410", "20550411", "20550417", "20550418", "20550424", "20550425", "20550501", "20550502", "20550503", "20550508", "20550509", "20550515", "20550516", "20550522", "20550523", "20550529", "20550530", "20550531", "20550605", "20550606", "20550612", "20550613", "20550619", "20550620", "20550626", "20550627", "20550703", "20550704", "20550710", "20550711", "20550717", "20550718", "20550724", "20550725", "20550731", "20550801", "20550807", "20550808", "20550814", "20550815", "20550821", "20550822", "20550828", "20550829", "20550904", "20550905", "20550911", "20550912", "20550918", "20550919", "20551001", "20551002", "20551003", "20551004", "20551005", "20551006", "20551007", "20551010", "20551016", "20551017", "20551023", "20551024", "20551030", "20551031", "20551106", "20551107", "20551113", "20551114", "20551120", "20551121", "20551127", "20551128", "20551204", "20551205", "20551211", "20551212", "20551218", "20551219", "20551225", "20551226", "20560101", "20560102", "20560103", "20560108", "20560109", "20560115", "20560116", "20560122", "20560123", "20560129", "20560130", "20560205", "20560206", "20560214", "20560215", "20560216", "20560217", "20560218", "20560219", "20560220", "20560226", "20560227", "20560304", "20560305", "20560311", "20560312", "20560318", "20560319", "20560325", "20560326", "20560402", "20560403", "20560404", "20560408", "20560409", "20560415", "20560416", "20560422", "20560423", "20560429", "20560430", "20560501", "20560506", "20560507", "20560513", "20560514", "20560520", "20560521", "20560527", "20560528", "20560603", "20560604", "20560610", "20560611", "20560616", "20560617", "20560618", "20560624", "20560625", "20560701", "20560702", "20560708", "20560709", "20560715", "20560716", "20560722", "20560723", "20560729", "20560730", "20560805", "20560806", "20560812", "20560813", "20560819", "20560820", "20560826", "20560827", "20560902", "20560903", "20560909", "20560910", "20560916", "20560917", "20560923", "20560924", "20560925", "20561001", "20561002", "20561003", "20561004", "20561005", "20561006", "20561007", "20561014", "20561015", "20561021", "20561022", "20561028", "20561029", "20561104", "20561105", "20561111", "20561112", "20561118", "20561119", "20561125", "20561126", "20561202", "20561203", "20561209", "20561210", "20561216", "20561217", "20561223", "20561224", "20561230", "20561231", "20570101", "20570106", "20570107", "20570113", "20570114", "20570120", "20570121", "20570127", "20570128", "20570203", "20570204", "20570205", "20570206", "20570207", "20570208", "20570209", "20570217", "20570218", "20570224", "20570225", "20570303", "20570304", "20570310", "20570311", "20570317", "20570318", "20570324", "20570325", "20570402", "20570403", "20570404", "20570407", "20570408", "20570414", "20570415", "20570421", "20570422", "20570429", "20570430", "20570501", "20570505", "20570506", "20570512", "20570513", "20570519", "20570520", "20570526", "20570527", "20570604", "20570605", "20570606", "20570609", "20570610", "20570616", "20570617", "20570623", "20570624", "20570630", "20570701", "20570707", "20570708", "20570714", "20570715", "20570721", "20570722", "20570728", "20570729", "20570804", "20570805", "20570811", "20570812", "20570818", "20570819", "20570825", "20570826", "20570901", "20570902", "20570908", "20570909", "20570913", "20570915", "20570916", "20570922", "20570923", "20570930", "20571001", "20571002", "20571003", "20571004", "20571005", "20571006", "20571007", "20571013", "20571014", "20571020", "20571021", "20571027", "20571028", "20571103", "20571104", "20571110", "20571111", "20571117", "20571118", "20571124", "20571125", "20571201", "20571202", "20571208", "20571209", "20571215", "20571216", "20571222", "20571223", "20571229", "20571230", "20580101", "20580105", "20580106", "20580112", "20580113", "20580119", "20580123", "20580124", "20580125", "20580126", "20580127", "20580128", "20580129", "20580203", "20580209", "20580210", "20580216", "20580217", "20580223", "20580224", "20580302", "20580303", "20580309", "20580310", "20580316", "20580317", "20580323", "20580324", "20580330", "20580331", "20580404", "20580405", "20580406", "20580413", "20580414", "20580420", "20580421", "20580427", "20580428", "20580501", "20580504", "20580505", "20580511", "20580512", "20580518", "20580519", "20580525", "20580526", "20580601", "20580602", "20580608", "20580609", "20580615", "20580616", "20580623", "20580624", "20580625", "20580629", "20580630", "20580706", "20580707", "20580713", "20580714", "20580720", "20580721", "20580727", "20580728", "20580803", "20580804", "20580810", "20580811", "20580817", "20580818", "20580824", "20580825", "20580831", "20580901", "20580907", "20580908", "20580914", "20580915", "20580921", "20580922", "20580930", "20581001", "20581002", "20581003", "20581004", "20581005", "20581006", "20581012", "20581013", "20581019", "20581020", "20581026", "20581027", "20581102", "20581103", "20581109", "20581110", "20581116", "20581117", "20581123", "20581124", "20581130", "20581201", "20581207", "20581208", "20581214", "20581215", "20581221", "20581222", "20581228", "20581229", "20590101", "20590104", "20590105", "20590111", "20590112", "20590118", "20590119", "20590125", "20590126", "20590201", "20590202", "20590211", "20590212", "20590213", "20590214", "20590215", "20590216", "20590217", "20590222", "20590223", "20590301", "20590302", "20590308", "20590309", "20590315", "20590316", "20590322", "20590323", "20590329", "20590330", "20590405", "20590406", "20590407", "20590412", "20590413", "20590419", "20590420", "20590426", "20590427", "20590501", "20590502", "20590503", "20590510", "20590511", "20590517", "20590518", "20590524", "20590525", "20590531", "20590601", "20590607", "20590608", "20590613", "20590614", "20590615", "20590621", "20590622", "20590628", "20590629", "20590705", "20590706", "20590712", "20590713", "20590719", "20590720", "20590726", "20590727", "20590802", "20590803", "20590809", "20590810", "20590816", "20590817", "20590823", "20590824", "20590830", "20590831", "20590906", "20590907", "20590913", "20590914", "20590920", "20590921", "20590922", "20590929", "20590930", "20591001", "20591002", "20591003", "20591004", "20591005", "20591011", "20591012", "20591018", "20591019", "20591025", "20591026", "20591101", "20591102", "20591108", "20591109", "20591115", "20591116", "20591122", "20591123", "20591129", "20591130", "20591206", "20591207", "20591213", "20591214", "20591220", "20591221", "20591227", "20591228", "20600101", "20600102", "20600103", "20600110", "20600111", "20600117", "20600118", "20600124", "20600125", "20600201", "20600202", "20600203", "20600204", "20600205", "20600206", "20600207", "20600214", "20600215", "20600221", "20600222", "20600228", "20600229", "20600306", "20600307", "20600313", "20600314", "20600320", "20600321", "20600327", "20600328", "20600403", "20600404", "20600405", "20600410", "20600411", "20600417", "20600418", "20600424", "20600425", "20600501", "20600502", "20600503", "20600508", "20600509", "20600515", "20600516", "20600522", "20600523", "20600529", "20600530", "20600603", "20600604", "20600605", "20600612", "20600613", "20600619", "20600620", "20600626", "20600627", "20600703", "20600704", "20600710", "20600711", "20600717", "20600718", "20600724", "20600725", "20600731", "20600801", "20600807", "20600808", "20600814", "20600815", "20600821", "20600822", "20600828", "20600829", "20600904", "20600905", "20600909", "20600911", "20600912", "20600918", "20600919", "20601001", "20601002", "20601003", "20601004", "20601005", "20601006", "20601007", "20601010", "20601016", "20601017", "20601023", "20601024", "20601030", "20601031", "20601106", "20601107", "20601113", "20601114", "20601120", "20601121", "20601127", "20601128", "20601204", "20601205", "20601211", "20601212", "20601218", "20601219", "20601225", "20601226", "20610101", "20610102", "20610103", "20610108", "20610109", "20610120", "20610121", "20610122", "20610123", "20610124", "20610125", "20610126", "20610129", "20610130", "20610205", "20610206", "20610212", "20610213", "20610219", "20610220", "20610226", "20610227", "20610305", "20610306", "20610312", "20610313", "20610319", "20610320", "20610326", "20610327", "20610402", "20610403", "20610404", "20610409", "20610410", "20610416", "20610417", "20610423", "20610424", "20610430", "20610501", "20610502", "20610507", "20610508", "20610514", "20610515", "20610521", "20610522", "20610528", "20610529", "20610604", "20610605", "20610611", "20610612", "20610620", "20610621", "20610622", "20610625", "20610626", "20610702", "20610703", "20610709", "20610710", "20610716", "20610717", "20610723", "20610724", "20610730", "20610731", "20610806", "20610807", "20610813", "20610814", "20610820", "20610821", "20610827", "20610828", "20610903", "20610904", "20610910", "20610911", "20610917", "20610918", "20610924", "20610928", "20610929", "20610930", "20611001", "20611002", "20611003", "20611004", "20611005", "20611006", "20611007", "20611015", "20611016", "20611022", "20611023", "20611029", "20611030", "20611105", "20611106", "20611112", "20611113", "20611119", "20611120", "20611126", "20611127", "20611203", "20611204", "20611210", "20611211", "20611217", "20611218", "20611224", "20611225" ], + "MonthsToExclude": [] + }, + "BEL": { + "InheritedCalendar": [], + "Name": "BEL", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20080101", "20080102", "20080107", "20080215", "20080425", "20080428", "20080501", "20080502", "20090101", "20090102", "20090107", "20090216", "20090417", "20090420", "20090501", "20100101", "20100107", "20100215", "20100402", "20100405", "20100503", "20110103", "20110107", "20110215", "20110422", "20110425", "20110502", "20110503", "20120102", "20120103", "20120215", "20120216", "20120413", "20120416", "20120501", "20120502", "20121112", "20130101", "20130102", "20130107", "20130215", "20130501", "20130502", "20130503", "20130506", "20131111", "20140101", "20140102", "20140107", "20140217", "20140418", "20140421", "20140501", "20140502", "20141111", "20150101", "20150102", "20150107", "20150216", "20150217", "20150410", "20150413", "20150501", "20151111", "20160101", "20160107", "20160215", "20160216", "20160429", "20160502", "20160503", "20161111", "20170102", "20170103", "20170215", "20170216", "20170414", "20170417", "20170501", "20170502", "20180101", "20180102", "20180215", "20180216", "20180406", "20180409", "20180501", "20180502", "20181112", "20190101", "20190102", "20190107", "20190215", "20190426", "20190429", "20190501", "20190502", "20191111", "20200101", "20200102", "20200107", "20200217", "20200417", "20200420", "20200501", "20201111", "20210101", "20210107", "20210215", "20210216", "20210430", "20210503", "20211111", "20220103", "20220107", "20220215", "20220216", "20220422", "20220425", "20220502", "20220503", "20221111", "20230102", "20230103", "20230215", "20230216", "20230414", "20230417", "20230501", "20230502", "20240101", "20240102", "20240215", "20240216", "20240501", "20240502", "20240503", "20240506", "20241111", "20250101", "20250102", "20250107", "20250217", "20250418", "20250421", "20250501", "20250502", "20251111", "20260101", "20260102", "20260107", "20260216", "20260217", "20260410", "20260413", "20260501", "20261111", "20270101", "20270107", "20270215", "20270216", "20270430", "20270503", "20271111", "20280103", "20280107", "20280215", "20280216", "20280414", "20280417", "20280501", "20280502", "20290101", "20290102", "20290215", "20290216", "20290406", "20290409", "20290501", "20290502", "20291112", "20300101", "20300102", "20300107", "20300215", "20300426", "20300429", "20300501", "20300502", "20301111", "20310101", "20310102", "20310107", "20310217", "20310411", "20310414", "20310501", "20310502", "20311111", "20320101", "20320102", "20320107", "20320216", "20320217", "20320430", "20320503", "20321111", "20330103", "20330107", "20330215", "20330216", "20330422", "20330425", "20330502", "20330503", "20331111", "20340102", "20340103", "20340215", "20340216", "20340407", "20340410", "20340501", "20340502", "20350101", "20350102", "20350215", "20350216", "20350427", "20350430", "20350501", "20350502", "20351112", "20360101", "20360102", "20360107", "20360215", "20360418", "20360421", "20360501", "20360502", "20361111", "20370101", "20370102", "20370107", "20370216", "20370217", "20370403", "20370406", "20370501", "20371111", "20380101", "20380107", "20380215", "20380216", "20380423", "20380426", "20380503", "20381111", "20390103", "20390107", "20390215", "20390216", "20390415", "20390418", "20390502", "20390503", "20391111", "20400102", "20400103", "20400215", "20400216", "20400501", "20400502", "20400504", "20400507", "20401112", "20410101", "20410102", "20410107", "20410215", "20410419", "20410422", "20410501", "20410502", "20411111", "20420101", "20420102", "20420107", "20420217", "20420411", "20420414", "20420501", "20420502", "20421111", "20430101", "20430102", "20430107", "20430216", "20430217", "20430501", "20430504", "20431111", "20440101", "20440107", "20440215", "20440216", "20440422", "20440425", "20440502", "20440503", "20441111", "20450102", "20450103", "20450215", "20450216", "20450407", "20450410", "20450501", "20450502", "20460101", "20460102", "20460215", "20460216", "20460427", "20460430", "20460501", "20460502", "20461112", "20470101", "20470102", "20470107", "20470215", "20470419", "20470422", "20470501", "20470502", "20471111", "20480101", "20480102", "20480107", "20480217", "20480403", "20480406", "20480501", "20481111", "20490101", "20490107", "20490215", "20490216", "20490423", "20490426", "20490503", "20491111", "20500103", "20500107", "20500215", "20500216", "20500415", "20500418", "20500502", "20500503", "20501111", "20510102", "20510103", "20510215", "20510216", "20510501", "20510502", "20510505", "20510508", "20520101", "20520102", "20520215", "20520216", "20520419", "20520422", "20520501", "20520502", "20521111", "20530101", "20530102", "20530107", "20530217", "20530411", "20530414", "20530501", "20530502", "20531111", "20540101", "20540102", "20540107", "20540216", "20540217", "20540501", "20540504", "20541111", "20550101", "20550107", "20550215", "20550216", "20550416", "20550419", "20550503", "20551111", "20560103", "20560107", "20560215", "20560216", "20560407", "20560410", "20560501", "20560502", "20570101", "20570102", "20570215", "20570216", "20570427", "20570430", "20570501", "20570502", "20571112", "20580101", "20580102", "20580107", "20580215", "20580412", "20580415", "20580501", "20580502", "20581111", "20590101", "20590102", "20590107", "20590217", "20590501", "20590502", "20590505", "20591111", "20600101", "20600102", "20600107", "20600216", "20600217", "20600423", "20600426", "20600503", "20601111", "20610103", "20610107", "20610215", "20610216", "20610408", "20610411", "20610502", "20610503", "20611111" ], + "MonthsToExclude": [] + }, + "BRA": { + "InheritedCalendar": [], + "Name": "BRA", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19990829", "19990901", "19990915", "19991031", "19991101", "19991224", "19991225", "19991226", "20000101", "20000106", "20000421", "20000424", "20000501", "20000508", "20000705", "20000829", "20000901", "20000915", "20001101", "20001224", "20001225", "20001226", "20010101", "20010413", "20010416", "20010501", "20010601", "20010705", "20010829", "20011225", "20011226", "20020101", "20020106", "20020329", "20020331", "20020401", "20020501", "20020508", "20020829", "20021224", "20021225", "20021226", "20030106", "20030418", "20030420", "20030421", "20030501", "20030508", "20030705", "20030829", "20030901", "20030915", "20031117", "20031224", "20031225", "20031226", "20040101", "20040106", "20040409", "20040411", "20040412", "20040501", "20040705", "20040829", "20040901", "20040915", "20041101", "20041117", "20041224", "20041225", "20050101", "20050106", "20050325", "20050327", "20050328", "20050501", "20050705", "20050829", "20050901", "20050915", "20051101", "20051117", "20051224", "20051225", "20051226", "20060101", "20060106", "20060414", "20060416", "20060417", "20060501", "20060508", "20060705", "20060829", "20060901", "20060915", "20061101", "20061117", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070508", "20070705", "20070829", "20071101", "20071224", "20071225", "20071226", "20080101", "20080321", "20080324", "20080501", "20080508", "20080829", "20080901", "20080915", "20081117", "20081224", "20081225", "20081226", "20090101", "20090106", "20090410", "20090413", "20090501", "20090508", "20090901", "20090915", "20091117", "20091224", "20091225", "20100101", "20100106", "20100402", "20100405", "20100705", "20100901", "20100915", "20101101", "20101117", "20101224", "20110106", "20110422", "20110425", "20110705", "20110829", "20110901", "20110915", "20111101", "20111117", "20111226", "20120106", "20120406", "20120409", "20120501", "20120508", "20120705", "20120829", "20121101", "20121224", "20121225", "20121226", "20130101", "20130329", "20130401", "20130501", "20130508", "20130705", "20130829", "20131101", "20131224", "20131225", "20131226", "20140101", "20140106", "20140418", "20140421", "20140501", "20140508", "20140829", "20140901", "20140915", "20141117", "20141224", "20141225", "20141226", "20150101", "20150106", "20150403", "20150406", "20150501", "20150508", "20150901", "20150915", "20151117", "20151224", "20151225", "20160101", "20160106", "20160325", "20160328", "20160705", "20160829", "20160901", "20160915", "20161101", "20161117", "20161226", "20170106", "20170414", "20170417", "20170501", "20170508", "20170705", "20170829", "20170901", "20170915", "20171101", "20171117", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180508", "20180705", "20180829", "20181101", "20181224", "20181225", "20181226", "20190101", "20190419", "20190422", "20190501", "20190508", "20190705", "20190829", "20191101", "20191224", "20191225", "20191226", "20200101", "20200106", "20200410", "20200413", "20200501", "20200508", "20200901", "20200915", "20201117", "20201224", "20201225", "20210101", "20210106", "20210402", "20210405", "20210705", "20210901", "20210915", "20211101", "20211117", "20211224", "20220106", "20220415", "20220418", "20220705", "20220829", "20220901", "20220915", "20221101", "20221117", "20221226", "20230106", "20230407", "20230410", "20230501", "20230508", "20230705", "20230829", "20230901", "20230915", "20231101", "20231117", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20240508", "20240705", "20240829", "20241101", "20241224", "20241225", "20241226", "20250101", "20250106", "20250418", "20250421", "20250501", "20250508", "20250829", "20250901", "20250915", "20251117", "20251224", "20251225", "20251226", "20260101", "20260106", "20260403", "20260406", "20260501", "20260508", "20260901", "20260915", "20261117", "20261224", "20261225", "20270101", "20270106", "20270326", "20270329", "20270705", "20270901", "20270915", "20271101", "20271117", "20271224", "20280106", "20280414", "20280417", "20280501", "20280508", "20280705", "20280829", "20280901", "20280915", "20281101", "20281117", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20290508", "20290705", "20290829", "20291101", "20291224", "20291225", "20291226", "20300101", "20300419", "20300422", "20300501", "20300508", "20300705", "20300829", "20301101", "20301224", "20301225", "20301226", "20310101", "20310106", "20310411", "20310414", "20310501", "20310508", "20310829", "20310901", "20310915", "20311117", "20311224", "20311225", "20311226", "20320101", "20320106", "20320326", "20320329", "20320705", "20320901", "20320915", "20321101", "20321117", "20321224", "20330106", "20330415", "20330418", "20330705", "20330829", "20330901", "20330915", "20331101", "20331117", "20331226", "20340106", "20340407", "20340410", "20340501", "20340508", "20340705", "20340829", "20340901", "20340915", "20341101", "20341117", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20350508", "20350705", "20350829", "20351101", "20351224", "20351225", "20351226", "20360101", "20360411", "20360414", "20360501", "20360508", "20360829", "20360901", "20360915", "20361117", "20361224", "20361225", "20361226", "20370101", "20370106", "20370403", "20370406", "20370501", "20370508", "20370901", "20370915", "20371117", "20371224", "20371225", "20380101", "20380106", "20380423", "20380426", "20380705", "20380901", "20380915", "20381101", "20381117", "20381224", "20390106", "20390408", "20390411", "20390705", "20390829", "20390901", "20390915", "20391101", "20391117", "20391226", "20400106", "20400330", "20400402", "20400501", "20400508", "20400705", "20400829", "20401101", "20401224", "20401225", "20401226", "20410101", "20410419", "20410422", "20410501", "20410508", "20410705", "20410829", "20411101", "20411224", "20411225", "20411226", "20420101", "20420106", "20420404", "20420407", "20420501", "20420508", "20420829", "20420901", "20420915", "20421117", "20421224", "20421225", "20421226", "20430101", "20430106", "20430327", "20430330", "20430501", "20430508", "20430901", "20430915", "20431117", "20431224", "20431225", "20440101", "20440106", "20440415", "20440418", "20440705", "20440829", "20440901", "20440915", "20441101", "20441117", "20441226", "20450106", "20450407", "20450410", "20450501", "20450508", "20450705", "20450829", "20450901", "20450915", "20451101", "20451117", "20451225", "20451226", "20460101", "20460323", "20460326", "20460501", "20460508", "20460705", "20460829", "20461101", "20461224", "20461225", "20461226", "20470101", "20470412", "20470415", "20470501", "20470508", "20470705", "20470829", "20471101", "20471224", "20471225", "20471226", "20480101", "20480106", "20480403", "20480406", "20480501", "20480508", "20480901", "20480915", "20481117", "20481224", "20481225", "20490101", "20490106", "20490416", "20490419", "20490705", "20490901", "20490915", "20491101", "20491117", "20491224", "20500106", "20500408", "20500411", "20500705", "20500829", "20500901", "20500915", "20501101", "20501117", "20501226", "20510106", "20510331", "20510403", "20510501", "20510508", "20510705", "20510829", "20510901", "20510915", "20511101", "20511117", "20511225", "20511226", "20520101", "20520419", "20520422", "20520501", "20520508", "20520705", "20520829", "20521101", "20521224", "20521225", "20521226", "20530101", "20530106", "20530404", "20530407", "20530501", "20530508", "20530829", "20530901", "20530915", "20531117", "20531224", "20531225", "20531226", "20540101", "20540106", "20540327", "20540330", "20540501", "20540508", "20540901", "20540915", "20541117", "20541224", "20541225", "20550101", "20550106", "20550416", "20550419", "20550705", "20550901", "20550915", "20551101", "20551117", "20551224", "20560106", "20560331", "20560403", "20560501", "20560508", "20560705", "20560829", "20560901", "20560915", "20561101", "20561117", "20561225", "20561226", "20570101", "20570420", "20570423", "20570501", "20570508", "20570705", "20570829", "20571101", "20571224", "20571225", "20571226", "20580101", "20580412", "20580415", "20580501", "20580508", "20580705", "20580829", "20581101", "20581224", "20581225", "20581226", "20590101", "20590106", "20590328", "20590331", "20590501", "20590508", "20590829", "20590901", "20590915", "20591117", "20591224", "20591225", "20591226", "20600101", "20600106", "20600416", "20600419", "20600705", "20600901", "20600915", "20601101", "20601117", "20601224", "20610106", "20610408", "20610411", "20610705", "20610829", "20610901", "20610915", "20611101", "20611117", "20611226" ], + "MonthsToExclude": [] + }, + "BRU": { + "InheritedCalendar": [], + "Name": "BRU", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880404", "19880502", "19880512", "19880513", "19880523", "19880721", "19880815", "19881101", "19881111", "19881226", "19890327", "19890501", "19890504", "19890505", "19890515", "19890721", "19890815", "19891101", "19891113", "19891225", "19891226", "19900101", "19900416", "19900501", "19900524", "19900604", "19900815", "19901101", "19901225", "19910101", "19910401", "19910501", "19910509", "19910520", "19910815", "19911101", "19911111", "19911225", "19911226", "19920101", "19920420", "19920501", "19920528", "19920608", "19920721", "19921102", "19921111", "19921225", "19930101", "19930412", "19930520", "19930531", "19930721", "19931101", "19931111", "19940404", "19940502", "19940512", "19940513", "19940523", "19940721", "19940815", "19940927", "19941101", "19941111", "19941226", "19950417", "19950501", "19950525", "19950605", "19950721", "19950815", "19951101", "19951225", "19951226", "19960101", "19960408", "19960501", "19960516", "19960517", "19960527", "19960815", "19960816", "19961101", "19961111", "19961225", "19961226", "19970101", "19970331", "19970501", "19970508", "19970509", "19970519", "19970721", "19970815", "19971103", "19971111", "19971225", "19971226", "19980101", "19980413", "19980501", "19980521", "19980601", "19980721", "19981102", "19981111", "19981225", "19990101", "19990402", "19990405", "19990513", "19990514", "19990524", "19990721", "19990816", "19991101", "19991111", "19991231", "20000424", "20000501", "20000601", "20000612", "20000721", "20000815", "20001101", "20001113", "20001225", "20001226", "20010101", "20010416", "20010501", "20010524", "20010525", "20010604", "20010723", "20010815", "20011101", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020501", "20020509", "20020510", "20020520", "20020815", "20021101", "20021111", "20021225", "20021226", "20030101", "20030418", "20030421", "20030501", "20030529", "20030530", "20030609", "20030721", "20030815", "20031111", "20031225", "20031226", "20040101", "20040409", "20040412", "20040520", "20040521", "20040531", "20040721", "20040816", "20041101", "20041111", "20050325", "20050328", "20050505", "20050506", "20050516", "20050721", "20050815", "20051101", "20051111", "20051225", "20051226", "20060414", "20060417", "20060501", "20060525", "20060526", "20060605", "20060721", "20060815", "20061101", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070517", "20070518", "20070528", "20070815", "20071101", "20071225", "20071226", "20080101", "20080321", "20080324", "20080501", "20080502", "20080512", "20080721", "20080815", "20081111", "20081225", "20081226", "20090101", "20090410", "20090413", "20090501", "20090521", "20090522", "20090601", "20090721", "20091111", "20091225", "20100101", "20100402", "20100405", "20100513", "20100514", "20100524", "20100721", "20101101", "20101111", "20110422", "20110425", "20110602", "20110603", "20110613", "20110721", "20110815", "20111101", "20111111", "20111226", "20120406", "20120409", "20120501", "20120517", "20120518", "20120528", "20120815", "20121101", "20121225", "20121226", "20130101", "20130329", "20130401", "20130501", "20130509", "20130510", "20130520", "20130815", "20131101", "20131111", "20131225", "20131226", "20140101", "20140418", "20140421", "20140501", "20140529", "20140530", "20140609", "20140721", "20140815", "20141111", "20141225", "20141226", "20150101", "20150403", "20150406", "20150501", "20150514", "20150515", "20150525", "20150721", "20151111", "20151225", "20160101", "20160325", "20160328", "20160505", "20160506", "20160516", "20160721", "20160815", "20161101", "20161111", "20161226", "20170414", "20170417", "20170501", "20170525", "20170526", "20170605", "20170721", "20170815", "20171101", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180510", "20180511", "20180521", "20180815", "20181101", "20181225", "20181226", "20190101", "20190419", "20190422", "20190501", "20190530", "20190531", "20190610", "20190815", "20191101", "20191111", "20191225", "20191226", "20200101", "20200410", "20200413", "20200501", "20200521", "20200522", "20200601", "20200721", "20201111", "20201225", "20210101", "20210402", "20210405", "20210513", "20210514", "20210524", "20210721", "20211101", "20211111", "20220415", "20220418", "20220526", "20220527", "20220606", "20220721", "20220815", "20221101", "20221111", "20221226", "20230407", "20230410", "20230501", "20230518", "20230519", "20230529", "20230721", "20230815", "20231101", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20240509", "20240510", "20240520", "20240815", "20241101", "20241111", "20241225", "20241226", "20250101", "20250418", "20250421", "20250501", "20250529", "20250530", "20250609", "20250721", "20250815", "20251111", "20251225", "20251226", "20260101", "20260403", "20260406", "20260501", "20260514", "20260515", "20260525", "20260721", "20261111", "20261225", "20270101", "20270326", "20270329", "20270506", "20270507", "20270517", "20270721", "20271101", "20271111", "20280414", "20280417", "20280501", "20280525", "20280526", "20280605", "20280721", "20280815", "20281101", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20290510", "20290511", "20290521", "20290815", "20291101", "20291225", "20291226", "20300101", "20300419", "20300422", "20300501", "20300530", "20300531", "20300610", "20300815", "20301101", "20301111", "20301225", "20301226", "20310101", "20310411", "20310414", "20310501", "20310522", "20310523", "20310602", "20310721", "20310815", "20311111", "20311225", "20311226", "20320101", "20320326", "20320329", "20320506", "20320507", "20320517", "20320721", "20321101", "20321111", "20330415", "20330418", "20330526", "20330527", "20330606", "20330721", "20330815", "20331101", "20331111", "20331226", "20340407", "20340410", "20340501", "20340518", "20340519", "20340529", "20340721", "20340815", "20341101", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20350503", "20350504", "20350514", "20350815", "20351101", "20351225", "20351226", "20360101", "20360411", "20360414", "20360501", "20360522", "20360523", "20360602", "20360721", "20360815", "20361111", "20361225", "20361226", "20370101", "20370403", "20370406", "20370501", "20370514", "20370515", "20370525", "20370721", "20371111", "20371225", "20380101", "20380423", "20380426", "20380603", "20380604", "20380614", "20380721", "20381101", "20381111", "20390408", "20390411", "20390519", "20390520", "20390530", "20390721", "20390815", "20391101", "20391111", "20391226", "20400330", "20400402", "20400501", "20400510", "20400511", "20400521", "20400815", "20401101", "20401225", "20401226", "20410101", "20410419", "20410422", "20410501", "20410530", "20410531", "20410610", "20410815", "20411101", "20411111", "20411225", "20411226", "20420101", "20420404", "20420407", "20420501", "20420515", "20420516", "20420526", "20420721", "20420815", "20421111", "20421225", "20421226", "20430101", "20430327", "20430330", "20430501", "20430507", "20430508", "20430518", "20430721", "20431111", "20431225", "20440101", "20440415", "20440418", "20440526", "20440527", "20440606", "20440721", "20440815", "20441101", "20441111", "20441226", "20450407", "20450410", "20450501", "20450518", "20450519", "20450529", "20450721", "20450815", "20451101", "20451225", "20451226", "20460101", "20460323", "20460326", "20460501", "20460503", "20460504", "20460514", "20460815", "20461101", "20461225", "20461226", "20470101", "20470412", "20470415", "20470501", "20470523", "20470524", "20470603", "20470815", "20471101", "20471111", "20471225", "20471226", "20480101", "20480403", "20480406", "20480501", "20480514", "20480515", "20480525", "20480721", "20481111", "20481225", "20490101", "20490416", "20490419", "20490527", "20490528", "20490607", "20490721", "20491101", "20491111", "20500408", "20500411", "20500519", "20500520", "20500530", "20500721", "20500815", "20501101", "20501111", "20501226", "20510331", "20510403", "20510501", "20510511", "20510512", "20510522", "20510721", "20510815", "20511101", "20511225", "20511226", "20520101", "20520419", "20520422", "20520501", "20520530", "20520531", "20520610", "20520815", "20521101", "20521111", "20521225", "20521226", "20530101", "20530404", "20530407", "20530501", "20530515", "20530516", "20530526", "20530721", "20530815", "20531111", "20531225", "20531226", "20540101", "20540327", "20540330", "20540501", "20540507", "20540508", "20540518", "20540721", "20541111", "20541225", "20550101", "20550416", "20550419", "20550527", "20550528", "20550607", "20550721", "20551101", "20551111", "20560331", "20560403", "20560501", "20560511", "20560512", "20560522", "20560721", "20560815", "20561101", "20561225", "20561226", "20570101", "20570420", "20570423", "20570501", "20570531", "20570601", "20570611", "20570815", "20571101", "20571225", "20571226", "20580101", "20580412", "20580415", "20580501", "20580523", "20580524", "20580603", "20580815", "20581101", "20581111", "20581225", "20581226", "20590101", "20590328", "20590331", "20590501", "20590508", "20590509", "20590519", "20590721", "20590815", "20591111", "20591225", "20591226", "20600101", "20600416", "20600419", "20600527", "20600528", "20600607", "20600721", "20601101", "20601111", "20610408", "20610411", "20610519", "20610520", "20610530", "20610721", "20610815", "20611101", "20611111", "20611226" ], + "MonthsToExclude": [] + }, + "BUC": { + "InheritedCalendar": [], + "Name": "BUC", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20060102", "20060424", "20060501", "20061201", "20061225", "20061226", "20080101", "20080102", "20080428", "20080501", "20081201", "20081225", "20081226", "20090101", "20090102", "20090420", "20090501", "20090608", "20091201", "20091225", "20100101", "20100405", "20100524", "20101201", "20110425", "20110613", "20110815", "20111201", "20111226", "20120102", "20120103", "20120416", "20120501", "20120604", "20120815", "20121225", "20121226", "20130101", "20130102", "20130501", "20130506", "20130624", "20130815", "20131225", "20131226", "20140101", "20140102", "20140103", "20140421", "20140501", "20140609", "20140815", "20141201", "20141225", "20141226", "20150101", "20150102", "20150413", "20150501", "20150601", "20151201", "20151225", "20160101", "20160502", "20160620", "20160815", "20161201", "20161226", "20170102", "20170417", "20170501", "20170605", "20170815", "20171201", "20171225", "20171226", "20180101", "20180102", "20180409", "20180501", "20180528", "20180815", "20181225", "20181226", "20190101", "20190102", "20190429", "20190501", "20190617", "20190815", "20191225", "20191226", "20200101", "20200102", "20200103", "20200420", "20200501", "20200608", "20201201", "20201225", "20210101", "20210503", "20210621", "20211201", "20220425", "20220613", "20220815", "20221201", "20221226", "20230102", "20230417", "20230501", "20230605", "20230815", "20231201", "20231225", "20231226", "20240101", "20240102", "20240501", "20240506", "20240624", "20240815", "20241225", "20241226", "20250101", "20250102", "20250103", "20250421", "20250501", "20250609", "20250815", "20251201", "20251225", "20251226", "20260101", "20260102", "20260413", "20260501", "20260601", "20261201", "20261225", "20270101", "20270503", "20270621", "20271201", "20280417", "20280501", "20280605", "20280815", "20281201", "20281225", "20281226", "20290101", "20290102", "20290409", "20290501", "20290528", "20290815", "20291225", "20291226", "20300101", "20300102", "20300429", "20300501", "20300617", "20300815", "20301225", "20301226", "20310101", "20310102", "20310103", "20310414", "20310501", "20310602", "20310815", "20311201", "20311225", "20311226", "20320101", "20320102", "20320503", "20320621", "20321201", "20330425", "20330613", "20330815", "20331201", "20331226", "20340102", "20340410", "20340501", "20340529", "20340815", "20341201", "20341225", "20341226", "20350101", "20350102", "20350430", "20350501", "20350618", "20350815", "20351225", "20351226", "20360101", "20360102", "20360421", "20360501", "20360609", "20360815", "20361201", "20361225", "20361226", "20370101", "20370102", "20370406", "20370501", "20370525", "20371201", "20371225", "20380101", "20380426", "20380614", "20381201", "20390418", "20390606", "20390815", "20391201", "20391226", "20400102", "20400501", "20400507", "20400625", "20400815", "20401225", "20401226", "20410101", "20410102", "20410422", "20410501", "20410610", "20410815", "20411225", "20411226", "20420101", "20420102", "20420103", "20420414", "20420501", "20420602", "20420815", "20421201", "20421225", "20421226", "20430101", "20430102", "20430501", "20430504", "20430622", "20431201", "20431225", "20440101", "20440425", "20440613", "20440815", "20441201", "20441226", "20450102", "20450410", "20450501", "20450529", "20450815", "20451201", "20451225", "20451226", "20460101", "20460102", "20460430", "20460501", "20460618", "20460815", "20461225", "20461226", "20470101", "20470102", "20470422", "20470501", "20470610", "20470815", "20471225", "20471226", "20480101", "20480102", "20480103", "20480406", "20480501", "20480525", "20481201", "20481225", "20490101", "20490426", "20490614", "20491201", "20500418", "20500606", "20500815", "20501201", "20501226", "20510102", "20510501", "20510508", "20510626", "20510815", "20511201", "20511225", "20511226", "20520101", "20520102", "20520422", "20520501", "20520610", "20520815", "20521225", "20521226", "20530101", "20530102", "20530103", "20530414", "20530501", "20530602", "20530815", "20531201", "20531225", "20531226", "20540101", "20540102", "20540501", "20540504", "20540622", "20541201", "20541225", "20550101", "20550419", "20550607", "20551201", "20560410", "20560501", "20560529", "20560815", "20561201", "20561225", "20561226", "20570101", "20570102", "20570430", "20570501", "20570618", "20570815", "20571225", "20571226", "20580101", "20580102", "20580415", "20580501", "20580603", "20580815", "20581225", "20581226", "20590101", "20590102", "20590103", "20590501", "20590505", "20590623", "20590815", "20591201", "20591225", "20591226", "20600101", "20600102", "20600426", "20600614", "20601201", "20610411", "20610530", "20610815", "20611201", "20611226" ], + "MonthsToExclude": [] + }, + "BUD": { + "InheritedCalendar": [], + "Name": "BUD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19800501", "19800820", "19801023", "19801225", "19801226", "19810101", "19810501", "19810820", "19811023", "19811225", "19820101", "19820315", "19820820", "19830315", "19831226", "19840315", "19840501", "19840820", "19841023", "19841225", "19841226", "19850101", "19850315", "19850501", "19850820", "19851023", "19851225", "19851226", "19860101", "19860501", "19860820", "19861023", "19861225", "19861226", "19870101", "19870501", "19870820", "19871023", "19871225", "19880101", "19880315", "19881226", "19890315", "19890501", "19891023", "19891225", "19891226", "19900101", "19900315", "19900501", "19900820", "19901023", "19901225", "19901226", "19910101", "19910315", "19910501", "19910820", "19911023", "19911225", "19911226", "19920101", "19920501", "19920820", "19921023", "19921225", "19930101", "19930315", "19930820", "19940315", "19941226", "19950315", "19950501", "19951023", "19951225", "19951226", "19960101", "19960315", "19960501", "19960820", "19961023", "19961225", "19961226", "19970101", "19970501", "19970820", "19971023", "19971225", "19971226", "19980101", "19980413", "19980501", "19980601", "19980820", "19981023", "19981225", "19990101", "19990315", "19990405", "19990524", "19990820", "20000315", "20000424", "20000501", "20000612", "20001023", "20001101", "20001225", "20001226", "20010101", "20010315", "20010416", "20010501", "20010604", "20010820", "20011023", "20011225", "20011226", "20020101", "20020315", "20020401", "20020501", "20020520", "20020819", "20020820", "20021023", "20021101", "20021224", "20021225", "20021226", "20030101", "20030421", "20030501", "20030502", "20030609", "20030820", "20031023", "20031024", "20031224", "20031225", "20031226", "20040101", "20040102", "20040315", "20040412", "20040531", "20040820", "20041101", "20041224", "20050314", "20050315", "20050328", "20050516", "20051031", "20051101", "20051226", "20060315", "20060417", "20060501", "20060605", "20061023", "20061101", "20061225", "20061226", "20070101", "20070315", "20070316", "20070409", "20070430", "20070501", "20070528", "20070820", "20071022", "20071023", "20071101", "20071102", "20071224", "20071225", "20071226", "20071231", "20080101", "20080324", "20080501", "20080502", "20080512", "20080820", "20081023", "20081024", "20081224", "20081225", "20081226", "20090101", "20090102", "20090413", "20090501", "20090601", "20090820", "20090821", "20091023", "20091224", "20091225", "20100101", "20100315", "20100405", "20100524", "20100820", "20101101", "20101224", "20110314", "20110315", "20110425", "20110613", "20111031", "20111101", "20111226", "20120315", "20120316", "20120409", "20120430", "20120501", "20120528", "20120820", "20121022", "20121023", "20121101", "20121102", "20121224", "20121225", "20121226", "20130101", "20130315", "20130401", "20130501", "20130520", "20130819", "20130820", "20131023", "20131101", "20131224", "20131225", "20131226", "20140101", "20140421", "20140501", "20140502", "20140609", "20140820", "20141023", "20141024", "20141224", "20141225", "20141226", "20150101", "20150102", "20150406", "20150501", "20150525", "20150820", "20150821", "20151023", "20151224", "20151225", "20160101", "20160314", "20160315", "20160328", "20160516", "20161031", "20161101", "20161226", "20170315", "20170417", "20170501", "20170605", "20171023", "20171101", "20171225", "20171226", "20180101", "20180315", "20180316", "20180402", "20180430", "20180501", "20180521", "20180820", "20181022", "20181023", "20181101", "20181102", "20181224", "20181225", "20181226", "20190101", "20190315", "20190422", "20190501", "20190610", "20190819", "20190820", "20191023", "20191101", "20191224", "20191225", "20191226", "20200101", "20200413", "20200501", "20200601", "20200820", "20200821", "20201023", "20201224", "20201225", "20210101", "20210315", "20210405", "20210524", "20210820", "20211101", "20211224", "20220314", "20220315", "20220418", "20220606", "20221031", "20221101", "20221226", "20230315", "20230410", "20230501", "20230529", "20231023", "20231101", "20231225", "20231226", "20240101", "20240315", "20240401", "20240501", "20240520", "20240819", "20240820", "20241023", "20241101", "20241224", "20241225", "20241226", "20250101", "20250421", "20250501", "20250502", "20250609", "20250820", "20251023", "20251024", "20251224", "20251225", "20251226", "20260101", "20260102", "20260406", "20260501", "20260525", "20260820", "20260821", "20261023", "20261224", "20261225", "20270101", "20270315", "20270329", "20270517", "20270820", "20271101", "20271224", "20280315", "20280417", "20280501", "20280605", "20281023", "20281101", "20281225", "20281226", "20290101", "20290315", "20290316", "20290402", "20290430", "20290501", "20290521", "20290820", "20291022", "20291023", "20291101", "20291102", "20291224", "20291225", "20291226", "20300101", "20300315", "20300422", "20300501", "20300610", "20300819", "20300820", "20301023", "20301101", "20301224", "20301225", "20301226", "20310101", "20310414", "20310501", "20310502", "20310602", "20310820", "20311023", "20311024", "20311224", "20311225", "20311226", "20320101", "20320102", "20320315", "20320329", "20320517", "20320820", "20321101", "20321224", "20330314", "20330315", "20330418", "20330606", "20331031", "20331101", "20331226", "20340315", "20340410", "20340501", "20340529", "20341023", "20341101", "20341225", "20341226", "20350101", "20350315", "20350316", "20350326", "20350430", "20350501", "20350514", "20350820", "20351022", "20351023", "20351101", "20351102", "20351224", "20351225", "20351226", "20360101", "20360414", "20360501", "20360502", "20360602", "20360820", "20361023", "20361024", "20361224", "20361225", "20361226", "20370101", "20370102", "20370406", "20370501", "20370525", "20370820", "20370821", "20371023", "20371224", "20371225", "20380101", "20380315", "20380426", "20380614", "20380820", "20381101", "20381224", "20390314", "20390315", "20390411", "20390530", "20391031", "20391101", "20391226", "20400315", "20400316", "20400402", "20400430", "20400501", "20400521", "20400820", "20401022", "20401023", "20401101", "20401102", "20401224", "20401225", "20401226", "20410101", "20410315", "20410422", "20410501", "20410610", "20410819", "20410820", "20411023", "20411101", "20411224", "20411225", "20411226", "20420101", "20420407", "20420501", "20420502", "20420526", "20420820", "20421023", "20421024", "20421224", "20421225", "20421226", "20430101", "20430102", "20430330", "20430501", "20430518", "20430820", "20430821", "20431023", "20431224", "20431225", "20440101", "20440314", "20440315", "20440418", "20440606", "20441031", "20441101", "20441226", "20450315", "20450410", "20450501", "20450529", "20451023", "20451101", "20451225", "20451226", "20460101", "20460315", "20460316", "20460326", "20460430", "20460501", "20460514", "20460820", "20461022", "20461023", "20461101", "20461102", "20461224", "20461225", "20461226", "20470101", "20470315", "20470415", "20470501", "20470603", "20470819", "20470820", "20471023", "20471101", "20471224", "20471225", "20471226", "20480101", "20480406", "20480501", "20480525", "20480820", "20480821", "20481023", "20481224", "20481225", "20490101", "20490315", "20490419", "20490607", "20490820", "20491101", "20491224", "20500314", "20500315", "20500411", "20500530", "20501031", "20501101", "20501226", "20510315", "20510403", "20510501", "20510522", "20511023", "20511101", "20511225", "20511226", "20520101", "20520315", "20520422", "20520501", "20520610", "20520819", "20520820", "20521023", "20521101", "20521224", "20521225", "20521226", "20530101", "20530407", "20530501", "20530502", "20530526", "20530820", "20531023", "20531024", "20531224", "20531225", "20531226", "20540101", "20540102", "20540330", "20540501", "20540518", "20540820", "20540821", "20541023", "20541224", "20541225", "20550101", "20550315", "20550419", "20550607", "20550820", "20551101", "20551224", "20560315", "20560403", "20560501", "20560522", "20561023", "20561101", "20561225", "20561226", "20570101", "20570315", "20570316", "20570423", "20570430", "20570501", "20570611", "20570820", "20571022", "20571023", "20571101", "20571102", "20571224", "20571225", "20571226", "20580101", "20580315", "20580415", "20580501", "20580603", "20580819", "20580820", "20581023", "20581101", "20581224", "20581225", "20581226", "20590101", "20590331", "20590501", "20590502", "20590519", "20590820", "20591023", "20591024", "20591224", "20591225", "20591226", "20600101", "20600102", "20600315", "20600419", "20600607", "20600820", "20601101", "20601224", "20610314", "20610315", "20610411", "20610530", "20611031", "20611101", "20611226", "20620315", "20620501", "20621023", "20621225", "20621226", "20630101", "20630315", "20630501", "20630820", "20631023", "20631225", "20631226", "20640101", "20640501", "20640820", "20641023", "20641225", "20641226", "20650101", "20650501", "20650820", "20651023", "20651225", "20660101", "20660315", "20660820", "20670315", "20671226", "20680315", "20680501", "20680820", "20681023", "20681225", "20681226", "20690101", "20690315", "20690501", "20690820", "20691023", "20691225", "20691226", "20700101", "20700501", "20700820", "20701023", "20701225", "20701226" ], + "MonthsToExclude": [] + }, + "COH": { + "InheritedCalendar": [], + "Name": "COH", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880331", "19880401", "19880404", "19880429", "19880512", "19880523", "19881226", "19890323", "19890324", "19890327", "19890421", "19890504", "19890515", "19890605", "19891225", "19891226", "19900101", "19900412", "19900413", "19900416", "19900511", "19900524", "19900604", "19900605", "19901225", "19901226", "19910101", "19910328", "19910329", "19910401", "19910426", "19910509", "19910520", "19910605", "19911225", "19911226", "19920101", "19920416", "19920417", "19920420", "19920515", "19920528", "19920605", "19920608", "19921225", "19930101", "19930408", "19930409", "19930412", "19930507", "19930520", "19930531", "19931224", "19940331", "19940401", "19940404", "19940429", "19940512", "19940523", "19941226", "19950413", "19950414", "19950417", "19950512", "19950525", "19950605", "19951225", "19951226", "19960101", "19960404", "19960405", "19960408", "19960503", "19960516", "19960527", "19960605", "19961224", "19961225", "19961226", "19970101", "19970327", "19970328", "19970331", "19970425", "19970508", "19970519", "19970605", "19971225", "19971226", "19980101", "19980409", "19980410", "19980413", "19980508", "19980521", "19980601", "19980605", "19981225", "19990101", "19990401", "19990402", "19990405", "19990430", "19990513", "19990524", "19991231", "20000420", "20000421", "20000424", "20000519", "20000601", "20000605", "20000612", "20001225", "20001226", "20010101", "20010412", "20010413", "20010416", "20010511", "20010524", "20010604", "20010605", "20011224", "20011225", "20011226", "20020101", "20020328", "20020329", "20020401", "20020426", "20020509", "20020520", "20020605", "20021224", "20021225", "20021226", "20030101", "20030417", "20030418", "20030421", "20030516", "20030529", "20030605", "20030609", "20031224", "20031225", "20031226", "20031231", "20040101", "20040408", "20040409", "20040412", "20040507", "20040520", "20040531", "20041224", "20041231", "20050101", "20050324", "20050325", "20050328", "20050422", "20050505", "20050516", "20051226", "20060101", "20060413", "20060414", "20060417", "20060512", "20060525", "20060605", "20061225", "20061226", "20070101", "20070405", "20070406", "20070409", "20070504", "20070517", "20070528", "20070605", "20071224", "20071225", "20071226", "20071231", "20080101", "20080320", "20080321", "20080324", "20080418", "20080501", "20080512", "20080605", "20081224", "20081225", "20081226", "20081231", "20090101", "20090409", "20090410", "20090413", "20090508", "20090521", "20090522", "20090601", "20090605", "20091224", "20091225", "20091231", "20100101", "20100401", "20100402", "20100405", "20100430", "20100513", "20100514", "20100524", "20101224", "20101231", "20110421", "20110422", "20110425", "20110520", "20110602", "20110603", "20110613", "20111226", "20120405", "20120406", "20120409", "20120504", "20120517", "20120518", "20120528", "20120605", "20121224", "20121225", "20121226", "20121231", "20130101", "20130328", "20130329", "20130401", "20130426", "20130509", "20130510", "20130520", "20130605", "20131224", "20131225", "20131226", "20131231", "20140101", "20140417", "20140418", "20140421", "20140516", "20140529", "20140530", "20140605", "20140609", "20141224", "20141225", "20141226", "20141231", "20150101", "20150402", "20150403", "20150406", "20150501", "20150514", "20150515", "20150525", "20150605", "20151224", "20151225", "20151231", "20160101", "20160324", "20160325", "20160328", "20160422", "20160505", "20160506", "20160516", "20161226", "20170413", "20170414", "20170417", "20170512", "20170525", "20170526", "20170605", "20171225", "20171226", "20180101", "20180329", "20180330", "20180402", "20180427", "20180510", "20180511", "20180521", "20180605", "20181224", "20181225", "20181226", "20181231", "20190101", "20190418", "20190419", "20190422", "20190517", "20190530", "20190531", "20190605", "20190610", "20191224", "20191225", "20191226", "20191231", "20200101", "20200409", "20200410", "20200413", "20200508", "20200521", "20200522", "20200601", "20200605", "20201224", "20201225", "20201231", "20210101", "20210401", "20210402", "20210405", "20210430", "20210513", "20210514", "20210524", "20211224", "20211231", "20220414", "20220415", "20220418", "20220513", "20220526", "20220527", "20220606", "20221226", "20230406", "20230407", "20230410", "20230505", "20230518", "20230519", "20230529", "20230605", "20231225", "20231226", "20240101", "20240328", "20240329", "20240401", "20240426", "20240509", "20240510", "20240520", "20240605", "20241224", "20241225", "20241226", "20241231", "20250101", "20250417", "20250418", "20250421", "20250516", "20250529", "20250530", "20250605", "20250609", "20251224", "20251225", "20251226", "20251231", "20260101", "20260402", "20260403", "20260406", "20260501", "20260514", "20260515", "20260525", "20260605", "20261224", "20261225", "20261231", "20270101", "20270325", "20270326", "20270329", "20270423", "20270506", "20270507", "20270517", "20271224", "20271231", "20280413", "20280414", "20280417", "20280512", "20280525", "20280526", "20280605", "20281225", "20281226", "20290101", "20290329", "20290330", "20290402", "20290427", "20290510", "20290511", "20290521", "20290605", "20291224", "20291225", "20291226", "20291231", "20300101", "20300418", "20300419", "20300422", "20300517", "20300530", "20300531", "20300605", "20300610", "20301224", "20301225", "20301226", "20301231", "20310101", "20310410", "20310411", "20310414", "20310509", "20310522", "20310523", "20310602", "20310605", "20311224", "20311225", "20311226", "20311231", "20320101", "20320325", "20320326", "20320329", "20320423", "20320506", "20320507", "20320517", "20321224", "20321231", "20330414", "20330415", "20330418", "20330513", "20330526", "20330527", "20330606", "20331226", "20340406", "20340407", "20340410", "20340505", "20340518", "20340519", "20340529", "20340605", "20341225", "20341226", "20350101", "20350322", "20350323", "20350326", "20350420", "20350503", "20350504", "20350514", "20350605", "20351224", "20351225", "20351226", "20351231", "20360101", "20360410", "20360411", "20360414", "20360509", "20360522", "20360523", "20360602", "20360605", "20361224", "20361225", "20361226", "20361231", "20370101", "20370402", "20370403", "20370406", "20370501", "20370514", "20370515", "20370525", "20370605", "20371224", "20371225", "20371231", "20380101", "20380422", "20380423", "20380426", "20380521", "20380603", "20380604", "20380614", "20381224", "20381231", "20390407", "20390408", "20390411", "20390506", "20390519", "20390520", "20390530", "20391226", "20400329", "20400330", "20400402", "20400427", "20400510", "20400511", "20400521", "20400605", "20401224", "20401225", "20401226", "20401231", "20410101", "20410418", "20410419", "20410422", "20410517", "20410530", "20410531", "20410605", "20410610", "20411224", "20411225", "20411226", "20411231", "20420101", "20420403", "20420404", "20420407", "20420502", "20420515", "20420516", "20420526", "20420605", "20421224", "20421225", "20421226", "20421231", "20430101", "20430326", "20430327", "20430330", "20430424", "20430507", "20430508", "20430518", "20430605", "20431224", "20431225", "20431231", "20440101", "20440414", "20440415", "20440418", "20440513", "20440526", "20440527", "20440606", "20441226", "20450406", "20450407", "20450410", "20450505", "20450518", "20450519", "20450529", "20450605", "20451225", "20451226", "20460101", "20460322", "20460323", "20460326", "20460420", "20460503", "20460504", "20460514", "20460605", "20461224", "20461225", "20461226", "20461231", "20470101", "20470411", "20470412", "20470415", "20470510", "20470523", "20470524", "20470603", "20470605", "20471224", "20471225", "20471226", "20471231", "20480101", "20480402", "20480403", "20480406", "20480501", "20480514", "20480515", "20480525", "20480605", "20481224", "20481225", "20481231", "20490101", "20490415", "20490416", "20490419", "20490514", "20490527", "20490528", "20490607", "20491224", "20491231", "20500407", "20500408", "20500411", "20500506", "20500519", "20500520", "20500530", "20501226", "20510330", "20510331", "20510403", "20510428", "20510511", "20510512", "20510522", "20510605", "20511225", "20511226", "20520101", "20520418", "20520419", "20520422", "20520517", "20520530", "20520531", "20520605", "20520610", "20521224", "20521225", "20521226", "20521231", "20530101", "20530403", "20530404", "20530407", "20530502", "20530515", "20530516", "20530526", "20530605", "20531224", "20531225", "20531226", "20531231", "20540101", "20540326", "20540327", "20540330", "20540424", "20540507", "20540508", "20540518", "20540605", "20541224", "20541225", "20541231", "20550101", "20550415", "20550416", "20550419", "20550514", "20550527", "20550528", "20550607", "20551224", "20551231", "20560330", "20560331", "20560403", "20560428", "20560511", "20560512", "20560522", "20560605", "20561225", "20561226", "20570101", "20570419", "20570420", "20570423", "20570518", "20570531", "20570601", "20570605", "20570611", "20571224", "20571225", "20571226", "20571231", "20580101", "20580411", "20580412", "20580415", "20580510", "20580523", "20580524", "20580603", "20580605", "20581224", "20581225", "20581226", "20581231", "20590101", "20590327", "20590328", "20590331", "20590425", "20590508", "20590509", "20590519", "20590605", "20591224", "20591225", "20591226", "20591231", "20600101", "20600415", "20600416", "20600419", "20600514", "20600527", "20600528", "20600607", "20601224", "20601231", "20610407", "20610408", "20610411", "20610506", "20610519", "20610520", "20610530", "20611226" ], + "MonthsToExclude": [] + }, + "DUB": { + "InheritedCalendar": [], + "Name": "DUB", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880401", "19880404", "19880502", "19880530", "19880829", "19881226", "19881227", "19890102", "19890324", "19890327", "19890501", "19890529", "19890828", "19891225", "19891226", "19900101", "19900413", "19900416", "19900507", "19900528", "19900827", "19901225", "19901226", "19910101", "19910329", "19910401", "19910506", "19910527", "19910826", "19911225", "19911226", "19920101", "19920417", "19920420", "19920504", "19920525", "19920831", "19921225", "19921228", "19930101", "19930409", "19930412", "19930503", "19930531", "19930830", "19931227", "19931228", "19940103", "19940401", "19940404", "19940502", "19940530", "19940829", "19941226", "19941227", "19950102", "19950414", "19950417", "19950501", "19950828", "19951225", "19951226", "19960101", "19960405", "19960408", "19960506", "19960605", "19960807", "19961027", "19961028", "19961225", "19961226", "19970101", "19970317", "19970328", "19970331", "19970505", "19970602", "19970804", "19971027", "19971225", "19971226", "19980101", "19980317", "19980410", "19980413", "19980504", "19980601", "19980803", "19981026", "19981225", "19981226", "19990101", "19990317", "19990402", "19990405", "19990503", "19990607", "19990802", "19991025", "19991225", "19991226", "19991231", "20000103", "20000317", "20000421", "20000424", "20000501", "20000605", "20000807", "20001030", "20001225", "20001226", "20010101", "20010413", "20010416", "20010507", "20010604", "20010806", "20011025", "20011029", "20011225", "20011226", "20011231", "20020101", "20020317", "20020329", "20020401", "20020805", "20021028", "20021225", "20021226", "20030101", "20030317", "20030418", "20030421", "20030505", "20030602", "20030804", "20031027", "20031225", "20031226", "20031229", "20040101", "20040317", "20040409", "20040412", "20040503", "20040607", "20040802", "20041025", "20041227", "20041228", "20041229", "20050103", "20050317", "20050325", "20050328", "20050502", "20050606", "20050801", "20051031", "20051226", "20051227", "20051228", "20060102", "20060317", "20060414", "20060417", "20060501", "20060605", "20060807", "20061030", "20061225", "20061226", "20061227", "20070101", "20070317", "20070319", "20070406", "20070409", "20070507", "20070604", "20070806", "20071029", "20071225", "20071226", "20071227", "20080101", "20080317", "20080321", "20080324", "20080505", "20080602", "20080804", "20081027", "20081225", "20081226", "20081229", "20090101", "20090317", "20090410", "20090413", "20090504", "20090601", "20090803", "20091026", "20091225", "20091228", "20091229", "20100101", "20100317", "20100402", "20100405", "20100503", "20100607", "20100802", "20101025", "20101227", "20101228", "20101229", "20110103", "20110317", "20110422", "20110425", "20110502", "20110606", "20110801", "20111031", "20111226", "20111227", "20111228", "20120102", "20120319", "20120406", "20120409", "20120507", "20120604", "20120806", "20121029", "20121225", "20121226", "20121227", "20130101", "20130318", "20130329", "20130401", "20130506", "20130603", "20130805", "20131028", "20131225", "20131226", "20131227", "20140101", "20140317", "20140418", "20140421", "20140505", "20140602", "20140804", "20141027", "20141225", "20141226", "20141229", "20150101", "20150317", "20150403", "20150406", "20150504", "20150601", "20150803", "20151026", "20151225", "20151228", "20151229", "20160101", "20160317", "20160325", "20160328", "20160502", "20160606", "20160801", "20161031", "20161226", "20161227", "20161228", "20170102", "20170317", "20170414", "20170417", "20170501", "20170605", "20170807", "20171030", "20171225", "20171226", "20171227", "20180101", "20180319", "20180330", "20180402", "20180507", "20180604", "20180806", "20181029", "20181225", "20181226", "20181227", "20190101", "20190318", "20190419", "20190422", "20190506", "20190603", "20190805", "20191028", "20191225", "20191226", "20191227", "20200101", "20200317", "20200410", "20200413", "20200504", "20200601", "20200803", "20201026", "20201225", "20201228", "20201229", "20210101", "20210317", "20210402", "20210405", "20210503", "20210607", "20210802", "20211025", "20211227", "20211228", "20211229", "20220103", "20220317", "20220415", "20220418", "20220502", "20220606", "20220801", "20221031", "20221226", "20221227", "20221228", "20230102", "20230317", "20230407", "20230410", "20230501", "20230605", "20230807", "20231030", "20231225", "20231226", "20231227", "20240101", "20240318", "20240329", "20240401", "20240506", "20240603", "20240805", "20241028", "20241225", "20241226", "20241227", "20250101", "20250317", "20250418", "20250421", "20250505", "20250602", "20250804", "20251027", "20251225", "20251226", "20251229", "20260101", "20260317", "20260403", "20260406", "20260504", "20260601", "20260803", "20261026", "20261225", "20261228", "20261229", "20270101", "20270317", "20270326", "20270329", "20270503", "20270607", "20270802", "20271025", "20271227", "20271228", "20271229", "20280103", "20280317", "20280414", "20280417", "20280501", "20280605", "20280807", "20281030", "20281225", "20281226", "20281227", "20290101", "20290319", "20290330", "20290402", "20290507", "20290604", "20290806", "20291029", "20291225", "20291226", "20291227", "20300101", "20300318", "20300419", "20300422", "20300506", "20300603", "20300805", "20301028", "20301225", "20301226", "20301227", "20310101", "20310317", "20310411", "20310414", "20310505", "20310602", "20310804", "20311027", "20311225", "20311226", "20311229", "20320101", "20320317", "20320326", "20320329", "20320503", "20320607", "20320802", "20321025", "20321227", "20321228", "20321229", "20330103", "20330317", "20330415", "20330418", "20330502", "20330606", "20330801", "20331031", "20331226", "20331227", "20331228", "20340102", "20340317", "20340407", "20340410", "20340501", "20340605", "20340807", "20341030", "20341225", "20341226", "20341227", "20350101", "20350319", "20350323", "20350326", "20350507", "20350604", "20350806", "20351029", "20351225", "20351226", "20351227", "20360101", "20360317", "20360411", "20360414", "20360505", "20360602", "20360804", "20361027", "20361225", "20361226", "20361229", "20370101", "20370317", "20370403", "20370406", "20370504", "20370601", "20370803", "20371026", "20371225", "20371228", "20371229", "20380101", "20380317", "20380423", "20380426", "20380503", "20380607", "20380802", "20381025", "20381227", "20381228", "20381229", "20390103", "20390317", "20390408", "20390411", "20390502", "20390606", "20390801", "20391031", "20391226", "20391227", "20391228", "20400102", "20400319", "20400330", "20400402", "20400507", "20400604", "20400806", "20401029", "20401225", "20401226", "20401227", "20410101", "20410318", "20410419", "20410422", "20410506", "20410603", "20410805", "20411028", "20411225", "20411226", "20411227", "20420101", "20420317", "20420404", "20420407", "20420505", "20420602", "20420804", "20421027", "20421225", "20421226", "20421229", "20430101", "20430317", "20430327", "20430330", "20430504", "20430601", "20430803", "20431026", "20431225", "20431228", "20431229", "20440101", "20440317", "20440415", "20440418", "20440502", "20440606", "20440801", "20441031", "20441226", "20441227", "20441228", "20450102", "20450317", "20450407", "20450410", "20450501", "20450605", "20450807", "20451030", "20451225", "20451226", "20451227", "20460101", "20460319", "20460323", "20460326", "20460507", "20460604", "20460806", "20461029", "20461225", "20461226", "20461227", "20470101", "20470318", "20470412", "20470415", "20470506", "20470603", "20470805", "20471028", "20471225", "20471226", "20471227", "20480101", "20480317", "20480403", "20480406", "20480504", "20480601", "20480803", "20481026", "20481225", "20481228", "20481229", "20490101", "20490317", "20490416", "20490419", "20490503", "20490607", "20490802", "20491025", "20491227", "20491228", "20491229", "20500103", "20500317", "20500408", "20500411", "20500502", "20500606", "20500801", "20501031", "20501226", "20501227", "20501228", "20510102", "20510317", "20510331", "20510403", "20510501", "20510605", "20510807", "20511030", "20511225", "20511226", "20511227", "20520101", "20520318", "20520419", "20520422", "20520506", "20520603", "20520805", "20521028", "20521225", "20521226", "20521227", "20530101", "20530317", "20530404", "20530407", "20530505", "20530602", "20530804", "20531027", "20531225", "20531226", "20531229", "20540101", "20540317", "20540327", "20540330", "20540504", "20540601", "20540803", "20541026", "20541225", "20541228", "20541229", "20550101", "20550317", "20550416", "20550419", "20550503", "20550607", "20550802", "20551025", "20551227", "20551228", "20551229", "20560103", "20560317", "20560331", "20560403", "20560501", "20560605", "20560807", "20561030", "20561225", "20561226", "20561227", "20570101", "20570319", "20570420", "20570423", "20570507", "20570604", "20570806", "20571029", "20571225", "20571226", "20571227", "20580101", "20580318", "20580412", "20580415", "20580506", "20580603", "20580805", "20581028", "20581225", "20581226", "20581227", "20590101", "20590317", "20590328", "20590331", "20590505", "20590602", "20590804", "20591027", "20591225", "20591226", "20591229", "20600101", "20600317", "20600416", "20600419", "20600503", "20600607", "20600802", "20601025", "20601227", "20601228", "20601229", "20610103", "20610317", "20610408", "20610411", "20610502", "20610606", "20610801", "20611031", "20611226", "20611227", "20611228" ], + "MonthsToExclude": [] + }, + "EUR": { + "InheritedCalendar": [], + "Name": "EUR", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19801225", "19810101", "19811225", "19820101", "19841225", "19850101", "19851225", "19860101", "19861225", "19870101", "19871225", "19880101", "19891225", "19900101", "19901225", "19910101", "19911225", "19920101", "19921225", "19930101", "19951225", "19960101", "19961225", "19970101", "19971225", "19980101", "19981225", "19990101", "19991231", "20000421", "20000424", "20000501", "20001225", "20001226", "20010101", "20010413", "20010416", "20010501", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020501", "20021225", "20021226", "20030101", "20030418", "20030421", "20030501", "20031225", "20031226", "20040101", "20040409", "20040412", "20040501", "20041226", "20050325", "20050328", "20050501", "20051226", "20060414", "20060417", "20060501", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20071225", "20071226", "20080101", "20080321", "20080324", "20080501", "20081225", "20081226", "20090101", "20090410", "20090413", "20090501", "20091225", "20100101", "20100402", "20100405", "20110422", "20110425", "20111226", "20120406", "20120409", "20120501", "20121225", "20121226", "20130101", "20130329", "20130401", "20130501", "20131225", "20131226", "20140101", "20140418", "20140421", "20140501", "20141225", "20141226", "20150101", "20150403", "20150406", "20150501", "20151225", "20160101", "20160325", "20160328", "20161226", "20170414", "20170417", "20170501", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20181225", "20181226", "20190101", "20190419", "20190422", "20190501", "20191225", "20191226", "20200101", "20200410", "20200413", "20200501", "20201225", "20210101", "20210402", "20210405", "20220415", "20220418", "20221226", "20230407", "20230410", "20230501", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20241225", "20241226", "20250101", "20250418", "20250421", "20250501", "20251225", "20251226", "20260101", "20260403", "20260406", "20260501", "20261225", "20270101", "20270326", "20270329", "20280414", "20280417", "20280501", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20291225", "20291226", "20300101", "20300419", "20300422", "20300501", "20301225", "20301226", "20310101", "20310411", "20310414", "20310501", "20311225", "20311226", "20320101", "20320326", "20320329", "20330415", "20330418", "20331226", "20340407", "20340410", "20340501", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20351225", "20351226", "20360101", "20360411", "20360414", "20360501", "20361225", "20361226", "20370101", "20370403", "20370406", "20370501", "20371225", "20380101", "20380423", "20380426", "20390408", "20390411", "20391226", "20400330", "20400402", "20400501", "20401225", "20401226", "20410101", "20410419", "20410422", "20410501", "20411225", "20411226", "20420101", "20420404", "20420407", "20420501", "20421225", "20421226", "20430101", "20430327", "20430330", "20430501", "20431225", "20440101", "20440415", "20440418", "20441226", "20450407", "20450410", "20450501", "20451225", "20451226", "20460101", "20460323", "20460326", "20460501", "20461225", "20461226", "20470101", "20470412", "20470415", "20470501", "20471225", "20471226", "20480101", "20480403", "20480406", "20480501", "20481225", "20490101", "20490416", "20490419", "20500408", "20500411", "20501226", "20510331", "20510403", "20510501", "20511225", "20511226", "20520101", "20520419", "20520422", "20520501", "20521225", "20521226", "20530101", "20530404", "20530407", "20530501", "20531225", "20531226", "20540101", "20540327", "20540330", "20540501", "20541225", "20550101", "20550416", "20550419", "20560331", "20560403", "20560501", "20561225", "20561226", "20570101", "20570420", "20570423", "20570501", "20571225", "20571226", "20580101", "20580412", "20580415", "20580501", "20581225", "20581226", "20590101", "20590328", "20590331", "20590501", "20591225", "20591226", "20600101", "20600416", "20600419", "20610408", "20610411", "20611226", "20621225", "20630101", "20631225", "20640101", "20641225", "20650101", "20651225", "20660101", "20681225", "20690101", "20691225", "20700101", "20701225" ], + "MonthsToExclude": [] + }, + "FRA": { + "InheritedCalendar": [], + "Name": "FRA", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880401", "19880404", "19880512", "19880523", "19880602", "19880617", "19881116", "19881226", "19890106", "19890324", "19890327", "19890501", "19890504", "19890515", "19890525", "19891101", "19891115", "19891122", "19891225", "19891226", "19900101", "19900413", "19900416", "19900501", "19900524", "19900604", "19900614", "19901121", "19901224", "19901225", "19901226", "19910101", "19910329", "19910401", "19910501", "19910509", "19910520", "19910530", "19911003", "19911120", "19911224", "19911225", "19911226", "19920101", "19920417", "19920420", "19920501", "19920528", "19920608", "19920618", "19921118", "19921224", "19921225", "19921231", "19930101", "19930409", "19930412", "19930520", "19930531", "19930610", "19931117", "19931224", "19931231", "19940401", "19940404", "19940523", "19940602", "19941003", "19941116", "19941226", "19950414", "19950417", "19950501", "19950525", "19950605", "19950615", "19951003", "19951225", "19951226", "19951231", "19960101", "19960405", "19960408", "19960501", "19960516", "19960527", "19960606", "19961003", "19961224", "19961225", "19961226", "19961231", "19970101", "19970328", "19970331", "19970501", "19970508", "19970519", "19970529", "19971003", "19971224", "19971225", "19971226", "19971231", "19980101", "19980410", "19980413", "19980501", "19980521", "19980601", "19980611", "19981224", "19981225", "19981226", "19981231", "19990101", "19990402", "19990405", "19990513", "19990524", "19990603", "19991224", "19991231", "20000421", "20000424", "20000501", "20000601", "20000612", "20000622", "20001003", "20001225", "20001226", "20001231", "20010101", "20010413", "20010416", "20010501", "20010524", "20010604", "20010614", "20011003", "20011224", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020501", "20020509", "20020520", "20020530", "20021003", "20021224", "20021225", "20021226", "20021231", "20030101", "20030418", "20030421", "20030501", "20030529", "20030609", "20030619", "20031003", "20031224", "20031225", "20031226", "20031231", "20040101", "20040409", "20040412", "20040520", "20040531", "20040610", "20041224", "20041231", "20050101", "20050325", "20050328", "20050505", "20050516", "20050526", "20051003", "20051226", "20051231", "20060101", "20060414", "20060417", "20060501", "20060525", "20060605", "20060615", "20061003", "20061225", "20061226", "20061231", "20070101", "20070406", "20070409", "20070501", "20070517", "20070528", "20070607", "20071003", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20080512", "20080522", "20081003", "20081224", "20081225", "20081226", "20081231", "20090101", "20090410", "20090413", "20090501", "20090521", "20090601", "20090611", "20091224", "20091225", "20091231", "20100101", "20100402", "20100405", "20100513", "20100524", "20100603", "20101224", "20101231", "20110422", "20110425", "20110602", "20110613", "20110623", "20111003", "20111226", "20120406", "20120409", "20120501", "20120517", "20120528", "20120607", "20121003", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20130509", "20130520", "20130530", "20131003", "20131224", "20131225", "20131226", "20131231", "20140101", "20140418", "20140421", "20140501", "20140529", "20140609", "20140619", "20141003", "20141224", "20141225", "20141226", "20141231", "20150101", "20150403", "20150406", "20150501", "20150514", "20150525", "20150604", "20151224", "20151225", "20151231", "20160101", "20160325", "20160328", "20160505", "20160516", "20160526", "20161003", "20161226", "20170414", "20170417", "20170501", "20170525", "20170605", "20170615", "20171003", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180510", "20180521", "20180531", "20181003", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20190530", "20190610", "20190620", "20191003", "20191224", "20191225", "20191226", "20191231", "20200101", "20200410", "20200413", "20200501", "20200521", "20200601", "20200611", "20201224", "20201225", "20201231", "20210101", "20210402", "20210405", "20210513", "20210524", "20210603", "20211224", "20211231", "20220415", "20220418", "20220526", "20220606", "20220616", "20221003", "20221226", "20230407", "20230410", "20230501", "20230518", "20230529", "20230608", "20231003", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20240509", "20240520", "20240530", "20241003", "20241224", "20241225", "20241226", "20241231", "20250101", "20250418", "20250421", "20250501", "20250529", "20250609", "20250619", "20251003", "20251224", "20251225", "20251226", "20251231", "20260101", "20260403", "20260406", "20260501", "20260514", "20260525", "20260604", "20261224", "20261225", "20261231", "20270101", "20270326", "20270329", "20270506", "20270517", "20270527", "20271224", "20271231", "20280414", "20280417", "20280501", "20280525", "20280605", "20280615", "20281003", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20290510", "20290521", "20290531", "20291003", "20291224", "20291225", "20291226", "20291231", "20300101", "20300419", "20300422", "20300501", "20300530", "20300610", "20300620", "20301003", "20301224", "20301225", "20301226", "20301231", "20310101", "20310411", "20310414", "20310501", "20310522", "20310602", "20310612", "20311003", "20311224", "20311225", "20311226", "20311231", "20320101", "20320326", "20320329", "20320506", "20320517", "20320527", "20321224", "20321231", "20330415", "20330418", "20330526", "20330606", "20330616", "20331003", "20331226", "20340407", "20340410", "20340501", "20340518", "20340529", "20340608", "20341003", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20350503", "20350514", "20350524", "20351003", "20351224", "20351225", "20351226", "20351231", "20360101", "20360411", "20360414", "20360501", "20360522", "20360602", "20360612", "20361003", "20361224", "20361225", "20361226", "20361231", "20370101", "20370403", "20370406", "20370501", "20370514", "20370525", "20370604", "20371224", "20371225", "20371231", "20380101", "20380423", "20380426", "20380603", "20380614", "20380624", "20381224", "20381231", "20390408", "20390411", "20390519", "20390530", "20390609", "20391003", "20391226", "20400330", "20400402", "20400501", "20400510", "20400521", "20400531", "20401003", "20401224", "20401225", "20401226", "20401231", "20410101", "20410419", "20410422", "20410501", "20410530", "20410610", "20410620", "20411003", "20411224", "20411225", "20411226", "20411231", "20420101", "20420404", "20420407", "20420501", "20420515", "20420526", "20420605", "20421003", "20421224", "20421225", "20421226", "20421231", "20430101", "20430327", "20430330", "20430501", "20430507", "20430518", "20430528", "20431224", "20431225", "20431231", "20440101", "20440415", "20440418", "20440526", "20440606", "20440616", "20441003", "20441226", "20450407", "20450410", "20450501", "20450518", "20450529", "20450608", "20451003", "20451225", "20451226", "20460101", "20460323", "20460326", "20460501", "20460503", "20460514", "20460524", "20461003", "20461224", "20461225", "20461226", "20461231", "20470101", "20470412", "20470415", "20470501", "20470523", "20470603", "20470613", "20471003", "20471224", "20471225", "20471226", "20471231", "20480101", "20480403", "20480406", "20480501", "20480514", "20480525", "20480604", "20481224", "20481225", "20481231", "20490101", "20490416", "20490419", "20490527", "20490607", "20490617", "20491224", "20491231", "20500408", "20500411", "20500519", "20500530", "20500609", "20501003", "20501226", "20510331", "20510403", "20510501", "20510511", "20510522", "20510601", "20511003", "20511225", "20511226", "20520101", "20520419", "20520422", "20520501", "20520530", "20520610", "20520620", "20521003", "20521224", "20521225", "20521226", "20521231", "20530101", "20530404", "20530407", "20530501", "20530515", "20530526", "20530605", "20531003", "20531224", "20531225", "20531226", "20531231", "20540101", "20540327", "20540330", "20540501", "20540507", "20540518", "20540528", "20541224", "20541225", "20541231", "20550101", "20550416", "20550419", "20550527", "20550607", "20550617", "20551224", "20551231", "20560331", "20560403", "20560501", "20560511", "20560522", "20560601", "20561003", "20561225", "20561226", "20570101", "20570420", "20570423", "20570501", "20570531", "20570611", "20570621", "20571003", "20571224", "20571225", "20571226", "20571231", "20580101", "20580412", "20580415", "20580501", "20580523", "20580603", "20580613", "20581003", "20581224", "20581225", "20581226", "20581231", "20590101", "20590328", "20590331", "20590501", "20590508", "20590519", "20590529", "20591003", "20591224", "20591225", "20591226", "20591231", "20600101", "20600416", "20600419", "20600527", "20600607", "20600617", "20601224", "20601231", "20610408", "20610411", "20610519", "20610530", "20610609", "20611003", "20611226" ], + "MonthsToExclude": [] + }, + "GEO": { + "InheritedCalendar": [], + "Name": "GEO", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20050103", "20050124", "20050209", "20050325", "20050328", "20050511", "20050516", "20050613", "20050704", "20051019", "20051114", "20051226", "20051227", "20060102", "20060123", "20060301", "20060414", "20060417", "20060515", "20060619", "20060703", "20061113", "20061225", "20061226", "20070101", "20070122", "20070221", "20070406", "20070409", "20070521", "20070618", "20070702", "20071112", "20071225", "20071226", "20080101", "20080128", "20080206", "20080321", "20080324", "20080519", "20080616", "20080707", "20080829", "20081107", "20081110", "20081225", "20081226", "20090101", "20090126", "20090225", "20090410", "20090413", "20090518", "20090520", "20090615", "20090706", "20091106", "20091109", "20091225", "20091228", "20100101", "20100125", "20100217", "20100402", "20100405", "20100517", "20100614", "20100705", "20101115", "20101227", "20101228", "20110103", "20110124", "20110309", "20110422", "20110425", "20110429", "20110516", "20110613", "20110704", "20111114", "20111226", "20111227", "20120102", "20120123", "20120222", "20120406", "20120409", "20120521", "20120604", "20120618", "20120702", "20121112", "20121225", "20121226", "20130101", "20130128", "20130213", "20130329", "20130401", "20130520", "20130617", "20130701", "20131111", "20131225", "20131226", "20140101", "20140127", "20140305", "20140418", "20140421", "20140519", "20140616", "20140707", "20141110", "20141225", "20141226", "20150101", "20150126", "20150218", "20150403", "20150406", "20150518", "20150615", "20150706", "20151109", "20151225", "20151228", "20160101", "20160125", "20160210", "20160325", "20160328", "20160516", "20160613", "20160704", "20161114", "20161226", "20161227", "20170102", "20170123", "20170301", "20170414", "20170417", "20170515", "20170612", "20170703", "20171113", "20171225", "20171226", "20180101", "20180122", "20180214", "20180330", "20180402", "20180521", "20180618", "20180702", "20181112", "20181225", "20181226", "20190101", "20190128", "20190306", "20190419", "20190422", "20190520", "20190617", "20190701", "20191111", "20191225", "20191226", "20200101", "20200127", "20200226", "20200410", "20200413", "20200518", "20200615", "20200706", "20201109", "20201225", "20201228", "20210101", "20210125", "20210217", "20210402", "20210405", "20210517", "20210614", "20210705", "20211115", "20211227", "20211228", "20220103", "20220124", "20220302", "20220415", "20220418", "20220516", "20220613", "20220704", "20221114", "20221226", "20221227", "20230102", "20230123", "20230222", "20230407", "20230410", "20230515", "20230612", "20230703", "20231113", "20231225", "20231226", "20240101", "20240122", "20240214", "20240329", "20240401", "20240520", "20240617", "20240701", "20241111", "20241225", "20241226", "20250101", "20250127", "20250305", "20250418", "20250421", "20250519", "20250616", "20250707", "20251110", "20251225", "20251226", "20260101", "20260126", "20260218", "20260403", "20260406", "20260518", "20260615", "20260706", "20261109", "20261225", "20261228", "20270101", "20270125", "20270210", "20270326", "20270329", "20270517", "20270614", "20270705", "20271115", "20271227", "20271228", "20280103", "20280124", "20280301", "20280414", "20280417", "20280515", "20280612", "20280703", "20281113", "20281225", "20281226", "20290101", "20290122", "20290214", "20290330", "20290402", "20290521", "20290618", "20290702", "20291112", "20291225", "20291226", "20300101", "20300128", "20300306", "20300419", "20300422", "20300520", "20300617", "20300701", "20301111", "20301225", "20301226", "20310101", "20310127", "20310226", "20310411", "20310414", "20310519", "20310616", "20310707", "20311110", "20311225", "20311226", "20320101", "20320126", "20320211", "20320326", "20320329", "20320517", "20320614", "20320705", "20321115", "20321227", "20321228", "20330103", "20330124", "20330302", "20330415", "20330418", "20330516", "20330613", "20330704", "20331114", "20331226", "20331227", "20340102", "20340123", "20340222", "20340407", "20340410", "20340515", "20340612", "20340703", "20341113", "20341225", "20341226", "20350101", "20350122", "20350207", "20350323", "20350326", "20350521", "20350618", "20350702", "20351112", "20351225", "20351226", "20360101", "20360128", "20360227", "20360411", "20360414", "20360519", "20360616", "20360707", "20361110", "20361225", "20361226", "20370101", "20370126", "20370218", "20370403", "20370406", "20370518", "20370615", "20370706", "20371109", "20371225", "20371228", "20380101", "20380125", "20380310", "20380423", "20380426", "20380517", "20380614", "20380705", "20381115", "20381227", "20381228", "20390103", "20390124", "20390223", "20390408", "20390411", "20390516", "20390613", "20390704", "20391114", "20391226", "20391227", "20400102", "20400123", "20400215", "20400330", "20400402", "20400521", "20400618", "20400702", "20401112", "20401225", "20401226", "20410101", "20410128", "20410306", "20410419", "20410422", "20410520", "20410617", "20410701", "20411111", "20411225", "20411226", "20420101", "20420127", "20420219", "20420404", "20420407", "20420519", "20420616", "20420707", "20421110", "20421225", "20421226", "20430101", "20430126", "20430211", "20430327", "20430330", "20430518", "20430615", "20430706", "20431109", "20431225", "20431228", "20440101", "20440125", "20440302", "20440415", "20440418", "20440516", "20440613", "20440704", "20441114", "20441226", "20441227", "20450102", "20450123", "20450222", "20450407", "20450410", "20450515", "20450612", "20450703", "20451113", "20451225", "20451226", "20460101", "20460122", "20460207", "20460323", "20460326", "20460521", "20460618", "20460702", "20461112", "20461225", "20461226", "20470101", "20470128", "20470227", "20470412", "20470415", "20470520", "20470617", "20470701", "20471111", "20471225", "20471226", "20480101", "20480127", "20480219", "20480403", "20480406", "20480518", "20480615", "20480706", "20481109", "20481225", "20481228", "20490101", "20490125", "20490303", "20490416", "20490419", "20490517", "20490614", "20490705", "20491115", "20491227", "20491228", "20500103", "20500124", "20500223", "20500408", "20500411", "20500516", "20500613", "20500704", "20501114", "20501226", "20501227", "20510102", "20510123", "20510215", "20510331", "20510403", "20510515", "20510612", "20510703", "20511113", "20511225", "20511226", "20520101", "20520122", "20520306", "20520419", "20520422", "20520520", "20520617", "20520701", "20521111", "20521225", "20521226", "20530101", "20530127", "20530219", "20530404", "20530407", "20530519", "20530616", "20530707", "20531110", "20531225", "20531226", "20540101", "20540126", "20540211", "20540327", "20540330", "20540518", "20540615", "20540706", "20541109", "20541225", "20541228", "20550101", "20550125", "20550303", "20550416", "20550419", "20550517", "20550614", "20550705", "20551115", "20551227", "20551228", "20560103", "20560124", "20560216", "20560331", "20560403", "20560515", "20560612", "20560703", "20561113", "20561225", "20561226", "20570101", "20570122", "20570307", "20570420", "20570423", "20570521", "20570618", "20570702", "20571112", "20571225", "20571226", "20580101", "20580128", "20580227", "20580412", "20580415", "20580520", "20580617", "20580701", "20581111", "20581225", "20581226", "20590101", "20590127", "20590212", "20590328", "20590331", "20590519", "20590616", "20590707", "20591110", "20591225", "20591226", "20600101", "20600126", "20600303", "20600416", "20600419", "20600517", "20600614", "20600705", "20601115", "20601227", "20601228", "20610103", "20610124", "20610223", "20610408", "20610411", "20610516", "20610613", "20610704", "20611114", "20611226", "20611227" ], + "MonthsToExclude": [] + }, + "HAN": { + "InheritedCalendar": [], + "Name": "HAN", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20100101", "20100215", "20100216", "20100217", "20100218", "20100219", "20100423", "20100430", "20100503", "20100902", "20110103", "20110131", "20110201", "20110202", "20110203", "20110204", "20110207", "20110411", "20110412", "20110502", "20110503", "20110902", "20120102", "20120123", "20120124", "20120125", "20120126", "20120127", "20120402", "20120430", "20120501", "20120903", "20130101", "20130211", "20130212", "20130213", "20130214", "20130419", "20130430", "20130501", "20130902", "20140101", "20140130", "20140131", "20140203", "20140204", "20140409", "20140430", "20140501", "20140902", "20150101", "20150218", "20150219", "20150220", "20150223", "20150428", "20150430", "20150501", "20150902", "20160101", "20160208", "20160209", "20160210", "20160211", "20160418", "20160502", "20160503", "20160902", "20170102", "20170127", "20170130", "20170131", "20170201", "20170406", "20170501", "20170502", "20170904", "20180101", "20180215", "20180216", "20180219", "20180220", "20180425", "20180430", "20180501", "20180903", "20190101", "20190204", "20190205", "20190206", "20190207", "20190415", "20190430", "20190501", "20190902", "20200101", "20200124", "20200127", "20200128", "20200129", "20200402", "20200430", "20200501", "20200902", "20210101", "20210211", "20210212", "20210215", "20210216", "20210421", "20210430", "20210503", "20210902", "20220103", "20220131", "20220201", "20220202", "20220203", "20220411", "20220502", "20220503", "20220902", "20230102", "20230123", "20230124", "20230125", "20230126", "20230501", "20230502", "20230904", "20240101", "20240209", "20240212", "20240213", "20240214", "20240418", "20240430", "20240501", "20240902", "20250101", "20250128", "20250129", "20250130", "20250131", "20250407", "20250430", "20250501", "20250902", "20260101", "20260216", "20260217", "20260218", "20260219", "20260427", "20260430", "20260501", "20260902", "20270101", "20270205", "20270208", "20270209", "20270210", "20270416", "20270430", "20270503", "20270902", "20280103", "20280125", "20280126", "20280127", "20280128", "20280404", "20280501", "20280502", "20280904", "20290101", "20290212", "20290213", "20290214", "20290215", "20290423", "20290430", "20290501", "20290903", "20300101", "20300201", "20300204", "20300205", "20300206", "20300412", "20300430", "20300501", "20300902", "20310101", "20310122", "20310123", "20310124", "20310127", "20310401", "20310430", "20310501", "20310902", "20320101", "20320210", "20320211", "20320212", "20320213", "20320419", "20320430", "20320503", "20320902", "20330103", "20330131", "20330201", "20330202", "20330203", "20330411", "20330502", "20330503", "20330902", "20340102", "20340220", "20340221", "20340222", "20340223", "20340428", "20340501", "20340502", "20340904", "20350101", "20350207", "20350208", "20350209", "20350212", "20350417", "20350430", "20350501", "20350903", "20360101", "20360128", "20360129", "20360130", "20360131", "20360407", "20360430", "20360501", "20360902", "20370101", "20370216", "20370217", "20370218", "20370219", "20370424", "20370430", "20370501", "20370902", "20380101", "20380203", "20380204", "20380205", "20380208", "20380413", "20380430", "20380503", "20380902", "20390103", "20390124", "20390125", "20390126", "20390127", "20390404", "20390502", "20390503", "20390902", "20400102", "20400213", "20400214", "20400215", "20400216", "20400420", "20400430", "20400501", "20400903", "20410101", "20410131", "20410201", "20410204", "20410205", "20410410", "20410430", "20410501", "20410902", "20420101", "20420121", "20420122", "20420123", "20420124", "20420429", "20420430", "20420501", "20420902", "20430101", "20430209", "20430210", "20430211", "20430212", "20430420", "20430430", "20430501", "20430902", "20440101", "20440129", "20440201", "20440202", "20440203", "20440407", "20440502", "20440503", "20440902", "20450102", "20450216", "20450217", "20450220", "20450221", "20450426", "20450501", "20450502", "20450904", "20460101", "20460205", "20460206", "20460207", "20460208", "20460416", "20460430", "20460501", "20460903", "20470101", "20470125", "20470128", "20470129", "20470130", "20470404", "20470430", "20470501", "20470902", "20480101", "20480213", "20480214", "20480217", "20480218", "20480422", "20480430", "20480501", "20480902", "20490101", "20490201", "20490202", "20490203", "20490204", "20490412", "20490430", "20490503", "20490902", "20500103", "20500124", "20500125", "20500126", "20500127", "20500401", "20500502", "20500503", "20500902", "20510102", "20510210", "20510213", "20510214", "20510215", "20510420", "20510501", "20510502", "20510904", "20520101", "20520131", "20520201", "20520202", "20520205", "20520409", "20520430", "20520501", "20520902", "20530101", "20530217", "20530218", "20530219", "20530220", "20530428", "20530430", "20530501", "20530902", "20540101", "20540209", "20540210", "20540211", "20540212", "20540417", "20540430", "20540501", "20540902", "20550101", "20550127", "20550128", "20550129", "20550201", "20550406", "20550430", "20550503", "20550902", "20560103", "20560214", "20560215", "20560216", "20560217", "20560424", "20560501", "20560502", "20560904", "20570101", "20570205", "20570206", "20570207", "20570208", "20570413", "20570430", "20570501", "20570903", "20580101", "20580123", "20580124", "20580125", "20580128", "20580402", "20580430", "20580501", "20580902", "20590101", "20590211", "20590212", "20590213", "20590214", "20590421", "20590430", "20590501", "20590902", "20600101", "20600202", "20600203", "20600204", "20600205", "20600412", "20600430", "20600503", "20600902", "20610103", "20610120", "20610121", "20610124", "20610125", "20610331", "20610502", "20610503", "20610902" ], + "MonthsToExclude": [] + }, + "HEL": { + "InheritedCalendar": [], + "Name": "HEL", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880401", "19880404", "19880512", "19880523", "19880602", "19880617", "19881116", "19881226", "19890106", "19890324", "19890327", "19890501", "19890504", "19890515", "19890525", "19891101", "19891115", "19891122", "19891225", "19891226", "19900101", "19900413", "19900416", "19900501", "19900524", "19900604", "19900614", "19901121", "19901224", "19901225", "19901226", "19910101", "19910329", "19910401", "19910501", "19910509", "19910520", "19910530", "19911003", "19911120", "19911224", "19911225", "19911226", "19920101", "19920417", "19920420", "19920501", "19920528", "19920608", "19920618", "19921118", "19921224", "19921225", "19921231", "19930101", "19930409", "19930412", "19930520", "19930531", "19930610", "19931117", "19931224", "19931231", "19940401", "19940404", "19940523", "19940602", "19941003", "19941116", "19941226", "19950414", "19950417", "19950501", "19950525", "19950605", "19950615", "19951003", "19951225", "19951226", "19951231", "19960101", "19960405", "19960408", "19960501", "19960516", "19960621", "19961206", "19961224", "19961225", "19961226", "19961231", "19970106", "19970328", "19970331", "19970501", "19970508", "19970621", "19971101", "19971206", "19971224", "19971225", "19971226", "19971231", "19980106", "19980410", "19980413", "19980501", "19980521", "19980620", "19981031", "19981206", "19981224", "19981225", "19981226", "19981231", "19990106", "19990402", "19990405", "19990513", "19990626", "19991106", "19991206", "19991224", "19991231", "20000106", "20000421", "20000424", "20000501", "20000601", "20000624", "20001104", "20001206", "20001225", "20001226", "20010106", "20010413", "20010416", "20010501", "20010524", "20010623", "20011206", "20011224", "20011225", "20011226", "20011231", "20020106", "20020328", "20020329", "20020401", "20020423", "20020501", "20020509", "20020621", "20021206", "20021224", "20021225", "20021226", "20030101", "20030106", "20030418", "20030421", "20030501", "20030529", "20030620", "20030621", "20031101", "20031206", "20031224", "20031225", "20031226", "20040101", "20040106", "20040409", "20040412", "20040520", "20040625", "20040626", "20041106", "20041206", "20041224", "20050106", "20050325", "20050328", "20050505", "20050624", "20051206", "20051226", "20051231", "20060106", "20060414", "20060417", "20060501", "20060525", "20060623", "20061206", "20061225", "20061226", "20061231", "20070101", "20070406", "20070409", "20070501", "20070517", "20070622", "20071206", "20071224", "20071225", "20071226", "20080101", "20080321", "20080324", "20080501", "20080620", "20081224", "20081225", "20081226", "20090101", "20090106", "20090410", "20090413", "20090501", "20090521", "20090619", "20091224", "20091225", "20100101", "20100106", "20100402", "20100405", "20100513", "20100625", "20101206", "20101224", "20110106", "20110422", "20110425", "20110602", "20110624", "20111206", "20111226", "20120106", "20120406", "20120409", "20120501", "20120517", "20120622", "20121206", "20121224", "20121225", "20121226", "20130101", "20130329", "20130401", "20130501", "20130509", "20130621", "20131206", "20131224", "20131225", "20131226", "20140101", "20140106", "20140418", "20140421", "20140501", "20140529", "20140620", "20141224", "20141225", "20141226", "20150101", "20150106", "20150403", "20150406", "20150501", "20150514", "20150619", "20151224", "20151225", "20160101", "20160106", "20160325", "20160328", "20160505", "20160624", "20161206", "20161226", "20170106", "20170414", "20170417", "20170501", "20170525", "20170623", "20171206", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180510", "20180622", "20181206", "20181224", "20181225", "20181226", "20190101", "20190419", "20190422", "20190501", "20190530", "20190621", "20191206", "20191224", "20191225", "20191226", "20200101", "20200106", "20200410", "20200413", "20200501", "20200521", "20200619", "20201224", "20201225", "20210101", "20210106", "20210402", "20210405", "20210513", "20210625", "20211206", "20211224", "20220106", "20220415", "20220418", "20220526", "20220624", "20221206", "20221226", "20230106", "20230407", "20230410", "20230501", "20230518", "20230623", "20231206", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20240509", "20240621", "20241206", "20241224", "20241225", "20241226", "20250101", "20250106", "20250418", "20250421", "20250501", "20250529", "20250620", "20251224", "20251225", "20251226", "20260101", "20260106", "20260403", "20260406", "20260501", "20260514", "20260619", "20261224", "20261225", "20270101", "20270106", "20270326", "20270329", "20270506", "20270625", "20271206", "20271224", "20280106", "20280414", "20280417", "20280501", "20280525", "20280623", "20281206", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20290510", "20290622", "20291206", "20291224", "20291225", "20291226", "20300101", "20300419", "20300422", "20300501", "20300530", "20300621", "20301206", "20301224", "20301225", "20301226", "20310101", "20310106", "20310411", "20310414", "20310501", "20310522", "20310620", "20311224", "20311225", "20311226", "20320101", "20320106", "20320326", "20320329", "20320506", "20320625", "20321206", "20321224", "20330106", "20330415", "20330418", "20330526", "20330624", "20331206", "20331226", "20340106", "20340407", "20340410", "20340501", "20340518", "20340623", "20341206", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20350503", "20350622", "20351206", "20351224", "20351225", "20351226", "20360101", "20360411", "20360414", "20360501", "20360522", "20360620", "20361224", "20361225", "20361226", "20370101", "20370106", "20370403", "20370406", "20370501", "20370514", "20370619", "20371224", "20371225", "20380101", "20380106", "20380423", "20380426", "20380603", "20380625", "20381206", "20381224", "20390106", "20390408", "20390411", "20390519", "20390624", "20391206", "20391226", "20400106", "20400330", "20400402", "20400501", "20400510", "20400622", "20401206", "20401224", "20401225", "20401226", "20410101", "20410419", "20410422", "20410501", "20410530", "20410621", "20411206", "20411224", "20411225", "20411226", "20420101", "20420106", "20420404", "20420407", "20420501", "20420515", "20420620", "20421224", "20421225", "20421226", "20430101", "20430106", "20430327", "20430330", "20430501", "20430507", "20430619", "20431224", "20431225", "20440101", "20440106", "20440415", "20440418", "20440526", "20440624", "20441206", "20441226", "20450106", "20450407", "20450410", "20450501", "20450518", "20450623", "20451206", "20451225", "20451226", "20460101", "20460323", "20460326", "20460501", "20460503", "20460622", "20461206", "20461224", "20461225", "20461226", "20470101", "20470412", "20470415", "20470501", "20470523", "20470621", "20471206", "20471224", "20471225", "20471226", "20480101", "20480106", "20480403", "20480406", "20480501", "20480514", "20480619", "20481224", "20481225", "20490101", "20490106", "20490416", "20490419", "20490527", "20490625", "20491206", "20491224", "20500106", "20500408", "20500411", "20500519", "20500624", "20501206", "20501226", "20510106", "20510331", "20510403", "20510501", "20510511", "20510623", "20511206", "20511225", "20511226", "20520101", "20520419", "20520422", "20520501", "20520530", "20520621", "20521206", "20521224", "20521225", "20521226", "20530101", "20530106", "20530404", "20530407", "20530501", "20530515", "20530620", "20531224", "20531225", "20531226", "20540101", "20540106", "20540327", "20540330", "20540501", "20540507", "20540619", "20541224", "20541225", "20550101", "20550106", "20550416", "20550419", "20550527", "20550625", "20551206", "20551224", "20560106", "20560331", "20560403", "20560501", "20560511", "20560623", "20561206", "20561225", "20561226", "20570101", "20570420", "20570423", "20570501", "20570531", "20570622", "20571206", "20571224", "20571225", "20571226", "20580101", "20580412", "20580415", "20580501", "20580523", "20580621", "20581206", "20581224", "20581225", "20581226", "20590101", "20590106", "20590328", "20590331", "20590501", "20590508", "20590620", "20591224", "20591225", "20591226", "20600101", "20600106", "20600416", "20600419", "20600527", "20600625", "20601206", "20601224", "20610106", "20610408", "20610411", "20610519", "20610624", "20611206", "20611226" ], + "MonthsToExclude": [] + }, + "HKG": { + "InheritedCalendar": [], + "Name": "HKG", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880217", "19880218", "19880219", "19880401", "19880404", "19880405", "19880613", "19880829", "19880926", "19881019", "19881226", "19881227", "19890102", "19890206", "19890207", "19890208", "19890324", "19890327", "19890405", "19890608", "19890612", "19890619", "19890828", "19890915", "19891009", "19891225", "19891226", "19900101", "19900126", "19900405", "19900413", "19900416", "19900528", "19900611", "19900827", "19900905", "19900928", "19901225", "19901226", "19910101", "19910214", "19910215", "19910329", "19910401", "19910405", "19910610", "19910826", "19910924", "19911017", "19911225", "19911226", "19920101", "19920203", "19920204", "19920205", "19920417", "19920420", "19920604", "19920615", "19920831", "19921005", "19921225", "19921228", "19930101", "19930122", "19930125", "19930405", "19930409", "19930412", "19930614", "19930624", "19930830", "19931001", "19931227", "19940210", "19940211", "19940401", "19940404", "19940405", "19940613", "19940614", "19940829", "19940921", "19941013", "19941226", "19941227", "19950131", "19950201", "19950202", "19950405", "19950414", "19950417", "19950602", "19950612", "19950828", "19951003", "19951225", "19951226", "19960101", "19960219", "19960220", "19960221", "19960404", "19960405", "19960408", "19960617", "19960620", "19960826", "19961021", "19961225", "19961226", "19970101", "19970206", "19970207", "19970328", "19970331", "19970609", "19970630", "19970701", "19970702", "19970818", "19970917", "19971001", "19971002", "19971010", "19971225", "19971226", "19980101", "19980128", "19980129", "19980130", "19980410", "19980413", "19980615", "19980831", "19980907", "19980930", "19981225", "19981228", "19990101", "19990216", "19990217", "19990218", "19990402", "19990405", "19990614", "19990618", "19990830", "19991019", "19991227", "19991228", "20000207", "20000405", "20000421", "20000424", "20000606", "20000612", "20000828", "20000914", "20001225", "20001226", "20010101", "20010125", "20010126", "20010405", "20010413", "20010416", "20010611", "20010927", "20011225", "20011226", "20020101", "20020212", "20020213", "20020214", "20020329", "20020401", "20020405", "20020501", "20020520", "20020701", "20020826", "20021001", "20021014", "20021225", "20021226", "20030101", "20030131", "20030203", "20030418", "20030421", "20030501", "20030508", "20030604", "20030701", "20030912", "20031001", "20031004", "20031225", "20031226", "20040101", "20040122", "20040123", "20040405", "20040409", "20040412", "20040526", "20040622", "20040701", "20040929", "20041001", "20041022", "20041227", "20050209", "20050210", "20050211", "20050325", "20050328", "20050405", "20050502", "20050516", "20050611", "20050701", "20050919", "20051011", "20051226", "20051227", "20060102", "20060130", "20060131", "20060405", "20060414", "20060417", "20060501", "20060505", "20060531", "20061002", "20061030", "20061225", "20061226", "20070101", "20070219", "20070220", "20070405", "20070406", "20070409", "20070501", "20070524", "20070619", "20070702", "20070926", "20071001", "20071019", "20071225", "20071226", "20080101", "20080207", "20080208", "20080321", "20080324", "20080404", "20080501", "20080512", "20080609", "20080701", "20080806", "20080822", "20080915", "20081001", "20081007", "20081225", "20081226", "20090101", "20090126", "20090127", "20090128", "20090410", "20090413", "20090501", "20090528", "20090701", "20091001", "20091026", "20091225", "20100101", "20100215", "20100216", "20100402", "20100405", "20100406", "20100521", "20100616", "20100701", "20100923", "20101001", "20101227", "20110203", "20110204", "20110405", "20110422", "20110425", "20110502", "20110510", "20110606", "20110701", "20110913", "20110929", "20111005", "20111226", "20111227", "20120102", "20120123", "20120124", "20120125", "20120404", "20120406", "20120409", "20120501", "20120702", "20121001", "20121002", "20121023", "20121225", "20121226", "20130101", "20130211", "20130212", "20130213", "20130329", "20130401", "20130404", "20130501", "20130517", "20130612", "20130701", "20130920", "20131001", "20131014", "20131225", "20131226", "20140101", "20140131", "20140203", "20140418", "20140421", "20140501", "20140506", "20140602", "20140701", "20140909", "20141001", "20141002", "20141225", "20141226", "20150101", "20150219", "20150220", "20150403", "20150406", "20150407", "20150501", "20150525", "20150701", "20150928", "20151001", "20151021", "20151225", "20160101", "20160208", "20160209", "20160210", "20160325", "20160328", "20160404", "20160502", "20160609", "20160701", "20160916", "20161010", "20161226", "20161227", "20170102", "20170130", "20170131", "20170404", "20170414", "20170417", "20170501", "20170503", "20170530", "20171002", "20171005", "20171225", "20171226", "20180101", "20180216", "20180219", "20180330", "20180402", "20180405", "20180501", "20180522", "20180618", "20180702", "20180925", "20181001", "20181017", "20181225", "20181226", "20190101", "20190205", "20190206", "20190207", "20190405", "20190419", "20190422", "20190501", "20190513", "20190607", "20190701", "20191001", "20191007", "20191225", "20191226", "20200101", "20200127", "20200128", "20200410", "20200413", "20200430", "20200501", "20200625", "20200701", "20201001", "20201002", "20201026", "20201225", "20210101", "20210212", "20210215", "20210402", "20210405", "20210406", "20210519", "20210614", "20210701", "20210922", "20211001", "20211014", "20211227", "20220201", "20220202", "20220203", "20220405", "20220415", "20220418", "20220502", "20220509", "20220603", "20220701", "20220912", "20221004", "20221226", "20221227", "20230102", "20230123", "20230124", "20230125", "20230405", "20230407", "20230410", "20230501", "20230526", "20230622", "20231002", "20231023", "20231225", "20231226", "20240101", "20240212", "20240213", "20240329", "20240401", "20240404", "20240501", "20240515", "20240610", "20240701", "20240918", "20241001", "20241011", "20241225", "20241226", "20250101", "20250129", "20250130", "20250131", "20250404", "20250418", "20250421", "20250501", "20250505", "20250701", "20251001", "20251007", "20251029", "20251225", "20251226", "20260101", "20260217", "20260218", "20260219", "20260403", "20260406", "20260407", "20260501", "20260525", "20260619", "20260701", "20261001", "20261019", "20261225", "20270101", "20270208", "20270209", "20270326", "20270329", "20270405", "20270513", "20270609", "20270701", "20270916", "20271001", "20271008", "20271227", "20280126", "20280127", "20280128", "20280404", "20280414", "20280417", "20280501", "20280502", "20280529", "20281002", "20281004", "20281026", "20281225", "20281226", "20290101", "20290213", "20290214", "20290215", "20290330", "20290402", "20290404", "20290501", "20290521", "20290702", "20290924", "20291001", "20291016", "20291225", "20291226", "20300101", "20300204", "20300205", "20300206", "20300405", "20300419", "20300422", "20300501", "20300509", "20300605", "20300701", "20300913", "20301001", "20301225", "20301226", "20310101", "20310123", "20310124", "20310411", "20310414", "20310501", "20310528", "20310624", "20310701", "20311001", "20311002", "20311024", "20311225", "20311226", "20320101", "20320211", "20320212", "20320213", "20320326", "20320329", "20320405", "20320517", "20320701", "20320920", "20321001", "20321012", "20321227", "20330131", "20330201", "20330202", "20330404", "20330415", "20330418", "20330502", "20330506", "20330601", "20330701", "20330909", "20331226", "20331227", "20340102", "20340220", "20340221", "20340222", "20340405", "20340407", "20340410", "20340501", "20340525", "20340620", "20340928", "20341002", "20341020", "20341225", "20341226", "20350101", "20350208", "20350209", "20350323", "20350326", "20350405", "20350501", "20350515", "20350611", "20350702", "20350917", "20351001", "20351009", "20351225", "20351226", "20360101", "20360128", "20360129", "20360130", "20360404", "20360411", "20360414", "20360501", "20360530", "20360701", "20361001", "20361006", "20361027", "20361225", "20361226", "20370101", "20370216", "20370217", "20370218", "20370403", "20370406", "20370501", "20370522", "20370618", "20370701", "20370925", "20371001", "20371225", "20380101", "20380204", "20380205", "20380405", "20380423", "20380426", "20380511", "20380607", "20380701", "20380914", "20381001", "20381007", "20381227", "20390124", "20390125", "20390126", "20390405", "20390408", "20390411", "20390502", "20390527", "20390701", "20391003", "20391026", "20391226", "20391227", "20400102", "20400213", "20400214", "20400215", "20400330", "20400402", "20400404", "20400501", "20400518", "20400614", "20400702", "20400921", "20401001", "20401015", "20401225", "20401226", "20410101", "20410201", "20410204", "20410404", "20410419", "20410422", "20410501", "20410507", "20410603", "20410701", "20410911", "20411001", "20411003", "20411225", "20411226", "20420101", "20420122", "20420123", "20420124", "20420403", "20420404", "20420407", "20420501", "20420526", "20420623", "20420701", "20420929", "20421001", "20421022", "20421225", "20421226", "20430101", "20430210", "20430211", "20430212", "20430327", "20430330", "20430406", "20430501", "20430611", "20430701", "20430918", "20431001", "20431012", "20431225", "20440101", "20440201", "20440202", "20440404", "20440415", "20440418", "20440502", "20440505", "20440531", "20440701", "20441006", "20441226", "20441227", "20450102", "20450217", "20450220", "20450404", "20450407", "20450410", "20450501", "20450524", "20450619", "20450926", "20451002", "20451018", "20451225", "20451226", "20460101", "20460206", "20460207", "20460208", "20460323", "20460326", "20460404", "20460501", "20460514", "20460608", "20460702", "20460917", "20461001", "20461008", "20461225", "20461226", "20470101", "20470128", "20470129", "20470405", "20470412", "20470415", "20470501", "20470502", "20470529", "20470701", "20471001", "20471028", "20471225", "20471226", "20480101", "20480214", "20480217", "20480403", "20480406", "20480501", "20480520", "20480615", "20480701", "20480923", "20481001", "20481016", "20481225", "20490101", "20490202", "20490203", "20490204", "20490405", "20490416", "20490419", "20490510", "20490604", "20490701", "20490913", "20491001", "20491005", "20491227", "20500124", "20500125", "20500126", "20500404", "20500408", "20500411", "20500502", "20500623", "20500701", "20501024", "20501226", "20501227", "20510102", "20510213", "20510214", "20510331", "20510403", "20510405", "20510501", "20510517", "20510613", "20510920", "20511002", "20511013", "20511225", "20511226", "20520101", "20520201", "20520202", "20520404", "20520419", "20520422", "20520501", "20520506", "20520701", "20520909", "20521001", "20521030", "20521225", "20521226", "20530101", "20530219", "20530220", "20530221", "20530403", "20530404", "20530407", "20530501", "20530526", "20530620", "20530701", "20531001", "20531020", "20531225", "20531226", "20540101", "20540209", "20540210", "20540211", "20540327", "20540330", "20540501", "20540515", "20540610", "20540701", "20540917", "20541001", "20541009", "20541225", "20550101", "20550128", "20550129", "20550405", "20550416", "20550419", "20550504", "20550531", "20550701", "20551001", "20551006", "20551028", "20551227", "20560215", "20560216", "20560217", "20560331", "20560403", "20560404", "20560501", "20560522", "20560925", "20561002", "20561017", "20561225", "20561226", "20570101", "20570205", "20570206", "20570207", "20570404", "20570420", "20570423", "20570501", "20570511", "20570606", "20570702", "20570914", "20571001", "20571225", "20571226", "20580101", "20580124", "20580125", "20580404", "20580412", "20580415", "20580430", "20580501", "20580625", "20580701", "20581001", "20581003", "20581025", "20581225", "20581226", "20590101", "20590212", "20590213", "20590214", "20590328", "20590331", "20590501", "20590519", "20590701", "20590922", "20591001", "20591014", "20591225", "20591226", "20600101", "20600202", "20600203", "20600204", "20600405", "20600416", "20600419", "20600507", "20600603", "20600701", "20600910", "20601001", "20601227", "20610121", "20610124", "20610404", "20610408", "20610411", "20610502", "20610526", "20610622", "20610701", "20610929", "20611021", "20611226", "20611227" ], + "MonthsToExclude": [] + }, + "IST": { + "InheritedCalendar": [], + "Name": "IST", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20000101", "20000103", "20000110", "20000315", "20000316", "20000317", "20000519", "20000830", "20001227", "20001228", "20001229", "20020423", "20030211", "20030212", "20030213", "20030214", "20030423", "20030519", "20031029", "20031125", "20031126", "20031127", "20040101", "20040202", "20040203", "20040204", "20040423", "20040519", "20040830", "20041029", "20041115", "20041116", "20050120", "20050121", "20050519", "20050830", "20051103", "20051104", "20060110", "20060111", "20060112", "20060113", "20060519", "20060830", "20061023", "20061024", "20061025", "20070101", "20070102", "20070103", "20070423", "20070830", "20071012", "20071029", "20071220", "20071221", "20080101", "20080423", "20080519", "20080930", "20081001", "20081002", "20081029", "20081208", "20081209", "20081210", "20081211", "20090101", "20090423", "20090501", "20090519", "20090921", "20090922", "20091029", "20091127", "20091130", "20100101", "20100423", "20100519", "20100830", "20100909", "20100910", "20101029", "20101116", "20101117", "20101118", "20101119", "20110519", "20110830", "20110831", "20110901", "20111107", "20111108", "20111109", "20120423", "20120501", "20120820", "20120821", "20120830", "20121025", "20121026", "20121029", "20130101", "20130423", "20130501", "20130808", "20130809", "20130830", "20131015", "20131016", "20131017", "20131018", "20131029", "20140101", "20140423", "20140501", "20140519", "20140728", "20140729", "20140730", "20141006", "20141007", "20141029", "20150101", "20150423", "20150501", "20150519", "20150717", "20150923", "20150924", "20150925", "20151029", "20160101", "20160519", "20160705", "20160706", "20160707", "20160830", "20160912", "20160913", "20160914", "20170501", "20170519", "20170626", "20170627", "20170830", "20170901", "20170904", "20180101", "20180423", "20180501", "20180615", "20180821", "20180822", "20180823", "20180824", "20180830", "20181029", "20190101", "20190423", "20190501", "20190604", "20190605", "20190606", "20190812", "20190813", "20190814", "20190830", "20191029", "20200101", "20200423", "20200501", "20200519", "20200525", "20200526", "20200730", "20200731", "20201029", "20210101", "20210423", "20210513", "20210514", "20210519", "20210720", "20210721", "20210722", "20210723", "20210830", "20211029", "20220502", "20220503", "20220504", "20220519", "20220711", "20220712", "20220830", "20230421", "20230501", "20230519", "20230628", "20230629", "20230630", "20230830", "20240101", "20240409", "20240410", "20240411", "20240423", "20240501", "20240617", "20240618", "20240619", "20240830", "20241029", "20250101", "20250331", "20250401", "20250423", "20250501", "20250519", "20250606", "20250609", "20251029", "20260101", "20260320", "20260423", "20260501", "20260519", "20260526", "20260527", "20260528", "20260529", "20261029", "20270101", "20270309", "20270310", "20270311", "20270423", "20270517", "20270518", "20270519", "20270830", "20271029", "20280228", "20280501", "20280505", "20280508", "20280519", "20280830", "20290101", "20290214", "20290215", "20290216", "20290423", "20290424", "20290425", "20290426", "20290427", "20290501", "20290830", "20291029", "20300101", "20300204", "20300205", "20300415", "20300416", "20300423", "20300501", "20300830", "20301029", "20310101", "20310124", "20310402", "20310403", "20310404", "20310423", "20310501", "20310519", "20311029", "20320101", "20320113", "20320114", "20320115", "20320322", "20320323", "20320324", "20320423", "20320519", "20320830", "20321029", "20330103", "20330104", "20330311", "20330314", "20330519", "20330830", "20331222", "20331223", "20340301", "20340302", "20340303", "20340501", "20340519", "20340830", "20341212", "20341213", "20341214", "20350101", "20350219", "20350220", "20350221", "20350423", "20350501", "20350830", "20351029", "20351203", "20360101", "20360207", "20360208", "20360423", "20360501", "20360519", "20361029", "20361119", "20361120", "20361121", "20370101", "20370126", "20370127", "20370128", "20370129", "20370423", "20370501", "20370519", "20371029", "20371109", "20371110", "20380101", "20380115", "20380118", "20380423", "20380519", "20380830", "20381029", "20390105", "20390106", "20390107", "20390519", "20390830", "20391019", "20391020", "20391021", "20391226", "20391227", "20391228", "20391229", "20400423", "20400501", "20400830", "20401008", "20401009", "20401029", "20401214", "20401217", "20410101", "20410423", "20410501", "20410830", "20410926", "20410927", "20411029", "20411204", "20411205", "20411206", "20420101", "20420423", "20420501", "20420519", "20420915", "20420916", "20420917", "20421029", "20421124", "20421125", "20421126", "20430101", "20430423", "20430501", "20430519", "20430904", "20431029", "20431112", "20431113", "20440101", "20440519", "20440824", "20440825", "20440826", "20440830", "20441031", "20441101", "20441102", "20441103", "20450501", "20450519", "20450814", "20450815", "20450816", "20450830", "20451020", "20451023", "20460101", "20460423", "20460501", "20460803", "20460830", "20461010", "20461011", "20461012", "20461029", "20470101", "20470423", "20470501", "20470724", "20470725", "20470726", "20470830", "20470930", "20471001", "20471002", "20471003", "20471029", "20480101", "20480423", "20480501", "20480519", "20480713", "20480714", "20480918", "20480921", "20481029", "20490101", "20490423", "20490519", "20490701", "20490702", "20490830", "20490908", "20490909", "20490910", "20491029", "20500519", "20500620", "20500621", "20500622", "20500829", "20500830", "20500831", "20510501", "20510519", "20510612", "20510817", "20510818", "20510830", "20520101", "20520423", "20520501", "20520529", "20520530", "20520531", "20520805", "20520806", "20520807", "20520808", "20520830", "20521029", "20530101", "20530423", "20530501", "20530519", "20530520", "20530521", "20530728", "20530729", "20531029", "20540101", "20540423", "20540501", "20540508", "20540519", "20540715", "20540716", "20540717", "20541029", "20550101", "20550423", "20550428", "20550429", "20550430", "20550519", "20550705", "20550706", "20550707", "20550708", "20550830", "20551029", "20560417", "20560418", "20560501", "20560519", "20560623", "20560626", "20560830", "20570101", "20570405", "20570406", "20570423", "20570501", "20570612", "20570613", "20570614", "20570615", "20570830", "20571029", "20580101", "20580325", "20580326", "20580327", "20580423", "20580501", "20580603", "20580604", "20580830", "20581029", "20590101", "20590317", "20590423", "20590501", "20590519", "20590522", "20590523", "20591029", "20600101", "20600303", "20600304", "20600305", "20600423", "20600510", "20600511", "20600512", "20600513", "20600519", "20600830", "20601029", "20610221", "20610222", "20610223", "20610502", "20610503", "20610519", "20610830" ], + "MonthsToExclude": [] + }, + "JAK": { + "InheritedCalendar": [], + "Name": "JAK", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19940110", "19940314", "19940401", "19940512", "19940525", "19941230", "20030212", "20030303", "20030402", "20030418", "20030515", "20030516", "20030530", "20030818", "20030922", "20031124", "20031125", "20031126", "20031127", "20031128", "20031225", "20031226", "20040101", "20040122", "20040223", "20040322", "20040405", "20040409", "20040503", "20040520", "20040603", "20040817", "20040913", "20041115", "20041116", "20041117", "20041118", "20041119", "20050121", "20050209", "20050211", "20050325", "20050422", "20050505", "20050524", "20050817", "20050902", "20051102", "20051103", "20051104", "20051107", "20051108", "20060110", "20060131", "20060330", "20060410", "20060414", "20060525", "20060817", "20060821", "20061023", "20061024", "20061025", "20061225", "20070101", "20070319", "20070406", "20070517", "20070601", "20070817", "20071012", "20071015", "20071016", "20071220", "20071225", "20071231", "20080101", "20080110", "20080207", "20080307", "20080320", "20080321", "20080501", "20080520", "20080730", "20080818", "20080930", "20081001", "20081002", "20081003", "20081208", "20081225", "20081229", "20090101", "20090102", "20090126", "20090309", "20090326", "20090409", "20090410", "20090521", "20090708", "20090720", "20090817", "20090921", "20090922", "20090923", "20091127", "20091218", "20091225", "20100101", "20100226", "20100316", "20100402", "20100513", "20100528", "20100817", "20100909", "20100910", "20100913", "20101117", "20101207", "20101224", "20110203", "20110215", "20110422", "20110517", "20110602", "20110629", "20110817", "20110829", "20110830", "20110831", "20110901", "20110902", "20111226", "20120123", "20120323", "20120406", "20120517", "20120518", "20120817", "20120820", "20120821", "20120822", "20121026", "20121115", "20121116", "20121224", "20121225", "20130101", "20130124", "20130312", "20130329", "20130509", "20130606", "20130807", "20130808", "20130809", "20130812", "20130813", "20131015", "20131105", "20131224", "20131225", "20140101", "20140114", "20140131", "20140331", "20140418", "20140515", "20140527", "20140529", "20140725", "20140728", "20140729", "20140730", "20140731", "20140801", "20140818", "20141224", "20141225", "20150101", "20150219", "20150403", "20150514", "20150602", "20150716", "20150717", "20150817", "20150924", "20151014", "20151224", "20151225", "20160101", "20160208", "20160309", "20160325", "20160505", "20160705", "20160706", "20160707", "20160708", "20160817", "20160912", "20161212", "20170328", "20170414", "20170424", "20170511", "20170525", "20170626", "20170627", "20170628", "20170817", "20170901", "20170921", "20171201", "20171225", "20180101", "20180216", "20180330", "20180510", "20180529", "20180614", "20180615", "20180817", "20180822", "20180911", "20181120", "20181224", "20181225", "20190101", "20190205", "20190403", "20190405", "20190419", "20190530", "20190604", "20190605", "20190606", "20190607", "20191224", "20191225", "20200101", "20200325", "20200410", "20200507", "20200521", "20200525", "20200526", "20200527", "20200731", "20200817", "20200820", "20201029", "20201224", "20201225", "20210101", "20210212", "20210311", "20210315", "20210402", "20210512", "20210513", "20210514", "20210517", "20210518", "20210526", "20210720", "20210810", "20210817", "20211019", "20211224", "20220201", "20220228", "20220415", "20220429", "20220502", "20220503", "20220504", "20220505", "20220506", "20220516", "20220526", "20220817", "20230322", "20230407", "20230420", "20230421", "20230518", "20230629", "20230719", "20230817", "20230927", "20231225", "20240101", "20240208", "20240311", "20240329", "20240409", "20240410", "20240411", "20240412", "20240509", "20240523", "20240617", "20241224", "20241225", "20250101", "20250127", "20250129", "20250328", "20250331", "20250401", "20250402", "20250403", "20250404", "20250418", "20250512", "20250529", "20250606", "20250627", "20250818", "20250905", "20251224", "20251225", "20260101", "20260116", "20260217", "20260319", "20260320", "20260403", "20260417", "20260514", "20260527", "20260616", "20260817", "20260825", "20261224", "20261225", "20270101", "20270105", "20270309", "20270310", "20270311", "20270312", "20270326", "20270407", "20270506", "20270517", "20270520", "20270817", "20271224", "20280126", "20280228", "20280229", "20280301", "20280327", "20280414", "20280505", "20280509", "20280525", "20280526", "20280803", "20280817", "20281214", "20281225", "20290101", "20290213", "20290214", "20290215", "20290216", "20290219", "20290220", "20290330", "20290424", "20290510", "20290515", "20290528", "20290724", "20290817", "20291203", "20291224", "20291225", "20300101", "20300201", "20300204", "20300205", "20300206", "20300207", "20300208", "20300403", "20300419", "20300517", "20300530", "20301224", "20301225", "20310101", "20310123", "20310124", "20310127", "20310128", "20310324", "20310403", "20310411", "20310423", "20310507", "20310522", "20310702", "20310818", "20311113", "20311224", "20311225", "20320101", "20320113", "20320114", "20320115", "20320116", "20320211", "20320322", "20320326", "20320412", "20320506", "20320525", "20320817", "20321101", "20321224", "20321231", "20330103", "20330104", "20330105", "20330106", "20330107", "20330131", "20330331", "20330401", "20330415", "20330526", "20330610", "20330817", "20331021", "20331222", "20331223", "20340301", "20340322", "20340407", "20340419", "20340518", "20340530", "20340602", "20340817", "20341010", "20341211", "20341212", "20341213", "20341214", "20341215", "20341225", "20350101", "20350208", "20350219", "20350323", "20350409", "20350503", "20350522", "20350817", "20351130", "20351203", "20351204", "20351224", "20351225", "20360101", "20360128", "20360208", "20360228", "20360328", "20360411", "20360509", "20360522", "20360818", "20360918", "20361118", "20361119", "20361120", "20361121", "20361224", "20361225", "20370101", "20370127", "20370216", "20370317", "20370403", "20370428", "20370514", "20370529", "20370817", "20370908", "20371106", "20371109", "20371110", "20371111", "20371112", "20371113", "20371224", "20371225", "20380101", "20380204", "20380205", "20380405", "20380423", "20380519", "20380603", "20380817", "20381028", "20381029", "20381224", "20390105", "20390124", "20390126", "20390325", "20390406", "20390408", "20390519", "20390817", "20390818", "20391018", "20391019", "20391020", "20391021", "20391226", "20400314", "20400330", "20400510", "20400806", "20400817", "20401008", "20401009", "20401010", "20401224", "20401225", "20410101", "20410104", "20410201", "20410315", "20410402", "20410419", "20410516", "20410530", "20410726", "20410926", "20410927", "20411204", "20411224", "20411225", "20420101", "20420122", "20420304", "20420404", "20420515", "20420604", "20420715", "20420818", "20420915", "20420916", "20420917", "20420918", "20420919", "20421224", "20421225", "20430101", "20430210", "20430327", "20430410", "20430507", "20430817", "20430904", "20430907", "20430908", "20431112", "20431203", "20431224", "20431225", "20440101", "20440211", "20440329", "20440415", "20440512", "20440526", "20440624", "20440817", "20440823", "20440824", "20440825", "20440826", "20441031", "20441121", "20450130", "20450217", "20450320", "20450407", "20450518", "20450531", "20450613", "20450811", "20450814", "20450815", "20450816", "20450817", "20450818", "20451110", "20451225", "20460101", "20460119", "20460206", "20460323", "20460503", "20460803", "20460806", "20460807", "20460817", "20461010", "20461031", "20461224", "20461225", "20470101", "20470109", "20470327", "20470412", "20470510", "20470523", "20470723", "20470724", "20470725", "20470726", "20470930", "20471224", "20471225", "20480101", "20480214", "20480316", "20480403", "20480511", "20480514", "20480528", "20480713", "20480714", "20480715", "20480817", "20481009", "20481218", "20481224", "20481225", "20490101", "20490202", "20490416", "20490430", "20490517", "20490527", "20490630", "20490701", "20490702", "20490705", "20490706", "20490817", "20490908", "20490928", "20491207", "20491224", "20500324", "20500408", "20500419", "20500519", "20500620", "20500621", "20500622", "20500623", "20500624", "20500817", "20510331", "20510412", "20510511", "20510526", "20510609", "20510612", "20510613", "20510817", "20510907", "20511116", "20511225", "20520101", "20520201", "20520329", "20520401", "20520419", "20520514", "20520529", "20520530", "20520531", "20520603", "20520604", "20520805", "20520826", "20521104", "20521224", "20521225", "20530101", "20530219", "20530318", "20530320", "20530404", "20530515", "20530516", "20530519", "20530520", "20530521", "20530522", "20530523", "20530815", "20530818", "20531024", "20531224", "20531225", "20540101", "20540327", "20540408", "20540507", "20540508", "20540511", "20540512", "20540521", "20540716", "20540805", "20540817", "20541014", "20541224", "20541225", "20550101", "20550128", "20550224", "20550329", "20550416", "20550427", "20550428", "20550429", "20550430", "20550511", "20550527", "20550705", "20550726", "20550817", "20551224", "20560215", "20560317", "20560331", "20560417", "20560418", "20560419", "20560511", "20560529", "20560714", "20560817", "20560922", "20561225", "20570101", "20570202", "20570404", "20570405", "20570406", "20570409", "20570410", "20570420", "20570531", "20570613", "20570703", "20570817", "20570911", "20571224", "20571225", "20580101", "20580122", "20580124", "20580322", "20580325", "20580326", "20580327", "20580328", "20580329", "20580412", "20580424", "20580508", "20580523", "20581224", "20581225", "20590101", "20590212", "20590314", "20590317", "20590318", "20590328", "20590414", "20590508", "20590522", "20590527", "20590612", "20590818", "20590821", "20591224", "20591225", "20600101", "20600202", "20600303", "20600304", "20600305", "20600308", "20600309", "20600401", "20600416", "20600511", "20600527", "20600531", "20600809", "20600817", "20601220", "20601224", "20610121", "20610218", "20610221", "20610222", "20610223", "20610224", "20610225", "20610408", "20610420", "20610504", "20610519", "20610729", "20610817" ], + "MonthsToExclude": [] + }, + "JHB": { + "InheritedCalendar": [ "EASTER", "ZA_WORKERS", "ZA_HUMANRIGHTS", "ZA_FREEDOM", "ZA_HERITAGE", "ZA_NEWYEAR", "ZA_RECONCILLIATION", "ZA_WOMENS", "ZA_BOXING", "ZA_XMAS", "ZA_YOUTH" ], + "Name": "JHB", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19990602", "19991231", "20000102", "20040414", "20060301", "20080502", "20090422", "20110518", "20111227", "20140507", "20160803", "20161227", "20190508" ], + "MonthsToExclude": [] + }, + "JOH": { + "InheritedCalendar": [], + "Name": "JOH", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19970101", "19970321", "19970328", "19970331", "19970428", "19970501", "19970616", "19970809", "19970924", "19971216", "19971225", "19971226", "20000421", "20000424", "20000427", "20000501", "20000616", "20000809", "20000925", "20001225", "20001226", "20010501", "20010809", "20020321", "20020329", "20020401", "20020427", "20020501", "20020617", "20020809", "20020924", "20021216", "20021225", "20021226", "20030101", "20030321", "20030418", "20030421", "20030428", "20030501", "20030616", "20030924", "20031216", "20031225", "20031226", "20040101", "20040322", "20040409", "20040412", "20040414", "20040427", "20040616", "20040809", "20040924", "20041216", "20041227", "20050321", "20050325", "20050328", "20050427", "20050502", "20050616", "20050809", "20051216", "20051226", "20060102", "20060321", "20060414", "20060417", "20060427", "20060501", "20060616", "20060809", "20060925", "20061225", "20061226", "20070101", "20070321", "20070406", "20070409", "20070427", "20070501", "20070809", "20070924", "20071217", "20071225", "20071226", "20080101", "20080321", "20080324", "20080428", "20080501", "20080502", "20080616", "20080924", "20081216", "20081225", "20081226", "20090101", "20090410", "20090413", "20090422", "20090427", "20090501", "20090616", "20090810", "20090924", "20091216", "20091225", "20100101", "20100322", "20100402", "20100405", "20100427", "20100616", "20100809", "20100924", "20101216", "20101227", "20110321", "20110422", "20110425", "20110427", "20110502", "20110518", "20110616", "20110809", "20111216", "20111226", "20111227", "20120102", "20120321", "20120406", "20120409", "20120427", "20120501", "20120809", "20120924", "20121217", "20121225", "20121226", "20130101", "20130321", "20130329", "20130401", "20130501", "20130617", "20130809", "20130924", "20131216", "20131225", "20131226", "20140101", "20140321", "20140418", "20140421", "20140428", "20140501", "20140616", "20140924", "20141216", "20141225", "20141226", "20150101", "20150403", "20150406", "20150427", "20150501", "20150616", "20150810", "20150924", "20151216", "20151225", "20160101", "20160321", "20160325", "20160328", "20160427", "20160502", "20160616", "20160809", "20161216", "20161226", "20170102", "20170321", "20170414", "20170417", "20170427", "20170501", "20170616", "20170809", "20170925", "20171225", "20171226", "20180101", "20180321", "20180330", "20180402", "20180427", "20180501", "20180809", "20180924", "20181217", "20181225", "20181226", "20190101", "20190321", "20190419", "20190422", "20190501", "20190617", "20190809", "20190924", "20191216", "20191225", "20191226", "20200101", "20200410", "20200413", "20200427", "20200501", "20200616", "20200810", "20200924", "20201216", "20201225", "20210101", "20210322", "20210402", "20210405", "20210427", "20210616", "20210809", "20210924", "20211216", "20211227", "20220321", "20220415", "20220418", "20220427", "20220502", "20220616", "20220809", "20221216", "20221226", "20230102", "20230321", "20230407", "20230410", "20230427", "20230501", "20230616", "20230809", "20230925", "20231225", "20231226", "20240101", "20240321", "20240329", "20240401", "20240501", "20240617", "20240809", "20240924", "20241216", "20241225", "20241226", "20250101", "20250321", "20250418", "20250421", "20250428", "20250501", "20250616", "20250924", "20251216", "20251225", "20251226", "20260101", "20260403", "20260406", "20260427", "20260501", "20260616", "20260810", "20260924", "20261216", "20261225", "20270101", "20270322", "20270326", "20270329", "20270427", "20270616", "20270809", "20270924", "20271216", "20271227", "20280321", "20280414", "20280417", "20280427", "20280501", "20280616", "20280809", "20280925", "20281225", "20281226", "20290101", "20290321", "20290330", "20290402", "20290427", "20290501", "20290809", "20290924", "20291217", "20291225", "20291226", "20300101", "20300321", "20300419", "20300422", "20300501", "20300617", "20300809", "20300924", "20301216", "20301225", "20301226", "20310101", "20310321", "20310411", "20310414", "20310428", "20310501", "20310616", "20310924", "20311216", "20311225", "20311226", "20320101", "20320322", "20320326", "20320329", "20320427", "20320616", "20320809", "20320924", "20321216", "20321227", "20330321", "20330415", "20330418", "20330427", "20330502", "20330616", "20330809", "20331216", "20331226", "20340102", "20340321", "20340407", "20340410", "20340427", "20340501", "20340616", "20340809", "20340925", "20341225", "20341226", "20350101", "20350321", "20350323", "20350326", "20350427", "20350501", "20350809", "20350924", "20351217", "20351225", "20351226", "20360101", "20360321", "20360411", "20360414", "20360428", "20360501", "20360616", "20360924", "20361216", "20361225", "20361226", "20370101", "20370403", "20370406", "20370427", "20370501", "20370616", "20370810", "20370924", "20371216", "20371225", "20380101", "20380322", "20380423", "20380426", "20380427", "20380616", "20380809", "20380924", "20381216", "20381227", "20390321", "20390408", "20390411", "20390427", "20390502", "20390616", "20390809", "20391216", "20391226", "20400102", "20400321", "20400330", "20400402", "20400427", "20400501", "20400809", "20400924", "20401217", "20401225", "20401226", "20410101", "20410321", "20410419", "20410422", "20410501", "20410617", "20410809", "20410924", "20411216", "20411225", "20411226", "20420101", "20420321", "20420404", "20420407", "20420428", "20420501", "20420616", "20420924", "20421216", "20421225", "20421226", "20430101", "20430327", "20430330", "20430427", "20430501", "20430616", "20430810", "20430924", "20431216", "20431225", "20440101", "20440321", "20440415", "20440418", "20440427", "20440502", "20440616", "20440809", "20441216", "20441226", "20450102", "20450321", "20450407", "20450410", "20450427", "20450501", "20450616", "20450809", "20450925", "20451225", "20451226", "20460101", "20460321", "20460323", "20460326", "20460427", "20460501", "20460809", "20460924", "20461217", "20461225", "20461226", "20470101", "20470321", "20470412", "20470415", "20470501", "20470617", "20470809", "20470924", "20471216", "20471225", "20471226", "20480101", "20480403", "20480406", "20480427", "20480501", "20480616", "20480810", "20480924", "20481216", "20481225", "20490101", "20490322", "20490416", "20490419", "20490427", "20490616", "20490809", "20490924", "20491216", "20491227", "20500321", "20500408", "20500411", "20500427", "20500502", "20500616", "20500809", "20501216", "20501226", "20510102", "20510321", "20510331", "20510403", "20510427", "20510501", "20510616", "20510809", "20510925", "20511225", "20511226", "20520101", "20520321", "20520419", "20520422", "20520501", "20520617", "20520809", "20520924", "20521216", "20521225", "20521226", "20530101", "20530321", "20530404", "20530407", "20530428", "20530501", "20530616", "20530924", "20531216", "20531225", "20531226", "20540101", "20540327", "20540330", "20540427", "20540501", "20540616", "20540810", "20540924", "20541216", "20541225", "20550101", "20550322", "20550416", "20550419", "20550427", "20550616", "20550809", "20550924", "20551216", "20551227", "20560321", "20560331", "20560403", "20560427", "20560501", "20560616", "20560809", "20560925", "20561225", "20561226", "20570101", "20570321", "20570420", "20570423", "20570427", "20570501", "20570809", "20570924", "20571217", "20571225", "20571226", "20580101", "20580321", "20580412", "20580415", "20580501", "20580617", "20580809", "20580924", "20581216", "20581225", "20581226", "20590101", "20590321", "20590328", "20590331", "20590428", "20590501", "20590616", "20590924", "20591216", "20591225", "20591226", "20600101", "20600322", "20600416", "20600419", "20600427", "20600616", "20600809", "20600924", "20601216", "20601227", "20610321", "20610408", "20610411", "20610427", "20610502", "20610616", "20610809", "20611216", "20611226" ], + "MonthsToExclude": [] + }, + "KIE": { + "InheritedCalendar": [], + "Name": "KIE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19801225", "19810101", "19811225", "19820101", "19841225", "19850101", "19851225", "19860101", "19861225", "19870101", "19871225", "19880101", "19891225", "19900101", "19901225", "19910101", "19911225", "19920101", "19921225", "19930101", "19951225", "19960101", "19961225", "19970101", "19971225", "19980101", "19981225", "19990101", "20001225", "20010101", "20011225", "20020101", "20021225", "20030101", "20031225", "20040101", "20061225", "20070101", "20071225", "20080101", "20080102", "20080107", "20080310", "20080428", "20080501", "20080502", "20080509", "20080616", "20080630", "20080825", "20081225", "20090101", "20090102", "20090107", "20090309", "20090420", "20090501", "20090504", "20090511", "20090608", "20090629", "20090824", "20091225", "20100101", "20100104", "20100107", "20100108", "20100308", "20100405", "20100503", "20100504", "20100510", "20100524", "20100628", "20100823", "20100824", "20110103", "20110104", "20110107", "20110307", "20110308", "20110425", "20110502", "20110503", "20110509", "20110613", "20110627", "20110628", "20110824", "20120102", "20120103", "20120109", "20120308", "20120309", "20120416", "20120430", "20120501", "20120502", "20120509", "20120604", "20120628", "20120629", "20120824", "20121225", "20130101", "20130107", "20130308", "20130501", "20130502", "20130503", "20130506", "20130509", "20130510", "20130624", "20130628", "20130826", "20131225", "20140101", "20140106", "20140107", "20140310", "20140421", "20140501", "20140502", "20140509", "20140609", "20140630", "20140825", "20141225", "20150101", "20150102", "20150107", "20150309", "20150413", "20150501", "20150504", "20150511", "20150601", "20150629", "20150824", "20151225", "20160101", "20160107", "20160108", "20160307", "20160308", "20160502", "20160503", "20160504", "20160509", "20160620", "20160627", "20160628", "20160824", "20170102", "20170109", "20170308", "20170417", "20170501", "20170502", "20170508", "20170509", "20170605", "20170628", "20170824", "20170825", "20171225", "20180101", "20180108", "20180308", "20180309", "20180409", "20180430", "20180501", "20180502", "20180509", "20180528", "20180628", "20180629", "20180824", "20181225", "20190101", "20190107", "20190308", "20190429", "20190501", "20190502", "20190503", "20190509", "20190510", "20190617", "20190628", "20190826", "20191225", "20200101", "20200106", "20200107", "20200309", "20200420", "20200501", "20200504", "20200511", "20200608", "20200629", "20200824", "20201225", "20210101", "20210107", "20210108", "20210308", "20210503", "20210504", "20210505", "20210510", "20210621", "20210628", "20210823", "20210824", "20220103", "20220107", "20220307", "20220308", "20220425", "20220502", "20220503", "20220509", "20220613", "20220627", "20220628", "20220824", "20230102", "20230109", "20230308", "20230417", "20230501", "20230502", "20230508", "20230509", "20230605", "20230628", "20230824", "20230825", "20231225", "20240101", "20240108", "20240308", "20240501", "20240502", "20240503", "20240506", "20240509", "20240510", "20240624", "20240628", "20240826", "20241225", "20250101", "20250106", "20250107", "20250310", "20250421", "20250501", "20250502", "20250509", "20250609", "20250630", "20250825", "20251225", "20260101", "20260102", "20260107", "20260309", "20260413", "20260501", "20260504", "20260511", "20260601", "20260629", "20260824", "20261225", "20270101", "20270107", "20270108", "20270308", "20270503", "20270504", "20270505", "20270510", "20270621", "20270628", "20270823", "20270824", "20280103", "20280107", "20280308", "20280417", "20280501", "20280502", "20280508", "20280509", "20280605", "20280628", "20280824", "20280825", "20281225", "20290101", "20290108", "20290308", "20290309", "20290409", "20290430", "20290501", "20290502", "20290509", "20290528", "20290628", "20290629", "20290824", "20291225", "20300101", "20300107", "20300308", "20300429", "20300501", "20300502", "20300503", "20300509", "20300510", "20300617", "20300628", "20300826", "20301225", "20310101", "20310106", "20310107", "20310310", "20310414", "20310501", "20310502", "20310509", "20310602", "20310630", "20310825", "20311225", "20320101", "20320102", "20320107", "20320308", "20320503", "20320504", "20320505", "20320510", "20320621", "20320628", "20320823", "20320824", "20330103", "20330107", "20330307", "20330308", "20330425", "20330502", "20330503", "20330509", "20330613", "20330627", "20330628", "20330824", "20340102", "20340109", "20340308", "20340410", "20340501", "20340502", "20340508", "20340509", "20340529", "20340628", "20340824", "20340825", "20341225", "20350101", "20350108", "20350308", "20350309", "20350430", "20350501", "20350502", "20350509", "20350618", "20350628", "20350629", "20350824", "20351225", "20360101", "20360107", "20360310", "20360421", "20360501", "20360502", "20360509", "20360609", "20360630", "20360825", "20361225", "20370101", "20370102", "20370107", "20370309", "20370406", "20370501", "20370504", "20370511", "20370525", "20370629", "20370824", "20371225", "20380101", "20380107", "20380108", "20380308", "20380426", "20380503", "20380504", "20380510", "20380614", "20380628", "20380823", "20380824", "20390103", "20390107", "20390307", "20390308", "20390418", "20390502", "20390503", "20390509", "20390606", "20390627", "20390628", "20390824", "20400102", "20400109", "20400308", "20400309", "20400430", "20400501", "20400502", "20400507", "20400509", "20400625", "20400628", "20400629", "20400824", "20401225", "20410101", "20410107", "20410308", "20410422", "20410501", "20410502", "20410503", "20410509", "20410510", "20410610", "20410628", "20410826", "20411225", "20420101", "20420106", "20420107", "20420310", "20420414", "20420501", "20420502", "20420509", "20420602", "20420630", "20420825", "20421225", "20430101", "20430102", "20430107", "20430309", "20430501", "20430504", "20430505", "20430511", "20430622", "20430629", "20430824", "20431225", "20440101", "20440107", "20440108", "20440307", "20440308", "20440425", "20440502", "20440503", "20440509", "20440613", "20440627", "20440628", "20440824", "20450102", "20450109", "20450308", "20450410", "20450501", "20450502", "20450508", "20450509", "20450529", "20450628", "20450824", "20450825", "20451225", "20460101", "20460108", "20460308", "20460309", "20460430", "20460501", "20460502", "20460509", "20460618", "20460628", "20460629", "20460824", "20461225", "20470101", "20470107", "20470308", "20470422", "20470501", "20470502", "20470503", "20470509", "20470510", "20470610", "20470628", "20470826", "20471225", "20480101", "20480106", "20480107", "20480309", "20480406", "20480501", "20480504", "20480511", "20480525", "20480629", "20480824", "20481225", "20490101", "20490107", "20490108", "20490308", "20490426", "20490503", "20490504", "20490510", "20490614", "20490628", "20490823", "20490824", "20500103", "20500107", "20500307", "20500308", "20500418", "20500502", "20500503", "20500509", "20500606", "20500627", "20500628", "20500824", "20510102", "20510109", "20510308", "20510501", "20510502", "20510508", "20510509", "20510626", "20510628", "20510824", "20510825", "20511225", "20520101", "20520108", "20520308", "20520422", "20520501", "20520502", "20520503", "20520509", "20520510", "20520610", "20520628", "20520826", "20521225", "20530101", "20530106", "20530107", "20530310", "20530414", "20530501", "20530502", "20530509", "20530602", "20530630", "20530825", "20531225", "20540101", "20540102", "20540107", "20540309", "20540501", "20540504", "20540505", "20540511", "20540622", "20540629", "20540824", "20541225", "20550101", "20550107", "20550108", "20550308", "20550419", "20550503", "20550504", "20550510", "20550607", "20550628", "20550823", "20550824", "20560103", "20560107", "20560308", "20560410", "20560501", "20560502", "20560508", "20560509", "20560529", "20560628", "20560824", "20560825", "20561225", "20570101", "20570108", "20570308", "20570309", "20570430", "20570501", "20570502", "20570509", "20570618", "20570628", "20570629", "20570824", "20571225", "20580101", "20580107", "20580308", "20580415", "20580501", "20580502", "20580503", "20580509", "20580510", "20580603", "20580628", "20580826", "20581225", "20590101", "20590106", "20590107", "20590310", "20590501", "20590502", "20590505", "20590509", "20590623", "20590630", "20590825", "20591225", "20600101", "20600102", "20600107", "20600308", "20600426", "20600503", "20600504", "20600510", "20600614", "20600628", "20600823", "20600824", "20610103", "20610107", "20610307", "20610308", "20610411", "20610502", "20610503", "20610509", "20610530", "20610627", "20610628", "20610824", "20621225", "20630101", "20631225", "20640101", "20641225", "20650101", "20651225", "20660101", "20681225", "20690101", "20691225", "20700101", "20701225" ], + "MonthsToExclude": [] + }, + "KUA": { + "InheritedCalendar": [], + "Name": "KUA", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880217", "19880218", "19880518", "19880530", "19880601", "19880725", "19880815", "19880831", "19881024", "19881108", "19881226", "19890102", "19890201", "19890206", "19890207", "19890501", "19890508", "19890519", "19890607", "19890713", "19890714", "19890803", "19890804", "19890831", "19891012", "19891013", "19891030", "19891225", "19900101", "19900126", "19900427", "19900501", "19900509", "19900606", "19900704", "19900724", "19900831", "19901002", "19901018", "19901225", "19910101", "19910214", "19910215", "19910416", "19910501", "19910528", "19910605", "19910624", "19911106", "19911225", "19920101", "19920203", "19920204", "19920501", "19920603", "19920611", "19920702", "19920831", "19920910", "19921225", "19930101", "19930122", "19930325", "19930505", "19930601", "19930602", "19930621", "19930830", "19930831", "19931014", "19940210", "19940211", "19940314", "19940524", "19940601", "19940610", "19940819", "19940831", "19941102", "19941226", "19950131", "19950201", "19950303", "19950501", "19950510", "19950531", "19950607", "19950809", "19950831", "19951023", "19951225", "19960101", "19960219", "19960220", "19960221", "19960429", "19960501", "19960520", "19960605", "19960729", "19961225", "19970101", "19970207", "19970210", "19970418", "19970501", "19970509", "19970521", "19970604", "19970718", "19971030", "19971225", "19980101", "19980128", "19980129", "19980130", "19980408", "19980428", "19980501", "19980511", "19980603", "19980707", "19980831", "19981020", "19981225", "19990101", "19990119", "19990216", "19990217", "19990329", "19990602", "19990831", "19991108", "20000316", "20000406", "20000501", "20000518", "20000607", "20000615", "20000831", "20001027", "20001225", "20001228", "20010101", "20010125", "20010126", "20010306", "20010326", "20010501", "20010508", "20010604", "20010606", "20010831", "20011017", "20011217", "20011225", "20020101", "20020213", "20020214", "20020315", "20020501", "20020524", "20020527", "20020605", "20021105", "20021206", "20021225", "20030101", "20030201", "20030203", "20030204", "20030212", "20030304", "20030501", "20030514", "20030515", "20030607", "20030901", "20031024", "20031125", "20031126", "20031225", "20040101", "20040122", "20040123", "20040202", "20040203", "20040223", "20040501", "20040503", "20040505", "20040605", "20040831", "20041112", "20041115", "20041116", "20041225", "20050101", "20050121", "20050201", "20050209", "20050210", "20050211", "20050421", "20050502", "20050523", "20050604", "20050831", "20051101", "20051103", "20051104", "20051226", "20060102", "20060110", "20060130", "20060131", "20060201", "20060202", "20060411", "20060501", "20060512", "20060513", "20060603", "20060831", "20061021", "20061023", "20061024", "20061025", "20061225", "20070101", "20070102", "20070120", "20070201", "20070219", "20070220", "20070331", "20070426", "20070501", "20070502", "20070602", "20070831", "20071013", "20071015", "20071108", "20071220", "20071225", "20080101", "20080110", "20080123", "20080201", "20080207", "20080208", "20080320", "20080501", "20080519", "20080901", "20081001", "20081002", "20081027", "20081208", "20081225", "20081229", "20090101", "20090126", "20090127", "20090202", "20090209", "20090309", "20090501", "20090831", "20090921", "20090922", "20091127", "20091218", "20091225", "20100101", "20100201", "20100215", "20100216", "20100226", "20100528", "20100831", "20100910", "20100916", "20101105", "20101117", "20101207", "20101231", "20110120", "20110201", "20110203", "20110204", "20110215", "20110502", "20110517", "20110830", "20110831", "20110901", "20110916", "20111026", "20111107", "20111128", "20111226", "20120102", "20120123", "20120124", "20120201", "20120206", "20120207", "20120411", "20120501", "20120820", "20120821", "20120831", "20120917", "20121026", "20121113", "20121115", "20121225", "20130101", "20130124", "20130128", "20130201", "20130211", "20130212", "20130501", "20130524", "20130808", "20130809", "20130916", "20131015", "20131105", "20131225", "20140101", "20140114", "20140131", "20140203", "20140213", "20140501", "20140513", "20140728", "20140729", "20140901", "20140916", "20141006", "20141022", "20141225", "20150101", "20150202", "20150203", "20150219", "20150220", "20150501", "20150504", "20150717", "20150831", "20150916", "20150924", "20151014", "20151110", "20151224", "20151225", "20160101", "20160125", "20160201", "20160208", "20160209", "20160502", "20160706", "20160707", "20160831", "20160912", "20160916", "20161003", "20161212", "20161226", "20170102", "20170130", "20170201", "20170210", "20170501", "20170510", "20170626", "20170627", "20170831", "20170901", "20170921", "20171018", "20171201", "20171225", "20180101", "20180131", "20180201", "20180216", "20180501", "20180529", "20180615", "20180822", "20180831", "20180911", "20180917", "20181106", "20181120", "20181225", "20190101", "20190121", "20190201", "20190205", "20190206", "20190501", "20190520", "20190605", "20190606", "20190812", "20190902", "20190916", "20191028", "20191225", "20200101", "20200127", "20200501", "20200507", "20200525", "20200526", "20200731", "20200820", "20200831", "20200916", "20201029", "20201225", "20210101", "20210128", "20210201", "20210212", "20210513", "20210514", "20210526", "20210720", "20210810", "20210831", "20210916", "20211019", "20211104", "20220118", "20220201", "20220202", "20220203", "20220502", "20220503", "20220504", "20220516", "20220831", "20220916", "20221024", "20221226", "20230102", "20230123", "20230124", "20230201", "20230206", "20230421", "20230501", "20230504", "20230628", "20230719", "20230831", "20230927", "20231113", "20231225", "20240101", "20240126", "20240201", "20240212", "20240410", "20240411", "20240501", "20240522", "20240617", "20240708", "20240916", "20240917", "20241031", "20241225", "20250101", "20250129", "20250130", "20250211", "20250331", "20250401", "20250501", "20250512", "20250606", "20250627", "20250901", "20250905", "20250916", "20251020", "20251225", "20260101", "20260202", "20260217", "20260218", "20260320", "20260501", "20260527", "20260616", "20260825", "20260831", "20260916", "20261109", "20261225", "20270101", "20270122", "20270201", "20270208", "20270310", "20270311", "20270517", "20270520", "20270607", "20270816", "20270831", "20270916", "20271028", "20280126", "20280127", "20280201", "20280209", "20280228", "20280229", "20280501", "20280505", "20280509", "20280526", "20280803", "20280831", "20281017", "20281225", "20290101", "20290130", "20290201", "20290213", "20290214", "20290215", "20290216", "20290424", "20290501", "20290515", "20290528", "20290724", "20290831", "20290917", "20291105", "20291225", "20300101", "20300121", "20300201", "20300204", "20300205", "20300206", "20300207", "20300501", "20300516", "20300916", "20301225", "20310101", "20310123", "20310124", "20310127", "20310206", "20310403", "20310423", "20310501", "20310506", "20310702", "20310901", "20310916", "20311114", "20311225", "20320101", "20320114", "20320115", "20320127", "20320202", "20320211", "20320212", "20320322", "20320412", "20320524", "20320621", "20320831", "20320916", "20321102", "20330103", "20330104", "20330131", "20330201", "20330202", "20330401", "20330502", "20330513", "20330610", "20330831", "20330916", "20331223", "20331226", "20340102", "20340201", "20340202", "20340220", "20340221", "20340301", "20340322", "20340501", "20340503", "20340530", "20340831", "20341109", "20341212", "20341213", "20341225", "20350101", "20350124", "20350201", "20350208", "20350209", "20350219", "20350312", "20350501", "20350521", "20350522", "20350831", "20350917", "20351030", "20351203", "20351225", "20360101", "20360128", "20360129", "20360201", "20360208", "20360211", "20360229", "20360501", "20360509", "20360901", "20360916", "20361119", "20361120", "20361225", "20370101", "20370127", "20370202", "20370216", "20370217", "20370218", "20370428", "20370501", "20370529", "20370831", "20370916", "20371106", "20371109", "20371110", "20371225", "20380101", "20380121", "20380201", "20380204", "20380205", "20380518", "20380831", "20380916", "20381027", "20381029", "20390105", "20390124", "20390125", "20390126", "20390201", "20390208", "20390406", "20390502", "20390831", "20390916", "20391019", "20391020", "20391115", "20391226", "20391227", "20400102", "20400116", "20400130", "20400201", "20400213", "20400214", "20400326", "20400501", "20400525", "20400831", "20400917", "20401008", "20401009", "20401225", "20410101", "20410104", "20410118", "20410201", "20410204", "20410315", "20410501", "20410514", "20410916", "20410927", "20411023", "20411204", "20411225", "20411226", "20420101", "20420122", "20420123", "20420204", "20420305", "20420501", "20420505", "20420901", "20420916", "20420917", "20420918", "20421111", "20421124", "20421215", "20421225", "20430101", "20430126", "20430202", "20430210", "20430211", "20430223", "20430501", "20430831", "20430907", "20430916", "20431112", "20431203", "20431225", "20440101", "20440201", "20440202", "20440211", "20440212", "20440502", "20440512", "20440824", "20440825", "20440831", "20440916", "20441020", "20441031", "20441121", "20441226", "20450102", "20450131", "20450201", "20450217", "20450501", "20450502", "20450814", "20450815", "20450831", "20451108", "20451110", "20451225", "20460101", "20460122", "20460201", "20460206", "20460207", "20460501", "20460521", "20460806", "20460831", "20460917", "20461010", "20461029", "20461031", "20461225", "20470101", "20470109", "20470128", "20470201", "20470501", "20470509", "20470724", "20470725", "20470916", "20470930", "20471018", "20471021", "20471225", "20471230", "20480101", "20480130", "20480214", "20480501", "20480527", "20480713", "20480714", "20480831", "20480916", "20481009", "20481105", "20481218", "20481225", "20490101", "20490119", "20490201", "20490202", "20490203", "20490517", "20490702", "20490831", "20490908", "20490916", "20490928", "20491025", "20491208", "20500124", "20500125", "20500201", "20500207", "20500502", "20500505", "20500621", "20500622", "20500829", "20500831", "20500916", "20500919", "20501114", "20501128", "20501226", "20510102", "20510127", "20510201", "20510213", "20510501", "20510524", "20510612", "20510817", "20510831", "20510907", "20511102", "20511116", "20511225", "20520101", "20520201", "20520202", "20520213", "20520501", "20520513", "20520530", "20520531", "20520805", "20520826", "20520916", "20521021", "20521104", "20521225", "20530101", "20530203", "20530219", "20530220", "20530501", "20530519", "20530520", "20530815", "20530901", "20530916", "20531024", "20531110", "20531225", "20540101", "20540202", "20540209", "20540210", "20540501", "20540511", "20540522", "20540716", "20540805", "20540831", "20540916", "20541014", "20541030", "20541225", "20550101", "20550128", "20550129", "20550201", "20550210", "20550428", "20550429", "20550511", "20550705", "20550726", "20550831", "20550916", "20551004", "20551019", "20560201", "20560215", "20560216", "20560417", "20560418", "20560501", "20560529", "20560714", "20560831", "20560922", "20561106", "20561225", "20570101", "20570122", "20570201", "20570205", "20570206", "20570405", "20570406", "20570501", "20570518", "20570613", "20570703", "20570831", "20570911", "20570917", "20571225", "20580101", "20580124", "20580125", "20580201", "20580207", "20580326", "20580327", "20580501", "20580507", "20580603", "20580902", "20580916", "20581115", "20581225", "20590101", "20590128", "20590212", "20590213", "20590317", "20590501", "20590522", "20590526", "20590612", "20590820", "20590901", "20590916", "20591104", "20591225", "20600101", "20600119", "20600202", "20600203", "20600204", "20600304", "20600305", "20600511", "20600514", "20600531", "20600809", "20600831", "20600916", "20610121", "20610201", "20610204", "20610221", "20610222", "20610502", "20610504", "20610729", "20610831", "20610916", "20611111", "20611226" ], + "MonthsToExclude": [] + }, + "KUW": { + "InheritedCalendar": [], + "Name": "KUW", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20070101", "20070102", "20070118", "20070225", "20070226", "20070329", "20070809", "20071014", "20071015", "20071218", "20071219", "20071220", "20071223", "20080101", "20080110", "20080224", "20080225", "20080226", "20080320", "20080514", "20080515", "20080731", "20080930", "20081001", "20081002", "20081207", "20081208", "20081209", "20081210", "20081211", "20081229", "20090101", "20090225", "20090226", "20090312", "20090723", "20090920", "20090921", "20090922", "20091126", "20091129", "20091130", "20091220", "20100103", "20100225", "20100228", "20100301", "20100711", "20100909", "20100912", "20100913", "20101114", "20101115", "20101116", "20101117", "20101118", "20101207", "20110102", "20110217", "20110227", "20110228", "20110630", "20110830", "20110831", "20110901", "20111106", "20111107", "20111108", "20111127", "20120101", "20120202", "20120226", "20120227", "20120621", "20120819", "20120820", "20120821", "20121028", "20121029", "20121115", "20130101", "20130124", "20130224", "20130225", "20130226", "20130606", "20130807", "20130808", "20130811", "20131015", "20131016", "20131017", "20131104", "20140101", "20140116", "20140225", "20140226", "20140227", "20140529", "20140727", "20140728", "20140729", "20140730", "20141005", "20141006", "20141007", "20141008", "20141026", "20150101", "20150225", "20150226", "20150514", "20150719", "20150720", "20150923", "20150924", "20151014", "20151224", "20160103", "20160225", "20160228", "20160505", "20160705", "20160706", "20160707", "20160911", "20160912", "20160913", "20160914", "20160915", "20161002", "20161215", "20170101", "20170226", "20170227", "20170427", "20170625", "20170626", "20170627", "20170903", "20170904", "20170921", "20171130", "20180101", "20180225", "20180226", "20180415", "20180614", "20180617", "20180618", "20180821", "20180822", "20180823", "20180911", "20181122", "20190101", "20190224", "20190225", "20190226", "20190404", "20190604", "20190605", "20190606", "20190811", "20190812", "20190813", "20190814", "20190815", "20190901", "20191107", "20200101", "20200225", "20200226", "20200227", "20200326", "20200524", "20200525", "20200526", "20200802", "20200803", "20200820", "20201029", "20210103", "20210225", "20210228", "20210311", "20210512", "20210513", "20210516", "20210720", "20210721", "20210722", "20210809", "20211021", "20220102", "20220227", "20220228", "20220303", "20220501", "20220502", "20220503", "20220504", "20220710", "20220711", "20220712", "20220713", "20220731", "20221006", "20230101", "20230216", "20230226", "20230227", "20230423", "20230424", "20230628", "20230629", "20230719", "20230928", "20240101", "20240208", "20240225", "20240226", "20240409", "20240410", "20240411", "20240616", "20240617", "20240618", "20240619", "20240620", "20240707", "20240919", "20250101", "20250130", "20250225", "20250226", "20250227", "20250330", "20250331", "20250401", "20250608", "20250609", "20250626", "20250904", "20260101", "20260118", "20260225", "20260226", "20260319", "20260322", "20260323", "20260527", "20260528", "20260616", "20260827", "20270103", "20270107", "20270225", "20270228", "20270309", "20270310", "20270311", "20270516", "20270517", "20270518", "20270519", "20270520", "20270606", "20270812", "20271223", "20280102", "20280227", "20280228", "20280507", "20280508", "20280525", "20280803", "20281214", "20290101", "20290214", "20290215", "20290225", "20290226", "20290424", "20290425", "20290426", "20290514", "20290726", "20291206", "20300101", "20300203", "20300204", "20300205", "20300206", "20300224", "20300225", "20300226", "20300414", "20300415", "20300416", "20300417", "20300505", "20300711", "20301121", "20310101", "20310126", "20310127", "20310225", "20310226", "20310227", "20310402", "20310403", "20310423", "20310703", "20311113", "20320101", "20320113", "20320114", "20320115", "20320225", "20320226", "20320322", "20320323", "20320324", "20320325", "20320411", "20320624", "20321104", "20330102", "20330103", "20330104", "20330227", "20330228", "20330313", "20330314", "20330331", "20330609", "20331023", "20331222", "20331225", "20331226", "20340101", "20340226", "20340227", "20340301", "20340302", "20340321", "20340601", "20341012", "20341211", "20341212", "20341213", "20341214", "20350101", "20350218", "20350219", "20350220", "20350221", "20350222", "20350225", "20350226", "20350311", "20350524", "20350927", "20351202", "20351203", "20360101", "20360207", "20360210", "20360224", "20360225", "20360226", "20360228", "20360508", "20360918", "20361118", "20361119", "20361120", "20370101", "20370126", "20370127", "20370128", "20370129", "20370216", "20370225", "20370226", "20370430", "20370910", "20371108", "20371109", "20371110", "20380103", "20380117", "20380118", "20380119", "20380120", "20380204", "20380225", "20380228", "20380415", "20380826", "20381031", "20381101", "20390102", "20390105", "20390106", "20390126", "20390227", "20390228", "20390407", "20390818", "20391018", "20391019", "20391020", "20391226", "20391227", "20391228", "20391229", "20400101", "20400115", "20400226", "20400227", "20400329", "20400809", "20401007", "20401008", "20401009", "20401216", "20401217", "20410101", "20410103", "20410224", "20410225", "20410226", "20410314", "20410725", "20410926", "20410929", "20411204", "20411205", "20411224", "20420101", "20420225", "20420226", "20420227", "20420306", "20420717", "20420915", "20420916", "20420917", "20421123", "20421124", "20421125", "20421126", "20421127", "20421214", "20430101", "20430225", "20430226", "20430702", "20430906", "20430907", "20431112", "20431115", "20431203", "20440103", "20440211", "20440225", "20440228", "20440623", "20440824", "20440825", "20441031", "20441101", "20441102", "20441103", "20441121", "20450101", "20450202", "20450226", "20450227", "20450615", "20450813", "20450814", "20450815", "20450816", "20451022", "20451023", "20451024", "20451025", "20451109", "20460101", "20460118", "20460225", "20460226", "20460531", "20460805", "20460806", "20461010", "20461011", "20461031", "20470101", "20470110", "20470224", "20470225", "20470226", "20470523", "20470723", "20470724", "20470725", "20470930", "20471001", "20471002", "20471003", "20471020", "20480101", "20480102", "20480225", "20480226", "20480227", "20480514", "20480712", "20480713", "20480714", "20480920", "20480921", "20480922", "20480923", "20481008", "20481217", "20490103", "20490225", "20490228", "20490429", "20490701", "20490704", "20490908", "20490909", "20490928", "20491209", "20500102", "20500227", "20500228", "20500421", "20500620", "20500621", "20500622", "20500828", "20500829", "20500830", "20500831", "20500901", "20500918", "20501201", "20510101", "20510226", "20510227", "20510413", "20510611", "20510612", "20510817", "20510820", "20510906", "20511116", "20520101", "20520225", "20520226", "20520328", "20520529", "20520530", "20520805", "20520806", "20520807", "20520808", "20520826", "20521107", "20530101", "20530225", "20530226", "20530227", "20530320", "20530519", "20530520", "20530521", "20530727", "20530728", "20530729", "20530730", "20530814", "20531023", "20540101", "20540225", "20540226", "20540305", "20540510", "20540511", "20540715", "20540716", "20540805", "20541015", "20550103", "20550225", "20550228", "20550427", "20550428", "20550429", "20550705", "20550706", "20550707", "20550708", "20550725", "20551007", "20560102", "20560217", "20560227", "20560228", "20560416", "20560417", "20560418", "20560625", "20560626", "20560713", "20560921", "20570101", "20570201", "20570225", "20570226", "20570404", "20570405", "20570408", "20570612", "20570613", "20570614", "20570703", "20570913", "20580101", "20580124", "20580224", "20580225", "20580226", "20580325", "20580326", "20580327", "20580602", "20580603", "20580604", "20580605", "20580623", "20580829", "20590101", "20590116", "20590225", "20590226", "20590227", "20590316", "20590317", "20590522", "20590525", "20590611", "20590821", "20600101", "20600225", "20600226", "20600303", "20600304", "20600307", "20600510", "20600511", "20600512", "20600513", "20600531", "20600812", "20601223", "20610102", "20610221", "20610222", "20610223", "20610224", "20610227", "20610228", "20610501", "20610502", "20610503", "20610504", "20610519", "20610728", "20611211" ], + "MonthsToExclude": [] + }, + "LIS": { + "InheritedCalendar": [], + "Name": "LIS", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880216", "19880331", "19880401", "19880425", "19880602", "19880610", "19880815", "19881005", "19881101", "19881201", "19881208", "19890207", "19890324", "19890425", "19890501", "19890525", "19890613", "19890815", "19891005", "19891101", "19891201", "19891208", "19891225", "19900101", "19900227", "19900413", "19900425", "19900501", "19900614", "19900815", "19901005", "19901101", "19901224", "19901225", "19910101", "19910212", "19910329", "19910425", "19910501", "19910530", "19910610", "19910815", "19911101", "19911225", "19920101", "19920303", "19920417", "19920501", "19920610", "19920618", "19921005", "19921201", "19921208", "19921224", "19921225", "19930101", "19930223", "19930409", "19930610", "19931005", "19931101", "19931201", "19931208", "19931224", "19940215", "19940401", "19940425", "19940610", "19940815", "19941005", "19941101", "19941201", "19941208", "19950228", "19950414", "19950425", "19950501", "19950615", "19950815", "19951005", "19951101", "19951201", "19951208", "19951225", "19960101", "19960220", "19960405", "19960425", "19960501", "19960516", "19960606", "19960610", "19960815", "19961101", "19961224", "19961225", "19970101", "19970211", "19970328", "19970425", "19970501", "19970529", "19970610", "19970815", "19971005", "19971101", "19971201", "19971208", "19971225", "19980101", "19980410", "19980425", "19980501", "19980610", "19980611", "19980815", "19981005", "19981101", "19981201", "19981208", "19981225", "19990101", "19990402", "19990603", "19990610", "19990815", "19991005", "19991101", "19991201", "19991208", "19991231", "20000421", "20000425", "20000501", "20000622", "20000815", "20001005", "20001101", "20001201", "20001208", "20001225", "20010101", "20010227", "20010413", "20010416", "20010425", "20010501", "20010613", "20010614", "20010815", "20011005", "20011101", "20011201", "20011208", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020425", "20020501", "20020530", "20020610", "20020815", "20021101", "20021224", "20021225", "20030101", "20030304", "20030418", "20030425", "20030501", "20030610", "20030613", "20030619", "20030815", "20031201", "20031208", "20031224", "20031225", "20040101", "20040224", "20040409", "20040610", "20041005", "20041101", "20041201", "20041208", "20041224", "20050208", "20050325", "20050425", "20050526", "20050610", "20050613", "20050815", "20051005", "20051101", "20051201", "20051208", "20060228", "20060414", "20060425", "20060501", "20060613", "20060615", "20060815", "20061005", "20061101", "20061201", "20061208", "20061225", "20070101", "20070220", "20070406", "20070425", "20070501", "20070607", "20070613", "20070815", "20071005", "20071101", "20071224", "20071225", "20080101", "20080205", "20080321", "20080425", "20080501", "20080522", "20080610", "20080613", "20080815", "20081201", "20081208", "20081224", "20081225", "20090101", "20090224", "20090410", "20090501", "20090610", "20090611", "20091005", "20091201", "20091208", "20091224", "20091225", "20100101", "20100216", "20100402", "20100603", "20100610", "20101005", "20101101", "20101201", "20101208", "20101224", "20110308", "20110422", "20110425", "20110610", "20110613", "20110623", "20110815", "20111005", "20111101", "20111201", "20111208", "20120221", "20120406", "20120425", "20120501", "20120607", "20120613", "20120815", "20121005", "20121101", "20121224", "20121225", "20130101", "20130212", "20130329", "20130425", "20130501", "20130530", "20130610", "20130613", "20130815", "20131101", "20131224", "20131225", "20140101", "20140304", "20140418", "20140425", "20140501", "20140610", "20140613", "20140619", "20140815", "20141201", "20141208", "20141224", "20141225", "20150101", "20150217", "20150403", "20150501", "20150604", "20150610", "20151005", "20151201", "20151208", "20151224", "20151225", "20160101", "20160209", "20160325", "20160425", "20160526", "20160610", "20160613", "20160815", "20161005", "20161101", "20161201", "20161208", "20170228", "20170414", "20170425", "20170501", "20170613", "20170615", "20170815", "20171005", "20171101", "20171201", "20171208", "20171225", "20180101", "20180213", "20180330", "20180425", "20180501", "20180531", "20180613", "20180815", "20181005", "20181101", "20181224", "20181225", "20190101", "20190305", "20190419", "20190425", "20190501", "20190610", "20190613", "20190620", "20190815", "20191101", "20191224", "20191225", "20200101", "20200225", "20200410", "20200501", "20200610", "20200611", "20201005", "20201201", "20201208", "20201224", "20201225", "20210101", "20210216", "20210402", "20210603", "20210610", "20211005", "20211101", "20211201", "20211208", "20211224", "20220301", "20220415", "20220425", "20220610", "20220613", "20220616", "20220815", "20221005", "20221101", "20221201", "20221208", "20230221", "20230407", "20230425", "20230501", "20230608", "20230613", "20230815", "20231005", "20231101", "20231201", "20231208", "20231225", "20240101", "20240213", "20240329", "20240425", "20240501", "20240530", "20240610", "20240613", "20240815", "20241101", "20241224", "20241225", "20250101", "20250304", "20250418", "20250425", "20250501", "20250610", "20250613", "20250619", "20250815", "20251201", "20251208", "20251224", "20251225", "20260101", "20260217", "20260403", "20260501", "20260604", "20260610", "20261005", "20261201", "20261208", "20261224", "20261225", "20270101", "20270209", "20270326", "20270527", "20270610", "20271005", "20271101", "20271201", "20271208", "20271224", "20280229", "20280414", "20280425", "20280501", "20280613", "20280615", "20280815", "20281005", "20281101", "20281201", "20281208", "20281225", "20290101", "20290213", "20290330", "20290425", "20290501", "20290531", "20290613", "20290815", "20291005", "20291101", "20291224", "20291225", "20300101", "20300305", "20300419", "20300425", "20300501", "20300610", "20300613", "20300620", "20300815", "20301101", "20301224", "20301225", "20310101", "20310225", "20310411", "20310425", "20310501", "20310610", "20310612", "20310613", "20310815", "20311201", "20311208", "20311224", "20311225", "20320101", "20320210", "20320326", "20320527", "20320610", "20321005", "20321101", "20321201", "20321208", "20321224", "20330301", "20330415", "20330425", "20330610", "20330613", "20330616", "20330815", "20331005", "20331101", "20331201", "20331208", "20340221", "20340407", "20340425", "20340501", "20340608", "20340613", "20340815", "20341005", "20341101", "20341201", "20341208", "20341225", "20350101", "20350206", "20350323", "20350425", "20350501", "20350524", "20350613", "20350815", "20351005", "20351101", "20351224", "20351225", "20360101", "20360226", "20360411", "20360425", "20360501", "20360610", "20360612", "20360613", "20360815", "20361201", "20361208", "20361224", "20361225", "20370101", "20370217", "20370403", "20370501", "20370604", "20370610", "20371005", "20371201", "20371208", "20371224", "20371225", "20380101", "20380309", "20380423", "20380610", "20380624", "20381005", "20381101", "20381201", "20381208", "20381224", "20390222", "20390408", "20390425", "20390609", "20390610", "20390613", "20390815", "20391005", "20391101", "20391201", "20391208", "20400214", "20400330", "20400425", "20400501", "20400531", "20400613", "20400815", "20401005", "20401101", "20401224", "20401225", "20410101", "20410305", "20410419", "20410425", "20410501", "20410610", "20410613", "20410620", "20410815", "20411101", "20411224", "20411225", "20420101", "20420218", "20420404", "20420425", "20420501", "20420605", "20420610", "20420613", "20420815", "20421201", "20421208", "20421224", "20421225", "20430101", "20430210", "20430327", "20430501", "20430528", "20430610", "20431005", "20431201", "20431208", "20431224", "20431225", "20440101", "20440301", "20440415", "20440425", "20440610", "20440613", "20440616", "20440815", "20441005", "20441101", "20441201", "20441208", "20450221", "20450407", "20450425", "20450501", "20450608", "20450613", "20450815", "20451005", "20451101", "20451201", "20451208", "20451225", "20460101", "20460206", "20460323", "20460425", "20460501", "20460524", "20460613", "20460815", "20461005", "20461101", "20461224", "20461225", "20470101", "20470226", "20470412", "20470425", "20470501", "20470610", "20470613", "20470815", "20471101", "20471224", "20471225", "20480101", "20480218", "20480403", "20480501", "20480604", "20480610", "20481005", "20481201", "20481208", "20481224", "20481225", "20490101", "20490302", "20490416", "20490610", "20490617", "20491005", "20491101", "20491201", "20491208", "20491224", "20500222", "20500408", "20500425", "20500609", "20500610", "20500613", "20500815", "20501005", "20501101", "20501201", "20501208", "20510214", "20510331", "20510425", "20510501", "20510601", "20510613", "20510815", "20511005", "20511101", "20511201", "20511208", "20511225", "20520101", "20520305", "20520419", "20520425", "20520501", "20520610", "20520613", "20520620", "20520815", "20521101", "20521224", "20521225", "20530101", "20530218", "20530404", "20530425", "20530501", "20530605", "20530610", "20530613", "20530815", "20531201", "20531208", "20531224", "20531225", "20540101", "20540210", "20540327", "20540501", "20540528", "20540610", "20541005", "20541201", "20541208", "20541224", "20541225", "20550101", "20550302", "20550416", "20550610", "20550617", "20551005", "20551101", "20551201", "20551208", "20551224", "20560215", "20560331", "20560425", "20560501", "20560601", "20560613", "20560815", "20561005", "20561101", "20561201", "20561208", "20561225", "20570101", "20570306", "20570420", "20570425", "20570501", "20570613", "20570621", "20570815", "20571005", "20571101", "20571224", "20571225", "20580101", "20580226", "20580412", "20580425", "20580501", "20580610", "20580613", "20580815", "20581101", "20581224", "20581225", "20590101", "20590211", "20590328", "20590425", "20590501", "20590529", "20590610", "20590613", "20590815", "20591201", "20591208", "20591224", "20591225", "20600101", "20600302", "20600416", "20600610", "20600617", "20601005", "20601101", "20601201", "20601208", "20601224", "20610222", "20610408", "20610425", "20610609", "20610610", "20610613", "20610815", "20611005", "20611101", "20611201", "20611208" ], + "MonthsToExclude": [] + }, + "LON": { + "InheritedCalendar": [], + "Name": "LON", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880401", "19880404", "19880502", "19880530", "19880829", "19881226", "19881227", "19890102", "19890324", "19890327", "19890501", "19890529", "19890828", "19891225", "19891226", "19900101", "19900413", "19900416", "19900507", "19900528", "19900827", "19901225", "19901226", "19910101", "19910329", "19910401", "19910506", "19910527", "19910826", "19911225", "19911226", "19920101", "19920417", "19920420", "19920504", "19920525", "19920831", "19921225", "19921228", "19930101", "19930409", "19930412", "19930503", "19930531", "19930830", "19931227", "19931228", "19940103", "19940401", "19940404", "19940502", "19940530", "19940829", "19941226", "19941227", "19950102", "19950414", "19950417", "19950501", "19950508", "19950529", "19950828", "19951225", "19951226", "19960101", "19960405", "19960408", "19960506", "19960527", "19960826", "19961225", "19961226", "19970101", "19970328", "19970331", "19970505", "19970526", "19970825", "19971225", "19971226", "19980101", "19980410", "19980413", "19980504", "19980525", "19980831", "19981225", "19981228", "19990101", "19990402", "19990405", "19990503", "19990531", "19990830", "19991227", "19991228", "19991231", "20000103", "20000421", "20000424", "20000501", "20000529", "20000828", "20001225", "20001226", "20010101", "20010413", "20010416", "20010507", "20010528", "20010827", "20011225", "20011226", "20020101", "20020329", "20020401", "20020506", "20020603", "20020604", "20020826", "20021225", "20021226", "20030101", "20030418", "20030421", "20030505", "20030526", "20030825", "20031225", "20031226", "20040101", "20040409", "20040412", "20040503", "20040531", "20040830", "20041227", "20041228", "20050103", "20050325", "20050328", "20050502", "20050530", "20050829", "20051226", "20051227", "20060102", "20060414", "20060417", "20060501", "20060529", "20060828", "20061225", "20061226", "20070101", "20070406", "20070409", "20070507", "20070528", "20070827", "20071225", "20071226", "20080101", "20080321", "20080324", "20080505", "20080526", "20080825", "20081225", "20081226", "20090101", "20090410", "20090413", "20090504", "20090525", "20090831", "20091225", "20091228", "20100101", "20100402", "20100405", "20100503", "20100531", "20100830", "20101227", "20101228", "20110103", "20110422", "20110425", "20110429", "20110502", "20110530", "20110829", "20111226", "20111227", "20120102", "20120406", "20120409", "20120507", "20120604", "20120605", "20120827", "20121225", "20121226", "20130101", "20130329", "20130401", "20130506", "20130527", "20130826", "20131225", "20131226", "20140101", "20140418", "20140421", "20140505", "20140526", "20140825", "20141225", "20141226", "20150101", "20150403", "20150406", "20150504", "20150525", "20150831", "20151225", "20151228", "20160101", "20160325", "20160328", "20160502", "20160530", "20160829", "20161226", "20161227", "20170102", "20170414", "20170417", "20170501", "20170529", "20170828", "20171225", "20171226", "20180101", "20180330", "20180402", "20180507", "20180528", "20180827", "20181225", "20181226", "20190101", "20190419", "20190422", "20190506", "20190527", "20190826", "20191225", "20191226", "20200101", "20200410", "20200413", "20200508", "20200525", "20200831", "20201225", "20201228", "20210101", "20210402", "20210405", "20210503", "20210531", "20210830", "20211227", "20211228", "20220103", "20220415", "20220418", "20220502", "20220530", "20220829", "20221226", "20221227", "20230102", "20230407", "20230410", "20230501", "20230529", "20230828", "20231225", "20231226", "20240101", "20240329", "20240401", "20240506", "20240527", "20240826", "20241225", "20241226", "20250101", "20250418", "20250421", "20250505", "20250526", "20250825", "20251225", "20251226", "20260101", "20260403", "20260406", "20260504", "20260525", "20260831", "20261225", "20261228", "20270101", "20270326", "20270329", "20270503", "20270531", "20270830", "20271227", "20271228", "20280103", "20280414", "20280417", "20280501", "20280529", "20280828", "20281225", "20281226", "20290101", "20290330", "20290402", "20290507", "20290528", "20290827", "20291225", "20291226", "20300101", "20300419", "20300422", "20300506", "20300527", "20300826", "20301225", "20301226", "20310101", "20310411", "20310414", "20310505", "20310526", "20310825", "20311225", "20311226", "20320101", "20320326", "20320329", "20320503", "20320531", "20320830", "20321227", "20321228", "20330103", "20330415", "20330418", "20330502", "20330530", "20330829", "20331226", "20331227", "20340102", "20340407", "20340410", "20340501", "20340529", "20340828", "20341225", "20341226", "20350101", "20350323", "20350326", "20350507", "20350528", "20350827", "20351225", "20351226", "20360101", "20360411", "20360414", "20360505", "20360526", "20360825", "20361225", "20361226", "20370101", "20370403", "20370406", "20370504", "20370525", "20370831", "20371225", "20371228", "20380101", "20380423", "20380426", "20380503", "20380531", "20380830", "20381227", "20381228", "20390103", "20390408", "20390411", "20390502", "20390530", "20390829", "20391226", "20391227", "20400102", "20400330", "20400402", "20400507", "20400528", "20400827", "20401225", "20401226", "20410101", "20410419", "20410422", "20410506", "20410527", "20410826", "20411225", "20411226", "20420101", "20420404", "20420407", "20420505", "20420526", "20420825", "20421225", "20421226", "20430101", "20430327", "20430330", "20430504", "20430525", "20430831", "20431225", "20431228", "20440101", "20440415", "20440418", "20440502", "20440530", "20440829", "20441226", "20441227", "20450102", "20450407", "20450410", "20450501", "20450529", "20450828", "20451225", "20451226", "20460101", "20460323", "20460326", "20460507", "20460528", "20460827", "20461225", "20461226", "20470101", "20470412", "20470415", "20470506", "20470527", "20470826", "20471225", "20471226", "20480101", "20480403", "20480406", "20480504", "20480525", "20480831", "20481225", "20481228", "20490101", "20490416", "20490419", "20490503", "20490531", "20490830", "20491227", "20491228", "20500103", "20500408", "20500411", "20500502", "20500530", "20500829", "20501226", "20501227", "20510102", "20510331", "20510403", "20510501", "20510529", "20510828", "20511225", "20511226", "20520101", "20520419", "20520422", "20520506", "20520527", "20520826", "20521225", "20521226", "20530101", "20530404", "20530407", "20530505", "20530526", "20530825", "20531225", "20531226", "20540101", "20540327", "20540330", "20540504", "20540525", "20540831", "20541225", "20541228", "20550101", "20550416", "20550419", "20550503", "20550531", "20550830", "20551227", "20551228", "20560103", "20560331", "20560403", "20560501", "20560529", "20560828", "20561225", "20561226", "20570101", "20570420", "20570423", "20570507", "20570528", "20570827", "20571225", "20571226", "20580101", "20580412", "20580415", "20580506", "20580527", "20580826", "20581225", "20581226", "20590101", "20590328", "20590331", "20590505", "20590526", "20590825", "20591225", "20591226", "20600101", "20600416", "20600419", "20600503", "20600531", "20600830", "20601227", "20601228", "20610103", "20610408", "20610411", "20610502", "20610530", "20610829", "20611226", "20611227" ], + "MonthsToExclude": [] + }, + "LUX": { + "InheritedCalendar": [], + "Name": "LUX", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880404", "19880502", "19880512", "19880513", "19880523", "19880721", "19880815", "19881101", "19881111", "19881226", "19890327", "19890501", "19890504", "19890505", "19890515", "19890721", "19890815", "19891101", "19891113", "19891225", "19891226", "19900101", "19900416", "19900501", "19900524", "19900604", "19900815", "19901101", "19901225", "19910101", "19910401", "19910501", "19910509", "19910520", "19910815", "19911101", "19911111", "19911225", "19911226", "19920101", "19920420", "19920501", "19920528", "19920608", "19920721", "19921102", "19921111", "19921225", "19930101", "19930412", "19930520", "19930531", "19930721", "19931101", "19931111", "19940404", "19940502", "19940512", "19940513", "19940523", "19940721", "19940815", "19940927", "19941101", "19941111", "19941226", "19950417", "19950501", "19950525", "19950605", "19950721", "19950815", "19951101", "19951225", "19951226", "19960101", "19960408", "19960501", "19960516", "19960527", "19960624", "19960815", "19960902", "19961101", "19961224", "19961225", "19961226", "19970101", "19970331", "19970501", "19970508", "19970519", "19970721", "19970815", "19971111", "19971225", "19971226", "19980101", "19980413", "19980501", "19980521", "19980601", "19980721", "19981102", "19981111", "19981225", "19990101", "19990405", "19990513", "19990524", "19990721", "19991101", "19991111", "19991231", "20000424", "20000501", "20000601", "20000612", "20000815", "20001101", "20001225", "20001226", "20010101", "20010416", "20010501", "20010524", "20010604", "20010815", "20011101", "20011112", "20011225", "20011226", "20011231", "20020101", "20020401", "20020501", "20020509", "20020520", "20020815", "20021101", "20021111", "20021225", "20021226", "20030101", "20030418", "20030421", "20030501", "20030529", "20030609", "20030623", "20030815", "20031225", "20031226", "20040101", "20040409", "20040412", "20040520", "20040531", "20040623", "20041101", "20050325", "20050328", "20050505", "20050516", "20050623", "20050815", "20051101", "20051226", "20060414", "20060417", "20060501", "20060525", "20060605", "20060623", "20060815", "20061101", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070517", "20070528", "20070815", "20071101", "20071225", "20071226", "20080101", "20080321", "20080324", "20080501", "20080512", "20080623", "20080815", "20081225", "20081226", "20090101", "20090410", "20090413", "20090501", "20090521", "20090601", "20090623", "20091225", "20100101", "20100402", "20100405", "20100513", "20100524", "20100623", "20101101", "20110422", "20110425", "20110602", "20110613", "20110623", "20110815", "20111101", "20111226", "20120406", "20120409", "20120501", "20120517", "20120528", "20120815", "20121101", "20121225", "20121226", "20130101", "20130329", "20130401", "20130501", "20130509", "20130520", "20130815", "20131101", "20131225", "20131226", "20140101", "20140418", "20140421", "20140501", "20140529", "20140609", "20140623", "20140815", "20141225", "20141226", "20150101", "20150403", "20150406", "20150501", "20150514", "20150525", "20150623", "20151225", "20160101", "20160325", "20160328", "20160505", "20160516", "20160623", "20160815", "20161101", "20161226", "20170414", "20170417", "20170501", "20170525", "20170605", "20170623", "20170815", "20171101", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180510", "20180521", "20180815", "20181101", "20181225", "20181226", "20190101", "20190419", "20190422", "20190501", "20190530", "20190610", "20190815", "20191101", "20191225", "20191226", "20200101", "20200410", "20200413", "20200501", "20200521", "20200601", "20200623", "20201225", "20210101", "20210402", "20210405", "20210513", "20210524", "20210623", "20211101", "20220415", "20220418", "20220526", "20220606", "20220623", "20220815", "20221101", "20221226", "20230407", "20230410", "20230501", "20230518", "20230529", "20230623", "20230815", "20231101", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20240509", "20240520", "20240815", "20241101", "20241225", "20241226", "20250101", "20250418", "20250421", "20250501", "20250529", "20250609", "20250623", "20250815", "20251225", "20251226", "20260101", "20260403", "20260406", "20260501", "20260514", "20260525", "20260623", "20261225", "20270101", "20270326", "20270329", "20270506", "20270517", "20270623", "20271101", "20280414", "20280417", "20280501", "20280525", "20280605", "20280623", "20280815", "20281101", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20290510", "20290521", "20290815", "20291101", "20291225", "20291226", "20300101", "20300419", "20300422", "20300501", "20300530", "20300610", "20300815", "20301101", "20301225", "20301226", "20310101", "20310411", "20310414", "20310501", "20310522", "20310602", "20310623", "20310815", "20311225", "20311226", "20320101", "20320326", "20320329", "20320506", "20320517", "20320623", "20321101", "20330415", "20330418", "20330526", "20330606", "20330623", "20330815", "20331101", "20331226", "20340407", "20340410", "20340501", "20340518", "20340529", "20340623", "20340815", "20341101", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20350503", "20350514", "20350815", "20351101", "20351225", "20351226", "20360101", "20360411", "20360414", "20360501", "20360522", "20360602", "20360623", "20360815", "20361225", "20361226", "20370101", "20370403", "20370406", "20370501", "20370514", "20370525", "20370623", "20371225", "20380101", "20380423", "20380426", "20380603", "20380614", "20380623", "20381101", "20390408", "20390411", "20390519", "20390530", "20390623", "20390815", "20391101", "20391226", "20400330", "20400402", "20400501", "20400510", "20400521", "20400815", "20401101", "20401225", "20401226", "20410101", "20410419", "20410422", "20410501", "20410530", "20410610", "20410815", "20411101", "20411225", "20411226", "20420101", "20420404", "20420407", "20420501", "20420515", "20420526", "20420623", "20420815", "20421225", "20421226", "20430101", "20430327", "20430330", "20430501", "20430507", "20430518", "20430623", "20431225", "20440101", "20440415", "20440418", "20440526", "20440606", "20440623", "20440815", "20441101", "20441226", "20450407", "20450410", "20450501", "20450518", "20450529", "20450623", "20450815", "20451101", "20451225", "20451226", "20460101", "20460323", "20460326", "20460501", "20460503", "20460514", "20460815", "20461101", "20461225", "20461226", "20470101", "20470412", "20470415", "20470501", "20470523", "20470603", "20470815", "20471101", "20471225", "20471226", "20480101", "20480403", "20480406", "20480501", "20480514", "20480525", "20480623", "20481225", "20490101", "20490416", "20490419", "20490527", "20490607", "20490623", "20491101", "20500408", "20500411", "20500519", "20500530", "20500623", "20500815", "20501101", "20501226", "20510331", "20510403", "20510501", "20510511", "20510522", "20510623", "20510815", "20511101", "20511225", "20511226", "20520101", "20520419", "20520422", "20520501", "20520530", "20520610", "20520815", "20521101", "20521225", "20521226", "20530101", "20530404", "20530407", "20530501", "20530515", "20530526", "20530623", "20530815", "20531225", "20531226", "20540101", "20540327", "20540330", "20540501", "20540507", "20540518", "20540623", "20541225", "20550101", "20550416", "20550419", "20550527", "20550607", "20550623", "20551101", "20560331", "20560403", "20560501", "20560511", "20560522", "20560623", "20560815", "20561101", "20561225", "20561226", "20570101", "20570420", "20570423", "20570501", "20570531", "20570611", "20570815", "20571101", "20571225", "20571226", "20580101", "20580412", "20580415", "20580501", "20580523", "20580603", "20580815", "20581101", "20581225", "20581226", "20590101", "20590328", "20590331", "20590501", "20590508", "20590519", "20590623", "20590815", "20591225", "20591226", "20600101", "20600416", "20600419", "20600527", "20600607", "20600623", "20601101", "20610408", "20610411", "20610519", "20610530", "20610623", "20610815", "20611101", "20611226" ], + "MonthsToExclude": [] + }, + "MAD": { + "InheritedCalendar": [], + "Name": "MAD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880106", "19880331", "19880401", "19880404", "19880502", "19880523", "19880602", "19880725", "19880815", "19881012", "19881101", "19881109", "19881208", "19881226", "19890106", "19890323", "19890324", "19890327", "19890501", "19890502", "19890515", "19890525", "19890725", "19890815", "19891012", "19891101", "19891109", "19891206", "19891208", "19891225", "19891226", "19900101", "19900412", "19900413", "19900416", "19900501", "19900604", "19900614", "19900725", "19900815", "19901012", "19901101", "19901109", "19901224", "19901225", "19901226", "19901231", "19910101", "19910328", "19910329", "19910401", "19910501", "19910520", "19910530", "19910725", "19910815", "19911101", "19911206", "19911224", "19911225", "19911226", "19911231", "19920101", "19920106", "19920416", "19920417", "19920420", "19920501", "19920608", "19920618", "19921012", "19921109", "19921208", "19921224", "19921225", "19921231", "19930101", "19930106", "19930319", "19930408", "19930409", "19930412", "19930816", "19931012", "19931101", "19931109", "19931206", "19931208", "19931224", "19931231", "19940106", "19940331", "19940401", "19940502", "19940725", "19940815", "19940909", "19941012", "19941101", "19941109", "19941206", "19941208", "19941226", "19950106", "19950413", "19950414", "19950417", "19950501", "19950615", "19950725", "19950815", "19951012", "19951101", "19951109", "19951206", "19951208", "19951225", "19951226", "19960101", "19960122", "19960404", "19960405", "19960501", "19960502", "19960515", "19960815", "19961101", "19961206", "19961225", "19970101", "19970106", "19970327", "19970328", "19970501", "19970515", "19970725", "19970815", "19971208", "19971224", "19971225", "19971231", "19980101", "19980106", "19980409", "19980410", "19980501", "19980515", "19980601", "19981012", "19981109", "19981208", "19981224", "19981225", "19981231", "19990101", "19990106", "19990401", "19990402", "19990603", "19990816", "19991012", "19991101", "19991109", "19991206", "19991208", "19991224", "19991231", "20000106", "20000420", "20000421", "20000424", "20000501", "20000515", "20000622", "20000815", "20001012", "20001101", "20001109", "20001208", "20001225", "20001226", "20010101", "20010412", "20010413", "20010416", "20010501", "20010515", "20010815", "20011012", "20011101", "20011109", "20011206", "20011224", "20011225", "20011226", "20011231", "20020101", "20020319", "20020328", "20020329", "20020401", "20020501", "20020502", "20020515", "20020624", "20020815", "20021101", "20021206", "20021225", "20030101", "20030106", "20030417", "20030418", "20030421", "20030501", "20030502", "20030515", "20030815", "20030909", "20031208", "20031225", "20040101", "20040106", "20040319", "20040408", "20040409", "20040412", "20040816", "20041012", "20041101", "20041109", "20041206", "20041208", "20050106", "20050324", "20050325", "20050502", "20050503", "20050725", "20050815", "20050909", "20051012", "20051101", "20051109", "20051206", "20051208", "20060106", "20060320", "20060413", "20060414", "20060417", "20060501", "20060502", "20060515", "20060815", "20061012", "20061101", "20061109", "20061206", "20061208", "20061225", "20070101", "20070405", "20070406", "20070409", "20070501", "20070502", "20070515", "20070815", "20071012", "20071101", "20071109", "20071206", "20071225", "20080101", "20080107", "20080320", "20080321", "20080501", "20080502", "20080515", "20080725", "20080815", "20080909", "20081208", "20081225", "20090101", "20090106", "20090319", "20090409", "20090410", "20090501", "20090515", "20090611", "20091012", "20091109", "20091208", "20091225", "20100101", "20100106", "20100319", "20100401", "20100402", "20100603", "20101012", "20101101", "20101109", "20101206", "20101208", "20110106", "20110421", "20110422", "20110502", "20110623", "20110725", "20110815", "20110909", "20111012", "20111101", "20111109", "20111206", "20111208", "20120106", "20120319", "20120405", "20120406", "20120501", "20120502", "20120515", "20120815", "20121012", "20121101", "20121109", "20121206", "20121225", "20130101", "20130107", "20130319", "20130328", "20130329", "20130501", "20130502", "20130515", "20130815", "20131101", "20131206", "20131225", "20140101", "20140106", "20140417", "20140418", "20140501", "20140502", "20140515", "20140725", "20140815", "20140909", "20141208", "20141225", "20150101", "20150106", "20150319", "20150402", "20150403", "20150501", "20150515", "20150604", "20151012", "20151109", "20151208", "20151225", "20160101", "20160106", "20160324", "20160325", "20160502", "20160526", "20160725", "20160815", "20160909", "20161012", "20161101", "20161109", "20161206", "20161208", "20170106", "20170320", "20170413", "20170414", "20170501", "20170502", "20170515", "20170815", "20171012", "20171101", "20171109", "20171206", "20171208", "20171225", "20180101", "20180329", "20180330", "20180501", "20180502", "20180515", "20180815", "20181012", "20181101", "20181109", "20181206", "20181225", "20190101", "20190107", "20190319", "20190418", "20190419", "20190501", "20190502", "20190515", "20190815", "20191101", "20191206", "20191225", "20200101", "20200106", "20200319", "20200409", "20200410", "20200501", "20200515", "20200611", "20201012", "20201109", "20201208", "20201225", "20210101", "20210106", "20210319", "20210401", "20210402", "20210603", "20211012", "20211101", "20211109", "20211206", "20211208", "20220106", "20220414", "20220415", "20220502", "20220616", "20220725", "20220815", "20220909", "20221012", "20221101", "20221109", "20221206", "20221208", "20230106", "20230320", "20230406", "20230407", "20230501", "20230502", "20230515", "20230815", "20231012", "20231101", "20231109", "20231206", "20231208", "20231225", "20240101", "20240319", "20240328", "20240329", "20240501", "20240502", "20240515", "20240815", "20241101", "20241206", "20241225", "20250101", "20250106", "20250417", "20250418", "20250501", "20250502", "20250515", "20250725", "20250815", "20250909", "20251208", "20251225", "20260101", "20260106", "20260319", "20260402", "20260403", "20260501", "20260515", "20260604", "20261012", "20261109", "20261208", "20261225", "20270101", "20270106", "20270319", "20270325", "20270326", "20270527", "20271012", "20271101", "20271109", "20271206", "20271208", "20280106", "20280413", "20280414", "20280501", "20280502", "20280515", "20280815", "20281012", "20281101", "20281109", "20281206", "20281208", "20281225", "20290101", "20290329", "20290330", "20290501", "20290502", "20290515", "20290815", "20291012", "20291101", "20291109", "20291206", "20291225", "20300101", "20300107", "20300319", "20300418", "20300419", "20300501", "20300502", "20300515", "20300815", "20301101", "20301206", "20301225", "20310101", "20310106", "20310410", "20310411", "20310501", "20310502", "20310515", "20310725", "20310815", "20310909", "20311208", "20311225", "20320101", "20320106", "20320319", "20320325", "20320326", "20320527", "20321012", "20321101", "20321109", "20321206", "20321208", "20330106", "20330414", "20330415", "20330502", "20330616", "20330725", "20330815", "20330909", "20331012", "20331101", "20331109", "20331206", "20331208", "20340106", "20340320", "20340406", "20340407", "20340501", "20340502", "20340515", "20340815", "20341012", "20341101", "20341109", "20341206", "20341208", "20341225", "20350101", "20350322", "20350323", "20350501", "20350502", "20350515", "20350815", "20351012", "20351101", "20351109", "20351206", "20351225", "20360101", "20360107", "20360410", "20360411", "20360501", "20360502", "20360515", "20360725", "20360815", "20360909", "20361208", "20361225", "20370101", "20370106", "20370319", "20370402", "20370403", "20370501", "20370515", "20370604", "20371012", "20371109", "20371208", "20371225", "20380101", "20380106", "20380319", "20380422", "20380423", "20380624", "20381012", "20381101", "20381109", "20381206", "20381208", "20390106", "20390407", "20390408", "20390502", "20390609", "20390725", "20390815", "20390909", "20391012", "20391101", "20391109", "20391206", "20391208", "20400106", "20400320", "20400329", "20400330", "20400501", "20400502", "20400515", "20400815", "20401012", "20401101", "20401109", "20401206", "20401225", "20410101", "20410107", "20410319", "20410418", "20410419", "20410501", "20410502", "20410515", "20410815", "20411101", "20411206", "20411225", "20420101", "20420106", "20420403", "20420404", "20420501", "20420502", "20420515", "20420725", "20420815", "20420909", "20421208", "20421225", "20430101", "20430106", "20430319", "20430326", "20430327", "20430501", "20430515", "20430528", "20431012", "20431109", "20431208", "20431225", "20440101", "20440106", "20440414", "20440415", "20440502", "20440616", "20440725", "20440815", "20440909", "20441012", "20441101", "20441109", "20441206", "20441208", "20450106", "20450320", "20450406", "20450407", "20450501", "20450502", "20450515", "20450815", "20451012", "20451101", "20451109", "20451206", "20451208", "20451225", "20460101", "20460322", "20460323", "20460501", "20460502", "20460515", "20460815", "20461012", "20461101", "20461109", "20461206", "20461225", "20470101", "20470107", "20470319", "20470411", "20470412", "20470501", "20470502", "20470515", "20470815", "20471101", "20471206", "20471225", "20480101", "20480106", "20480319", "20480402", "20480403", "20480501", "20480515", "20480604", "20481012", "20481109", "20481208", "20481225", "20490101", "20490106", "20490319", "20490415", "20490416", "20490617", "20491012", "20491101", "20491109", "20491206", "20491208", "20500106", "20500407", "20500408", "20500502", "20500609", "20500725", "20500815", "20500909", "20501012", "20501101", "20501109", "20501206", "20501208", "20510106", "20510320", "20510330", "20510331", "20510501", "20510502", "20510515", "20510815", "20511012", "20511101", "20511109", "20511206", "20511208", "20511225", "20520101", "20520319", "20520418", "20520419", "20520501", "20520502", "20520515", "20520815", "20521101", "20521206", "20521225", "20530101", "20530106", "20530403", "20530404", "20530501", "20530502", "20530515", "20530725", "20530815", "20530909", "20531208", "20531225", "20540101", "20540106", "20540319", "20540326", "20540327", "20540501", "20540515", "20540528", "20541012", "20541109", "20541208", "20541225", "20550101", "20550106", "20550319", "20550415", "20550416", "20550617", "20551012", "20551101", "20551109", "20551206", "20551208", "20560106", "20560330", "20560331", "20560501", "20560502", "20560515", "20560815", "20561012", "20561101", "20561109", "20561206", "20561208", "20561225", "20570101", "20570419", "20570420", "20570501", "20570502", "20570515", "20570815", "20571012", "20571101", "20571109", "20571206", "20571225", "20580101", "20580107", "20580319", "20580411", "20580412", "20580501", "20580502", "20580515", "20580815", "20581101", "20581206", "20581225", "20590101", "20590106", "20590327", "20590328", "20590501", "20590502", "20590515", "20590725", "20590815", "20590909", "20591208", "20591225", "20600101", "20600106", "20600319", "20600415", "20600416", "20600617", "20601012", "20601101", "20601109", "20601206", "20601208", "20610106", "20610407", "20610408", "20610502", "20610609", "20610725", "20610815", "20610909", "20611012", "20611101", "20611109", "20611206", "20611208" ], + "MonthsToExclude": [] + }, + "MAN": { + "InheritedCalendar": [], + "Name": "MAN", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19940331", "19940401", "19941101", "19941130", "19941230", "20030409", "20030417", "20030418", "20030501", "20030612", "20031125", "20031224", "20031225", "20031230", "20031231", "20040101", "20040408", "20040409", "20040510", "20040630", "20041101", "20041102", "20041130", "20041224", "20041230", "20041231", "20050324", "20050325", "20050829", "20051031", "20051101", "20051104", "20051128", "20051226", "20051230", "20060413", "20060414", "20060501", "20060612", "20060821", "20061024", "20061101", "20061201", "20061225", "20061226", "20070101", "20070405", "20070406", "20070409", "20070501", "20070514", "20070611", "20070820", "20070821", "20070827", "20071101", "20071102", "20071130", "20071203", "20071224", "20071225", "20071231", "20080101", "20080225", "20080320", "20080321", "20080407", "20080501", "20080505", "20080612", "20080616", "20080821", "20080825", "20081001", "20081201", "20081224", "20081225", "20081229", "20081230", "20081231", "20090101", "20090225", "20090409", "20090410", "20090413", "20090501", "20090504", "20090612", "20090615", "20090821", "20090824", "20090831", "20090921", "20091130", "20091224", "20091225", "20091228", "20091230", "20091231", "20100101", "20100225", "20100401", "20100402", "20100409", "20100412", "20100503", "20100510", "20100614", "20100823", "20100830", "20100910", "20101101", "20101129", "20101130", "20101224", "20101230", "20101231", "20110103", "20110225", "20110411", "20110421", "20110422", "20110502", "20110613", "20110822", "20110829", "20110831", "20111101", "20111128", "20111130", "20111230", "20120102", "20120405", "20120406", "20120409", "20120430", "20120501", "20120611", "20120612", "20120820", "20120821", "20120827", "20121101", "20121130", "20121203", "20121224", "20121225", "20121231", "20130101", "20130225", "20130328", "20130329", "20130408", "20130429", "20130501", "20130513", "20130610", "20130612", "20130809", "20130819", "20130821", "20130826", "20131101", "20131202", "20131224", "20131225", "20131230", "20131231", "20140101", "20140225", "20140407", "20140417", "20140418", "20140501", "20140505", "20140612", "20140616", "20140729", "20140821", "20140825", "20141201", "20141224", "20141225", "20141229", "20141230", "20141231", "20150101", "20150225", "20150402", "20150403", "20150410", "20150413", "20150501", "20150504", "20150612", "20150615", "20150821", "20150824", "20150831", "20151130", "20151224", "20151225", "20151228", "20151230", "20151231", "20160101", "20160225", "20160324", "20160325", "20160411", "20160502", "20160509", "20160613", "20160706", "20160822", "20160829", "20161101", "20161128", "20161130", "20161230", "20170102", "20170410", "20170413", "20170414", "20170501", "20170612", "20170626", "20170821", "20170828", "20171101", "20171130", "20171204", "20171225", "20180101", "20180329", "20180330", "20180409", "20180430", "20180501", "20180611", "20180612", "20180820", "20180821", "20180827", "20181101", "20181130", "20181203", "20181224", "20181225", "20181231", "20190101", "20190225", "20190408", "20190418", "20190419", "20190429", "20190501", "20190513", "20190605", "20190610", "20190612", "20190819", "20190821", "20190826", "20191101", "20191202", "20191224", "20191225", "20191230", "20191231", "20200101", "20200225", "20200409", "20200410", "20200413", "20200501", "20200504", "20200525", "20200612", "20200615", "20200821", "20200824", "20200831", "20201130", "20201224", "20201225", "20201228", "20201230", "20201231", "20210101", "20210225", "20210401", "20210402", "20210409", "20210412", "20210503", "20210514", "20210614", "20210823", "20210830", "20211101", "20211129", "20211130", "20211224", "20211230", "20211231", "20220103", "20220225", "20220411", "20220414", "20220415", "20220502", "20220503", "20220509", "20220613", "20220822", "20220829", "20221101", "20221128", "20221130", "20221230", "20230102", "20230406", "20230407", "20230410", "20230501", "20230612", "20230821", "20230828", "20231101", "20231130", "20231204", "20231225", "20240101", "20240328", "20240329", "20240408", "20240411", "20240429", "20240501", "20240610", "20240612", "20240819", "20240821", "20240826", "20241101", "20241202", "20241224", "20241225", "20241230", "20241231", "20250101", "20250225", "20250331", "20250407", "20250417", "20250418", "20250501", "20250505", "20250512", "20250612", "20250616", "20250821", "20250825", "20251201", "20251224", "20251225", "20251229", "20251230", "20251231", "20260101", "20260225", "20260402", "20260403", "20260410", "20260413", "20260501", "20260504", "20260612", "20260615", "20260821", "20260824", "20260831", "20261130", "20261224", "20261225", "20261228", "20261230", "20261231", "20270101", "20270225", "20270310", "20270325", "20270326", "20270409", "20270412", "20270503", "20270614", "20270823", "20270830", "20271101", "20271129", "20271130", "20271224", "20271230", "20271231", "20280103", "20280225", "20280410", "20280413", "20280414", "20280501", "20280508", "20280612", "20280821", "20280828", "20281101", "20281130", "20281204", "20281225", "20290101", "20290215", "20290329", "20290330", "20290409", "20290430", "20290501", "20290611", "20290612", "20290820", "20290821", "20290827", "20291101", "20291130", "20291203", "20291224", "20291225", "20291231", "20300101", "20300205", "20300225", "20300408", "20300418", "20300419", "20300429", "20300501", "20300610", "20300612", "20300819", "20300821", "20300826", "20301101", "20301202", "20301224", "20301225", "20301230", "20301231", "20310101", "20310225", "20310407", "20310410", "20310411", "20310501", "20310505", "20310512", "20310612", "20310616", "20310821", "20310825", "20311201", "20311224", "20311225", "20311229", "20311230", "20311231", "20320101", "20320115", "20320225", "20320325", "20320326", "20320409", "20320412", "20320503", "20320614", "20320823", "20320830", "20321101", "20321129", "20321130", "20321224", "20321230", "20321231", "20330103", "20330225", "20330411", "20330414", "20330415", "20330502", "20330613", "20330822", "20330829", "20331101", "20331128", "20331130", "20331230", "20340102", "20340406", "20340407", "20340410", "20340501", "20340508", "20340612", "20340821", "20340828", "20341101", "20341130", "20341204", "20341213", "20341225", "20350101", "20350322", "20350323", "20350409", "20350430", "20350501", "20350611", "20350612", "20350820", "20350821", "20350827", "20351101", "20351130", "20351203", "20351224", "20351225", "20351231", "20360101", "20360225", "20360407", "20360410", "20360411", "20360501", "20360505", "20360612", "20360616", "20360821", "20360825", "20361120", "20361201", "20361224", "20361225", "20361229", "20361230", "20361231", "20370101", "20370225", "20370402", "20370403", "20370410", "20370413", "20370501", "20370504", "20370511", "20370612", "20370615", "20370821", "20370824", "20370831", "20371109", "20371130", "20371224", "20371225", "20371228", "20371230", "20371231", "20380101", "20380225", "20380409", "20380412", "20380422", "20380423", "20380503", "20380614", "20380823", "20380830", "20381101", "20381129", "20381130", "20381224", "20381230", "20381231", "20390103", "20390225", "20390407", "20390408", "20390411", "20390502", "20390613", "20390822", "20390829", "20391020", "20391101", "20391128", "20391130", "20391230", "20400102", "20400329", "20400330", "20400409", "20400430", "20400501", "20400514", "20400611", "20400612", "20400820", "20400821", "20400827", "20401008", "20401101", "20401130", "20401203", "20401224", "20401225", "20401231", "20410101", "20410225", "20410408", "20410418", "20410419", "20410429", "20410501", "20410610", "20410612", "20410819", "20410821", "20410826", "20410927", "20411101", "20411202", "20411224", "20411225", "20411230", "20411231", "20420101", "20420225", "20420403", "20420404", "20420407", "20420501", "20420505", "20420612", "20420616", "20420821", "20420825", "20420916", "20421201", "20421224", "20421225", "20421229", "20421230", "20421231", "20430101", "20430225", "20430326", "20430327", "20430410", "20430413", "20430501", "20430504", "20430511", "20430612", "20430615", "20430821", "20430824", "20430831", "20431130", "20431224", "20431225", "20431228", "20431230", "20431231", "20440101", "20440225", "20440411", "20440414", "20440415", "20440502", "20440613", "20440822", "20440825", "20440829", "20441101", "20441128", "20441130", "20441230", "20450102", "20450406", "20450407", "20450410", "20450501", "20450612", "20450815", "20450821", "20450828", "20451101", "20451130", "20451204", "20451225", "20460101", "20460322", "20460323", "20460409", "20460430", "20460501", "20460514", "20460611", "20460612", "20460820", "20460821", "20460827", "20461101", "20461130", "20461203", "20461224", "20461225", "20461231", "20470101", "20470225", "20470408", "20470411", "20470412", "20470429", "20470501", "20470610", "20470612", "20470725", "20470819", "20470821", "20470826", "20471101", "20471202", "20471224", "20471225", "20471230", "20471231", "20480101", "20480225", "20480402", "20480403", "20480410", "20480413", "20480501", "20480504", "20480612", "20480615", "20480713", "20480821", "20480824", "20480831", "20481130", "20481224", "20481225", "20481228", "20481230", "20481231", "20490101", "20490225", "20490409", "20490412", "20490415", "20490416", "20490503", "20490510", "20490614", "20490702", "20490823", "20490830", "20491101", "20491129", "20491130", "20491224", "20491230", "20491231", "20500103", "20500225", "20500407", "20500408", "20500411", "20500502", "20500613", "20500621", "20500822", "20500829", "20501101", "20501128", "20501130", "20501230", "20510102", "20510330", "20510331", "20510410", "20510501", "20510612", "20510821", "20510828", "20511101", "20511130", "20511204", "20511225", "20520101", "20520408", "20520418", "20520419", "20520429", "20520501", "20520513", "20520530", "20520610", "20520612", "20520819", "20520821", "20520826", "20521101", "20521202", "20521224", "20521225", "20521230", "20521231", "20530101", "20530225", "20530403", "20530404", "20530407", "20530501", "20530505", "20530520", "20530612", "20530616", "20530821", "20530825", "20531201", "20531224", "20531225", "20531229", "20531230", "20531231", "20540101", "20540225", "20540326", "20540327", "20540410", "20540413", "20540501", "20540504", "20540612", "20540615", "20540821", "20540824", "20540831", "20541130", "20541224", "20541225", "20541228", "20541230", "20541231", "20550101", "20550225", "20550409", "20550412", "20550415", "20550416", "20550429", "20550503", "20550510", "20550614", "20550823", "20550830", "20551101", "20551129", "20551130", "20551224", "20551230", "20551231", "20560103", "20560225", "20560330", "20560331", "20560410", "20560417", "20560501", "20560612", "20560821", "20560828", "20561101", "20561130", "20561204", "20561225" ], + "MonthsToExclude": [] + }, + "MEL": { + "InheritedCalendar": [], + "Name": "MEL", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20011225", "20020126", "20020308", "20020329", "20020401", "20020425", "20020610", "20021007", "20021105", "20021225", "20021226", "20030101", "20030126", "20030127", "20030310", "20030418", "20030421", "20030425", "20030609", "20031104", "20031225", "20031226", "20040101", "20040126", "20040308", "20040409", "20040412", "20040614", "20041102", "20041227", "20041228", "20050103", "20050126", "20050314", "20050325", "20050328", "20050425", "20050613", "20051101", "20051226", "20051227", "20060102", "20060126", "20060313", "20060414", "20060417", "20060425", "20060612", "20061107", "20061225", "20061226", "20070101", "20070126", "20070312", "20070406", "20070409", "20070425", "20070611", "20071106", "20071225", "20071226", "20080101", "20080128", "20080310", "20080321", "20080324", "20080425", "20080609", "20081104", "20081225", "20081226", "20090101", "20090126", "20090309", "20090410", "20090413", "20090608", "20091103", "20091225", "20091228", "20100101", "20100126", "20100308", "20100402", "20100405", "20100426", "20100614", "20101102", "20101227", "20101228", "20110103", "20110126", "20110314", "20110422", "20110425", "20110426", "20110613", "20111101", "20111226", "20111227", "20120102", "20120126", "20120312", "20120406", "20120409", "20120425", "20120611", "20121106", "20121225", "20121226", "20130101", "20130128", "20130311", "20130329", "20130401", "20130425", "20130610", "20131105", "20131225", "20131226", "20140101", "20140127", "20140310", "20140418", "20140421", "20140425", "20140609", "20141104", "20141225", "20141226", "20150101", "20150126", "20150309", "20150403", "20150406", "20150608", "20151103", "20151225", "20151228", "20160101", "20160126", "20160314", "20160325", "20160328", "20160425", "20160613", "20161101", "20161226", "20161227", "20170102", "20170126", "20170313", "20170414", "20170417", "20170425", "20170612", "20171107", "20171225", "20171226", "20180101", "20180126", "20180312", "20180330", "20180402", "20180425", "20180611", "20181106", "20181225", "20181226", "20190101", "20190128", "20190311", "20190419", "20190422", "20190425", "20190610", "20191105", "20191225", "20191226", "20200101", "20200127", "20200309", "20200410", "20200413", "20200608", "20201103", "20201225", "20201228", "20210101", "20210126", "20210308", "20210402", "20210405", "20210426", "20210614", "20211102", "20211227", "20211228", "20220103", "20220126", "20220314", "20220415", "20220418", "20220425", "20220613", "20221101", "20221226", "20221227", "20230102", "20230126", "20230313", "20230407", "20230410", "20230425", "20230612", "20231107", "20231225", "20231226", "20240101", "20240126", "20240311", "20240329", "20240401", "20240425", "20240610", "20241105", "20241225", "20241226", "20250101", "20250127", "20250310", "20250418", "20250421", "20250425", "20250609", "20251104", "20251225", "20251226", "20260101", "20260126", "20260309", "20260403", "20260406", "20260608", "20261103", "20261225", "20261228", "20270101", "20270126", "20270308", "20270326", "20270329", "20270426", "20270614", "20271102", "20271227", "20271228", "20280103", "20280126", "20280313", "20280414", "20280417", "20280425", "20280612", "20281107", "20281225", "20281226", "20290101", "20290126", "20290312", "20290330", "20290402", "20290425", "20290611", "20291106", "20291225", "20291226", "20300101", "20300128", "20300311", "20300419", "20300422", "20300425", "20300610", "20301105", "20301225", "20301226", "20310101", "20310127", "20310310", "20310411", "20310414", "20310425", "20310609", "20311104", "20311225", "20311226", "20320101", "20320126", "20320308", "20320326", "20320329", "20320426", "20320614", "20321102", "20321227", "20321228", "20330103", "20330126", "20330314", "20330415", "20330418", "20330425", "20330613", "20331101", "20331226", "20331227", "20340102", "20340126", "20340313", "20340407", "20340410", "20340425", "20340612", "20341107", "20341225", "20341226", "20350101", "20350126", "20350312", "20350323", "20350326", "20350425", "20350611", "20351106", "20351225", "20351226", "20360101", "20360128", "20360310", "20360411", "20360414", "20360425", "20360609", "20361104", "20361225", "20361226", "20370101", "20370126", "20370309", "20370403", "20370406", "20370608", "20371103", "20371225", "20371228", "20380101", "20380126", "20380308", "20380423", "20380426", "20380427", "20380614", "20381102", "20381227", "20381228", "20390103", "20390126", "20390314", "20390408", "20390411", "20390425", "20390613", "20391101", "20391226", "20391227", "20400102", "20400126", "20400312", "20400330", "20400402", "20400425", "20400611", "20401106", "20401225", "20401226", "20410101", "20410128", "20410311", "20410419", "20410422", "20410425", "20410610", "20411105", "20411225", "20411226", "20420101", "20420127", "20420310", "20420404", "20420407", "20420425", "20420609", "20421104", "20421225", "20421226", "20430101", "20430126", "20430309", "20430327", "20430330", "20430608", "20431103", "20431225", "20431228", "20440101", "20440126", "20440314", "20440415", "20440418", "20440425", "20440613", "20441101", "20441226", "20441227", "20450102", "20450126", "20450313", "20450407", "20450410", "20450425", "20450612", "20451107", "20451225", "20451226", "20460101", "20460126", "20460312", "20460323", "20460326", "20460425", "20460611", "20461106", "20461225", "20461226", "20470101", "20470128", "20470311", "20470412", "20470415", "20470425", "20470610", "20471105", "20471225", "20471226", "20480101", "20480127", "20480309", "20480403", "20480406", "20480608", "20481103", "20481225", "20481228", "20490101", "20490126", "20490308", "20490416", "20490419", "20490426", "20490614", "20491102", "20491227", "20491228", "20500103", "20500126", "20500314", "20500408", "20500411", "20500425", "20500613", "20501101", "20501226", "20501227", "20510102", "20510126", "20510313", "20510331", "20510403", "20510425", "20510612", "20511107", "20511225", "20511226", "20520101", "20520126", "20520311", "20520419", "20520422", "20520425", "20520610", "20521105", "20521225", "20521226", "20530101", "20530127", "20530310", "20530404", "20530407", "20530425", "20530609", "20531104", "20531225", "20531226", "20540101", "20540126", "20540309", "20540327", "20540330", "20540608", "20541103", "20541225", "20541228", "20550101", "20550126", "20550308", "20550416", "20550419", "20550426", "20550614", "20551102", "20551227", "20551228", "20560103", "20560126", "20560313", "20560331", "20560403", "20560425", "20560612", "20561107", "20561225", "20561226", "20570101", "20570126", "20570312", "20570420", "20570423", "20570425", "20570611", "20571106", "20571225", "20571226", "20580101", "20580128", "20580311", "20580412", "20580415", "20580425", "20580610", "20581105", "20581225", "20581226", "20590101", "20590127", "20590310", "20590328", "20590331", "20590425", "20590609", "20591104", "20591225", "20591226", "20600101", "20600126", "20600308", "20600416", "20600419", "20600426", "20600614", "20601102", "20601227", "20601228", "20610103", "20610126", "20610314", "20610408", "20610411", "20610425", "20610613", "20611101", "20611226", "20611227" ], + "MonthsToExclude": [] + }, + "MEX": { + "InheritedCalendar": [], + "Name": "MEX", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20041102", "20050916", "20051212", "20060206", "20060321", "20060413", "20060414", "20060501", "20061102", "20061120", "20061201", "20061212", "20061225", "20070101", "20070205", "20070319", "20070405", "20070406", "20070501", "20071102", "20071119", "20071212", "20071225", "20080101", "20080204", "20080317", "20080320", "20080321", "20080501", "20080916", "20081117", "20081212", "20081225", "20090101", "20090202", "20090316", "20090409", "20090410", "20090501", "20090916", "20091102", "20091116", "20091225", "20100101", "20100201", "20100315", "20100401", "20100402", "20100916", "20100917", "20101102", "20101115", "20110207", "20110321", "20110421", "20110422", "20110916", "20111102", "20111121", "20111212", "20120206", "20120319", "20120405", "20120406", "20120501", "20121102", "20121119", "20121212", "20121225", "20130101", "20130204", "20130318", "20130328", "20130329", "20130501", "20130916", "20131118", "20131212", "20131225", "20140101", "20140203", "20140317", "20140417", "20140418", "20140501", "20140916", "20141117", "20141212", "20141225", "20150101", "20150202", "20150316", "20150402", "20150403", "20150501", "20150916", "20151102", "20151116", "20151225", "20160101", "20160201", "20160321", "20160324", "20160325", "20160916", "20161102", "20161121", "20161212", "20170206", "20170320", "20170413", "20170414", "20170501", "20171102", "20171120", "20171212", "20171225", "20180101", "20180205", "20180319", "20180329", "20180330", "20180501", "20181102", "20181119", "20181212", "20181225", "20190101", "20190204", "20190318", "20190418", "20190419", "20190501", "20190916", "20191118", "20191212", "20191225", "20200101", "20200203", "20200316", "20200409", "20200410", "20200501", "20200916", "20201102", "20201116", "20201225", "20210101", "20210201", "20210315", "20210401", "20210402", "20210916", "20211102", "20211115", "20220207", "20220321", "20220414", "20220415", "20220916", "20221102", "20221121", "20221212", "20230206", "20230320", "20230406", "20230407", "20230501", "20231102", "20231120", "20231212", "20231225", "20240101", "20240205", "20240318", "20240328", "20240329", "20240501", "20240916", "20241118", "20241212", "20241225", "20250101", "20250203", "20250317", "20250417", "20250418", "20250501", "20250916", "20251117", "20251212", "20251225", "20260101", "20260202", "20260316", "20260402", "20260403", "20260501", "20260916", "20261102", "20261116", "20261225", "20270101", "20270201", "20270315", "20270325", "20270326", "20270916", "20271102", "20271115", "20280207", "20280320", "20280413", "20280414", "20280501", "20281102", "20281120", "20281212", "20281225", "20290101", "20290205", "20290319", "20290329", "20290330", "20290501", "20291102", "20291119", "20291212", "20291225", "20300101", "20300204", "20300318", "20300418", "20300419", "20300501", "20300916", "20301118", "20301212", "20301225", "20310101", "20310203", "20310317", "20310410", "20310411", "20310501", "20310916", "20311117", "20311212", "20311225", "20320101", "20320202", "20320315", "20320325", "20320326", "20320916", "20321102", "20321115", "20330207", "20330321", "20330414", "20330415", "20330916", "20331102", "20331121", "20331212", "20340206", "20340320", "20340406", "20340407", "20340501", "20341102", "20341120", "20341212", "20341225", "20350101", "20350205", "20350319", "20350322", "20350323", "20350501", "20351102", "20351119", "20351212", "20351225", "20360101", "20360204", "20360317", "20360410", "20360411", "20360501", "20360916", "20361117", "20361201", "20361212", "20361225", "20370101", "20370202", "20370316", "20370402", "20370403", "20370501", "20370916", "20371102", "20371116", "20371225", "20380101", "20380201", "20380315", "20380422", "20380423", "20380916", "20381102", "20381115", "20390207", "20390321", "20390407", "20390408", "20390916", "20391102", "20391121", "20391212", "20400206", "20400319", "20400329", "20400330", "20400501", "20401102", "20401119", "20401212", "20401225", "20410101", "20410204", "20410318", "20410418", "20410419", "20410501", "20410916", "20411118", "20411212", "20411225", "20420101", "20420203", "20420317", "20420403", "20420404", "20420501", "20420916", "20421117", "20421201", "20421212", "20421225", "20430101", "20430202", "20430316", "20430326", "20430327", "20430501", "20430916", "20431102", "20431116", "20431225", "20440101", "20440201", "20440321", "20440414", "20440415", "20440916", "20441102", "20441121", "20441212", "20450206", "20450320", "20450406", "20450407", "20450501", "20451102", "20451120", "20451212", "20451225", "20460101", "20460205", "20460319", "20460322", "20460323", "20460501", "20461102", "20461119", "20461212", "20461225", "20470101", "20470204", "20470318", "20470411", "20470412", "20470501", "20470916", "20471118", "20471212", "20471225", "20480101", "20480203", "20480316", "20480402", "20480403", "20480501", "20480916", "20481102", "20481116", "20481201", "20481225", "20490101", "20490201", "20490315", "20490415", "20490416", "20490916", "20491102", "20491115", "20500207", "20500321", "20500407", "20500408", "20500916", "20501102", "20501121", "20501212", "20510206", "20510320", "20510330", "20510331", "20510501", "20511102", "20511120", "20511212", "20511225", "20520101", "20520205", "20520318", "20520418", "20520419", "20520501", "20520916", "20521118", "20521212", "20521225", "20530101", "20530203", "20530317", "20530403", "20530404", "20530501", "20530916", "20531117", "20531212", "20531225", "20540101", "20540202", "20540316", "20540326", "20540327", "20540501", "20540916", "20541102", "20541116", "20541201", "20541225", "20550101", "20550201", "20550315", "20550415", "20550416", "20550916", "20551102", "20551115", "20560207", "20560320", "20560330", "20560331", "20560501", "20561102", "20561120", "20561212", "20561225", "20570101", "20570205", "20570319", "20570419", "20570420", "20570501", "20571102", "20571119", "20571212", "20571225", "20580101", "20580204", "20580318", "20580411", "20580412", "20580501", "20580916", "20581118", "20581212", "20581225", "20590101", "20590203", "20590317", "20590327", "20590328", "20590501", "20590916", "20591117", "20591212", "20591225", "20600101", "20600202", "20600315", "20600415", "20600416", "20600916", "20601102", "20601115", "20601201", "20610207", "20610321", "20610407", "20610408", "20610916", "20611102", "20611121", "20611212" ], + "MonthsToExclude": [] + }, + "MIL": { + "InheritedCalendar": [], + "Name": "MIL", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880106", "19880404", "19880425", "19880815", "19881101", "19881208", "19881226", "19890106", "19890327", "19890425", "19890501", "19890815", "19891101", "19891208", "19891225", "19891226", "19900101", "19900416", "19900425", "19900501", "19900815", "19901101", "19901225", "19901226", "19910101", "19910401", "19910425", "19910501", "19910815", "19911101", "19911225", "19911226", "19920101", "19920106", "19920420", "19920501", "19921208", "19921225", "19930101", "19930106", "19930412", "19931101", "19931208", "19940106", "19940404", "19940425", "19940815", "19941101", "19941208", "19941226", "19950106", "19950417", "19950425", "19950501", "19950815", "19951101", "19951208", "19951225", "19951226", "19960101", "19960408", "19960425", "19960501", "19960815", "19961101", "19961225", "19961226", "19970101", "19970106", "19970331", "19970425", "19970501", "19970815", "19971208", "19971225", "19971226", "19980101", "19980106", "19980413", "19980501", "19981208", "19981225", "19990101", "19990106", "19990405", "19991101", "19991208", "19991231", "20000106", "20000421", "20000424", "20000425", "20000501", "20000815", "20001101", "20001208", "20001225", "20001226", "20010101", "20010413", "20010416", "20010425", "20010501", "20010815", "20011101", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020425", "20020501", "20020815", "20021101", "20021225", "20021226", "20030101", "20030106", "20030421", "20030425", "20030501", "20030602", "20030815", "20031208", "20031225", "20031226", "20040101", "20040106", "20040412", "20040602", "20041101", "20041208", "20050106", "20050325", "20050328", "20050425", "20050602", "20050815", "20051101", "20051208", "20051226", "20060106", "20060417", "20060425", "20060501", "20060602", "20060815", "20061101", "20061208", "20061225", "20061226", "20070101", "20070409", "20070425", "20070501", "20070815", "20071101", "20071225", "20071226", "20080101", "20080324", "20080425", "20080501", "20080602", "20080815", "20081208", "20081225", "20081226", "20090101", "20090106", "20090413", "20090501", "20090602", "20091208", "20091225", "20100101", "20100106", "20100405", "20100602", "20101101", "20101208", "20110106", "20110317", "20110425", "20110602", "20110815", "20111101", "20111208", "20111226", "20120106", "20120409", "20120425", "20120501", "20120815", "20121101", "20121225", "20121226", "20130101", "20130401", "20130425", "20130501", "20130815", "20131101", "20131225", "20131226", "20140101", "20140106", "20140421", "20140425", "20140501", "20140602", "20140815", "20141208", "20141225", "20141226", "20150101", "20150106", "20150406", "20150501", "20150602", "20151208", "20151225", "20160101", "20160106", "20160328", "20160425", "20160602", "20160815", "20161101", "20161208", "20161226", "20170106", "20170417", "20170425", "20170501", "20170602", "20170815", "20171101", "20171208", "20171225", "20171226", "20180101", "20180402", "20180425", "20180501", "20180815", "20181101", "20181225", "20181226", "20190101", "20190422", "20190425", "20190501", "20190815", "20191101", "20191225", "20191226", "20200101", "20200106", "20200413", "20200501", "20200602", "20201208", "20201225", "20210101", "20210106", "20210405", "20210602", "20211101", "20211208", "20220106", "20220418", "20220425", "20220602", "20220815", "20221101", "20221208", "20221226", "20230106", "20230410", "20230425", "20230501", "20230602", "20230815", "20231101", "20231208", "20231225", "20231226", "20240101", "20240401", "20240425", "20240501", "20240815", "20241101", "20241225", "20241226", "20250101", "20250106", "20250421", "20250425", "20250501", "20250602", "20250815", "20251208", "20251225", "20251226", "20260101", "20260106", "20260406", "20260501", "20260602", "20261208", "20261225", "20270101", "20270106", "20270329", "20270602", "20271101", "20271208", "20280106", "20280417", "20280425", "20280501", "20280602", "20280815", "20281101", "20281208", "20281225", "20281226", "20290101", "20290402", "20290425", "20290501", "20290815", "20291101", "20291225", "20291226", "20300101", "20300422", "20300425", "20300501", "20300815", "20301101", "20301225", "20301226", "20310101", "20310106", "20310414", "20310425", "20310501", "20310602", "20310815", "20311208", "20311225", "20311226", "20320101", "20320106", "20320329", "20320602", "20321101", "20321208", "20330106", "20330418", "20330425", "20330602", "20330815", "20331101", "20331208", "20331226", "20340106", "20340410", "20340425", "20340501", "20340602", "20340815", "20341101", "20341208", "20341225", "20341226", "20350101", "20350326", "20350425", "20350501", "20350815", "20351101", "20351225", "20351226", "20360101", "20360414", "20360425", "20360501", "20360602", "20360815", "20361208", "20361225", "20361226", "20370101", "20370106", "20370406", "20370501", "20370602", "20371208", "20371225", "20380101", "20380106", "20380426", "20380602", "20381101", "20381208", "20390106", "20390411", "20390425", "20390602", "20390815", "20391101", "20391208", "20391226", "20400106", "20400402", "20400425", "20400501", "20400815", "20401101", "20401225", "20401226", "20410101", "20410422", "20410425", "20410501", "20410815", "20411101", "20411225", "20411226", "20420101", "20420106", "20420407", "20420425", "20420501", "20420602", "20420815", "20421208", "20421225", "20421226", "20430101", "20430106", "20430330", "20430501", "20430602", "20431208", "20431225", "20440101", "20440106", "20440418", "20440425", "20440602", "20440815", "20441101", "20441208", "20441226", "20450106", "20450410", "20450425", "20450501", "20450602", "20450815", "20451101", "20451208", "20451225", "20451226", "20460101", "20460326", "20460425", "20460501", "20460815", "20461101", "20461225", "20461226", "20470101", "20470415", "20470425", "20470501", "20470815", "20471101", "20471225", "20471226", "20480101", "20480106", "20480406", "20480501", "20480602", "20481208", "20481225", "20490101", "20490106", "20490419", "20490602", "20491101", "20491208", "20500106", "20500411", "20500425", "20500602", "20500815", "20501101", "20501208", "20501226", "20510106", "20510403", "20510425", "20510501", "20510602", "20510815", "20511101", "20511208", "20511225", "20511226", "20520101", "20520422", "20520425", "20520501", "20520815", "20521101", "20521225", "20521226", "20530101", "20530106", "20530407", "20530425", "20530501", "20530602", "20530815", "20531208", "20531225", "20531226", "20540101", "20540106", "20540330", "20540501", "20540602", "20541208", "20541225", "20550101", "20550106", "20550419", "20550602", "20551101", "20551208", "20560106", "20560403", "20560425", "20560501", "20560602", "20560815", "20561101", "20561208", "20561225", "20561226", "20570101", "20570423", "20570425", "20570501", "20570815", "20571101", "20571225", "20571226", "20580101", "20580415", "20580425", "20580501", "20580815", "20581101", "20581225", "20581226", "20590101", "20590106", "20590331", "20590425", "20590501", "20590602", "20590815", "20591208", "20591225", "20591226", "20600101", "20600106", "20600419", "20600602", "20601101", "20601208", "20610106", "20610411", "20610425", "20610602", "20610815", "20611101", "20611208", "20611226" ], + "MonthsToExclude": [] + }, + "MOS": { + "InheritedCalendar": [], + "Name": "MOS", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19810101", "19820101", "19850101", "19860101", "19870101", "19880101", "19900101", "19910101", "19920101", "19930101", "19960101", "19970101", "19980101", "19990101", "20010101", "20020101", "20020501", "20020502", "20020503", "20020509", "20020510", "20020612", "20021225", "20030101", "20030224", "20030310", "20030501", "20030502", "20030509", "20030612", "20030613", "20031107", "20031212", "20031225", "20040101", "20040102", "20040107", "20040223", "20040308", "20040503", "20040504", "20040510", "20040614", "20041108", "20041213", "20041225", "20050103", "20050104", "20050107", "20050223", "20050307", "20050308", "20050502", "20050503", "20050509", "20050613", "20051107", "20051212", "20051225", "20060102", "20060103", "20060109", "20060223", "20060224", "20060308", "20060501", "20060508", "20060509", "20060612", "20061106", "20061225", "20070101", "20070102", "20070103", "20070104", "20070105", "20070108", "20070223", "20070308", "20070430", "20070501", "20070509", "20070611", "20070612", "20071105", "20071225", "20071231", "20080101", "20080102", "20080103", "20080104", "20080107", "20080108", "20080225", "20080310", "20080501", "20080502", "20080509", "20080612", "20080613", "20081103", "20081104", "20090101", "20090102", "20090105", "20090106", "20090107", "20090108", "20090109", "20090223", "20090309", "20090501", "20090511", "20090612", "20091104", "20100101", "20100104", "20100105", "20100106", "20100107", "20100108", "20100222", "20100223", "20100308", "20100503", "20100510", "20100614", "20101104", "20101105", "20110103", "20110104", "20110105", "20110106", "20110107", "20110110", "20110223", "20110307", "20110308", "20110502", "20110509", "20110613", "20111104", "20120102", "20120103", "20120104", "20120105", "20120106", "20120109", "20120223", "20120308", "20120309", "20120430", "20120501", "20120507", "20120508", "20120509", "20120611", "20120612", "20121105", "20121231", "20130101", "20130102", "20130103", "20130104", "20130107", "20130108", "20130225", "20130308", "20130501", "20130509", "20130510", "20130612", "20131104", "20140101", "20140102", "20140103", "20140106", "20140107", "20140108", "20140224", "20140310", "20140501", "20140502", "20140509", "20140612", "20140613", "20141103", "20141104", "20150101", "20150102", "20150105", "20150106", "20150107", "20150108", "20150109", "20150223", "20150309", "20150501", "20150511", "20150612", "20151104", "20160101", "20160104", "20160105", "20160106", "20160107", "20160108", "20160222", "20160223", "20160307", "20160308", "20160502", "20160509", "20160613", "20161104", "20170102", "20170103", "20170104", "20170105", "20170106", "20170109", "20170223", "20170224", "20170308", "20170501", "20170508", "20170509", "20170612", "20171106", "20180101", "20180102", "20180103", "20180104", "20180105", "20180108", "20180223", "20180308", "20180309", "20180430", "20180501", "20180509", "20180611", "20180612", "20181105", "20181231", "20190101", "20190102", "20190103", "20190104", "20190107", "20190108", "20190225", "20190308", "20190501", "20190509", "20190510", "20190612", "20191104", "20200101", "20200102", "20200103", "20200106", "20200107", "20200108", "20200224", "20200309", "20200501", "20200511", "20200612", "20201104", "20210101", "20210104", "20210105", "20210106", "20210107", "20210108", "20210222", "20210223", "20210308", "20210503", "20210510", "20210614", "20211104", "20211105", "20220103", "20220104", "20220105", "20220106", "20220107", "20220110", "20220223", "20220307", "20220308", "20220502", "20220509", "20220613", "20221104", "20230102", "20230103", "20230104", "20230105", "20230106", "20230109", "20230223", "20230224", "20230308", "20230501", "20230508", "20230509", "20230612", "20231106", "20240101", "20240102", "20240103", "20240104", "20240105", "20240108", "20240223", "20240308", "20240501", "20240509", "20240510", "20240612", "20241104", "20250101", "20250102", "20250103", "20250106", "20250107", "20250108", "20250224", "20250310", "20250501", "20250502", "20250509", "20250612", "20250613", "20251103", "20251104", "20260101", "20260102", "20260105", "20260106", "20260107", "20260108", "20260109", "20260223", "20260309", "20260501", "20260511", "20260612", "20261104", "20270101", "20270104", "20270105", "20270106", "20270107", "20270108", "20270222", "20270223", "20270308", "20270503", "20270510", "20270614", "20271104", "20271105", "20280103", "20280104", "20280105", "20280106", "20280107", "20280110", "20280223", "20280308", "20280501", "20280508", "20280509", "20280612", "20281106", "20290101", "20290102", "20290103", "20290104", "20290105", "20290108", "20290223", "20290308", "20290309", "20290430", "20290501", "20290509", "20290611", "20290612", "20291105", "20291231", "20300101", "20300102", "20300103", "20300104", "20300107", "20300108", "20300225", "20300308", "20300501", "20300509", "20300510", "20300612", "20301104", "20310101", "20310102", "20310103", "20310106", "20310107", "20310108", "20310224", "20310310", "20310501", "20310502", "20310509", "20310612", "20310613", "20311103", "20311104", "20320101", "20320102", "20320105", "20320106", "20320107", "20320108", "20320109", "20320223", "20320308", "20320503", "20320510", "20320614", "20321104", "20321105", "20330103", "20330104", "20330105", "20330106", "20330107", "20330110", "20330223", "20330307", "20330308", "20330502", "20330509", "20330613", "20331104", "20340102", "20340103", "20340104", "20340105", "20340106", "20340109", "20340223", "20340224", "20340308", "20340501", "20340508", "20340509", "20340612", "20341106", "20350101", "20350102", "20350103", "20350104", "20350105", "20350108", "20350223", "20350308", "20350309", "20350430", "20350501", "20350509", "20350611", "20350612", "20351105", "20351231", "20360101", "20360102", "20360103", "20360104", "20360107", "20360108", "20360225", "20360310", "20360501", "20360502", "20360509", "20360612", "20360613", "20361103", "20361104", "20370101", "20370102", "20370105", "20370106", "20370107", "20370108", "20370109", "20370223", "20370309", "20370501", "20370511", "20370612", "20371104", "20380101", "20380104", "20380105", "20380106", "20380107", "20380108", "20380222", "20380223", "20380308", "20380503", "20380510", "20380614", "20381104", "20381105", "20390103", "20390104", "20390105", "20390106", "20390107", "20390110", "20390223", "20390307", "20390308", "20390502", "20390509", "20390613", "20391104", "20400102", "20400103", "20400104", "20400105", "20400106", "20400109", "20400223", "20400224", "20400308", "20400309", "20400430", "20400501", "20400509", "20400611", "20400612", "20401105", "20401231", "20410101", "20410102", "20410103", "20410104", "20410107", "20410108", "20410225", "20410308", "20410501", "20410509", "20410510", "20410612", "20411104", "20420101", "20420102", "20420103", "20420106", "20420107", "20420108", "20420224", "20420310", "20420501", "20420502", "20420509", "20420612", "20420613", "20421103", "20421104", "20430101", "20430102", "20430105", "20430106", "20430107", "20430108", "20430109", "20430223", "20430309", "20430501", "20430511", "20430612", "20431104", "20440101", "20440104", "20440105", "20440106", "20440107", "20440108", "20440222", "20440223", "20440307", "20440308", "20440502", "20440509", "20440613", "20441104", "20450102", "20450103", "20450104", "20450105", "20450106", "20450109", "20450223", "20450224", "20450308", "20450501", "20450508", "20450509", "20450612", "20451106", "20460101", "20460102", "20460103", "20460104", "20460105", "20460108", "20460223", "20460308", "20460309", "20460430", "20460501", "20460509", "20460611", "20460612", "20461105", "20461231", "20470101", "20470102", "20470103", "20470104", "20470107", "20470108", "20470225", "20470308", "20470501", "20470509", "20470510", "20470612", "20471104", "20480101", "20480102", "20480103", "20480106", "20480107", "20480108", "20480224", "20480309", "20480501", "20480511", "20480612", "20481104", "20490101", "20490104", "20490105", "20490106", "20490107", "20490108", "20490222", "20490223", "20490308", "20490503", "20490510", "20490614", "20491104", "20491105", "20500103", "20500104", "20500105", "20500106", "20500107", "20500110", "20500223", "20500307", "20500308", "20500502", "20500509", "20500613", "20501104", "20510102", "20510103", "20510104", "20510105", "20510106", "20510109", "20510223", "20510224", "20510308", "20510501", "20510508", "20510509", "20510612", "20511106", "20520101", "20520102", "20520103", "20520104", "20520105", "20520108", "20520223", "20520308", "20520501", "20520509", "20520510", "20520612", "20521104", "20530101", "20530102", "20530103", "20530106", "20530107", "20530108", "20530224", "20530310", "20530501", "20530502", "20530509", "20530612", "20530613", "20531103", "20531104", "20540101", "20540102", "20540105", "20540106", "20540107", "20540108", "20540109", "20540223", "20540309", "20540501", "20540511", "20540612", "20541104", "20550101", "20550104", "20550105", "20550106", "20550107", "20550108", "20550222", "20550223", "20550308", "20550503", "20550510", "20550614", "20551104", "20551105", "20560103", "20560104", "20560105", "20560106", "20560107", "20560110", "20560223", "20560308", "20560501", "20560508", "20560509", "20560612", "20561106", "20570101", "20570102", "20570103", "20570104", "20570105", "20570108", "20570223", "20570308", "20570309", "20570430", "20570501", "20570509", "20570611", "20570612", "20571105", "20571231", "20580101", "20580102", "20580103", "20580104", "20580107", "20580108", "20580225", "20580308", "20580501", "20580509", "20580510", "20580612", "20581104", "20590101", "20590102", "20590103", "20590106", "20590107", "20590108", "20590224", "20590310", "20590501", "20590502", "20590509", "20590612", "20590613", "20591103", "20591104", "20600101", "20600102", "20600105", "20600106", "20600107", "20600108", "20600109", "20600223", "20600308", "20600503", "20600510", "20600614", "20601104", "20601105", "20610103", "20610104", "20610105", "20610106", "20610107", "20610110", "20610223", "20610307", "20610308", "20610502", "20610509", "20610613", "20611104", "20630101", "20640101", "20650101", "20660101", "20690101", "20700101" ], + "MonthsToExclude": [] + }, + "MUE": { + "InheritedCalendar": [], + "Name": "MUE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880401", "19880404", "19880512", "19880523", "19880602", "19880617", "19881116", "19881226", "19890106", "19890324", "19890327", "19890501", "19890504", "19890515", "19890525", "19891101", "19891115", "19891122", "19891225", "19891226", "19900101", "19900413", "19900416", "19900501", "19900524", "19900604", "19900614", "19901121", "19901224", "19901225", "19901226", "19910101", "19910329", "19910401", "19910501", "19910509", "19910520", "19910530", "19911003", "19911120", "19911224", "19911225", "19911226", "19920101", "19920417", "19920420", "19920501", "19920528", "19920608", "19920618", "19921118", "19921224", "19921225", "19921231", "19930101", "19930409", "19930412", "19930520", "19930531", "19930610", "19931117", "19931224", "19931231", "19940401", "19940404", "19940523", "19940602", "19941003", "19941116", "19941226", "19950414", "19950417", "19950501", "19950525", "19950605", "19950615", "19951003", "19951225", "19951226", "19951231", "19960101", "19960405", "19960408", "19960501", "19960516", "19960527", "19960606", "19961003", "19961224", "19961225", "19961226", "19961231", "19970101", "19970328", "19970331", "19970501", "19970508", "19970519", "19970529", "19971003", "19971224", "19971225", "19971226", "19971231", "19980101", "19980410", "19980413", "19980501", "19980521", "19980601", "19980611", "19981224", "19981225", "19981226", "19981231", "19990101", "19990402", "19990405", "19990513", "19990524", "19990603", "19991224", "19991231", "20000106", "20000421", "20000424", "20000501", "20000601", "20000612", "20000622", "20000815", "20001003", "20001101", "20001225", "20001226", "20001231", "20010101", "20010413", "20010416", "20010501", "20010524", "20010604", "20010614", "20011003", "20011224", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020501", "20020509", "20020520", "20020530", "20021003", "20021224", "20021225", "20021226", "20021231", "20030101", "20030418", "20030421", "20030501", "20030529", "20030609", "20030619", "20031003", "20031224", "20031225", "20031226", "20031231", "20040101", "20040409", "20040412", "20040520", "20040531", "20040610", "20041224", "20041231", "20050101", "20050325", "20050328", "20050505", "20050516", "20050526", "20051003", "20051226", "20051231", "20060101", "20060414", "20060417", "20060501", "20060525", "20060605", "20060615", "20061003", "20061225", "20061226", "20061231", "20070101", "20070406", "20070409", "20070501", "20070517", "20070528", "20070607", "20071003", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20080512", "20080522", "20081003", "20081224", "20081225", "20081226", "20081231", "20090101", "20090410", "20090413", "20090501", "20090521", "20090601", "20090611", "20091224", "20091225", "20091231", "20100101", "20100106", "20100402", "20100405", "20100513", "20100524", "20100603", "20101101", "20101224", "20101231", "20110106", "20110422", "20110425", "20110602", "20110613", "20110623", "20110815", "20111003", "20111101", "20111226", "20120106", "20120406", "20120409", "20120501", "20120517", "20120528", "20120607", "20120815", "20121003", "20121101", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20130509", "20130520", "20130530", "20130815", "20131003", "20131101", "20131224", "20131225", "20131226", "20131231", "20140101", "20140106", "20140418", "20140421", "20140501", "20140529", "20140609", "20140619", "20140815", "20141003", "20141224", "20141225", "20141226", "20141231", "20150101", "20150106", "20150403", "20150406", "20150501", "20150514", "20150525", "20150604", "20151224", "20151225", "20151231", "20160101", "20160106", "20160325", "20160328", "20160505", "20160516", "20160526", "20160815", "20161003", "20161101", "20161226", "20170106", "20170414", "20170417", "20170501", "20170525", "20170605", "20170615", "20170815", "20171003", "20171101", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180510", "20180521", "20180531", "20180815", "20181003", "20181101", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20190530", "20190610", "20190620", "20190815", "20191003", "20191101", "20191224", "20191225", "20191226", "20191231", "20200101", "20200106", "20200410", "20200413", "20200501", "20200521", "20200601", "20200611", "20201224", "20201225", "20201231", "20210101", "20210106", "20210402", "20210405", "20210513", "20210524", "20210603", "20211101", "20211224", "20211231", "20220106", "20220415", "20220418", "20220526", "20220606", "20220616", "20220815", "20221003", "20221101", "20221226", "20230106", "20230407", "20230410", "20230501", "20230518", "20230529", "20230608", "20230815", "20231003", "20231101", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20240509", "20240520", "20240530", "20240815", "20241003", "20241101", "20241224", "20241225", "20241226", "20241231", "20250101", "20250106", "20250418", "20250421", "20250501", "20250529", "20250609", "20250619", "20250815", "20251003", "20251224", "20251225", "20251226", "20251231", "20260101", "20260106", "20260403", "20260406", "20260501", "20260514", "20260525", "20260604", "20261224", "20261225", "20261231", "20270101", "20270106", "20270326", "20270329", "20270506", "20270517", "20270527", "20271101", "20271224", "20271231", "20280106", "20280414", "20280417", "20280501", "20280525", "20280605", "20280615", "20280815", "20281003", "20281101", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20290510", "20290521", "20290531", "20290815", "20291003", "20291101", "20291224", "20291225", "20291226", "20291231", "20300101", "20300419", "20300422", "20300501", "20300530", "20300610", "20300620", "20300815", "20301003", "20301101", "20301224", "20301225", "20301226", "20301231", "20310101", "20310106", "20310411", "20310414", "20310501", "20310522", "20310602", "20310612", "20310815", "20311003", "20311224", "20311225", "20311226", "20311231", "20320101", "20320106", "20320326", "20320329", "20320506", "20320517", "20320527", "20321101", "20321224", "20321231", "20330106", "20330415", "20330418", "20330526", "20330606", "20330616", "20330815", "20331003", "20331101", "20331226", "20340106", "20340407", "20340410", "20340501", "20340518", "20340529", "20340608", "20340815", "20341003", "20341101", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20350503", "20350514", "20350524", "20350815", "20351003", "20351101", "20351224", "20351225", "20351226", "20351231", "20360101", "20360411", "20360414", "20360501", "20360522", "20360602", "20360612", "20360815", "20361003", "20361224", "20361225", "20361226", "20361231", "20370101", "20370106", "20370403", "20370406", "20370501", "20370514", "20370525", "20370604", "20371224", "20371225", "20371231", "20380101", "20380106", "20380423", "20380426", "20380603", "20380614", "20380624", "20381101", "20381224", "20381231", "20390106", "20390408", "20390411", "20390519", "20390530", "20390609", "20390815", "20391003", "20391101", "20391226", "20400106", "20400330", "20400402", "20400501", "20400510", "20400521", "20400531", "20400815", "20401003", "20401101", "20401224", "20401225", "20401226", "20401231", "20410101", "20410419", "20410422", "20410501", "20410530", "20410610", "20410620", "20410815", "20411003", "20411101", "20411224", "20411225", "20411226", "20411231", "20420101", "20420106", "20420404", "20420407", "20420501", "20420515", "20420526", "20420605", "20420815", "20421003", "20421224", "20421225", "20421226", "20421231", "20430101", "20430106", "20430327", "20430330", "20430501", "20430507", "20430518", "20430528", "20431224", "20431225", "20431231", "20440101", "20440106", "20440415", "20440418", "20440526", "20440606", "20440616", "20440815", "20441003", "20441101", "20441226", "20450106", "20450407", "20450410", "20450501", "20450518", "20450529", "20450608", "20450815", "20451003", "20451101", "20451225", "20451226", "20460101", "20460323", "20460326", "20460501", "20460503", "20460514", "20460524", "20460815", "20461003", "20461101", "20461224", "20461225", "20461226", "20461231", "20470101", "20470412", "20470415", "20470501", "20470523", "20470603", "20470613", "20470815", "20471003", "20471101", "20471224", "20471225", "20471226", "20471231", "20480101", "20480106", "20480403", "20480406", "20480501", "20480514", "20480525", "20480604", "20481224", "20481225", "20481231", "20490101", "20490106", "20490416", "20490419", "20490527", "20490607", "20490617", "20491101", "20491224", "20491231", "20500106", "20500408", "20500411", "20500519", "20500530", "20500609", "20500815", "20501003", "20501101", "20501226", "20510106", "20510331", "20510403", "20510501", "20510511", "20510522", "20510601", "20510815", "20511003", "20511101", "20511225", "20511226", "20520101", "20520419", "20520422", "20520501", "20520530", "20520610", "20520620", "20520815", "20521003", "20521101", "20521224", "20521225", "20521226", "20521231", "20530101", "20530106", "20530404", "20530407", "20530501", "20530515", "20530526", "20530605", "20530815", "20531003", "20531224", "20531225", "20531226", "20531231", "20540101", "20540106", "20540327", "20540330", "20540501", "20540507", "20540518", "20540528", "20541224", "20541225", "20541231", "20550101", "20550106", "20550416", "20550419", "20550527", "20550607", "20550617", "20551101", "20551224", "20551231", "20560106", "20560331", "20560403", "20560501", "20560511", "20560522", "20560601", "20560815", "20561003", "20561101", "20561225", "20561226", "20570101", "20570420", "20570423", "20570501", "20570531", "20570611", "20570621", "20570815", "20571003", "20571101", "20571224", "20571225", "20571226", "20571231", "20580101", "20580412", "20580415", "20580501", "20580523", "20580603", "20580613", "20580815", "20581003", "20581101", "20581224", "20581225", "20581226", "20581231", "20590101", "20590106", "20590328", "20590331", "20590501", "20590508", "20590519", "20590529", "20590815", "20591003", "20591224", "20591225", "20591226", "20591231", "20600101", "20600106", "20600416", "20600419", "20600527", "20600607", "20600617", "20601101", "20601224", "20601231", "20610106", "20610408", "20610411", "20610519", "20610530", "20610609", "20610815", "20611003", "20611101", "20611226" ], + "MonthsToExclude": [] + }, + "MUM": { + "InheritedCalendar": [], + "Name": "MUM", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20070101", "20070126", "20070130", "20070216", "20070319", "20070327", "20070331", "20070402", "20070406", "20070414", "20070501", "20070502", "20070702", "20070815", "20070820", "20070915", "20070929", "20071002", "20071109", "20071124", "20071221", "20071225", "20080119", "20080126", "20080306", "20080320", "20080321", "20080322", "20080401", "20080414", "20080418", "20080501", "20080519", "20080701", "20080815", "20080819", "20080903", "20080930", "20081002", "20081009", "20081028", "20081030", "20081113", "20081209", "20081225", "20090108", "20090126", "20090223", "20090310", "20090311", "20090327", "20090401", "20090403", "20090407", "20090410", "20090414", "20090501", "20090509", "20090815", "20090819", "20090921", "20090928", "20090930", "20091002", "20091013", "20091017", "20091019", "20091102", "20091128", "20091225", "20091228", "20100126", "20100212", "20100227", "20100301", "20100316", "20100324", "20100401", "20100402", "20100414", "20100501", "20100527", "20100819", "20100910", "20100911", "20100930", "20101002", "20101105", "20101117", "20101217", "20101225", "20110126", "20110216", "20110219", "20110302", "20110401", "20110404", "20110412", "20110414", "20110416", "20110422", "20110517", "20110815", "20110819", "20110831", "20110901", "20110930", "20111006", "20111026", "20111027", "20111107", "20111110", "20111206", "20120126", "20120216", "20120220", "20120308", "20120323", "20120402", "20120405", "20120406", "20120414", "20120501", "20120815", "20120818", "20120820", "20120919", "20120929", "20121002", "20121024", "20121026", "20121113", "20121114", "20121128", "20121225", "20130125", "20130126", "20130327", "20130329", "20130401", "20130411", "20130419", "20130424", "20130501", "20130525", "20130809", "20130815", "20130909", "20130930", "20131002", "20131016", "20131104", "20131114", "20131225", "20140114", "20140227", "20140317", "20140331", "20140401", "20140408", "20140414", "20140418", "20140501", "20140514", "20140729", "20140815", "20140818", "20140829", "20140930", "20141002", "20141003", "20141023", "20141024", "20141104", "20141106", "20141225", "20150126", "20150217", "20150306", "20150321", "20150328", "20150401", "20150402", "20150403", "20150414", "20150501", "20150504", "20150718", "20150815", "20150818", "20150917", "20150924", "20150930", "20151002", "20151022", "20151024", "20151111", "20151112", "20151125", "20151225", "20160126", "20160307", "20160323", "20160325", "20160401", "20160408", "20160414", "20160415", "20160419", "20160521", "20160706", "20160815", "20160817", "20160905", "20160912", "20160930", "20161011", "20161012", "20161031", "20161114", "20161212", "20170126", "20170224", "20170313", "20170328", "20170401", "20170404", "20170414", "20170501", "20170510", "20170626", "20170815", "20170817", "20170825", "20170902", "20170929", "20170930", "20171002", "20171019", "20171020", "20171104", "20171201", "20171225", "20180126", "20180214", "20180302", "20180329", "20180330", "20180402", "20180414", "20180430", "20180501", "20180616", "20180815", "20180817", "20180822", "20180913", "20180921", "20180929", "20181002", "20181019", "20181107", "20181108", "20181121", "20181123", "20181225", "20190126", "20190304", "20190321", "20190401", "20190406", "20190413", "20190417", "20190419", "20190501", "20190518", "20190605", "20190812", "20190815", "20190817", "20190902", "20190910", "20190930", "20191002", "20191007", "20191029", "20191112", "20191225", "20200221", "20200310", "20200325", "20200401", "20200402", "20200406", "20200410", "20200414", "20200501", "20200507", "20200525", "20200801", "20200815", "20200822", "20200930", "20201002", "20201030", "20201114", "20201116", "20201130", "20201225", "20210126", "20210311", "20210329", "20210401", "20210402", "20210413", "20210414", "20210421", "20210501", "20210514", "20210526", "20210721", "20210816", "20210819", "20210910", "20210930", "20211002", "20211015", "20211019", "20211104", "20211105", "20211119", "20211225", "20220126", "20220301", "20220318", "20220401", "20220402", "20220414", "20220415", "20220503", "20220516", "20220809", "20220815", "20220816", "20220831", "20220930", "20221004", "20221024", "20221026", "20221108", "20230126", "20230218", "20230307", "20230322", "20230330", "20230401", "20230404", "20230407", "20230414", "20230422", "20230501", "20230505", "20230629", "20230729", "20230815", "20230816", "20230918", "20230928", "20230930", "20231002", "20231024", "20231114", "20231127", "20231225", "20240126", "20240308", "20240325", "20240329", "20240401", "20240409", "20240411", "20240417", "20240501", "20240523", "20240617", "20240717", "20240815", "20240907", "20240916", "20240930", "20241002", "20241012", "20241101", "20241102", "20241115", "20241225", "20250226", "20250314", "20250331", "20250401", "20250410", "20250414", "20250418", "20250501", "20250512", "20250607", "20250815", "20250827", "20250905", "20250930", "20251002", "20251021", "20251022", "20251105", "20251225", "20260126", "20260303", "20260319", "20260321", "20260326", "20260331", "20260401", "20260403", "20260414", "20260501", "20260528", "20260626", "20260815", "20260826", "20260914", "20260930", "20261002", "20261020", "20261110", "20261124", "20261225", "20270126", "20270306", "20270310", "20270322", "20270326", "20270401", "20270407", "20270414", "20270415", "20270419", "20270501", "20270517", "20270520", "20270616", "20270904", "20270930", "20271002", "20271009", "20271029", "20271030", "20271225", "20280126", "20280223", "20280311", "20280327", "20280401", "20280403", "20280407", "20280414", "20280501", "20280506", "20280508", "20280804", "20280814", "20280815", "20280823", "20280927", "20280930", "20281002", "20281017", "20281019", "20281102", "20281225", "20290126", "20290215", "20290301", "20290316", "20290330", "20290402", "20290414", "20290423", "20290425", "20290426", "20290501", "20290525", "20290725", "20290814", "20290815", "20290911", "20290929", "20291002", "20291016", "20291105", "20291107", "20291120", "20291225", "20300126", "20300205", "20300302", "20300320", "20300401", "20300403", "20300412", "20300416", "20300419", "20300501", "20300514", "20300517", "20300814", "20300815", "20300930", "20301002", "20301026", "20301225", "20310125", "20310220", "20310324", "20310401", "20310402", "20310403", "20310405", "20310411", "20310414", "20310501", "20310503", "20310507", "20310703", "20310814", "20310815", "20310920", "20310930", "20311002", "20311025", "20311114", "20311115", "20311128", "20311225", "20320115", "20320126", "20320310", "20320322", "20320326", "20320327", "20320401", "20320414", "20320419", "20320421", "20320423", "20320501", "20320525", "20320621", "20320813", "20320908", "20320930", "20321002", "20321014", "20321102", "20321104", "20321117", "20321225", "20330103", "20330126", "20330312", "20330316", "20330331", "20330401", "20330407", "20330411", "20330412", "20330414", "20330415", "20330514", "20330610", "20330813", "20330815", "20330930", "20331003", "20331022", "20331024", "20340126", "20340217", "20340302", "20340321", "20340328", "20340331", "20340401", "20340403", "20340407", "20340414", "20340501", "20340503", "20340531", "20340815", "20340916", "20340930", "20341002", "20341110", "20341125", "20341213", "20341225", "20350126", "20350219", "20350308", "20350321", "20350323", "20350324", "20350402", "20350409", "20350414", "20350416", "20350420", "20350501", "20350521", "20350522", "20350813", "20350815", "20350905", "20350929", "20351002", "20351011", "20351030", "20351101", "20351115", "20351225", "20360126", "20360208", "20360225", "20360312", "20360328", "20360401", "20360405", "20360408", "20360411", "20360414", "20360501", "20360509", "20360510", "20360812", "20360815", "20360929", "20360930", "20361002", "20361018", "20361020", "20361103", "20361120", "20361225", "20370126", "20370127", "20370213", "20370226", "20370302", "20370317", "20370325", "20370401", "20370403", "20370414", "20370429", "20370501", "20370812", "20370815", "20370912", "20370930", "20371002", "20371107", "20371109", "20371225", "20380126", "20380215", "20380304", "20380401", "20380405", "20380413", "20380414", "20380417", "20380423", "20380501", "20380518", "20380812", "20380902", "20380930", "20381002", "20381007", "20381027", "20381029", "20381030", "20381111", "20381225", "20390106", "20390126", "20390204", "20390221", "20390311", "20390325", "20390401", "20390407", "20390408", "20390414", "20390812", "20390815", "20390823", "20390930", "20391020", "20391026", "20391115", "20391117", "20391130", "20391226", "20400125", "20400126", "20400326", "20400329", "20400330", "20400402", "20400412", "20400414", "20400420", "20400425", "20400501", "20400526", "20400811", "20400815", "20400910", "20400929", "20401002", "20401008", "20401015", "20401105", "20401215", "20401225", "20410114", "20410126", "20410301", "20410315", "20410318", "20410401", "20410402", "20410409", "20410419", "20410501", "20410516", "20410815", "20410830", "20410927", "20410930", "20411002", "20411005", "20411024", "20411026", "20411108", "20411205", "20411225", "20420103", "20420218", "20420305", "20420307", "20420322", "20420329", "20420401", "20420403", "20420404", "20420414", "20420501", "20420505", "20420811", "20420815", "20420916", "20420918", "20420930", "20421002", "20421024", "20421112", "20421113", "20421124", "20421127", "20421225", "20430126", "20430223", "20430309", "20430326", "20430327", "20430401", "20430410", "20430414", "20430417", "20430422", "20430501", "20430523", "20430811", "20430815", "20430905", "20430907", "20430930", "20431002", "20431013", "20431102", "20431113", "20431116", "20431225", "20440126", "20440212", "20440227", "20440314", "20440330", "20440401", "20440406", "20440414", "20440415", "20440511", "20440810", "20440815", "20440825", "20440826", "20440930", "20441001", "20441020", "20441021", "20441101", "20441105", "20441201", "20450126", "20450131", "20450215", "20450303", "20450327", "20450330", "20450401", "20450407", "20450414", "20450501", "20450810", "20450815", "20450914", "20450930", "20451002", "20451020", "20451021", "20451108", "20451109", "20451120", "20451124", "20451225", "20460120", "20460126", "20460305", "20460322", "20460323", "20460402", "20460407", "20460414", "20460419", "20460501", "20460804", "20460810", "20460815", "20460903", "20460929", "20461002", "20461009", "20461011", "20461029", "20461030", "20461109", "20461113", "20461225", "20470109", "20470126", "20470222", "20470312", "20470327", "20470401", "20470404", "20470408", "20470412", "20470501", "20470509", "20470725", "20470810", "20470815", "20470824", "20470928", "20470930", "20471001", "20471002", "20471018", "20471030", "20471102", "20471225", "20480212", "20480401", "20480403", "20480414", "20480422", "20480501", "20480527", "20480713", "20480815", "20480911", "20480919", "20480930", "20481002", "20481016", "20481019", "20481105", "20481107", "20481120", "20481218", "20481225", "20490126", "20490302", "20490319", "20490401", "20490403", "20490414", "20490416", "20490501", "20490517", "20490702", "20490809", "20490901", "20490908", "20490930", "20491002", "20491006", "20491008", "20491026", "20491027", "20491109", "20491208", "20491225", "20500126", "20500309", "20500323", "20500331", "20500401", "20500405", "20500408", "20500414", "20500506", "20500621", "20500809", "20500815", "20500920", "20500927", "20500930", "20501025", "20501115", "20501128", "20510126", "20510311", "20510327", "20510331", "20510401", "20510411", "20510414", "20510419", "20510501", "20510525", "20510809", "20510815", "20510818", "20510909", "20510916", "20510930", "20511002", "20511103", "20511104", "20511117", "20511118", "20511225", "20520126", "20520228", "20520315", "20520401", "20520411", "20520419", "20520501", "20520513", "20520530", "20520806", "20520808", "20520815", "20520828", "20520904", "20520930", "20521002", "20521003", "20521022", "20521023", "20521105", "20521106", "20521225", "20530305", "20530321", "20530328", "20530401", "20530402", "20530404", "20530414", "20530501", "20530502", "20530520", "20530726", "20530808", "20530815", "20530825", "20530915", "20530930", "20531002", "20531022", "20531025", "20531111", "20531125", "20531225", "20540126", "20540307", "20540324", "20540327", "20540401", "20540409", "20540414", "20540416", "20540420", "20540501", "20540521", "20540716", "20540808", "20540815", "20540905", "20540930", "20541002", "20541010", "20541014", "20541030", "20541031", "20541225", "20550126", "20550224", "20550313", "20550329", "20550401", "20550406", "20550410", "20550414", "20550416", "20550429", "20550501", "20550511", "20550706", "20550804", "20550825", "20550929", "20550930", "20551002", "20551004", "20551020", "20551021", "20551104", "20551225", "20560126", "20560302", "20560317", "20560325", "20560329", "20560331", "20560401", "20560414", "20560417", "20560501", "20560529", "20560624", "20560724", "20560807", "20560815", "20560913", "20560923", "20560930", "20561002", "20561017", "20561107", "20561108", "20561122", "20561225", "20570126", "20570303", "20570321", "20570402", "20570405", "20570406", "20570413", "20570414", "20570417", "20570420", "20570501", "20570518", "20570613", "20570713", "20570807", "20570815", "20570912", "20570929", "20571002", "20571027", "20571029", "20571225", "20580126", "20580221", "20580325", "20580326", "20580401", "20580402", "20580406", "20580412", "20580501", "20580508", "20580702", "20580807", "20580815", "20580823", "20580930", "20581002", "20581026", "20581115", "20581130", "20581225", "20590312", "20590328", "20590329", "20590401", "20590414", "20590421", "20590425", "20590501", "20590523", "20590527", "20590621", "20590807", "20590815", "20590821", "20590911", "20590930", "20591002", "20591016", "20591104", "20591106", "20591119", "20591225", "20600126", "20600301", "20600304", "20600317", "20600401", "20600402", "20600409", "20600413", "20600414", "20600416", "20600501", "20600511", "20600515", "20600610", "20600806", "20600809", "20600930", "20601002", "20601005", "20601023", "20601025", "20601108", "20601225", "20610126", "20610218", "20610222", "20610322", "20610329", "20610401", "20610402", "20610408", "20610414", "20610504", "20610530", "20610730", "20610806", "20610815", "20610917", "20610930", "20611111" ], + "MonthsToExclude": [] + }, + "NIC": { + "InheritedCalendar": [], + "Name": "NIC", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20020101", "20020318", "20020325", "20020401", "20020501", "20020503", "20020506", "20020507", "20020624", "20020815", "20021001", "20021225", "20021226", "20040531", "20041001", "20041028", "20050106", "20050314", "20050325", "20050401", "20050429", "20050502", "20050503", "20050620", "20050815", "20051028", "20051226", "20060106", "20060306", "20060421", "20060424", "20060425", "20060501", "20060612", "20060815", "20061225", "20061226", "20070101", "20070219", "20070406", "20070409", "20070410", "20070501", "20070528", "20070815", "20071001", "20071225", "20071226", "20071231", "20080101", "20080310", "20080325", "20080401", "20080425", "20080428", "20080429", "20080501", "20080616", "20080815", "20081001", "20081028", "20081225", "20081226", "20090101", "20090106", "20090302", "20090325", "20090401", "20090417", "20090420", "20090421", "20090501", "20090608", "20091001", "20091028", "20091225", "20100101", "20100106", "20100215", "20100325", "20100401", "20100402", "20100405", "20100406", "20100524", "20101001", "20101028", "20110106", "20110307", "20110325", "20110401", "20110422", "20110425", "20110426", "20110613", "20110815", "20111028", "20111226", "20120106", "20120227", "20120413", "20120416", "20120417", "20120501", "20120604", "20120815", "20121001", "20121225", "20121226", "20130101", "20130318", "20130325", "20130401", "20130501", "20130503", "20130506", "20130507", "20130624", "20130815", "20131001", "20131028", "20131225", "20131226", "20140101", "20140106", "20140303", "20140325", "20140401", "20140418", "20140421", "20140422", "20140501", "20140609", "20140815", "20141001", "20141028", "20141225", "20141226", "20150101", "20150106", "20150223", "20150325", "20150401", "20150410", "20150413", "20150414", "20150501", "20150601", "20151001", "20151028", "20151225", "20160101", "20160106", "20160314", "20160325", "20160401", "20160429", "20160502", "20160503", "20160620", "20160815", "20161028", "20161226", "20170106", "20170227", "20170414", "20170417", "20170418", "20170501", "20170605", "20170815", "20171225", "20171226", "20180101", "20180219", "20180406", "20180409", "20180410", "20180501", "20180528", "20180815", "20181001", "20181225", "20181226", "20190101", "20190311", "20190325", "20190401", "20190426", "20190429", "20190430", "20190501", "20190617", "20190815", "20191001", "20191028", "20191225", "20191226", "20200101", "20200106", "20200302", "20200325", "20200401", "20200417", "20200420", "20200421", "20200501", "20200608", "20201001", "20201028", "20201225", "20210101", "20210106", "20210315", "20210325", "20210401", "20210430", "20210503", "20210504", "20210621", "20211001", "20211028", "20220106", "20220307", "20220325", "20220401", "20220422", "20220425", "20220426", "20220613", "20220815", "20221028", "20221226", "20230106", "20230227", "20230414", "20230417", "20230418", "20230501", "20230605", "20230815", "20231225", "20231226", "20240101", "20240318", "20240325", "20240401", "20240501", "20240503", "20240506", "20240507", "20240624", "20240815", "20241001", "20241028", "20241225", "20241226", "20250101", "20250106", "20250303", "20250325", "20250401", "20250418", "20250421", "20250422", "20250501", "20250609", "20250815", "20251001", "20251028", "20251225", "20251226", "20260101", "20260106", "20260223", "20260325", "20260401", "20260410", "20260413", "20260414", "20260501", "20260601", "20261001", "20261028", "20261225", "20270101", "20270106", "20270315", "20270325", "20270401", "20270430", "20270503", "20270504", "20270621", "20271001", "20271028", "20280106", "20280228", "20280414", "20280417", "20280418", "20280501", "20280605", "20280815", "20281225", "20281226", "20290101", "20290219", "20290406", "20290409", "20290410", "20290501", "20290528", "20290815", "20291001", "20291225", "20291226", "20300101", "20300311", "20300325", "20300401", "20300426", "20300429", "20300430", "20300501", "20300617", "20300815", "20301001", "20301028", "20301225", "20301226", "20310101", "20310106", "20310224", "20310325", "20310401", "20310411", "20310414", "20310415", "20310501", "20310602", "20310815", "20311001", "20311028", "20311225", "20311226", "20320101", "20320106", "20320315", "20320325", "20320401", "20320430", "20320503", "20320504", "20320621", "20321001", "20321028", "20330106", "20330307", "20330325", "20330401", "20330422", "20330425", "20330426", "20330613", "20330815", "20331028", "20331226", "20340106", "20340220", "20340407", "20340410", "20340411", "20340501", "20340529", "20340815", "20341225", "20341226", "20350101", "20350312", "20350427", "20350430", "20350501", "20350618", "20350815", "20351001", "20351225", "20351226", "20360101", "20360303", "20360325", "20360401", "20360418", "20360421", "20360422", "20360501", "20360609", "20360815", "20361001", "20361028", "20361225", "20361226", "20370101", "20370106", "20370216", "20370325", "20370401", "20370403", "20370406", "20370407", "20370501", "20370525", "20371001", "20371028", "20371225", "20380101", "20380106", "20380308", "20380325", "20380401", "20380423", "20380426", "20380427", "20380614", "20381001", "20381028", "20390106", "20390228", "20390325", "20390401", "20390415", "20390418", "20390419", "20390606", "20390815", "20391028", "20391226", "20400106", "20400319", "20400501", "20400504", "20400507", "20400508", "20400625", "20400815", "20401001", "20401225", "20401226", "20410101", "20410304", "20410325", "20410401", "20410419", "20410422", "20410423", "20410501", "20410610", "20410815", "20411001", "20411028", "20411225", "20411226", "20420101", "20420106", "20420224", "20420325", "20420401", "20420411", "20420414", "20420415", "20420501", "20420602", "20420815", "20421001", "20421028", "20421225", "20421226", "20430101", "20430106", "20430316", "20430325", "20430401", "20430501", "20430504", "20430505", "20430622", "20431001", "20431028", "20431225", "20440101", "20440106", "20440307", "20440325", "20440401", "20440422", "20440425", "20440426", "20440613", "20440815", "20441028", "20441226", "20450106", "20450220", "20450407", "20450410", "20450411", "20450501", "20450529", "20450815", "20451225", "20451226", "20460101", "20460312", "20460427", "20460430", "20460501", "20460618", "20460815", "20461001", "20461225", "20461226", "20470101", "20470304", "20470325", "20470401", "20470419", "20470422", "20470423", "20470501", "20470610", "20470815", "20471001", "20471028", "20471225", "20471226", "20480101", "20480106", "20480217", "20480325", "20480401", "20480403", "20480406", "20480407", "20480501", "20480525", "20481001", "20481028", "20481225", "20490101", "20490106", "20490308", "20490325", "20490401", "20490423", "20490426", "20490427", "20490614", "20491001", "20491028", "20500106", "20500228", "20500325", "20500401", "20500415", "20500418", "20500419", "20500606", "20500815", "20501028", "20501226", "20510106", "20510320", "20510501", "20510505", "20510508", "20510509", "20510626", "20510815", "20511225", "20511226", "20520101", "20520304", "20520325", "20520401", "20520419", "20520422", "20520423", "20520501", "20520610", "20520815", "20521001", "20521028", "20521225", "20521226", "20530101", "20530106", "20530224", "20530325", "20530401", "20530411", "20530414", "20530415", "20530501", "20530602", "20530815", "20531001", "20531028", "20531225", "20531226", "20540101", "20540106", "20540316", "20540325", "20540401", "20540501", "20540504", "20540505", "20540622", "20541001", "20541028", "20541225", "20550101", "20550106", "20550301", "20550325", "20550401", "20550416", "20550419", "20550420", "20550607", "20551001", "20551028", "20560106", "20560221", "20560407", "20560410", "20560411", "20560501", "20560529", "20560815", "20561225", "20561226", "20570101", "20570312", "20570427", "20570430", "20570501", "20570618", "20570815", "20571001", "20571225", "20571226", "20580101", "20580225", "20580325", "20580401", "20580412", "20580415", "20580416", "20580501", "20580603", "20580815", "20581001", "20581028", "20581225", "20581226", "20590101", "20590106", "20590317", "20590325", "20590401", "20590501", "20590502", "20590505", "20590506", "20590623", "20590815", "20591001", "20591028", "20591225", "20591226", "20600101", "20600106", "20600308", "20600325", "20600401", "20600423", "20600426", "20600427", "20600614", "20601001", "20601028", "20610106", "20610221", "20610325", "20610401", "20610408", "20610411", "20610412", "20610530", "20610815", "20611028", "20611226" ], + "MonthsToExclude": [] + }, + "NYC": { + "InheritedCalendar": [], + "Name": "NYC", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101","19810101","19820101","19850101","19860101","19870101","19880101","19880118","19880215","19880530","19880704","19880905","19881010","19881108","19881111","19881124","19881226","19890102","19890116","19890220","19890529","19890704","19890904","19891009","19891107","19891123","19891225","19900101","19900115","19900219","19900528","19900704","19900903","19901008","19901106","19901112","19901122","19901225","19910101","19910121","19910218","19910527","19910704","19910902","19911014","19911111","19911128","19911225","19920101","19920120","19920217","19920525","19920907","19921012","19921111","19921126","19921225","19930101","19930118","19930215","19930531","19930705","19930906","19931011","19931111","19931125","19940117","19940221","19940530","19940704","19940905","19941010","19941111","19941124","19941226","19950102","19950116","19950220","19950529","19950704","19950904","19951009","19951123","19951225","19960101","19960115","19960219","19960527","19960704","19960902","19961014","19961111","19961128","19961225","19970101","19970120","19970217","19970526","19970704","19970901","19971013","19971111","19971127","19971225","19980101","19980119","19980216","19980525","19980907","19981012","19981111","19981126","19981225","19990101","19990118","19990215","19990531","19990705","19990906","19991011","19991111","19991125","20000117","20000221","20000529","20000704","20000904","20001009","20001123","20001225","20010101","20010115","20010219","20010528","20010704","20010903","20011008","20011112","20011122","20011225","20020101","20020121","20020218","20020527","20020704","20020902","20021014","20021111","20021128","20021225","20030101","20030120","20030217","20030526","20030704","20030901","20031013","20031111","20031127","20031225","20040101","20040119","20040216","20040531","20040705","20040906","20041011","20041111","20041125","20050117","20050221","20050530","20050704","20050905","20051010","20051111","20051124","20051226","20060102","20060116","20060220","20060529","20060704","20060904","20061009","20061123","20061225","20070101","20070115","20070219","20070528","20070704","20070903","20071008","20071112","20071122","20071225","20080101","20080121","20080218","20080526","20080704","20080901","20081013","20081111","20081127","20081225","20090101","20090119","20090216","20090525","20090907","20091012","20091111","20091126","20091225","20100101","20100118","20100215","20100531","20100705","20100906","20101011","20101111","20101125","20110117","20110221","20110530","20110704","20110905","20111010","20111111","20111124","20111226","20120102","20120116","20120220","20120528","20120704","20120903","20121008","20121112","20121122","20121225","20130101","20130121","20130218","20130527","20130704","20130902","20131014","20131111","20131128","20131225","20140101","20140120","20140217","20140526","20140704","20140901","20141013","20141111","20141127","20141225","20150101","20150119","20150216","20150525","20150907","20151012","20151111","20151126","20151225","20160101","20160118","20160215","20160530","20160704","20160905","20161010","20161111","20161124","20161226","20170102","20170116","20170220","20170529","20170704","20170904","20171009","20171123","20171225","20180101","20180115","20180219","20180528","20180704","20180903","20181008","20181112","20181122","20181225","20190101","20190121","20190218","20190527","20190704","20190902","20191014","20191111","20191128","20191225","20200101","20200120","20200217","20200525","20200907","20201012","20201111","20201126","20201225","20210101","20210118","20210215","20210531","20210618","20210705","20210906","20211011","20211111","20211125","20220117","20220221","20220530","20220620","20220704","20220905","20221010","20221111","20221124","20221226","20230102","20230116","20230220","20230529","20230619","20230704","20230904","20231009","20231123","20231225","20240101","20240115","20240219","20240527","20240619","20240704","20240902","20241014","20241111","20241128","20241225","20250101","20250120","20250217","20250526","20250619","20250704","20250901","20251013","20251111","20251127","20251225","20260101","20260119","20260216","20260525","20260619","20260907","20261012","20261111","20261126","20261225","20270101","20270118","20270215","20270531","20270618","20270705","20270906","20271011","20271111","20271125","20280117","20280221","20280529","20280619","20280704","20280904","20281009","20281123","20281225","20290101","20290115","20290219","20290528","20290619","20290704","20290903","20291008","20291112","20291122","20291225","20300101","20300121","20300218","20300527","20300619","20300704","20300902","20301014","20301111","20301128","20301225","20310101","20310120","20310217","20310526","20310619","20310704","20310901","20311013","20311111","20311127","20311225","20320101","20320119","20320216","20320531","20320618","20320705","20320906","20321011","20321111","20321125","20330117","20330221","20330530","20330620","20330704","20330905","20331010","20331111","20331124","20331226","20340102","20340116","20340220","20340529","20340619","20340704","20340904","20341009","20341123","20341225","20350101","20350115","20350219","20350528","20350619","20350704","20350903","20351008","20351112","20351122","20351225","20360101","20360121","20360218","20360526","20360619","20360704","20360901","20361013","20361111","20361127","20361225","20370101","20370119","20370216","20370525","20370619","20370907","20371012","20371111","20371126","20371225","20380101","20380118","20380215","20380531","20380618","20380705","20380906","20381011","20381111","20381125","20390117","20390221","20390530","20390620","20390704","20390905","20391010","20391111","20391124","20391226","20400102","20400116","20400220","20400528","20400619","20400704","20400903","20401008","20401112","20401122","20401225","20410101","20410121","20410218","20410527","20410619","20410704","20410902","20411014","20411111","20411128","20411225","20420101","20420120","20420217","20420526","20420619","20420704","20420901","20421013","20421111","20421127","20421225","20430101","20430119","20430216","20430525","20430619","20430907","20431012","20431111","20431126","20431225","20440101","20440118","20440215","20440530","20440620","20440704","20440905","20441010","20441111","20441124","20441226","20450102","20450116","20450220","20450529","20450619","20450704","20450904","20451009","20451123","20451225","20460101","20460115","20460219","20460528","20460619","20460704","20460903","20461008","20461112","20461122","20461225","20470101","20470121","20470218","20470527","20470619","20470704","20470902","20471014","20471111","20471128","20471225","20480101","20480120","20480217","20480525","20480619","20480907","20481012","20481111","20481126","20481225","20490101","20490118","20490215","20490531","20490618","20490705","20490906","20491011","20491111","20491125","20500117","20500221","20500530","20500620","20500704","20500905","20501010","20501111","20501124","20501226","20510102","20510116","20510220","20510529","20510619","20510704","20510904","20511009","20511123","20511225","20520101","20520115","20520219","20520527","20520619","20520704","20520902","20521014","20521111","20521128","20521225","20530101","20530120","20530217","20530526","20530619","20530704","20530901","20531013","20531111","20531127","20531225","20540101","20540119","20540216","20540525","20540619","20540907","20541012","20541111","20541126","20541225","20550101","20550118","20550215","20550531","20550618","20550705","20550906","20551011","20551111","20551125","20560117","20560221","20560529","20560619","20560704","20560904","20561009","20561123","20561225","20570101","20570115","20570219","20570528","20570619","20570704","20570903","20571008","20571112","20571122","20571225","20580101","20580121","20580218","20580527","20580619","20580704","20580902","20581014","20581111","20581128","20581225","20590101","20590120","20590217","20590526","20590619","20590704","20590901","20591013","20591111","20591127","20591225","20600101","20600119","20600216","20600531","20600618","20600705","20600906","20601011","20601111","20601125","20610117","20610221","20610530","20610704","20610905","20611010","20611111","20611124","20611226","20630101","20640101","20650101","20660101","20690101","20700101"], + "MonthsToExclude": [] + }, + "OSL": { + "InheritedCalendar": [], + "Name": "OSL", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19970101", "19970323", "19970327", "19970328", "19970330", "19970331", "19970501", "19970508", "19970518", "19970519", "19971225", "19971226", "19980101", "19980405", "19980409", "19980410", "19980412", "19980413", "19980501", "19980521", "19980531", "19980601", "19981225", "19981226", "19990101", "19990401", "19990402", "19990405", "19990501", "19990513", "19990517", "19990524", "19991225", "19991226", "19991231", "20000101", "20000420", "20000424", "20000501", "20000517", "20000601", "20000612", "20001225", "20001226", "20010101", "20010412", "20010413", "20010416", "20010501", "20010517", "20010524", "20010604", "20011225", "20011226", "20020101", "20020328", "20020329", "20020401", "20020501", "20020509", "20020517", "20020520", "20021224", "20021225", "20021226", "20030101", "20030417", "20030418", "20030421", "20030501", "20030517", "20030529", "20030609", "20031224", "20031225", "20031226", "20040101", "20040408", "20040409", "20040412", "20040501", "20040517", "20040520", "20040531", "20041224", "20041225", "20041226", "20050101", "20050324", "20050325", "20050328", "20050501", "20050505", "20050516", "20050517", "20051225", "20051226", "20060413", "20060414", "20060417", "20060501", "20060517", "20060525", "20060605", "20061225", "20061226", "20070101", "20070405", "20070406", "20070409", "20070501", "20070517", "20070528", "20071224", "20071225", "20071226", "20080101", "20080320", "20080321", "20080324", "20080501", "20080512", "20081224", "20081225", "20081226", "20090101", "20090409", "20090410", "20090413", "20090501", "20090521", "20090601", "20091224", "20091225", "20100101", "20100401", "20100402", "20100405", "20100513", "20100517", "20100524", "20101224", "20110421", "20110422", "20110425", "20110517", "20110602", "20110613", "20111226", "20120405", "20120406", "20120409", "20120501", "20120517", "20120528", "20121224", "20121225", "20121226", "20130101", "20130328", "20130329", "20130401", "20130501", "20130509", "20130517", "20130520", "20131224", "20131225", "20131226", "20140101", "20140417", "20140418", "20140421", "20140501", "20140529", "20140609", "20141224", "20141225", "20141226", "20150101", "20150402", "20150403", "20150406", "20150501", "20150514", "20150525", "20151224", "20151225", "20160101", "20160324", "20160325", "20160328", "20160505", "20160516", "20160517", "20161226", "20170413", "20170414", "20170417", "20170501", "20170517", "20170525", "20170605", "20171225", "20171226", "20180101", "20180329", "20180330", "20180402", "20180501", "20180510", "20180517", "20180521", "20181224", "20181225", "20181226", "20190101", "20190418", "20190419", "20190422", "20190501", "20190517", "20190530", "20190610", "20191224", "20191225", "20191226", "20200101", "20200409", "20200410", "20200413", "20200501", "20200521", "20200601", "20201224", "20201225", "20210101", "20210401", "20210402", "20210405", "20210513", "20210517", "20210524", "20211224", "20220414", "20220415", "20220418", "20220517", "20220526", "20220606", "20221226", "20230406", "20230407", "20230410", "20230501", "20230517", "20230518", "20230529", "20231225", "20231226", "20240101", "20240328", "20240329", "20240401", "20240501", "20240509", "20240517", "20240520", "20241224", "20241225", "20241226", "20250101", "20250417", "20250418", "20250421", "20250501", "20250529", "20250609", "20251224", "20251225", "20251226", "20260101", "20260402", "20260403", "20260406", "20260501", "20260514", "20260525", "20261224", "20261225", "20270101", "20270325", "20270326", "20270329", "20270506", "20270517", "20271224", "20280413", "20280414", "20280417", "20280501", "20280517", "20280525", "20280605", "20281225", "20281226", "20290101", "20290329", "20290330", "20290402", "20290501", "20290510", "20290517", "20290521", "20291224", "20291225", "20291226", "20300101", "20300418", "20300419", "20300422", "20300501", "20300517", "20300530", "20300610", "20301224", "20301225", "20301226", "20310101", "20310410", "20310411", "20310414", "20310501", "20310522", "20310602", "20311224", "20311225", "20311226", "20320101", "20320325", "20320326", "20320329", "20320506", "20320517", "20321224", "20330414", "20330415", "20330418", "20330517", "20330526", "20330606", "20331226", "20340406", "20340407", "20340410", "20340501", "20340517", "20340518", "20340529", "20341225", "20341226", "20350101", "20350322", "20350323", "20350326", "20350501", "20350503", "20350514", "20350517", "20351224", "20351225", "20351226", "20360101", "20360410", "20360411", "20360414", "20360501", "20360522", "20360602", "20361224", "20361225", "20361226", "20370101", "20370402", "20370403", "20370406", "20370501", "20370514", "20370525", "20371224", "20371225", "20380101", "20380422", "20380423", "20380426", "20380517", "20380603", "20380614", "20381224", "20390407", "20390408", "20390411", "20390517", "20390519", "20390530", "20391226", "20400329", "20400330", "20400402", "20400501", "20400510", "20400517", "20400521", "20401224", "20401225", "20401226", "20410101", "20410418", "20410419", "20410422", "20410501", "20410517", "20410530", "20410610", "20411224", "20411225", "20411226", "20420101", "20420403", "20420404", "20420407", "20420501", "20420515", "20420526", "20421224", "20421225", "20421226", "20430101", "20430326", "20430327", "20430330", "20430501", "20430507", "20430518", "20431224", "20431225", "20440101", "20440414", "20440415", "20440418", "20440517", "20440526", "20440606", "20441226", "20450406", "20450407", "20450410", "20450501", "20450517", "20450518", "20450529", "20451225", "20451226", "20460101", "20460322", "20460323", "20460326", "20460501", "20460503", "20460514", "20460517", "20461224", "20461225", "20461226", "20470101", "20470411", "20470412", "20470415", "20470501", "20470517", "20470523", "20470603", "20471224", "20471225", "20471226", "20480101", "20480402", "20480403", "20480406", "20480501", "20480514", "20480525", "20481224", "20481225", "20490101", "20490415", "20490416", "20490419", "20490517", "20490527", "20490607", "20491224", "20500407", "20500408", "20500411", "20500517", "20500519", "20500530", "20501226", "20510330", "20510331", "20510403", "20510501", "20510511", "20510517", "20510522", "20511225", "20511226", "20520101", "20520418", "20520419", "20520422", "20520501", "20520517", "20520530", "20520610", "20521224", "20521225", "20521226", "20530101", "20530403", "20530404", "20530407", "20530501", "20530515", "20530526", "20531224", "20531225", "20531226", "20540101", "20540326", "20540327", "20540330", "20540501", "20540507", "20540518", "20541224", "20541225", "20550101", "20550415", "20550416", "20550419", "20550517", "20550527", "20550607", "20551224", "20560330", "20560331", "20560403", "20560501", "20560511", "20560517", "20560522", "20561225", "20561226", "20570101", "20570419", "20570420", "20570423", "20570501", "20570517", "20570531", "20570611", "20571224", "20571225", "20571226", "20580101", "20580411", "20580412", "20580415", "20580501", "20580517", "20580523", "20580603", "20581224", "20581225", "20581226", "20590101", "20590327", "20590328", "20590331", "20590501", "20590508", "20590519", "20591224", "20591225", "20591226", "20600101", "20600415", "20600416", "20600419", "20600517", "20600527", "20600607", "20601224", "20610407", "20610408", "20610411", "20610517", "20610519", "20610530", "20611226" ], + "MonthsToExclude": [] + }, + "PAR": { + "InheritedCalendar": [], + "Name": "PAR", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880404", "19880512", "19880523", "19880714", "19880715", "19880815", "19881031", "19881101", "19881111", "19890327", "19890501", "19890504", "19890508", "19890515", "19890714", "19890814", "19890815", "19891101", "19891225", "19900101", "19900416", "19900501", "19900508", "19900524", "19900604", "19900815", "19901101", "19901224", "19901225", "19901231", "19910101", "19910401", "19910501", "19910508", "19910509", "19910520", "19910815", "19910816", "19911101", "19911111", "19911225", "19920101", "19920420", "19920501", "19920508", "19920528", "19920608", "19920713", "19920714", "19921111", "19921225", "19930101", "19930412", "19930520", "19930531", "19930714", "19930816", "19931101", "19931111", "19940404", "19940512", "19940523", "19940714", "19940715", "19940815", "19941031", "19941101", "19941111", "19950102", "19950417", "19950501", "19950508", "19950525", "19950605", "19950714", "19950814", "19950815", "19951101", "19951225", "19960101", "19960408", "19960501", "19960508", "19960516", "19960527", "19960815", "19960816", "19961101", "19961111", "19961225", "19970101", "19970331", "19970501", "19970508", "19970519", "19970714", "19970815", "19971110", "19971111", "19971225", "19980101", "19980413", "19980501", "19980508", "19980521", "19980601", "19980713", "19980714", "19981111", "19981225", "19990101", "19990405", "19990513", "19990524", "19990714", "19991101", "19991111", "19991231", "20000421", "20000424", "20000501", "20000508", "20000601", "20000612", "20000714", "20000815", "20001101", "20001225", "20001226", "20010101", "20010413", "20010416", "20010501", "20010508", "20010524", "20010604", "20010815", "20011101", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020501", "20020508", "20020509", "20020520", "20020815", "20021101", "20021111", "20021225", "20021226", "20030101", "20030418", "20030421", "20030501", "20030508", "20030529", "20030609", "20030714", "20030815", "20031111", "20031225", "20031226", "20040101", "20040409", "20040412", "20040520", "20040531", "20040714", "20041101", "20041111", "20050325", "20050328", "20050505", "20050714", "20050815", "20051101", "20051111", "20051226", "20060414", "20060417", "20060501", "20060508", "20060525", "20060714", "20060815", "20061101", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070508", "20070517", "20070815", "20071101", "20071225", "20071226", "20080101", "20080321", "20080324", "20080501", "20080508", "20080714", "20080815", "20081111", "20081225", "20081226", "20090101", "20090410", "20090413", "20090501", "20090508", "20090521", "20090714", "20091111", "20091225", "20100101", "20100402", "20100405", "20100513", "20100524", "20100714", "20101101", "20101111", "20110422", "20110425", "20110602", "20110613", "20110714", "20110815", "20111101", "20111111", "20111226", "20120406", "20120409", "20120501", "20120508", "20120517", "20120528", "20120815", "20121101", "20121225", "20121226", "20130101", "20130329", "20130401", "20130501", "20130508", "20130509", "20130520", "20130815", "20131101", "20131111", "20131225", "20131226", "20140101", "20140418", "20140421", "20140501", "20140508", "20140529", "20140609", "20140714", "20140815", "20141111", "20141225", "20141226", "20150101", "20150403", "20150406", "20150501", "20150508", "20150514", "20150525", "20150714", "20151111", "20151225", "20160101", "20160325", "20160328", "20160505", "20160516", "20160714", "20160815", "20161101", "20161111", "20161226", "20170414", "20170417", "20170501", "20170508", "20170525", "20170605", "20170714", "20170815", "20171101", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180508", "20180510", "20180521", "20180815", "20181101", "20181225", "20181226", "20190101", "20190419", "20190422", "20190501", "20190508", "20190530", "20190610", "20190815", "20191101", "20191111", "20191225", "20191226", "20200101", "20200410", "20200413", "20200501", "20200508", "20200521", "20200601", "20200714", "20201111", "20201225", "20210101", "20210402", "20210405", "20210513", "20210524", "20210714", "20211101", "20211111", "20220415", "20220418", "20220526", "20220606", "20220714", "20220815", "20221101", "20221111", "20221226", "20230407", "20230410", "20230501", "20230508", "20230518", "20230529", "20230714", "20230815", "20231101", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20240508", "20240509", "20240520", "20240815", "20241101", "20241111", "20241225", "20241226", "20250101", "20250418", "20250421", "20250501", "20250508", "20250529", "20250609", "20250714", "20250815", "20251111", "20251225", "20251226", "20260101", "20260403", "20260406", "20260501", "20260508", "20260514", "20260525", "20260714", "20261111", "20261225", "20270101", "20270326", "20270329", "20270506", "20270517", "20270714", "20271101", "20271111", "20280414", "20280417", "20280501", "20280508", "20280525", "20280605", "20280714", "20280815", "20281101", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20290508", "20290510", "20290521", "20290815", "20291101", "20291225", "20291226", "20300101", "20300419", "20300422", "20300501", "20300508", "20300530", "20300610", "20300815", "20301101", "20301111", "20301225", "20301226", "20310101", "20310411", "20310414", "20310501", "20310508", "20310522", "20310602", "20310714", "20310815", "20311111", "20311225", "20311226", "20320101", "20320326", "20320329", "20320506", "20320517", "20320714", "20321101", "20321111", "20330415", "20330418", "20330526", "20330606", "20330714", "20330815", "20331101", "20331111", "20331226", "20340407", "20340410", "20340501", "20340508", "20340518", "20340529", "20340714", "20340815", "20341101", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20350503", "20350508", "20350514", "20350815", "20351101", "20351225", "20351226", "20360101", "20360411", "20360414", "20360501", "20360508", "20360522", "20360602", "20360714", "20360815", "20361111", "20361225", "20361226", "20370101", "20370403", "20370406", "20370501", "20370508", "20370514", "20370525", "20370714", "20371111", "20371225", "20380101", "20380423", "20380426", "20380603", "20380614", "20380714", "20381101", "20381111", "20390408", "20390411", "20390519", "20390530", "20390714", "20390815", "20391101", "20391111", "20391226", "20400330", "20400402", "20400501", "20400508", "20400510", "20400521", "20400815", "20401101", "20401225", "20401226", "20410101", "20410419", "20410422", "20410501", "20410508", "20410530", "20410610", "20410815", "20411101", "20411111", "20411225", "20411226", "20420101", "20420404", "20420407", "20420501", "20420508", "20420515", "20420526", "20420714", "20420815", "20421111", "20421225", "20421226", "20430101", "20430327", "20430330", "20430501", "20430507", "20430508", "20430518", "20430714", "20431111", "20431225", "20440101", "20440415", "20440418", "20440526", "20440606", "20440714", "20440815", "20441101", "20441111", "20441226", "20450407", "20450410", "20450501", "20450508", "20450518", "20450529", "20450714", "20450815", "20451101", "20451225", "20451226", "20460101", "20460323", "20460326", "20460501", "20460503", "20460508", "20460514", "20460815", "20461101", "20461225", "20461226", "20470101", "20470412", "20470415", "20470501", "20470508", "20470523", "20470603", "20470815", "20471101", "20471111", "20471225", "20471226", "20480101", "20480403", "20480406", "20480501", "20480508", "20480514", "20480525", "20480714", "20481111", "20481225", "20490101", "20490416", "20490419", "20490527", "20490607", "20490714", "20491101", "20491111", "20500408", "20500411", "20500519", "20500530", "20500714", "20500815", "20501101", "20501111", "20501226", "20510331", "20510403", "20510501", "20510508", "20510511", "20510522", "20510714", "20510815", "20511101", "20511225", "20511226", "20520101", "20520419", "20520422", "20520501", "20520508", "20520530", "20520610", "20520815", "20521101", "20521111", "20521225", "20521226", "20530101", "20530404", "20530407", "20530501", "20530508", "20530515", "20530526", "20530714", "20530815", "20531111", "20531225", "20531226", "20540101", "20540327", "20540330", "20540501", "20540507", "20540508", "20540518", "20540714", "20541111", "20541225", "20550101", "20550416", "20550419", "20550527", "20550607", "20550714", "20551101", "20551111", "20560331", "20560403", "20560501", "20560508", "20560511", "20560522", "20560714", "20560815", "20561101", "20561225", "20561226", "20570101", "20570420", "20570423", "20570501", "20570508", "20570531", "20570611", "20570815", "20571101", "20571225", "20571226", "20580101", "20580412", "20580415", "20580501", "20580508", "20580523", "20580603", "20580815", "20581101", "20581111", "20581225", "20581226", "20590101", "20590328", "20590331", "20590501", "20590508", "20590519", "20590714", "20590815", "20591111", "20591225", "20591226", "20600101", "20600416", "20600419", "20600527", "20600607", "20600714", "20601101", "20601111", "20610408", "20610411", "20610519", "20610530", "20610714", "20610815", "20611101", "20611111", "20611226" ], + "MonthsToExclude": [] + }, + "PRA": { + "InheritedCalendar": [], + "Name": "PRA", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19800501", "19800508", "19801028", "19801224", "19801225", "19801226", "19810101", "19810501", "19810508", "19810706", "19811028", "19811224", "19811225", "19820101", "19820705", "19820706", "19821028", "19821224", "19830705", "19830706", "19831028", "19831226", "19840501", "19840508", "19840705", "19840706", "19841224", "19841225", "19841226", "19850101", "19850501", "19850508", "19850705", "19851028", "19851224", "19851225", "19851226", "19860101", "19860501", "19860508", "19861028", "19861224", "19861225", "19861226", "19870101", "19870501", "19870508", "19870706", "19871028", "19871224", "19871225", "19880101", "19880705", "19880706", "19881028", "19881226", "19890501", "19890508", "19890705", "19890706", "19891225", "19891226", "19900101", "19900501", "19900508", "19900705", "19900706", "19901224", "19901225", "19901226", "19910101", "19910501", "19910508", "19910705", "19911028", "19911224", "19911225", "19911226", "19920101", "19920501", "19920508", "19920706", "19921028", "19921224", "19921225", "19930101", "19930705", "19930706", "19931028", "19931224", "19940705", "19940706", "19941028", "19941226", "19950417", "19950501", "19950508", "19950705", "19950706", "19951225", "19951226", "19960101", "19960408", "19960501", "19960508", "19960705", "19961028", "19961224", "19961225", "19961226", "19970101", "19970331", "19970501", "19970508", "19971028", "19971224", "19971225", "19971226", "19980101", "19980413", "19980501", "19980508", "19980706", "19981028", "19981224", "19981225", "19990101", "19990405", "19990705", "19990706", "19991028", "19991224", "19991231", "20000103", "20000424", "20000501", "20000508", "20000705", "20000706", "20000928", "20001117", "20001225", "20001226", "20010101", "20010416", "20010501", "20010508", "20010705", "20010706", "20010928", "20011117", "20011224", "20011225", "20011226", "20020101", "20020401", "20020501", "20020508", "20020705", "20020928", "20021028", "20021117", "20021224", "20021225", "20021226", "20030101", "20030421", "20030501", "20030508", "20030928", "20031028", "20031117", "20031224", "20031225", "20031226", "20040101", "20040412", "20040705", "20040706", "20040928", "20041028", "20041117", "20041224", "20050328", "20050705", "20050706", "20050928", "20051028", "20051117", "20051226", "20060417", "20060501", "20060508", "20060705", "20060706", "20060928", "20061117", "20061225", "20061226", "20070101", "20070409", "20070501", "20070508", "20070705", "20070706", "20070928", "20071117", "20071224", "20071225", "20071226", "20080101", "20080324", "20080501", "20080508", "20081028", "20081117", "20081224", "20081225", "20081226", "20090101", "20090413", "20090501", "20090508", "20090706", "20090928", "20091028", "20091117", "20091224", "20091225", "20100101", "20100405", "20100705", "20100706", "20100928", "20101028", "20101117", "20101224", "20110425", "20110705", "20110706", "20110928", "20111028", "20111117", "20111226", "20120409", "20120501", "20120508", "20120705", "20120706", "20120928", "20121224", "20121225", "20121226", "20130101", "20130401", "20130501", "20130508", "20130705", "20131028", "20131224", "20131225", "20131226", "20140101", "20140421", "20140501", "20140508", "20141028", "20141117", "20141224", "20141225", "20141226", "20150101", "20150406", "20150501", "20150508", "20150706", "20150928", "20151028", "20151117", "20151224", "20151225", "20160101", "20160328", "20160705", "20160706", "20160928", "20161028", "20161117", "20161226", "20170417", "20170501", "20170508", "20170705", "20170706", "20170928", "20171117", "20171225", "20171226", "20180101", "20180402", "20180501", "20180508", "20180705", "20180706", "20180928", "20181224", "20181225", "20181226", "20190101", "20190422", "20190501", "20190508", "20190705", "20191028", "20191224", "20191225", "20191226", "20200101", "20200413", "20200501", "20200508", "20200706", "20200928", "20201028", "20201117", "20201224", "20201225", "20210101", "20210405", "20210705", "20210706", "20210928", "20211028", "20211117", "20211224", "20220418", "20220705", "20220706", "20220928", "20221028", "20221117", "20221226", "20230410", "20230501", "20230508", "20230705", "20230706", "20230928", "20231117", "20231225", "20231226", "20240101", "20240401", "20240501", "20240508", "20240705", "20241028", "20241224", "20241225", "20241226", "20250101", "20250421", "20250501", "20250508", "20251028", "20251117", "20251224", "20251225", "20251226", "20260101", "20260406", "20260501", "20260508", "20260706", "20260928", "20261028", "20261117", "20261224", "20261225", "20270101", "20270329", "20270705", "20270706", "20270928", "20271028", "20271117", "20271224", "20280417", "20280501", "20280508", "20280705", "20280706", "20280928", "20281117", "20281225", "20281226", "20290101", "20290402", "20290501", "20290508", "20290705", "20290706", "20290928", "20291224", "20291225", "20291226", "20300101", "20300422", "20300501", "20300508", "20300705", "20301028", "20301224", "20301225", "20301226", "20310101", "20310414", "20310501", "20310508", "20311028", "20311117", "20311224", "20311225", "20311226", "20320101", "20320329", "20320705", "20320706", "20320928", "20321028", "20321117", "20321224", "20330418", "20330705", "20330706", "20330928", "20331028", "20331117", "20331226", "20340410", "20340501", "20340508", "20340705", "20340706", "20340928", "20341117", "20341225", "20341226", "20350101", "20350326", "20350501", "20350508", "20350705", "20350706", "20350928", "20351224", "20351225", "20351226", "20360101", "20360414", "20360501", "20360508", "20361028", "20361117", "20361224", "20361225", "20361226", "20370101", "20370406", "20370501", "20370508", "20370706", "20370928", "20371028", "20371117", "20371224", "20371225", "20380101", "20380426", "20380705", "20380706", "20380928", "20381028", "20381117", "20381224", "20390411", "20390705", "20390706", "20390928", "20391028", "20391117", "20391226", "20400402", "20400501", "20400508", "20400705", "20400706", "20400928", "20401224", "20401225", "20401226", "20410101", "20410422", "20410501", "20410508", "20410705", "20411028", "20411224", "20411225", "20411226", "20420101", "20420407", "20420501", "20420508", "20421028", "20421117", "20421224", "20421225", "20421226", "20430101", "20430330", "20430501", "20430508", "20430706", "20430928", "20431028", "20431117", "20431224", "20431225", "20440101", "20440418", "20440705", "20440706", "20440928", "20441028", "20441117", "20441226", "20450410", "20450501", "20450508", "20450705", "20450706", "20450928", "20451117", "20451225", "20451226", "20460101", "20460326", "20460501", "20460508", "20460705", "20460706", "20460928", "20461224", "20461225", "20461226", "20470101", "20470415", "20470501", "20470508", "20470705", "20471028", "20471224", "20471225", "20471226", "20480101", "20480406", "20480501", "20480508", "20480706", "20480928", "20481028", "20481117", "20481224", "20481225", "20490101", "20490419", "20490705", "20490706", "20490928", "20491028", "20491117", "20491224", "20500411", "20500705", "20500706", "20500928", "20501028", "20501117", "20501226", "20510403", "20510501", "20510508", "20510705", "20510706", "20510928", "20511117", "20511225", "20511226", "20520101", "20520422", "20520501", "20520508", "20520705", "20521028", "20521224", "20521225", "20521226", "20530101", "20530407", "20530501", "20530508", "20531028", "20531117", "20531224", "20531225", "20531226", "20540101", "20540330", "20540501", "20540508", "20540706", "20540928", "20541028", "20541117", "20541224", "20541225", "20550101", "20550419", "20550705", "20550706", "20550928", "20551028", "20551117", "20551224", "20560403", "20560501", "20560508", "20560705", "20560706", "20560928", "20561117", "20561225", "20561226", "20570101", "20570423", "20570501", "20570508", "20570705", "20570706", "20570928", "20571224", "20571225", "20571226", "20580101", "20580415", "20580501", "20580508", "20580705", "20581028", "20581224", "20581225", "20581226", "20590101", "20590331", "20590501", "20590508", "20591028", "20591117", "20591224", "20591225", "20591226", "20600101", "20600419", "20600705", "20600706", "20600928", "20601028", "20601117", "20601224", "20610411", "20610705", "20610706", "20610928", "20611028", "20611117", "20611226", "20620501", "20620508", "20620705", "20620706", "20621225", "20621226", "20630101", "20630501", "20630508", "20630705", "20630706", "20631224", "20631225", "20631226", "20640101", "20640501", "20640508", "20641028", "20641224", "20641225", "20641226", "20650101", "20650501", "20650508", "20650706", "20651028", "20651224", "20651225", "20660101", "20660705", "20660706", "20661028", "20661224", "20670705", "20670706", "20671028", "20671226", "20680501", "20680508", "20680705", "20680706", "20681224", "20681225", "20681226", "20690101", "20690501", "20690508", "20690705", "20691028", "20691224", "20691225", "20691226", "20700101", "20700501", "20700508", "20701028", "20701224", "20701225", "20701226" ], + "MonthsToExclude": [] + }, + "REY": { + "InheritedCalendar": [], + "Name": "REY", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20051226", "20060102", "20060413", "20060414", "20060417", "20060420", "20060501", "20060525", "20060605", "20060807", "20061225", "20061226", "20070101", "20070102", "20070405", "20070406", "20070409", "20070419", "20070501", "20070517", "20070528", "20070806", "20071224", "20071225", "20071226", "20080101", "20080102", "20080320", "20080321", "20080324", "20080424", "20080501", "20080512", "20080617", "20080804", "20081224", "20081225", "20081226", "20090101", "20090409", "20090410", "20090413", "20090423", "20090501", "20090521", "20090601", "20090617", "20090803", "20091224", "20091225", "20100101", "20100401", "20100402", "20100405", "20100422", "20100513", "20100524", "20100617", "20100802", "20101224", "20110421", "20110422", "20110425", "20110602", "20110613", "20110617", "20110801", "20111226", "20120405", "20120406", "20120409", "20120419", "20120501", "20120517", "20120528", "20120806", "20121224", "20121225", "20121226", "20130101", "20130328", "20130329", "20130401", "20130425", "20130501", "20130509", "20130520", "20130617", "20130805", "20131224", "20131225", "20131226", "20140101", "20140417", "20140418", "20140421", "20140424", "20140501", "20140529", "20140609", "20140617", "20140804", "20141224", "20141225", "20141226", "20150101", "20150402", "20150403", "20150406", "20150423", "20150501", "20150514", "20150525", "20150617", "20150803", "20151224", "20151225", "20160101", "20160324", "20160325", "20160328", "20160421", "20160505", "20160516", "20160617", "20160801", "20161226", "20170413", "20170414", "20170417", "20170420", "20170501", "20170525", "20170605", "20170807", "20171225", "20171226", "20180101", "20180329", "20180330", "20180402", "20180419", "20180501", "20180510", "20180521", "20180806", "20181224", "20181225", "20181226", "20190101", "20190418", "20190419", "20190422", "20190425", "20190501", "20190530", "20190610", "20190617", "20190805", "20191224", "20191225", "20191226", "20200101", "20200409", "20200410", "20200413", "20200423", "20200501", "20200521", "20200601", "20200617", "20200803", "20201224", "20201225", "20210101", "20210401", "20210402", "20210405", "20210422", "20210513", "20210524", "20210617", "20210802", "20211224", "20220414", "20220415", "20220418", "20220421", "20220526", "20220606", "20220617", "20220801", "20221226", "20230406", "20230407", "20230410", "20230420", "20230501", "20230518", "20230529", "20230807", "20231225", "20231226", "20240101", "20240328", "20240329", "20240401", "20240425", "20240501", "20240509", "20240520", "20240617", "20240805", "20241224", "20241225", "20241226", "20250101", "20250417", "20250418", "20250421", "20250424", "20250501", "20250529", "20250609", "20250617", "20250804", "20251224", "20251225", "20251226", "20260101", "20260402", "20260403", "20260406", "20260423", "20260501", "20260514", "20260525", "20260617", "20260803", "20261224", "20261225", "20270101", "20270325", "20270326", "20270329", "20270422", "20270506", "20270517", "20270617", "20270802", "20271224", "20280413", "20280414", "20280417", "20280420", "20280501", "20280525", "20280605", "20280807", "20281225", "20281226", "20290101", "20290329", "20290330", "20290402", "20290419", "20290501", "20290510", "20290521", "20290806", "20291224", "20291225", "20291226", "20300101", "20300418", "20300419", "20300422", "20300425", "20300501", "20300530", "20300610", "20300617", "20300805", "20301224", "20301225", "20301226", "20310101", "20310410", "20310411", "20310414", "20310424", "20310501", "20310522", "20310602", "20310617", "20310804", "20311224", "20311225", "20311226", "20320101", "20320325", "20320326", "20320329", "20320422", "20320506", "20320517", "20320617", "20320802", "20321224", "20330414", "20330415", "20330418", "20330421", "20330526", "20330606", "20330617", "20330801", "20331226", "20340406", "20340407", "20340410", "20340420", "20340501", "20340518", "20340529", "20340807", "20341225", "20341226", "20350101", "20350322", "20350323", "20350326", "20350419", "20350501", "20350503", "20350514", "20350806", "20351224", "20351225", "20351226", "20360101", "20360410", "20360411", "20360414", "20360424", "20360501", "20360522", "20360602", "20360617", "20360804", "20361224", "20361225", "20361226", "20370101", "20370402", "20370403", "20370406", "20370423", "20370501", "20370514", "20370525", "20370617", "20370803", "20371224", "20371225", "20380101", "20380422", "20380423", "20380426", "20380603", "20380614", "20380617", "20380802", "20381224", "20390407", "20390408", "20390411", "20390421", "20390519", "20390530", "20390617", "20390801", "20391226", "20400329", "20400330", "20400402", "20400419", "20400501", "20400510", "20400521", "20400806", "20401224", "20401225", "20401226", "20410101", "20410418", "20410419", "20410422", "20410425", "20410501", "20410530", "20410610", "20410617", "20410805", "20411224", "20411225", "20411226", "20420101", "20420403", "20420404", "20420407", "20420424", "20420501", "20420515", "20420526", "20420617", "20420804", "20421224", "20421225", "20421226", "20430101", "20430326", "20430327", "20430330", "20430423", "20430501", "20430507", "20430518", "20430617", "20430803", "20431224", "20431225", "20440101", "20440414", "20440415", "20440418", "20440421", "20440526", "20440606", "20440617", "20440801", "20441226", "20450406", "20450407", "20450410", "20450420", "20450501", "20450518", "20450529", "20450807", "20451225", "20451226", "20460101", "20460322", "20460323", "20460326", "20460419", "20460501", "20460503", "20460514", "20460806", "20461224", "20461225", "20461226", "20470101", "20470411", "20470412", "20470415", "20470425", "20470501", "20470523", "20470603", "20470617", "20470805", "20471224", "20471225", "20471226", "20480101", "20480402", "20480403", "20480406", "20480423", "20480501", "20480514", "20480525", "20480617", "20480803", "20481224", "20481225", "20490101", "20490415", "20490416", "20490419", "20490422", "20490527", "20490607", "20490617", "20490802", "20491224", "20500407", "20500408", "20500411", "20500421", "20500519", "20500530", "20500617", "20500801", "20501226", "20510330", "20510331", "20510403", "20510420", "20510501", "20510511", "20510522", "20510807", "20511225", "20511226", "20520101", "20520418", "20520419", "20520422", "20520425", "20520501", "20520530", "20520610", "20520617", "20520805", "20521224", "20521225", "20521226", "20530101", "20530403", "20530404", "20530407", "20530424", "20530501", "20530515", "20530526", "20530617", "20530804", "20531224", "20531225", "20531226", "20540101", "20540326", "20540327", "20540330", "20540423", "20540501", "20540507", "20540518", "20540617", "20540803", "20541224", "20541225", "20550101", "20550415", "20550416", "20550419", "20550422", "20550527", "20550607", "20550617", "20550802", "20551224", "20560330", "20560331", "20560403", "20560420", "20560501", "20560511", "20560522", "20560807", "20561225", "20561226", "20570101", "20570419", "20570420", "20570423", "20570501", "20570531", "20570611", "20570806", "20571224", "20571225", "20571226", "20580101", "20580411", "20580412", "20580415", "20580425", "20580501", "20580523", "20580603", "20580617", "20580805", "20581224", "20581225", "20581226", "20590101", "20590327", "20590328", "20590331", "20590424", "20590501", "20590508", "20590519", "20590617", "20590804", "20591224", "20591225", "20591226", "20600101", "20600415", "20600416", "20600419", "20600422", "20600527", "20600607", "20600617", "20600802", "20601224", "20610407", "20610408", "20610411", "20610421", "20610519", "20610530", "20610617", "20610801", "20611226" ], + "MonthsToExclude": [] + }, + "SAO": { + "InheritedCalendar": [], + "Name": "SAO", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19801225", "19810101", "19811225", "19820101", "19841225", "19850101", "19851225", "19860101", "19861225", "19870101", "19871225", "19880101", "19891225", "19900101", "19901225", "19910101", "19911225", "19920101", "19921225", "19930101", "19951225", "19960101", "19961225", "19970101", "19971225", "19980101", "19981225", "19990101", "20001225", "20010101", "20010226", "20010227", "20010413", "20010501", "20010614", "20010709", "20010907", "20011012", "20011102", "20011115", "20011224", "20011225", "20011231", "20020101", "20020211", "20020212", "20020329", "20020501", "20020530", "20020709", "20021115", "20021224", "20021225", "20021231", "20030101", "20030303", "20030304", "20030418", "20030421", "20030501", "20030619", "20030709", "20031224", "20031225", "20031231", "20040101", "20040223", "20040224", "20040409", "20040421", "20040610", "20040709", "20040907", "20041012", "20041102", "20041115", "20041224", "20041231", "20050207", "20050208", "20050325", "20050421", "20050526", "20050907", "20051012", "20051102", "20051115", "20051230", "20060227", "20060228", "20060414", "20060421", "20060501", "20060615", "20060907", "20061012", "20061102", "20061115", "20061225", "20061229", "20070101", "20070219", "20070220", "20070406", "20070501", "20070607", "20070709", "20070907", "20071012", "20071102", "20071115", "20071224", "20071225", "20071231", "20080101", "20080204", "20080205", "20080321", "20080421", "20080501", "20080522", "20080709", "20081224", "20081225", "20081231", "20090101", "20090223", "20090224", "20090410", "20090421", "20090501", "20090611", "20090709", "20090907", "20091012", "20091102", "20091224", "20091225", "20091231", "20100101", "20100125", "20100215", "20100216", "20100402", "20100421", "20100603", "20100709", "20100907", "20101012", "20101102", "20101115", "20101231", "20110125", "20110307", "20110308", "20110421", "20110422", "20110623", "20110907", "20111012", "20111102", "20111115", "20111230", "20120125", "20120220", "20120221", "20120406", "20120501", "20120607", "20120709", "20120907", "20121012", "20121102", "20121115", "20121120", "20121225", "20121231", "20130101", "20130125", "20130211", "20130212", "20130329", "20130501", "20130530", "20130709", "20131115", "20131120", "20131225", "20131231", "20140101", "20140303", "20140304", "20140418", "20140421", "20140501", "20140619", "20140709", "20141120", "20141225", "20141231", "20150101", "20150216", "20150217", "20150403", "20150421", "20150501", "20150604", "20150709", "20150907", "20151012", "20151102", "20151120", "20151225", "20151231", "20160101", "20160125", "20160208", "20160209", "20160325", "20160421", "20160526", "20160907", "20161012", "20161102", "20161115", "20161230", "20170125", "20170227", "20170228", "20170414", "20170421", "20170501", "20170615", "20170907", "20171012", "20171102", "20171115", "20171120", "20171225", "20171229", "20180101", "20180125", "20180212", "20180213", "20180330", "20180501", "20180531", "20180709", "20180907", "20181012", "20181102", "20181115", "20181120", "20181225", "20181231", "20190101", "20190125", "20190304", "20190305", "20190419", "20190501", "20190620", "20190709", "20191115", "20191120", "20191225", "20191231", "20200101", "20200224", "20200225", "20200410", "20200421", "20200501", "20200611", "20200709", "20200907", "20201012", "20201102", "20201120", "20201225", "20201231", "20210101", "20210125", "20210215", "20210216", "20210402", "20210421", "20210603", "20210709", "20210907", "20211012", "20211102", "20211115", "20211231", "20220125", "20220228", "20220301", "20220415", "20220421", "20220616", "20220907", "20221012", "20221102", "20221115", "20221230", "20230125", "20230220", "20230221", "20230407", "20230421", "20230501", "20230608", "20230907", "20231012", "20231102", "20231115", "20231120", "20231225", "20231229", "20240101", "20240125", "20240212", "20240213", "20240329", "20240501", "20240530", "20240709", "20241115", "20241120", "20241225", "20241231", "20250101", "20250303", "20250304", "20250418", "20250421", "20250501", "20250619", "20250709", "20251120", "20251225", "20251231", "20260101", "20260216", "20260217", "20260403", "20260421", "20260501", "20260604", "20260709", "20260907", "20261012", "20261102", "20261120", "20261225", "20261231", "20270101", "20270125", "20270208", "20270209", "20270326", "20270421", "20270527", "20270709", "20270907", "20271012", "20271102", "20271115", "20271231", "20280125", "20280228", "20280229", "20280414", "20280421", "20280501", "20280615", "20280907", "20281012", "20281102", "20281115", "20281120", "20281225", "20281229", "20290101", "20290125", "20290212", "20290213", "20290330", "20290501", "20290531", "20290709", "20290907", "20291012", "20291102", "20291115", "20291120", "20291225", "20291231", "20300101", "20300125", "20300304", "20300305", "20300419", "20300501", "20300620", "20300709", "20301115", "20301120", "20301225", "20301231", "20310101", "20310224", "20310225", "20310411", "20310421", "20310501", "20310612", "20310709", "20311120", "20311225", "20311231", "20320101", "20320209", "20320210", "20320326", "20320421", "20320527", "20320709", "20320907", "20321012", "20321102", "20321115", "20321231", "20330125", "20330228", "20330301", "20330415", "20330421", "20330616", "20330907", "20331012", "20331102", "20331115", "20331230", "20340125", "20340220", "20340221", "20340407", "20340421", "20340501", "20340608", "20340907", "20341012", "20341102", "20341115", "20341120", "20341225", "20341229", "20350101", "20350125", "20350205", "20350206", "20350323", "20350501", "20350524", "20350709", "20350907", "20351012", "20351102", "20351115", "20351120", "20351225", "20351231", "20360101", "20360125", "20360225", "20360226", "20360411", "20360421", "20360501", "20360612", "20360709", "20361120", "20361225", "20361231", "20370101", "20370216", "20370217", "20370403", "20370421", "20370501", "20370604", "20370709", "20370907", "20371012", "20371102", "20371120", "20371225", "20371231", "20380101", "20380125", "20380308", "20380309", "20380421", "20380423", "20380624", "20380709", "20380907", "20381012", "20381102", "20381115", "20381231", "20390125", "20390221", "20390222", "20390408", "20390421", "20390609", "20390907", "20391012", "20391102", "20391115", "20391230", "20400125", "20400213", "20400214", "20400330", "20400501", "20400531", "20400709", "20400907", "20401012", "20401102", "20401115", "20401120", "20401225", "20401231", "20410101", "20410125", "20410304", "20410305", "20410419", "20410501", "20410620", "20410709", "20411115", "20411120", "20411225", "20411231", "20420101", "20420217", "20420218", "20420404", "20420421", "20420501", "20420605", "20420709", "20421120", "20421225", "20421231", "20430101", "20430209", "20430210", "20430327", "20430421", "20430501", "20430528", "20430709", "20430907", "20431012", "20431102", "20431120", "20431225", "20431231", "20440101", "20440125", "20440229", "20440301", "20440415", "20440421", "20440616", "20440907", "20441012", "20441102", "20441115", "20441230", "20450125", "20450220", "20450221", "20450407", "20450421", "20450501", "20450608", "20450907", "20451012", "20451102", "20451115", "20451120", "20451225", "20451229", "20460101", "20460125", "20460205", "20460206", "20460323", "20460501", "20460524", "20460709", "20460907", "20461012", "20461102", "20461115", "20461120", "20461225", "20461231", "20470101", "20470125", "20470225", "20470226", "20470412", "20470501", "20470613", "20470709", "20471115", "20471120", "20471225", "20471231", "20480101", "20480217", "20480218", "20480403", "20480421", "20480501", "20480604", "20480709", "20480907", "20481012", "20481102", "20481120", "20481225", "20481231", "20490101", "20490125", "20490301", "20490302", "20490416", "20490421", "20490617", "20490709", "20490907", "20491012", "20491102", "20491115", "20491231", "20500125", "20500221", "20500222", "20500408", "20500421", "20500609", "20500907", "20501012", "20501102", "20501115", "20501230", "20510125", "20510213", "20510214", "20510331", "20510421", "20510501", "20510601", "20510907", "20511012", "20511102", "20511115", "20511120", "20511225", "20511229", "20520101", "20520125", "20520304", "20520305", "20520419", "20520501", "20520620", "20520709", "20521115", "20521120", "20521225", "20521231", "20530101", "20530217", "20530218", "20530404", "20530421", "20530501", "20530605", "20530709", "20531120", "20531225", "20531231", "20540101", "20540209", "20540210", "20540327", "20540421", "20540501", "20540528", "20540709", "20540907", "20541012", "20541102", "20541120", "20541225", "20541231", "20550101", "20550125", "20550301", "20550302", "20550416", "20550421", "20550617", "20550709", "20550907", "20551012", "20551102", "20551115", "20551231", "20560125", "20560214", "20560215", "20560331", "20560421", "20560501", "20560601", "20560907", "20561012", "20561102", "20561115", "20561120", "20561225", "20561229", "20570101", "20570125", "20570305", "20570306", "20570420", "20570501", "20570621", "20570709", "20570907", "20571012", "20571102", "20571115", "20571120", "20571225", "20571231", "20580101", "20580125", "20580225", "20580226", "20580412", "20580501", "20580613", "20580709", "20581115", "20581120", "20581225", "20581231", "20590101", "20590210", "20590211", "20590328", "20590421", "20590501", "20590529", "20590709", "20591120", "20591225", "20591231", "20600101", "20600301", "20600302", "20600416", "20600421", "20600617", "20600709", "20600907", "20601012", "20601102", "20601115", "20601231", "20610125", "20610221", "20610222", "20610408", "20610421", "20610609", "20610907", "20611012", "20611102", "20611115", "20611230", "20621225", "20630101", "20631225", "20640101", "20641225", "20650101", "20651225", "20660101", "20681225", "20690101", "20691225", "20700101", "20701225" ], + "MonthsToExclude": [] + }, + "SEO": { + "InheritedCalendar": [], + "Name": "SEO", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19800815", "19801225", "19810101", "19811225", "19820101", "19820301", "19830301", "19830815", "19840301", "19840815", "19841225", "19850101", "19850301", "19850815", "19851225", "19860101", "19860815", "19861225", "19870101", "19871225", "19880101", "19880301", "19880815", "19890301", "19890815", "19891225", "19900101", "19900301", "19900815", "19901225", "19910101", "19910301", "19910815", "19911225", "19920101", "19921225", "19930101", "19930301", "19940301", "19940815", "19950301", "19950815", "19951225", "19960101", "19960301", "19960815", "19961225", "19970101", "19970815", "19971225", "19980101", "19981225", "19990101", "19990301", "20000204", "20000301", "20000405", "20000413", "20000501", "20000505", "20000511", "20000606", "20000717", "20000815", "20000911", "20000912", "20000913", "20001003", "20001225", "20010101", "20010301", "20010815", "20011225", "20020101", "20020301", "20020815", "20021225", "20030101", "20030131", "20030501", "20030505", "20030508", "20030606", "20030717", "20030815", "20030910", "20030911", "20030912", "20031003", "20031225", "20040101", "20040121", "20040122", "20040123", "20040301", "20040405", "20040415", "20040505", "20040526", "20040927", "20040928", "20040929", "20050208", "20050209", "20050210", "20050301", "20050505", "20050606", "20050815", "20050919", "20051003", "20060130", "20060301", "20060501", "20060505", "20060531", "20060606", "20060717", "20060815", "20061003", "20061005", "20061006", "20061225", "20070101", "20070219", "20070301", "20070501", "20070524", "20070606", "20070717", "20070815", "20070924", "20070925", "20070926", "20071003", "20071219", "20071225", "20080101", "20080206", "20080207", "20080208", "20080409", "20080501", "20080505", "20080512", "20080606", "20080815", "20080915", "20081003", "20081225", "20090101", "20090126", "20090127", "20090501", "20090505", "20091002", "20091225", "20100101", "20100215", "20100301", "20100505", "20100521", "20100602", "20100921", "20100922", "20100923", "20110202", "20110203", "20110204", "20110301", "20110505", "20110510", "20110606", "20110815", "20110912", "20110913", "20111003", "20120123", "20120124", "20120301", "20120411", "20120501", "20120528", "20120606", "20120815", "20121001", "20121003", "20121219", "20121225", "20130101", "20130211", "20130301", "20130501", "20130517", "20130606", "20130815", "20130918", "20130919", "20130920", "20131003", "20131225", "20140101", "20140130", "20140131", "20140501", "20140505", "20140506", "20140604", "20140606", "20140815", "20140908", "20140909", "20141003", "20141225", "20150101", "20150218", "20150219", "20150220", "20150501", "20150505", "20150525", "20150928", "20151225", "20160101", "20160208", "20160209", "20160301", "20160413", "20160505", "20160606", "20160815", "20160914", "20160915", "20160916", "20161003", "20170127", "20170301", "20170501", "20170503", "20170505", "20170606", "20170815", "20171003", "20171004", "20171005", "20171220", "20171225", "20180101", "20180215", "20180216", "20180301", "20180501", "20180522", "20180606", "20180613", "20180815", "20180924", "20180925", "20181003", "20181225", "20190101", "20190204", "20190205", "20190206", "20190301", "20190501", "20190606", "20190815", "20190912", "20190913", "20191003", "20191225", "20200101", "20200124", "20200415", "20200430", "20200501", "20200505", "20200930", "20201001", "20201002", "20201225", "20210101", "20210211", "20210212", "20210301", "20210505", "20210519", "20210920", "20210921", "20210922", "20220131", "20220201", "20220202", "20220301", "20220505", "20220601", "20220606", "20220815", "20220909", "20221003", "20221221", "20230123", "20230301", "20230501", "20230505", "20230606", "20230815", "20230928", "20230929", "20231003", "20231225", "20240101", "20240209", "20240301", "20240410", "20240501", "20240515", "20240606", "20240815", "20240916", "20240917", "20240918", "20241003", "20241225", "20250101", "20250128", "20250129", "20250130", "20250501", "20250505", "20250606", "20250815", "20251003", "20251006", "20251007", "20251225", "20260101", "20260216", "20260217", "20260218", "20260501", "20260505", "20260603", "20260924", "20260925", "20261225", "20270101", "20270208", "20270301", "20270505", "20270513", "20270914", "20270915", "20270916", "20271222", "20280126", "20280127", "20280128", "20280301", "20280412", "20280501", "20280502", "20280505", "20280606", "20280815", "20281002", "20281003", "20281004", "20281225", "20290101", "20290212", "20290213", "20290214", "20290301", "20290501", "20290606", "20290815", "20290921", "20291003", "20291225", "20300101", "20300204", "20300301", "20300501", "20300509", "20300605", "20300606", "20300815", "20300911", "20300912", "20300913", "20301003", "20301225", "20310101", "20310122", "20310123", "20310124", "20310501", "20310505", "20310528", "20310606", "20310815", "20310930", "20311001", "20311002", "20311003", "20311225", "20320101", "20320210", "20320211", "20320212", "20320301", "20320414", "20320505", "20320920", "20321222", "20330131", "20330201", "20330301", "20330505", "20330506", "20330606", "20330815", "20330907", "20330908", "20330909", "20331003", "20340220", "20340301", "20340501", "20340505", "20340525", "20340531", "20340606", "20340815", "20340926", "20340927", "20340928", "20341003", "20341225", "20350101", "20350207", "20350208", "20350209", "20350301", "20350501", "20350515", "20350606", "20350815", "20350917", "20351003", "20351225", "20360101", "20360128", "20360129", "20360409", "20360501", "20360505", "20360606", "20360815", "20361003", "20361225", "20370101", "20370216", "20370501", "20370505", "20370522", "20370923", "20370924", "20370925", "20371223", "20371225", "20380101", "20380203", "20380204", "20380205", "20380301", "20380505", "20380511", "20380602", "20380913", "20380914", "20390124", "20390125", "20390301", "20390505", "20390606", "20390815", "20391003", "20400213", "20400301", "20400411", "20400501", "20400518", "20400606", "20400815", "20400920", "20400921", "20401003", "20401225", "20410101", "20410131", "20410201", "20410301", "20410501", "20410507", "20410606", "20410815", "20410909", "20410910", "20410911", "20411003", "20411225", "20420101", "20420121", "20420122", "20420123", "20420501", "20420505", "20420526", "20420604", "20420606", "20420815", "20420929", "20421003", "20421217", "20421225", "20430101", "20430209", "20430210", "20430211", "20430501", "20430505", "20430916", "20430917", "20430918", "20431225", "20440101", "20440129", "20440301", "20440413", "20440505", "20440606", "20440815", "20441003", "20441004", "20441005", "20441006", "20450216", "20450217", "20450301", "20450501", "20450505", "20450524", "20450606", "20450815", "20450925", "20450926", "20451003", "20451225", "20460101", "20460205", "20460206", "20460207", "20460301", "20460501", "20460606", "20460613", "20460815", "20460914", "20461003", "20461225", "20470101", "20470125", "20470301", "20470501", "20470502", "20470606", "20470815", "20471003", "20471004", "20471218", "20471225", "20480101", "20480213", "20480214", "20480415", "20480501", "20480505", "20480520", "20480921", "20480922", "20480923", "20481225", "20490101", "20490201", "20490202", "20490203", "20490301", "20490505", "20490910", "20500124", "20500301", "20500505", "20500601", "20500606", "20500815", "20500929", "20500930", "20501003", "20510210", "20510301", "20510501", "20510505", "20510517", "20510606", "20510815", "20510918", "20510919", "20510920", "20511003", "20511225", "20520101", "20520131", "20520201", "20520202", "20520301", "20520410", "20520501", "20520506", "20520606", "20520815", "20520906", "20521003", "20521218", "20521225", "20530101", "20530218", "20530219", "20530220", "20530501", "20530505", "20530606", "20530815", "20530925", "20530926", "20531003", "20531225", "20540101", "20540209", "20540501", "20540505", "20540515", "20540603", "20540915", "20540916", "20540917", "20541225", "20550101", "20550127", "20550128", "20550129", "20550301", "20550504", "20550505", "20551004", "20551005", "20551006", "20560214", "20560215", "20560216", "20560301", "20560412", "20560501", "20560505", "20560522", "20560606", "20560815", "20560925", "20561003", "20561225", "20570101", "20570205", "20570301", "20570501", "20570511", "20570606", "20570815", "20570912", "20570913", "20570914", "20571003", "20571219", "20571225", "20580101", "20580123", "20580124", "20580125", "20580301", "20580430", "20580501", "20580605", "20580606", "20580815", "20581001", "20581002", "20581003", "20581225", "20590101", "20590211", "20590212", "20590213", "20590501", "20590505", "20590519", "20590606", "20590815", "20590922", "20591003", "20591225", "20600101", "20600202", "20600203", "20600301", "20600414", "20600505", "20600507", "20600908", "20600909", "20600910", "20610121", "20610301", "20610505", "20610526", "20610606", "20610815", "20610927", "20610928", "20610929", "20611003", "20620301", "20620815", "20621225", "20630101", "20630301", "20630815", "20631225", "20640101", "20640815", "20641225", "20650101", "20651225", "20660101", "20660301", "20670301", "20670815", "20680301", "20680815", "20681225", "20690101", "20690301", "20690815", "20691225", "20700101", "20700815", "20701225" ], + "MonthsToExclude": [] + }, + "SHA": { + "InheritedCalendar": [], + "Name": "SHA", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20061002", "20061003", "20061004", "20061005", "20061006", "20070101", "20070102", "20070103", "20070219", "20070220", "20070221", "20070222", "20070223", "20070501", "20070502", "20070503", "20070504", "20070507", "20071001", "20071002", "20071003", "20071004", "20071005", "20071231", "20080101", "20080206", "20080207", "20080208", "20080211", "20080212", "20080404", "20080501", "20080502", "20080609", "20080915", "20080929", "20080930", "20081001", "20081002", "20081003", "20090101", "20090102", "20090126", "20090127", "20090128", "20090129", "20090130", "20090406", "20090501", "20090528", "20090529", "20091001", "20091002", "20091005", "20091006", "20091007", "20091008", "20100101", "20100215", "20100216", "20100217", "20100218", "20100219", "20100405", "20100503", "20100614", "20100615", "20100616", "20100922", "20100923", "20100924", "20101001", "20101004", "20101005", "20101006", "20101007", "20110103", "20110202", "20110203", "20110204", "20110207", "20110208", "20110404", "20110405", "20110502", "20110606", "20110912", "20111003", "20111004", "20111005", "20111006", "20111007", "20120102", "20120103", "20120123", "20120124", "20120125", "20120126", "20120127", "20120402", "20120403", "20120404", "20120430", "20120501", "20120622", "20121001", "20121002", "20121003", "20121004", "20121005", "20130101", "20130211", "20130212", "20130213", "20130214", "20130215", "20130404", "20130405", "20130501", "20130610", "20130611", "20130612", "20130919", "20130930", "20131001", "20131002", "20131003", "20131004", "20140101", "20140130", "20140131", "20140203", "20140204", "20140205", "20140407", "20140501", "20140502", "20140602", "20140908", "20140929", "20140930", "20141001", "20141002", "20141003", "20150101", "20150102", "20150218", "20150219", "20150220", "20150223", "20150224", "20150406", "20150501", "20150619", "20150928", "20151001", "20151002", "20151005", "20151006", "20151007", "20151008", "20160101", "20160208", "20160209", "20160210", "20160211", "20160212", "20160404", "20160502", "20160609", "20160610", "20160915", "20161003", "20161004", "20161005", "20161006", "20161007", "20170102", "20170103", "20170127", "20170130", "20170131", "20170201", "20170202", "20170403", "20170404", "20170501", "20170529", "20170530", "20171002", "20171003", "20171004", "20171005", "20171006", "20180101", "20180215", "20180216", "20180219", "20180220", "20180221", "20180405", "20180406", "20180430", "20180501", "20180618", "20180924", "20181001", "20181002", "20181003", "20181004", "20181005", "20190101", "20190204", "20190205", "20190206", "20190207", "20190208", "20190405", "20190501", "20190607", "20190913", "20190930", "20191001", "20191002", "20191003", "20191004", "20200101", "20200124", "20200127", "20200128", "20200129", "20200130", "20200406", "20200501", "20200625", "20200626", "20201001", "20201002", "20201005", "20201006", "20201007", "20201008", "20210101", "20210211", "20210212", "20210215", "20210216", "20210217", "20210405", "20210503", "20210614", "20210921", "20211001", "20211004", "20211005", "20211006", "20211007", "20220103", "20220131", "20220201", "20220202", "20220203", "20220204", "20220404", "20220405", "20220502", "20220603", "20220912", "20221003", "20221004", "20221005", "20221006", "20221007", "20230102", "20230103", "20230123", "20230124", "20230125", "20230126", "20230127", "20230403", "20230404", "20230405", "20230501", "20230622", "20230623", "20230929", "20231002", "20231003", "20231004", "20231005", "20231006", "20240101", "20240209", "20240212", "20240213", "20240214", "20240215", "20240404", "20240405", "20240501", "20240610", "20240917", "20240930", "20241001", "20241002", "20241003", "20241004", "20250101", "20250128", "20250129", "20250130", "20250131", "20250203", "20250404", "20250501", "20250502", "20250530", "20250929", "20250930", "20251001", "20251002", "20251003", "20251006", "20260101", "20260102", "20260216", "20260217", "20260218", "20260219", "20260220", "20260406", "20260501", "20260619", "20260925", "20261001", "20261002", "20261005", "20261006", "20261007", "20261008", "20270101", "20270205", "20270208", "20270209", "20270210", "20270211", "20270405", "20270503", "20270607", "20270608", "20270609", "20270915", "20270916", "20270917", "20271001", "20271004", "20271005", "20271006", "20271007", "20280103", "20280125", "20280126", "20280127", "20280128", "20280131", "20280403", "20280404", "20280501", "20280529", "20281002", "20281003", "20281004", "20281005", "20281006", "20290101", "20290212", "20290213", "20290214", "20290215", "20290216", "20290402", "20290403", "20290404", "20290430", "20290501", "20290615", "20290924", "20291001", "20291002", "20291003", "20291004", "20291005", "20300101", "20300204", "20300205", "20300206", "20300207", "20300208", "20300405", "20300501", "20300603", "20300604", "20300605", "20300912", "20300930", "20301001", "20301002", "20301003", "20301004", "20310101", "20310122", "20310123", "20310124", "20310127", "20310128", "20310407", "20310501", "20310502", "20310623", "20310624", "20310929", "20310930", "20311001", "20311002", "20311003", "20320101", "20320102", "20320210", "20320211", "20320212", "20320213", "20320216", "20320405", "20320503", "20320611", "20320920", "20321001", "20321004", "20321005", "20321006", "20321007", "20330103", "20330131", "20330201", "20330202", "20330203", "20330204", "20330404", "20330502", "20330530", "20330531", "20330601", "20330908", "20331003", "20331004", "20331005", "20331006", "20331007", "20340102", "20340103", "20340220", "20340221", "20340222", "20340223", "20340224", "20340403", "20340404", "20340405", "20340501", "20340619", "20340620", "20340927", "20340928", "20340929", "20341002", "20341003", "20341004", "20341005", "20341006", "20350101", "20350207", "20350208", "20350209", "20350212", "20350213", "20350405", "20350406", "20350430", "20350501", "20350611", "20350917", "20351001", "20351002", "20351003", "20351004", "20351005", "20360101", "20360128", "20360129", "20360130", "20360131", "20360201", "20360404", "20360501", "20360502", "20360530", "20360929", "20360930", "20361001", "20361002", "20361003", "20361006", "20370101", "20370102", "20370216", "20370217", "20370218", "20370219", "20370220", "20370406", "20370501", "20370618", "20370619", "20370924", "20371001", "20371002", "20371005", "20371006", "20371007", "20371008", "20380101", "20380203", "20380204", "20380205", "20380208", "20380209", "20380405", "20380503", "20380607", "20380913", "20381001", "20381004", "20381005", "20381006", "20381007", "20390103", "20390124", "20390125", "20390126", "20390127", "20390128", "20390404", "20390405", "20390502", "20390527", "20391003", "20391004", "20391005", "20391006", "20391007", "20400102", "20400103", "20400213", "20400214", "20400215", "20400216", "20400217", "20400402", "20400403", "20400404", "20400430", "20400501", "20400614", "20400615", "20400920", "20401001", "20401002", "20401003", "20401004", "20401005", "20410101", "20410131", "20410201", "20410204", "20410205", "20410206", "20410404", "20410405", "20410501", "20410603", "20410910", "20410930", "20411001", "20411002", "20411003", "20411004", "20420101", "20420121", "20420122", "20420123", "20420124", "20420127", "20420404", "20420501", "20420502", "20420623", "20420929", "20420930", "20421001", "20421002", "20421003", "20430101", "20430102", "20430209", "20430210", "20430211", "20430212", "20430213", "20430406", "20430501", "20430611", "20430612", "20430917", "20431001", "20431002", "20431005", "20431006", "20431007", "20431008", "20440101", "20440129", "20440201", "20440202", "20440203", "20440204", "20440404", "20440502", "20440530", "20440531", "20441003", "20441004", "20441005", "20441006", "20441007", "20450102", "20450103", "20450216", "20450217", "20450220", "20450221", "20450222", "20450403", "20450404", "20450501", "20450619", "20450925", "20451002", "20451003", "20451004", "20451005", "20451006", "20460101", "20460205", "20460206", "20460207", "20460208", "20460209", "20460402", "20460403", "20460404", "20460430", "20460501", "20460608", "20460917", "20461001", "20461002", "20461003", "20461004", "20461005", "20470101", "20470125", "20470128", "20470129", "20470130", "20470131", "20470405", "20470501", "20470527", "20470528", "20470529", "20470930", "20471001", "20471002", "20471003", "20471004", "20480101", "20480213", "20480214", "20480217", "20480218", "20480219", "20480406", "20480501", "20480615", "20480922", "20481001", "20481002", "20481005", "20481006", "20481007", "20481008", "20490101", "20490201", "20490202", "20490203", "20490204", "20490205", "20490405", "20490503", "20490604", "20490913", "20491001", "20491004", "20491005", "20491006", "20491007", "20500103", "20500124", "20500125", "20500126", "20500127", "20500128", "20500404", "20500502", "20500623", "20500624", "20500930", "20501003", "20501004", "20501005", "20501006", "20501007", "20510102", "20510103", "20510210", "20510213", "20510214", "20510215", "20510216", "20510403", "20510404", "20510405", "20510501", "20510612", "20510613", "20510919", "20511002", "20511003", "20511004", "20511005", "20511006", "20520101", "20520131", "20520201", "20520202", "20520205", "20520206", "20520404", "20520405", "20520501", "20520531", "20520909", "20520930", "20521001", "20521002", "20521003", "20521004", "20530101", "20530218", "20530219", "20530220", "20530221", "20530224", "20530404", "20530501", "20530502", "20530620", "20530926", "20530929", "20530930", "20531001", "20531002", "20531003", "20540101", "20540102", "20540209", "20540210", "20540211", "20540212", "20540213", "20540406", "20540501", "20540608", "20540609", "20540610", "20540916", "20540917", "20540918", "20541001", "20541002", "20541005", "20541006", "20541007", "20541008", "20550101", "20550127", "20550128", "20550129", "20550201", "20550202", "20550405", "20550503", "20550531", "20551001", "20551004", "20551005", "20551006", "20551007", "20560103", "20560214", "20560215", "20560216", "20560217", "20560218", "20560403", "20560404", "20560501", "20560616", "20560925", "20561002", "20561003", "20561004", "20561005", "20561006", "20570101", "20570205", "20570206", "20570207", "20570208", "20570209", "20570402", "20570403", "20570404", "20570430", "20570501", "20570604", "20570605", "20570606", "20570913", "20571001", "20571002", "20571003", "20571004", "20571005", "20580101", "20580123", "20580124", "20580125", "20580128", "20580129", "20580404", "20580405", "20580501", "20580624", "20580625", "20580930", "20581001", "20581002", "20581003", "20581004", "20590101", "20590211", "20590212", "20590213", "20590214", "20590217", "20590407", "20590501", "20590502", "20590613", "20590922", "20590929", "20590930", "20591001", "20591002", "20591003", "20600101", "20600102", "20600202", "20600203", "20600204", "20600205", "20600206", "20600405", "20600503", "20600603", "20600604", "20600909", "20601001", "20601004", "20601005", "20601006", "20601007", "20610103", "20610120", "20610121", "20610124", "20610125", "20610126", "20610404", "20610502", "20610620", "20610621", "20610622", "20610928", "20610929", "20610930", "20611003", "20611004", "20611005", "20611006", "20611007" ], + "MonthsToExclude": [] + }, + "SIN": { + "InheritedCalendar": [], + "Name": "SIN", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880217", "19880218", "19880401", "19880518", "19880530", "19880725", "19880809", "19881108", "19890102", "19890206", "19890207", "19890324", "19890501", "19890508", "19890519", "19890713", "19890714", "19890809", "19891225", "19900101", "19900126", "19900413", "19900427", "19900501", "19900509", "19900704", "19900809", "19901018", "19901225", "19910101", "19910214", "19910215", "19910329", "19910416", "19910501", "19910528", "19910809", "19911106", "19911225", "19920101", "19920203", "19920204", "19920417", "19920501", "19920611", "19921225", "19930101", "19930325", "19930409", "19930506", "19930601", "19930809", "19940210", "19940211", "19940314", "19940401", "19940502", "19940525", "19940809", "19941102", "19941226", "19950131", "19950201", "19950303", "19950414", "19950501", "19950510", "19950809", "19951023", "19951225", "19960101", "19960219", "19960220", "19960221", "19960405", "19960429", "19960501", "19960531", "19960809", "19961111", "19961225", "19970101", "19970207", "19970328", "19970418", "19970501", "19970521", "19971030", "19971225", "19980101", "19980128", "19980129", "19980130", "19980408", "19980410", "19980501", "19980511", "19981020", "19981225", "19990101", "19990119", "19990216", "19990217", "19990402", "19990809", "19991108", "20000316", "20000421", "20000501", "20000518", "20000809", "20001027", "20001225", "20001228", "20010101", "20010125", "20010126", "20010306", "20010413", "20010501", "20010507", "20010809", "20011217", "20011225", "20020101", "20020212", "20020213", "20020329", "20020501", "20020527", "20020809", "20021105", "20021206", "20021225", "20030101", "20030201", "20030203", "20030212", "20030418", "20030501", "20030515", "20030809", "20031025", "20031125", "20031225", "20040101", "20040122", "20040123", "20040202", "20040409", "20040501", "20040602", "20040809", "20041111", "20041115", "20041225", "20050101", "20050121", "20050209", "20050210", "20050325", "20050502", "20050523", "20050809", "20050827", "20051101", "20051103", "20051226", "20060102", "20060110", "20060130", "20060131", "20060414", "20060501", "20060512", "20060513", "20060809", "20061021", "20061024", "20061225", "20070101", "20070102", "20070219", "20070220", "20070406", "20070501", "20070531", "20070809", "20071013", "20071108", "20071220", "20071225", "20080101", "20080207", "20080208", "20080321", "20080501", "20080519", "20081001", "20081027", "20081208", "20081225", "20090101", "20090126", "20090127", "20090410", "20090501", "20090810", "20090921", "20091127", "20091225", "20100101", "20100215", "20100216", "20100402", "20100528", "20100809", "20100910", "20101105", "20101117", "20110203", "20110204", "20110422", "20110502", "20110517", "20110809", "20110830", "20111026", "20111107", "20111226", "20120102", "20120123", "20120124", "20120406", "20120501", "20120809", "20120820", "20121026", "20121113", "20121225", "20130101", "20130211", "20130212", "20130329", "20130501", "20130524", "20130808", "20130809", "20131015", "20131225", "20140101", "20140131", "20140418", "20140501", "20140513", "20140728", "20141006", "20141022", "20141225", "20150101", "20150219", "20150220", "20150403", "20150501", "20150601", "20150717", "20150810", "20150924", "20151110", "20151225", "20160101", "20160208", "20160209", "20160325", "20160502", "20160706", "20160809", "20160912", "20161226", "20170102", "20170130", "20170414", "20170501", "20170510", "20170626", "20170809", "20170901", "20171018", "20171225", "20180101", "20180216", "20180330", "20180501", "20180529", "20180615", "20180809", "20180822", "20181106", "20181225", "20190101", "20190205", "20190206", "20190419", "20190501", "20190520", "20190605", "20190809", "20190812", "20191028", "20191225", "20200101", "20200127", "20200410", "20200501", "20200507", "20200525", "20200731", "20200810", "20201225", "20210101", "20210212", "20210402", "20210513", "20210526", "20210720", "20210809", "20211104", "20220201", "20220202", "20220415", "20220502", "20220516", "20220809", "20221024", "20221226", "20230102", "20230123", "20230124", "20230407", "20230421", "20230501", "20230602", "20230628", "20230809", "20231113", "20231225", "20240101", "20240212", "20240329", "20240410", "20240501", "20240522", "20240617", "20240809", "20241031", "20241225", "20250101", "20250129", "20250130", "20250331", "20250418", "20250501", "20250512", "20250606", "20251020", "20251225", "20260101", "20260217", "20260218", "20260320", "20260403", "20260501", "20260527", "20260601", "20260810", "20261109", "20261225", "20270101", "20270208", "20270310", "20270326", "20270517", "20270520", "20270809", "20271028", "20280126", "20280127", "20280228", "20280414", "20280501", "20280505", "20280509", "20280809", "20281017", "20281225", "20290101", "20290213", "20290214", "20290215", "20290330", "20290424", "20290501", "20290528", "20290809", "20291105", "20291225", "20300101", "20300204", "20300205", "20300206", "20300419", "20300501", "20300516", "20300809", "20301225", "20310101", "20310123", "20310124", "20310403", "20310411", "20310501", "20310506", "20311114", "20311225", "20320101", "20320114", "20320211", "20320212", "20320322", "20320326", "20320524", "20320809", "20321102", "20330103", "20330131", "20330201", "20330415", "20330502", "20330513", "20330809", "20331223", "20331226", "20340102", "20340220", "20340221", "20340301", "20340407", "20340501", "20340601", "20340809", "20341109", "20341212", "20341225", "20350101", "20350208", "20350209", "20350219", "20350323", "20350501", "20350522", "20350809", "20351030", "20351225", "20360101", "20360128", "20360129", "20360208", "20360411", "20360501", "20361119", "20361225", "20370101", "20370127", "20370216", "20370217", "20370403", "20370501", "20370529", "20370810", "20371106", "20371109", "20371225", "20380101", "20380204", "20380205", "20380423", "20380518", "20380809", "20381027", "20381029", "20390105", "20390124", "20390125", "20390408", "20390502", "20390809", "20391019", "20391115", "20391226", "20400102", "20400213", "20400214", "20400330", "20400501", "20400525", "20400809", "20401008", "20401225", "20410101", "20410201", "20410419", "20410501", "20410514", "20410809", "20410927", "20411023", "20411204", "20411225", "20420101", "20420122", "20420123", "20420404", "20420501", "20420602", "20420916", "20421111", "20421124", "20421225", "20430101", "20430210", "20430211", "20430327", "20430501", "20430810", "20431112", "20431225", "20440101", "20440201", "20440415", "20440502", "20440512", "20440809", "20440824", "20441020", "20441031", "20441226", "20450102", "20450217", "20450407", "20450501", "20450531", "20450809", "20450814", "20451108", "20451225", "20460101", "20460206", "20460207", "20460323", "20460501", "20460521", "20460809", "20461010", "20461029", "20461225", "20470101", "20470128", "20470412", "20470501", "20470509", "20470724", "20470809", "20470930", "20471018", "20471225", "20480101", "20480214", "20480403", "20480501", "20480527", "20480713", "20480810", "20481105", "20481225", "20490101", "20490202", "20490203", "20490416", "20490517", "20490701", "20490809", "20490908", "20491025", "20500124", "20500125", "20500408", "20500502", "20500505", "20500621", "20500809", "20500829", "20501114", "20501226", "20510102", "20510213", "20510331", "20510501", "20510524", "20510809", "20510817", "20511102", "20511225", "20520101", "20520201", "20520202", "20520419", "20520501", "20520513", "20520530", "20520805", "20520809", "20521021", "20521225", "20530101", "20530219", "20530220", "20530404", "20530501", "20530519", "20530602", "20531110", "20531225", "20540101", "20540209", "20540210", "20540327", "20540501", "20540522", "20540716", "20540810", "20541030", "20541225", "20550101", "20550128", "20550129", "20550416", "20550428", "20550511", "20550705", "20550809", "20551019", "20560215", "20560216", "20560331", "20560417", "20560501", "20560529", "20560809", "20561106", "20561225", "20570101", "20570205", "20570206", "20570405", "20570420", "20570501", "20570518", "20570613", "20570809", "20571225", "20580101", "20580124", "20580125", "20580326", "20580412", "20580501", "20580507", "20580603", "20580809", "20581115", "20581225", "20590101", "20590212", "20590213", "20590328", "20590501", "20590522", "20590526", "20591104", "20591225", "20600101", "20600202", "20600203", "20600304", "20600416", "20600511", "20600514", "20600809", "20610121", "20610222", "20610408", "20610502", "20610504", "20610809", "20611111", "20611226" ], + "MonthsToExclude": [] + }, + "STO": { + "InheritedCalendar": [], + "Name": "STO", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880106", "19880401", "19880404", "19880512", "19880523", "19880624", "19881226", "19890106", "19890324", "19890327", "19890501", "19890504", "19890515", "19890623", "19891225", "19891226", "19900101", "19900413", "19900416", "19900501", "19900524", "19900604", "19900622", "19901224", "19901225", "19901226", "19901231", "19910101", "19910329", "19910401", "19910501", "19910509", "19910520", "19910621", "19911224", "19911225", "19911226", "19911231", "19920101", "19920106", "19920417", "19920420", "19920501", "19920528", "19920608", "19920619", "19921224", "19921225", "19921231", "19930101", "19930409", "19930412", "19930430", "19930519", "19930520", "19930531", "19930625", "19931105", "19931224", "19931231", "19940106", "19940401", "19940404", "19940512", "19940523", "19940624", "19941226", "19950106", "19950414", "19950417", "19950501", "19950525", "19950605", "19950623", "19951225", "19951226", "19960101", "19960405", "19960408", "19960501", "19960516", "19960527", "19960621", "19961224", "19961225", "19961226", "19961231", "19970101", "19970106", "19970328", "19970331", "19970501", "19970508", "19970519", "19970620", "19971224", "19971225", "19971226", "19971231", "19980101", "19980106", "19980410", "19980413", "19980501", "19980521", "19980601", "19980619", "19981224", "19981225", "19981231", "19990101", "19990106", "19990402", "19990405", "19990513", "19990524", "19990625", "19991224", "19991231", "20000106", "20000421", "20000424", "20000501", "20000601", "20000612", "20000623", "20001225", "20001226", "20010101", "20010413", "20010416", "20010501", "20010524", "20010604", "20010622", "20011224", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020501", "20020509", "20020520", "20020621", "20021224", "20021225", "20021226", "20021231", "20030101", "20030106", "20030418", "20030421", "20030501", "20030529", "20030609", "20030620", "20031224", "20031225", "20031226", "20031231", "20040101", "20040106", "20040409", "20040412", "20040520", "20040531", "20040625", "20041224", "20041231", "20050106", "20050325", "20050328", "20050505", "20050606", "20050624", "20051226", "20060106", "20060414", "20060417", "20060501", "20060525", "20060606", "20060623", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070517", "20070606", "20070622", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20080606", "20080620", "20081224", "20081225", "20081226", "20081231", "20090101", "20090106", "20090410", "20090413", "20090501", "20090521", "20090619", "20091224", "20091225", "20091231", "20100101", "20100106", "20100402", "20100405", "20100513", "20100625", "20101224", "20101231", "20110106", "20110422", "20110425", "20110602", "20110606", "20110624", "20111226", "20120106", "20120406", "20120409", "20120501", "20120517", "20120606", "20120622", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20130509", "20130606", "20130621", "20131224", "20131225", "20131226", "20131231", "20140101", "20140106", "20140418", "20140421", "20140501", "20140529", "20140606", "20140620", "20141224", "20141225", "20141226", "20141231", "20150101", "20150106", "20150403", "20150406", "20150501", "20150514", "20150619", "20151224", "20151225", "20151231", "20160101", "20160106", "20160325", "20160328", "20160505", "20160606", "20160624", "20161226", "20170106", "20170414", "20170417", "20170501", "20170525", "20170606", "20170623", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180510", "20180606", "20180622", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20190530", "20190606", "20190621", "20191224", "20191225", "20191226", "20191231", "20200101", "20200106", "20200410", "20200413", "20200501", "20200521", "20200619", "20201224", "20201225", "20201231", "20210101", "20210106", "20210402", "20210405", "20210513", "20210625", "20211224", "20211231", "20220106", "20220415", "20220418", "20220526", "20220606", "20220624", "20221226", "20230106", "20230407", "20230410", "20230501", "20230518", "20230606", "20230623", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20240509", "20240606", "20240621", "20241224", "20241225", "20241226", "20241231", "20250101", "20250106", "20250418", "20250421", "20250501", "20250529", "20250606", "20250620", "20251224", "20251225", "20251226", "20251231", "20260101", "20260106", "20260403", "20260406", "20260501", "20260514", "20260619", "20261224", "20261225", "20261231", "20270101", "20270106", "20270326", "20270329", "20270506", "20270625", "20271224", "20271231", "20280106", "20280414", "20280417", "20280501", "20280525", "20280606", "20280623", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20290510", "20290606", "20290622", "20291224", "20291225", "20291226", "20291231", "20300101", "20300419", "20300422", "20300501", "20300530", "20300606", "20300621", "20301224", "20301225", "20301226", "20301231", "20310101", "20310106", "20310411", "20310414", "20310501", "20310522", "20310606", "20310620", "20311224", "20311225", "20311226", "20311231", "20320101", "20320106", "20320326", "20320329", "20320506", "20320625", "20321224", "20321231", "20330106", "20330415", "20330418", "20330526", "20330606", "20330624", "20331226", "20340106", "20340407", "20340410", "20340501", "20340518", "20340606", "20340623", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20350503", "20350606", "20350622", "20351224", "20351225", "20351226", "20351231", "20360101", "20360411", "20360414", "20360501", "20360522", "20360606", "20360620", "20361224", "20361225", "20361226", "20361231", "20370101", "20370106", "20370403", "20370406", "20370501", "20370514", "20370619", "20371224", "20371225", "20371231", "20380101", "20380106", "20380423", "20380426", "20380603", "20380625", "20381224", "20381231", "20390106", "20390408", "20390411", "20390519", "20390606", "20390624", "20391226", "20400106", "20400330", "20400402", "20400501", "20400510", "20400606", "20400622", "20401224", "20401225", "20401226", "20401231", "20410101", "20410419", "20410422", "20410501", "20410530", "20410606", "20410621", "20411224", "20411225", "20411226", "20411231", "20420101", "20420106", "20420404", "20420407", "20420501", "20420515", "20420606", "20420620", "20421224", "20421225", "20421226", "20421231", "20430101", "20430106", "20430327", "20430330", "20430501", "20430507", "20430619", "20431224", "20431225", "20431231", "20440101", "20440106", "20440415", "20440418", "20440526", "20440606", "20440624", "20441226", "20450106", "20450407", "20450410", "20450501", "20450518", "20450606", "20450623", "20451225", "20451226", "20460101", "20460323", "20460326", "20460501", "20460503", "20460606", "20460622", "20461224", "20461225", "20461226", "20461231", "20470101", "20470412", "20470415", "20470501", "20470523", "20470606", "20470621", "20471224", "20471225", "20471226", "20471231", "20480101", "20480106", "20480403", "20480406", "20480501", "20480514", "20480619", "20481224", "20481225", "20481231", "20490101", "20490106", "20490416", "20490419", "20490527", "20490625", "20491224", "20491231", "20500106", "20500408", "20500411", "20500519", "20500606", "20500624", "20501226", "20510106", "20510331", "20510403", "20510501", "20510511", "20510606", "20510623", "20511225", "20511226", "20520101", "20520419", "20520422", "20520501", "20520530", "20520606", "20520621", "20521224", "20521225", "20521226", "20521231", "20530101", "20530106", "20530404", "20530407", "20530501", "20530515", "20530606", "20530620", "20531224", "20531225", "20531226", "20531231", "20540101", "20540106", "20540327", "20540330", "20540501", "20540507", "20540619", "20541224", "20541225", "20541231", "20550101", "20550106", "20550416", "20550419", "20550527", "20550625", "20551224", "20551231", "20560106", "20560331", "20560403", "20560501", "20560511", "20560606", "20560623", "20561225", "20561226", "20570101", "20570420", "20570423", "20570501", "20570531", "20570606", "20570622", "20571224", "20571225", "20571226", "20571231", "20580101", "20580412", "20580415", "20580501", "20580523", "20580606", "20580621", "20581224", "20581225", "20581226", "20581231", "20590101", "20590106", "20590328", "20590331", "20590501", "20590508", "20590606", "20590620", "20591224", "20591225", "20591226", "20591231", "20600101", "20600106", "20600416", "20600419", "20600527", "20600625", "20601224", "20601231", "20610106", "20610408", "20610411", "20610519", "20610606", "20610624", "20611226" ], + "MonthsToExclude": [] + }, + "SYD": { + "InheritedCalendar": [], + "Name": "SYD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880125", "19880401", "19880404", "19880425", "19880613", "19881226", "19881227", "19890102", "19890126", "19890130", "19890313", "19890324", "19890327", "19890328", "19890425", "19890612", "19890807", "19890928", "19891002", "19891107", "19891225", "19891226", "19900101", "19900129", "19900413", "19900416", "19900425", "19900611", "19901225", "19901226", "19910101", "19910128", "19910329", "19910401", "19910425", "19910610", "19911225", "19911226", "19920101", "19920127", "19920417", "19920420", "19920608", "19921225", "19921228", "19930101", "19930126", "19930409", "19930412", "19930426", "19930614", "19930802", "19931004", "19931227", "19931228", "19940401", "19940404", "19940425", "19940613", "19941227", "19950130", "19950414", "19950417", "19950425", "19950612", "19951225", "19951226", "19960101", "19960126", "19960311", "19960405", "19960408", "19960425", "19960610", "19960805", "19961007", "19961225", "19970101", "19970127", "19970328", "19970331", "19970425", "19970609", "19971225", "19971226", "19980101", "19980126", "19980410", "19980413", "19980608", "19981225", "19981228", "19990101", "19990125", "19990402", "19990405", "19990614", "19991227", "19991228", "20000131", "20000421", "20000424", "20000425", "20000612", "20001225", "20001226", "20010101", "20010126", "20010413", "20010416", "20010425", "20010611", "20011225", "20011226", "20020101", "20020128", "20020329", "20020401", "20020425", "20020610", "20020805", "20021007", "20021225", "20021226", "20030101", "20030127", "20030418", "20030421", "20030425", "20030609", "20030804", "20031006", "20031225", "20031226", "20040101", "20040126", "20040409", "20040412", "20040426", "20040614", "20040802", "20041004", "20041227", "20041228", "20050103", "20050126", "20050325", "20050328", "20050425", "20050613", "20050801", "20051003", "20051226", "20051227", "20060102", "20060126", "20060414", "20060417", "20060425", "20060612", "20060807", "20061002", "20061225", "20061226", "20070101", "20070126", "20070406", "20070409", "20070425", "20070611", "20070806", "20070907", "20071001", "20071225", "20071226", "20080101", "20080128", "20080321", "20080324", "20080425", "20080609", "20080804", "20081006", "20081225", "20081226", "20090101", "20090126", "20090410", "20090413", "20090608", "20090803", "20091005", "20091225", "20091228", "20100101", "20100126", "20100402", "20100405", "20100426", "20100614", "20100802", "20101004", "20101227", "20101228", "20110103", "20110126", "20110422", "20110425", "20110426", "20110613", "20110801", "20111003", "20111226", "20111227", "20120102", "20120126", "20120406", "20120409", "20120425", "20120611", "20120806", "20121001", "20121225", "20121226", "20130101", "20130128", "20130329", "20130401", "20130425", "20130610", "20130805", "20131007", "20131225", "20131226", "20140101", "20140127", "20140418", "20140421", "20140425", "20140609", "20140804", "20141006", "20141225", "20141226", "20150101", "20150126", "20150403", "20150406", "20150608", "20150803", "20151005", "20151225", "20151228", "20160101", "20160126", "20160325", "20160328", "20160425", "20160613", "20160801", "20161003", "20161226", "20161227", "20170102", "20170126", "20170414", "20170417", "20170425", "20170612", "20170807", "20171002", "20171225", "20171226", "20180101", "20180126", "20180330", "20180402", "20180425", "20180611", "20180806", "20181001", "20181225", "20181226", "20190101", "20190128", "20190419", "20190422", "20190425", "20190610", "20190805", "20191007", "20191225", "20191226", "20200101", "20200127", "20200410", "20200413", "20200608", "20200803", "20201005", "20201225", "20201228", "20210101", "20210126", "20210402", "20210405", "20210426", "20210614", "20210802", "20211004", "20211227", "20211228", "20220103", "20220126", "20220415", "20220418", "20220425", "20220613", "20220801", "20221003", "20221226", "20221227", "20230102", "20230126", "20230407", "20230410", "20230425", "20230612", "20230807", "20231002", "20231225", "20231226", "20240101", "20240126", "20240329", "20240401", "20240425", "20240610", "20240805", "20241007", "20241225", "20241226", "20250101", "20250127", "20250418", "20250421", "20250425", "20250609", "20250804", "20251006", "20251225", "20251226", "20260101", "20260126", "20260403", "20260406", "20260608", "20260803", "20261005", "20261225", "20261228", "20270101", "20270126", "20270326", "20270329", "20270426", "20270614", "20270802", "20271004", "20271227", "20271228", "20280103", "20280126", "20280414", "20280417", "20280425", "20280612", "20280807", "20281002", "20281225", "20281226", "20290101", "20290126", "20290330", "20290402", "20290425", "20290611", "20290806", "20291001", "20291225", "20291226", "20300101", "20300128", "20300419", "20300422", "20300425", "20300610", "20300805", "20301007", "20301225", "20301226", "20310101", "20310127", "20310411", "20310414", "20310425", "20310609", "20310804", "20311006", "20311225", "20311226", "20320101", "20320126", "20320326", "20320329", "20320426", "20320614", "20320802", "20321004", "20321227", "20321228", "20330103", "20330126", "20330415", "20330418", "20330425", "20330613", "20330801", "20331003", "20331226", "20331227", "20340102", "20340126", "20340407", "20340410", "20340425", "20340612", "20340807", "20341002", "20341225", "20341226", "20350101", "20350126", "20350323", "20350326", "20350425", "20350611", "20350806", "20351001", "20351225", "20351226", "20360101", "20360128", "20360411", "20360414", "20360425", "20360609", "20360804", "20361006", "20361225", "20361226", "20370101", "20370126", "20370403", "20370406", "20370608", "20370803", "20371005", "20371225", "20371228", "20380101", "20380126", "20380423", "20380426", "20380427", "20380614", "20380802", "20381004", "20381227", "20381228", "20390103", "20390126", "20390408", "20390411", "20390425", "20390613", "20390801", "20391003", "20391226", "20391227", "20400102", "20400126", "20400330", "20400402", "20400425", "20400611", "20400806", "20401001", "20401225", "20401226", "20410101", "20410128", "20410419", "20410422", "20410425", "20410610", "20410805", "20411007", "20411225", "20411226", "20420101", "20420127", "20420404", "20420407", "20420425", "20420609", "20420804", "20421006", "20421225", "20421226", "20430101", "20430126", "20430327", "20430330", "20430608", "20430803", "20431005", "20431225", "20431228", "20440101", "20440126", "20440415", "20440418", "20440425", "20440613", "20440801", "20441003", "20441226", "20441227", "20450102", "20450126", "20450407", "20450410", "20450425", "20450612", "20450807", "20451002", "20451225", "20451226", "20460101", "20460126", "20460323", "20460326", "20460425", "20460611", "20460806", "20461001", "20461225", "20461226", "20470101", "20470128", "20470412", "20470415", "20470425", "20470610", "20470805", "20471007", "20471225", "20471226", "20480101", "20480127", "20480403", "20480406", "20480608", "20480803", "20481005", "20481225", "20481228", "20490101", "20490126", "20490416", "20490419", "20490426", "20490614", "20490802", "20491004", "20491227", "20491228", "20500103", "20500126", "20500408", "20500411", "20500425", "20500613", "20500801", "20501003", "20501226", "20501227", "20510102", "20510126", "20510331", "20510403", "20510425", "20510612", "20510807", "20511002", "20511225", "20511226", "20520101", "20520126", "20520419", "20520422", "20520425", "20520610", "20520805", "20521007", "20521225", "20521226", "20530101", "20530127", "20530404", "20530407", "20530425", "20530609", "20530804", "20531006", "20531225", "20531226", "20540101", "20540126", "20540327", "20540330", "20540608", "20540803", "20541005", "20541225", "20541228", "20550101", "20550126", "20550416", "20550419", "20550426", "20550614", "20550802", "20551004", "20551227", "20551228", "20560103", "20560126", "20560331", "20560403", "20560425", "20560612", "20560807", "20561002", "20561225", "20561226", "20570101", "20570126", "20570420", "20570423", "20570425", "20570611", "20570806", "20571001", "20571225", "20571226", "20580101", "20580128", "20580412", "20580415", "20580425", "20580610", "20580805", "20581007", "20581225", "20581226", "20590101", "20590127", "20590328", "20590331", "20590425", "20590609", "20590804", "20591006", "20591225", "20591226", "20600101", "20600126", "20600416", "20600419", "20600426", "20600614", "20600802", "20601004", "20601227", "20601228", "20610103", "20610126", "20610408", "20610411", "20610425", "20610613", "20610801", "20611003", "20611226", "20611227" ], + "MonthsToExclude": [] + }, + "TAI": { + "InheritedCalendar": [], + "Name": "TAI", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19980101", "19980102", "19980103", "19980127", "19980128", "19980129", "19980130", "19980404", "19980405", "19980406", "19980501", "19980530", "19980701", "19980928", "19981005", "19981010", "19981025", "19981031", "19981112", "19990101", "19990102", "19990103", "19990215", "19990216", "19990217", "19990329", "19990404", "19990405", "19990501", "19990618", "19990701", "19990924", "19990928", "19991010", "19991025", "19991031", "19991112", "19991225", "20000101", "20000102", "20000103", "20000204", "20000205", "20000206", "20000329", "20000404", "20000405", "20000501", "20000701", "20000730", "20000912", "20000928", "20001010", "20001025", "20001031", "20001112", "20001225", "20030131", "20030203", "20030204", "20030205", "20030228", "20030501", "20030604", "20030911", "20031010", "20040101", "20040121", "20040122", "20040123", "20040126", "20040622", "20040928", "20050208", "20050209", "20050210", "20050211", "20050228", "20050405", "20050502", "20050805", "20050831", "20051010", "20060130", "20060131", "20060201", "20060202", "20060228", "20060405", "20060501", "20060531", "20061006", "20061009", "20061010", "20070101", "20070219", "20070220", "20070221", "20070222", "20070223", "20070228", "20070405", "20070406", "20070501", "20070618", "20070619", "20070918", "20070924", "20070925", "20071010", "20080101", "20080206", "20080207", "20080208", "20080211", "20080228", "20080404", "20080501", "20080728", "20080929", "20081010", "20090101", "20090102", "20090126", "20090127", "20090128", "20090129", "20090130", "20090501", "20090528", "20090529", "20090807", "20100101", "20100215", "20100216", "20100217", "20100218", "20100219", "20100405", "20100616", "20100922", "20110202", "20110203", "20110204", "20110207", "20110228", "20110404", "20110405", "20110502", "20110606", "20110912", "20111010", "20120123", "20120124", "20120125", "20120126", "20120127", "20120227", "20120228", "20120404", "20120501", "20121010", "20121231", "20130101", "20130211", "20130212", "20130213", "20130214", "20130215", "20130228", "20130404", "20130501", "20130612", "20130919", "20130920", "20131010", "20140101", "20140130", "20140131", "20140203", "20140204", "20140228", "20140404", "20140501", "20140602", "20140908", "20141010", "20150101", "20150102", "20150218", "20150219", "20150220", "20150223", "20150501", "20160101", "20160208", "20160209", "20160210", "20160211", "20160212", "20160404", "20160502", "20160609", "20160610", "20160915", "20160916", "20161010", "20170127", "20170130", "20170131", "20170201", "20170227", "20170228", "20170404", "20170501", "20170529", "20170530", "20171004", "20171010", "20180101", "20180215", "20180216", "20180219", "20180220", "20180228", "20180404", "20180405", "20180501", "20180618", "20180924", "20181010", "20181231", "20190101", "20190204", "20190205", "20190206", "20190207", "20190228", "20190404", "20190405", "20190501", "20190607", "20190913", "20191010", "20200101", "20200124", "20200127", "20200128", "20200129", "20200228", "20200501", "20200625", "20200626", "20201001", "20201002", "20210101", "20210211", "20210212", "20210215", "20210216", "20210614", "20210920", "20210921", "20220131", "20220201", "20220202", "20220203", "20220228", "20220404", "20220405", "20220502", "20220603", "20221010", "20230123", "20230124", "20230125", "20230126", "20230127", "20230227", "20230228", "20230404", "20230405", "20230501", "20230622", "20230623", "20230929", "20231010", "20240101", "20240209", "20240212", "20240213", "20240214", "20240228", "20240404", "20240501", "20240610", "20240916", "20240917", "20241010", "20250101", "20250127", "20250128", "20250129", "20250130", "20250131", "20250228", "20250404", "20250501", "20251006", "20251010", "20260101", "20260102", "20260216", "20260217", "20260218", "20260219", "20260501", "20260619", "20260925", "20270101", "20270205", "20270208", "20270209", "20270210", "20270405", "20270609", "20270915", "20280124", "20280125", "20280126", "20280127", "20280128", "20280228", "20280404", "20280501", "20281002", "20281003", "20281010", "20290101", "20290212", "20290213", "20290214", "20290215", "20290228", "20290404", "20290501", "20291010", "20291231", "20300101", "20300204", "20300205", "20300206", "20300207", "20300208", "20300228", "20300404", "20300405", "20300501", "20300605", "20300912", "20300913", "20301010", "20310101", "20310122", "20310123", "20310124", "20310127", "20310228", "20310404", "20310501", "20310623", "20310624", "20311001", "20311010", "20320101", "20320102", "20320209", "20320210", "20320211", "20320212", "20320213", "20330131", "20330201", "20330202", "20330203", "20330204", "20330228", "20330404", "20330502", "20330601", "20330908", "20330909", "20331010", "20340220", "20340221", "20340222", "20340223", "20340224", "20340227", "20340228", "20340404", "20340405", "20340501", "20340619", "20340620", "20340927", "20341010", "20350101", "20350207", "20350208", "20350209", "20350212", "20350228", "20350404", "20350405", "20350501", "20351010", "20351231", "20360101", "20360128", "20360129", "20360130", "20360131", "20360201", "20360228", "20360404", "20360501", "20360530", "20361010", "20370101", "20370102", "20370216", "20370217", "20370218", "20370219", "20370220", "20370501", "20370618", "20370619", "20370924", "20370925", "20380101", "20380203", "20380204", "20380205", "20380208", "20380405", "20380607", "20380913", "20390124", "20390125", "20390126", "20390127", "20390128", "20390228", "20390404", "20390405", "20390502", "20390527", "20391010", "20400213", "20400214", "20400215", "20400216", "20400217", "20400227", "20400228", "20400404", "20400501", "20400614", "20400615", "20400920", "20400921", "20401010", "20401231", "20410101", "20410131", "20410201", "20410204", "20410205", "20410228", "20410404", "20410501", "20410603", "20410909", "20410910", "20411010", "20420101", "20420120", "20420121", "20420122", "20420123", "20420124", "20420228", "20420404", "20420501", "20421010", "20430101", "20430102", "20430209", "20430210", "20430211", "20430212", "20430501", "20430611", "20430612", "20430917", "20430918", "20440101", "20440129", "20440201", "20440202", "20440203", "20440404", "20440502", "20440530", "20440531", "20441005", "20441010", "20450216", "20450217", "20450220", "20450221", "20450227", "20450228", "20450404", "20450501", "20450619", "20450925", "20451010", "20460101", "20460205", "20460206", "20460207", "20460208", "20460228", "20460404", "20460501", "20460608", "20461010", "20461231", "20470101", "20470125", "20470128", "20470129", "20470130", "20470228", "20470404", "20470405", "20470501", "20470529", "20471004", "20471010", "20480101", "20480213", "20480214", "20480217", "20480218", "20480228", "20480501", "20480615", "20480921", "20480922", "20490101", "20490201", "20490202", "20490203", "20490204", "20490604", "20500124", "20500125", "20500126", "20500127", "20500128", "20500228", "20500404", "20500502", "20500623", "20500624", "20500930", "20501010", "20510210", "20510213", "20510214", "20510215", "20510227", "20510228", "20510404", "20510405", "20510501", "20510612", "20510613", "20510918", "20510919", "20511010", "20520101", "20520131", "20520201", "20520202", "20520205", "20520228", "20520404", "20520501", "20521010", "20530101", "20530217", "20530218", "20530219", "20530220", "20530221", "20530228", "20530404", "20530501", "20530620", "20530926", "20531010", "20540101", "20540102", "20540209", "20540210", "20540211", "20540212", "20540213", "20540501", "20540610", "20540916", "20550101", "20550127", "20550128", "20550129", "20550201", "20550405", "20551004", "20551005", "20560214", "20560215", "20560216", "20560217", "20560228", "20560404", "20560501", "20561010", "20570101", "20570205", "20570206", "20570207", "20570208", "20570209", "20570228", "20570404", "20570501", "20570606", "20570913", "20570914", "20571010", "20571231", "20580101", "20580123", "20580124", "20580125", "20580128", "20580228", "20580404", "20580501", "20580624", "20580625", "20581002", "20581010", "20590101", "20590210", "20590211", "20590212", "20590213", "20590214", "20590228", "20590404", "20590501", "20591010", "20600101", "20600102", "20600202", "20600203", "20600204", "20600205", "20600206", "20600603", "20600604", "20600909", "20600910", "20610120", "20610121", "20610124", "20610125", "20610228", "20610404", "20610502", "20610622", "20610928", "20611010" ], + "MonthsToExclude": [] + }, + "TAL": { + "InheritedCalendar": [], + "Name": "TAL", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19801225", "19810101", "19811225", "19820101", "19841225", "19850101", "19851225", "19860101", "19861225", "19870101", "19871225", "19880101", "19891225", "19900101", "19901225", "19910101", "19911225", "19920101", "19921225", "19930101", "19951225", "19960101", "19961225", "19970101", "19971225", "19980101", "19981225", "19990101", "20001225", "20010101", "20011225", "20020101", "20021225", "20030101", "20030224", "20030418", "20030501", "20030623", "20030624", "20030820", "20031225", "20031226", "20040101", "20040224", "20040409", "20040623", "20040624", "20040820", "20050224", "20050325", "20050623", "20050624", "20051226", "20060224", "20060414", "20060501", "20060623", "20061225", "20061226", "20070101", "20070406", "20070501", "20070820", "20071224", "20071225", "20071226", "20080101", "20080321", "20080501", "20080623", "20080624", "20080820", "20081224", "20081225", "20081226", "20090101", "20090224", "20090410", "20090501", "20090623", "20090624", "20090820", "20091224", "20091225", "20100101", "20100224", "20100402", "20100623", "20100624", "20100820", "20101224", "20110224", "20110422", "20110623", "20110624", "20111226", "20120224", "20120406", "20120501", "20120820", "20121224", "20121225", "20121226", "20130101", "20130329", "20130501", "20130624", "20130820", "20131224", "20131225", "20131226", "20140101", "20140224", "20140418", "20140501", "20140623", "20140624", "20140820", "20141224", "20141225", "20141226", "20150101", "20150224", "20150403", "20150501", "20150623", "20150624", "20150820", "20151224", "20151225", "20160101", "20160224", "20160325", "20160623", "20160624", "20161226", "20170224", "20170414", "20170501", "20170623", "20171225", "20171226", "20180101", "20180330", "20180501", "20180820", "20181224", "20181225", "20181226", "20190101", "20190419", "20190501", "20190624", "20190820", "20191224", "20191225", "20191226", "20200101", "20200224", "20200410", "20200501", "20200623", "20200624", "20200820", "20201224", "20201225", "20210101", "20210224", "20210402", "20210623", "20210624", "20210820", "20211224", "20220224", "20220415", "20220623", "20220624", "20221226", "20230224", "20230407", "20230501", "20230623", "20231225", "20231226", "20240101", "20240329", "20240501", "20240624", "20240820", "20241224", "20241225", "20241226", "20250101", "20250224", "20250418", "20250501", "20250623", "20250624", "20250820", "20251224", "20251225", "20251226", "20260101", "20260224", "20260403", "20260501", "20260623", "20260624", "20260820", "20261224", "20261225", "20270101", "20270224", "20270326", "20270623", "20270624", "20270820", "20271224", "20280224", "20280414", "20280501", "20280623", "20281225", "20281226", "20290101", "20290330", "20290501", "20290820", "20291224", "20291225", "20291226", "20300101", "20300419", "20300501", "20300624", "20300820", "20301224", "20301225", "20301226", "20310101", "20310224", "20310411", "20310501", "20310623", "20310624", "20310820", "20311224", "20311225", "20311226", "20320101", "20320224", "20320326", "20320623", "20320624", "20320820", "20321224", "20330224", "20330415", "20330623", "20330624", "20331226", "20340224", "20340407", "20340501", "20340623", "20341225", "20341226", "20350101", "20350323", "20350501", "20350820", "20351224", "20351225", "20351226", "20360101", "20360411", "20360501", "20360623", "20360624", "20360820", "20361224", "20361225", "20361226", "20370101", "20370224", "20370403", "20370501", "20370623", "20370624", "20370820", "20371224", "20371225", "20380101", "20380224", "20380423", "20380623", "20380624", "20380820", "20381224", "20390224", "20390408", "20390623", "20390624", "20391226", "20400224", "20400330", "20400501", "20400820", "20401224", "20401225", "20401226", "20410101", "20410419", "20410501", "20410624", "20410820", "20411224", "20411225", "20411226", "20420101", "20420224", "20420404", "20420501", "20420623", "20420624", "20420820", "20421224", "20421225", "20421226", "20430101", "20430224", "20430327", "20430501", "20430623", "20430624", "20430820", "20431224", "20431225", "20440101", "20440224", "20440415", "20440623", "20440624", "20441226", "20450224", "20450407", "20450501", "20450623", "20451225", "20451226", "20460101", "20460323", "20460501", "20460820", "20461224", "20461225", "20461226", "20470101", "20470412", "20470501", "20470624", "20470820", "20471224", "20471225", "20471226", "20480101", "20480224", "20480403", "20480501", "20480623", "20480624", "20480820", "20481224", "20481225", "20490101", "20490224", "20490416", "20490623", "20490624", "20490820", "20491224", "20500224", "20500408", "20500623", "20500624", "20501226", "20510224", "20510331", "20510501", "20510623", "20511225", "20511226", "20520101", "20520419", "20520501", "20520624", "20520820", "20521224", "20521225", "20521226", "20530101", "20530224", "20530404", "20530501", "20530623", "20530624", "20530820", "20531224", "20531225", "20531226", "20540101", "20540224", "20540327", "20540501", "20540623", "20540624", "20540820", "20541224", "20541225", "20550101", "20550224", "20550416", "20550623", "20550624", "20550820", "20551224", "20560224", "20560331", "20560501", "20560623", "20561225", "20561226", "20570101", "20570420", "20570501", "20570820", "20571224", "20571225", "20571226", "20580101", "20580412", "20580501", "20580624", "20580820", "20581224", "20581225", "20581226", "20590101", "20590224", "20590328", "20590501", "20590623", "20590624", "20590820", "20591224", "20591225", "20591226", "20600101", "20600224", "20600416", "20600623", "20600624", "20600820", "20601224", "20610224", "20610408", "20610623", "20610624", "20611226", "20621225", "20630101", "20631225", "20640101", "20641225", "20650101", "20651225", "20660101", "20681225", "20690101", "20691225", "20700101", "20701225" ], + "MonthsToExclude": [] + }, + "TAR": { + "InheritedCalendar": [], + "Name": "TAR", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19801225", "19810101", "19811225", "19820101", "19841225", "19850101", "19851225", "19860101", "19861225", "19870101", "19871225", "19880101", "19891225", "19900101", "19901225", "19910101", "19911225", "19920101", "19921225", "19930101", "19951225", "19960101", "19961225", "19970101", "19971225", "19980101", "19981225", "19990101", "19991231", "20000101", "20000421", "20000424", "20000501", "20001225", "20001226", "20010101", "20010413", "20010416", "20010501", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020501", "20021225", "20021226", "20030101", "20030418", "20030421", "20030501", "20031225", "20031226", "20040101", "20040409", "20040412", "20040501", "20041225", "20041226", "20050101", "20050325", "20050328", "20050501", "20051225", "20051226", "20060101", "20060414", "20060417", "20060501", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20071225", "20071226", "20080101", "20080321", "20080324", "20080501", "20081225", "20081226", "20090101", "20090410", "20090413", "20090501", "20091225", "20091226", "20100101", "20100402", "20100405", "20100501", "20101225", "20101226", "20110101", "20110422", "20110425", "20110501", "20111225", "20111226", "20120101", "20120406", "20120409", "20120501", "20121225", "20121226", "20130101", "20130329", "20130401", "20130501", "20131225", "20131226", "20140101", "20140418", "20140421", "20140501", "20141225", "20141226", "20150101", "20150403", "20150406", "20150501", "20151225", "20151226", "20160101", "20160325", "20160328", "20160501", "20161225", "20161226", "20170101", "20170414", "20170417", "20170501", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20181225", "20181226", "20190101", "20190419", "20190422", "20190501", "20191225", "20191226", "20200101", "20200410", "20200413", "20200501", "20201225", "20201226", "20210101", "20210402", "20210405", "20210501", "20211225", "20211226", "20220101", "20220415", "20220418", "20220501", "20221225", "20221226", "20230101", "20230407", "20230410", "20230501", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20241225", "20241226", "20250101", "20250418", "20250421", "20250501", "20251225", "20251226", "20260101", "20260403", "20260406", "20260501", "20261225", "20261226", "20270101", "20270326", "20270329", "20270501", "20271225", "20271226", "20280414", "20280417", "20280501", "20281225", "20281226", "20290101", "20290330", "20290402", "20290501", "20291225", "20291226", "20300101", "20300419", "20300422", "20300501", "20301225", "20301226", "20310101", "20310411", "20310414", "20310501", "20311225", "20311226", "20320101", "20320326", "20320329", "20330415", "20330418", "20331226", "20340407", "20340410", "20340501", "20341225", "20341226", "20350101", "20350323", "20350326", "20350501", "20351225", "20351226", "20360101", "20360411", "20360414", "20360501", "20361225", "20361226", "20370101", "20371225", "20380101", "20401225", "20410101", "20411225", "20420101", "20421225", "20430101", "20431225", "20440101", "20451225", "20460101", "20461225", "20470101", "20471225", "20480101", "20481225", "20490101", "20511225", "20520101", "20521225", "20530101", "20531225", "20540101", "20541225", "20550101", "20561225", "20570101", "20571225", "20580101", "20581225", "20590101", "20591225", "20600101", "20621225", "20630101", "20631225", "20640101", "20641225", "20650101", "20651225", "20660101", "20681225", "20690101", "20691225", "20700101", "20701225" ], + "MonthsToExclude": [] + }, + "TLV": { + "InheritedCalendar": [], + "Name": "TLV", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20060503", "20060803", "20070304", "20070403", "20070409", "20070424", "20070523", "20070724", "20070913", "20070914", "20070921", "20070927", "20071004", "20080321", "20080420", "20080508", "20080609", "20080810", "20080930", "20081001", "20081008", "20081009", "20081014", "20081021", "20090210", "20090310", "20090409", "20090415", "20090429", "20090529", "20090730", "20090920", "20090927", "20090928", "20100228", "20100330", "20100405", "20100420", "20100519", "20100720", "20100909", "20100910", "20100917", "20100923", "20100930", "20110320", "20110419", "20110425", "20110510", "20110608", "20110809", "20110929", "20110930", "20111007", "20111013", "20111020", "20120308", "20120413", "20120426", "20120527", "20120729", "20120917", "20120918", "20120925", "20120926", "20121001", "20121008", "20130224", "20130326", "20130401", "20130416", "20130515", "20130716", "20130905", "20130906", "20130913", "20130919", "20130926", "20140316", "20140415", "20140421", "20140506", "20140604", "20140805", "20140925", "20140926", "20141003", "20141009", "20141016", "20150305", "20150410", "20150423", "20150524", "20150726", "20150914", "20150915", "20150922", "20150923", "20150928", "20151005", "20160324", "20160429", "20160512", "20160612", "20160814", "20161003", "20161004", "20161011", "20161012", "20161017", "20161024", "20170312", "20170411", "20170417", "20170502", "20170531", "20170801", "20170921", "20170922", "20170929", "20171005", "20171012", "20180301", "20180406", "20180419", "20180520", "20180722", "20180910", "20180911", "20180918", "20180919", "20180924", "20181001", "20190321", "20190426", "20190509", "20190609", "20190811", "20190930", "20191001", "20191008", "20191009", "20191014", "20191021", "20200310", "20200409", "20200415", "20200429", "20200529", "20200730", "20200920", "20200927", "20200928", "20210226", "20210328", "20210415", "20210517", "20210718", "20210907", "20210908", "20210915", "20210916", "20210921", "20210928", "20220317", "20220422", "20220505", "20220605", "20220807", "20220926", "20220927", "20221004", "20221005", "20221010", "20221017", "20230307", "20230406", "20230412", "20230426", "20230526", "20230727", "20230917", "20230924", "20230925", "20240324", "20240423", "20240429", "20240514", "20240612", "20240813", "20241003", "20241004", "20241011", "20241017", "20241024", "20250314", "20250413", "20250501", "20250602", "20250803", "20250923", "20250924", "20251001", "20251002", "20251007", "20251014", "20260303", "20260402", "20260408", "20260422", "20260522", "20260723", "20260913", "20260920", "20260921", "20270323", "20270422", "20270428", "20270512", "20270611", "20270812", "20271003", "20271010", "20271011", "20280312", "20280411", "20280417", "20280502", "20280531", "20280801", "20280921", "20280922", "20280929", "20281005", "20281012", "20290301", "20290406", "20290419", "20290520", "20290722", "20290910", "20290911", "20290918", "20290919", "20290924", "20291001", "20300319", "20300418", "20300424", "20300508", "20300607", "20300808", "20300929", "20301006", "20301007", "20310309", "20310408", "20310414", "20310429", "20310528", "20310729", "20310918", "20310919", "20310926", "20311002", "20311009", "20320226", "20320402", "20320415", "20320516", "20320718", "20320906", "20320907", "20320914", "20320915", "20320920", "20320927", "20330315", "20330414", "20330420", "20330504", "20330603", "20330804", "20330925", "20331002", "20331003", "20340305", "20340404", "20340410", "20340425", "20340524", "20340725", "20340914", "20340915", "20340922", "20340928", "20341005", "20350325", "20350424", "20350430", "20350515", "20350613", "20350814", "20351004", "20351005", "20351012", "20351018", "20351025", "20360313", "20360418", "20360501", "20360601", "20360803", "20360922", "20360923", "20360930", "20361001", "20361006", "20361013", "20370301", "20370331", "20370406", "20370421", "20370520", "20370721", "20370910", "20370911", "20370918", "20370924", "20371001", "20380321", "20380420", "20380426", "20380511", "20380609", "20380810", "20380930", "20381001", "20381008", "20381014", "20381021", "20390310", "20390415", "20390428", "20390529", "20390731", "20390919", "20390920", "20390927", "20390928", "20391003", "20391010", "20400228", "20400329", "20400404", "20400418", "20400518", "20400719", "20400909", "20400916", "20400917", "20410317", "20410416", "20410422", "20410507", "20410605", "20410806", "20410926", "20410927", "20411004", "20411010", "20411017", "20420306", "20420411", "20420424", "20420525", "20420727", "20420915", "20420916", "20420923", "20420924", "20420929", "20421006", "20430326", "20430501", "20430514", "20430614", "20430816", "20431005", "20431006", "20431013", "20431014", "20431019", "20431026", "20440313", "20440412", "20440418", "20440503", "20440601", "20440802", "20440922", "20440923", "20440930", "20441006", "20441013", "20450303", "20450402", "20450420", "20450522", "20450723", "20450912", "20450913", "20450920", "20450921", "20450926", "20451003", "20460322", "20460427", "20460510", "20460610", "20460812", "20461001", "20461002", "20461009", "20461010", "20461015", "20461022", "20470312", "20470411", "20470417", "20470501", "20470531", "20470801", "20470922", "20470929", "20470930", "20480228", "20480329", "20480416", "20480518", "20480719", "20480908", "20480909", "20480916", "20480917", "20480922", "20480929", "20490318", "20490423", "20490506", "20490606", "20490808", "20490927", "20490928", "20491005", "20491006", "20491011", "20491018", "20500308", "20500407", "20500413", "20500427", "20500527", "20500728", "20500918", "20500925", "20500926", "20510226", "20510328", "20510403", "20510418", "20510517", "20510718", "20510907", "20510908", "20510915", "20510921", "20510928", "20520315", "20520414", "20520502", "20520603", "20520804", "20520924", "20520925", "20521002", "20521003", "20521008", "20521015", "20530304", "20530403", "20530409", "20530423", "20530523", "20530724", "20530914", "20530921", "20530922", "20540324", "20540423", "20540429", "20540513", "20540612", "20540813", "20541004", "20541011", "20541012", "20550314", "20550413", "20550419", "20550504", "20550602", "20550803", "20550923", "20550924", "20551001", "20551007", "20551014", "20560302", "20560407", "20560420", "20560521", "20560723", "20560911", "20560912", "20560919", "20560920", "20560925", "20561002", "20570320", "20570419", "20570425", "20570509", "20570608", "20570809", "20570930", "20571007", "20571008", "20580310", "20580409", "20580415", "20580430", "20580529", "20580730", "20580919", "20580920", "20580927", "20581003", "20581010", "20590227", "20590404", "20590417", "20590518", "20590720", "20590908", "20590909", "20590916", "20590917", "20590922", "20590929", "20600316", "20600415", "20600421", "20600505", "20600604", "20600805", "20600926", "20601003", "20601004", "20610306", "20610405", "20610411", "20610426", "20610525", "20610726", "20610915", "20610916", "20610923", "20610929", "20611006" ], + "MonthsToExclude": [] + }, + "TOK": { + "InheritedCalendar": [], + "Name": "TOK", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19801231", "19811231", "19821231", "19841231", "19851231", "19861231", "19871231", "19880101", "19880115", "19880211", "19880429", "19880503", "19880504", "19880505", "19880915", "19880923", "19881010", "19881103", "19881123", "19890102", "19890103", "19890116", "19890320", "19890321", "19890503", "19890504", "19890505", "19890915", "19891010", "19891103", "19891123", "19900101", "19900102", "19900103", "19900115", "19900212", "19900321", "19900430", "19900503", "19901010", "19901123", "19901231", "19910101", "19910102", "19910103", "19910115", "19910211", "19910321", "19910429", "19910503", "19910506", "19910916", "19910923", "19911010", "19911104", "19911223", "19911231", "19920101", "19920102", "19920103", "19920115", "19920211", "19920320", "19920429", "19920504", "19920505", "19920915", "19920923", "19921103", "19921123", "19921223", "19921231", "19930101", "19930115", "19930211", "19930429", "19930503", "19930504", "19930505", "19930915", "19930923", "19931011", "19931103", "19931123", "19931231", "19940103", "19940211", "19940321", "19940429", "19940503", "19940504", "19940505", "19940915", "19940923", "19941010", "19941103", "19941123", "19941223", "19950102", "19950103", "19950116", "19950321", "19950503", "19950504", "19950505", "19950915", "19951010", "19951103", "19951123", "19960101", "19960102", "19960103", "19960115", "19960212", "19960320", "19960429", "19960503", "19960506", "19960916", "19960923", "19961010", "19961104", "19961223", "19961231", "19970101", "19970102", "19970103", "19970115", "19970211", "19970320", "19970429", "19970505", "19970721", "19970915", "19970923", "19971010", "19971103", "19971124", "19971223", "19971231", "19980101", "19980102", "19980115", "19980211", "19980429", "19980504", "19980505", "19980720", "19980915", "19980923", "19981103", "19981123", "19981223", "19981231", "19990101", "19990115", "19990211", "19990322", "19990429", "19990503", "19990504", "19990505", "19990720", "19990915", "19990923", "19991011", "19991103", "19991123", "19991223", "19991231", "20000103", "20000110", "20000211", "20000320", "20000503", "20000504", "20000505", "20000720", "20000915", "20000923", "20001009", "20001103", "20001123", "20001223", "20010101", "20010102", "20010103", "20010108", "20010211", "20010212", "20010320", "20010429", "20010430", "20010503", "20010504", "20010505", "20010720", "20010915", "20010923", "20010924", "20011008", "20011103", "20011123", "20011223", "20011224", "20011231", "20020101", "20020102", "20020103", "20020114", "20020211", "20020321", "20020429", "20020503", "20020504", "20020505", "20020506", "20020720", "20020915", "20020916", "20020923", "20021014", "20021103", "20021104", "20021123", "20021223", "20021231", "20030101", "20030102", "20030103", "20030113", "20030211", "20030321", "20030429", "20030503", "20030504", "20030505", "20030721", "20030915", "20030923", "20031013", "20031103", "20031123", "20031124", "20031223", "20031231", "20040101", "20040102", "20040103", "20040112", "20040211", "20040429", "20040503", "20040504", "20040505", "20040719", "20040920", "20040923", "20041011", "20041103", "20041123", "20041223", "20041231", "20050101", "20050102", "20050103", "20050110", "20050211", "20050321", "20050429", "20050503", "20050504", "20050505", "20050718", "20050919", "20050923", "20051010", "20051103", "20051123", "20051223", "20060101", "20060102", "20060103", "20060109", "20060211", "20060321", "20060429", "20060503", "20060504", "20060505", "20060717", "20060918", "20060923", "20061009", "20061103", "20061123", "20061223", "20070101", "20070102", "20070103", "20070108", "20070211", "20070212", "20070321", "20070429", "20070430", "20070503", "20070504", "20070505", "20070716", "20070917", "20070923", "20070924", "20071008", "20071103", "20071123", "20071223", "20071224", "20071231", "20080101", "20080102", "20080103", "20080114", "20080211", "20080320", "20080429", "20080505", "20080506", "20080721", "20080915", "20080923", "20081013", "20081103", "20081124", "20081223", "20081231", "20090101", "20090102", "20090112", "20090211", "20090320", "20090429", "20090504", "20090505", "20090506", "20090720", "20090921", "20090922", "20090923", "20091012", "20091103", "20091123", "20091223", "20091231", "20100101", "20100111", "20100211", "20100322", "20100429", "20100503", "20100504", "20100505", "20100719", "20100920", "20100923", "20101011", "20101103", "20101123", "20101223", "20101231", "20110103", "20110110", "20110211", "20110321", "20110429", "20110503", "20110504", "20110505", "20110718", "20110919", "20110923", "20111010", "20111103", "20111123", "20111223", "20120102", "20120103", "20120109", "20120320", "20120430", "20120503", "20120504", "20120716", "20120917", "20121008", "20121123", "20121224", "20121231", "20130101", "20130102", "20130103", "20130114", "20130211", "20130320", "20130429", "20130503", "20130506", "20130715", "20130916", "20130923", "20131014", "20131104", "20131223", "20131231", "20140101", "20140102", "20140103", "20140113", "20140211", "20140321", "20140429", "20140505", "20140506", "20140721", "20140915", "20140923", "20141013", "20141103", "20141124", "20141223", "20141231", "20150101", "20150102", "20150112", "20150211", "20150429", "20150504", "20150505", "20150506", "20150720", "20150921", "20150922", "20150923", "20151012", "20151103", "20151123", "20151223", "20151231", "20160101", "20160111", "20160211", "20160321", "20160429", "20160503", "20160504", "20160505", "20160718", "20160919", "20160922", "20161010", "20161103", "20161123", "20161223", "20170102", "20170103", "20170109", "20170320", "20170503", "20170504", "20170505", "20170717", "20170918", "20171009", "20171103", "20171123", "20180101", "20180102", "20180103", "20180108", "20180212", "20180321", "20180430", "20180503", "20180504", "20180716", "20180917", "20180924", "20181008", "20181123", "20181224", "20181231", "20190101", "20190102", "20190103", "20190114", "20190211", "20190321", "20190429", "20190503", "20190506", "20190715", "20190916", "20190923", "20191014", "20191104", "20191223", "20191231", "20200101", "20200102", "20200103", "20200113", "20200211", "20200320", "20200429", "20200504", "20200505", "20200506", "20200720", "20200921", "20200922", "20201012", "20201103", "20201123", "20201223", "20201231", "20210101", "20210111", "20210211", "20210429", "20210503", "20210504", "20210505", "20210719", "20210920", "20210923", "20211011", "20211103", "20211123", "20211223", "20211231", "20220103", "20220110", "20220211", "20220321", "20220429", "20220503", "20220504", "20220505", "20220718", "20220919", "20220923", "20221010", "20221103", "20221123", "20221223", "20230102", "20230103", "20230109", "20230321", "20230503", "20230504", "20230505", "20230717", "20230918", "20231009", "20231103", "20231123", "20240101", "20240102", "20240103", "20240108", "20240212", "20240320", "20240429", "20240503", "20240506", "20240715", "20240916", "20240923", "20241014", "20241104", "20241223", "20241231", "20250101", "20250102", "20250103", "20250113", "20250211", "20250320", "20250429", "20250505", "20250506", "20250721", "20250915", "20250923", "20251013", "20251103", "20251124", "20251223", "20251231", "20260101", "20260102", "20260112", "20260211", "20260320", "20260429", "20260504", "20260505", "20260506", "20260720", "20260921", "20260922", "20260923", "20261012", "20261103", "20261123", "20261223", "20261231", "20270101", "20270111", "20270211", "20270322", "20270429", "20270503", "20270504", "20270505", "20270719", "20270920", "20270923", "20271011", "20271103", "20271123", "20271223", "20271231", "20280103", "20280110", "20280211", "20280320", "20280503", "20280504", "20280505", "20280717", "20280918", "20280922", "20281009", "20281103", "20281123", "20290101", "20290102", "20290103", "20290108", "20290212", "20290320", "20290430", "20290503", "20290504", "20290716", "20290917", "20290924", "20291008", "20291123", "20291224", "20291231", "20300101", "20300102", "20300103", "20300114", "20300211", "20300320", "20300429", "20300503", "20300506", "20300715", "20300916", "20300923", "20301014", "20301104", "20301223", "20301231", "20310101", "20310102", "20310103", "20310113", "20310211", "20310321", "20310429", "20310505", "20310506", "20310721", "20310915", "20310923", "20311013", "20311103", "20311124", "20311223", "20311231", "20320101", "20320102", "20320112", "20320211", "20320429", "20320503", "20320504", "20320505", "20320719", "20320920", "20320921", "20320922", "20321011", "20321103", "20321123", "20321223", "20321231", "20330103", "20330110", "20330211", "20330321", "20330429", "20330503", "20330504", "20330505", "20330718", "20330919", "20330923", "20331010", "20331103", "20331123", "20331223", "20340102", "20340103", "20340109", "20340320", "20340503", "20340504", "20340505", "20340717", "20340918", "20341009", "20341103", "20341123", "20350101", "20350102", "20350103", "20350108", "20350212", "20350321", "20350430", "20350503", "20350504", "20350716", "20350917", "20350924", "20351008", "20351123", "20351224", "20351231", "20360101", "20360102", "20360103", "20360114", "20360211", "20360320", "20360429", "20360505", "20360506", "20360721", "20360915", "20360922", "20361013", "20361103", "20361124", "20361223", "20361231", "20370101", "20370102", "20370112", "20370211", "20370320", "20370429", "20370504", "20370505", "20370506", "20370720", "20370921", "20370922", "20370923", "20371012", "20371103", "20371123", "20371223", "20371231", "20380101", "20380111", "20380211", "20380429", "20380503", "20380504", "20380505", "20380719", "20380920", "20380923", "20381011", "20381103", "20381123", "20381223", "20381231", "20390103", "20390110", "20390211", "20390321", "20390429", "20390503", "20390504", "20390505", "20390718", "20390919", "20390923", "20391010", "20391103", "20391123", "20391223", "20400102", "20400103", "20400109", "20400320", "20400430", "20400503", "20400504", "20400716", "20400917", "20401008", "20401123", "20401224", "20401231", "20410101", "20410102", "20410103", "20410114", "20410211", "20410320", "20410429", "20410503", "20410506", "20410715", "20410916", "20410923", "20411014", "20411104", "20411223", "20411231", "20420101", "20420102", "20420103", "20420113", "20420211", "20420320", "20420429", "20420505", "20420506", "20420721", "20420915", "20420923", "20421013", "20421103", "20421124", "20421223", "20421231", "20430101", "20430102", "20430112", "20430211", "20430429", "20430504", "20430505", "20430506", "20430720", "20430921", "20430922", "20430923", "20431012", "20431103", "20431123", "20431223", "20431231", "20440101", "20440111", "20440211", "20440321", "20440429", "20440503", "20440504", "20440505", "20440718", "20440919", "20440922", "20441010", "20441103", "20441123", "20441223", "20450102", "20450103", "20450109", "20450320", "20450503", "20450504", "20450505", "20450717", "20450918", "20450922", "20451009", "20451103", "20451123", "20460101", "20460102", "20460103", "20460108", "20460212", "20460320", "20460430", "20460503", "20460504", "20460716", "20460917", "20460924", "20461008", "20461123", "20461224", "20461231", "20470101", "20470102", "20470103", "20470114", "20470211", "20470321", "20470429", "20470503", "20470506", "20470715", "20470916", "20470923", "20471014", "20471104", "20471223", "20471231", "20480101", "20480102", "20480103", "20480113", "20480211", "20480320", "20480429", "20480504", "20480505", "20480506", "20480720", "20480921", "20480922", "20481012", "20481103", "20481123", "20481223", "20481231", "20490101", "20490111", "20490211", "20490429", "20490503", "20490504", "20490505", "20490719", "20490920", "20490921", "20490922", "20491011", "20491103", "20491123", "20491223", "20491231", "20500103", "20500110", "20500211", "20500321", "20500429", "20500503", "20500504", "20500505", "20500718", "20500919", "20500923", "20501010", "20501103", "20501123", "20501223", "20510102", "20510103", "20510109", "20510321", "20510503", "20510504", "20510505", "20510717", "20510918", "20511009", "20511103", "20511123", "20520101", "20520102", "20520103", "20520108", "20520212", "20520320", "20520429", "20520503", "20520506", "20520715", "20520916", "20520923", "20521014", "20521104", "20521223", "20521231", "20530101", "20530102", "20530103", "20530113", "20530211", "20530320", "20530429", "20530505", "20530506", "20530721", "20530915", "20530922", "20531013", "20531103", "20531124", "20531223", "20531231", "20540101", "20540102", "20540112", "20540211", "20540320", "20540429", "20540504", "20540505", "20540506", "20540720", "20540921", "20540922", "20540923", "20541012", "20541103", "20541123", "20541223", "20541231", "20550101", "20550111", "20550211", "20550322", "20550429", "20550503", "20550504", "20550505", "20550719", "20550920", "20550923", "20551011", "20551103", "20551123", "20551223", "20551231", "20560103", "20560110", "20560211", "20560320", "20560503", "20560504", "20560505", "20560717", "20560918", "20560922", "20561009", "20561103", "20561123", "20570101", "20570102", "20570103", "20570108", "20570212", "20570320", "20570430", "20570503", "20570504", "20570716", "20570917", "20571008", "20571123", "20571224", "20571231", "20580101", "20580102", "20580103", "20580114", "20580211", "20580320", "20580429", "20580503", "20580506", "20580715", "20580916", "20580923", "20581014", "20581104", "20581223", "20581231", "20590101", "20590102", "20590103", "20590113", "20590211", "20590320", "20590429", "20590505", "20590506", "20590721", "20590915", "20590923", "20591013", "20591103", "20591124", "20591223", "20591231", "20600101", "20600102", "20600112", "20600211", "20600429", "20600503", "20600504", "20600505", "20600719", "20600920", "20600921", "20600922", "20601011", "20601103", "20601123", "20601223", "20601231", "20610103", "20610110", "20610211", "20610321", "20610429", "20610503", "20610504", "20610505", "20610718", "20610919", "20610922", "20611010", "20611103", "20611123", "20611223", "20631231", "20641231", "20651231", "20661231", "20681231", "20691231", "20701231" ], + "MonthsToExclude": [] + }, + "TOR": { + "InheritedCalendar": [], + "Name": "TOR", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19880101", "19880118", "19880215", "19880530", "19880704", "19880905", "19881010", "19881108", "19881111", "19881124", "19881226", "19890102", "19890116", "19890220", "19890529", "19890704", "19890904", "19891009", "19891107", "19891123", "19891225", "19900101", "19900115", "19900219", "19900528", "19900704", "19900903", "19901008", "19901106", "19901112", "19901122", "19901225", "19910101", "19910121", "19910218", "19910527", "19910704", "19910902", "19911014", "19911111", "19911128", "19911225", "19920101", "19920120", "19920217", "19920525", "19920907", "19921012", "19921111", "19921126", "19921225", "19930101", "19930118", "19930215", "19930531", "19930705", "19930906", "19931011", "19931111", "19931125", "19940117", "19940221", "19940530", "19940704", "19940905", "19941010", "19941111", "19941124", "19941226", "19950102", "19950116", "19950220", "19950529", "19950704", "19950904", "19951009", "19951110", "19951123", "19951225", "19960101", "19960115", "19960219", "19960527", "19960704", "19960902", "19961014", "19961111", "19961128", "19961225", "19970101", "19970120", "19970217", "19970526", "19970704", "19970901", "19971013", "19971111", "19971127", "19971225", "19980101", "19980119", "19980216", "19980525", "19980703", "19980907", "19981012", "19981111", "19981126", "19981225", "19990101", "19990118", "19990215", "19990531", "19990705", "19990906", "19991011", "19991111", "19991125", "20000117", "20000221", "20000704", "20000904", "20001009", "20001110", "20001123", "20001225", "20001226", "20010101", "20010122", "20010219", "20010413", "20010702", "20010903", "20011008", "20011112", "20011122", "20011225", "20011226", "20020101", "20020329", "20020520", "20020701", "20020805", "20020902", "20021014", "20021111", "20021225", "20021226", "20030101", "20030120", "20030418", "20030519", "20030701", "20030804", "20030901", "20031013", "20031111", "20031225", "20031226", "20040101", "20040409", "20040524", "20040701", "20040802", "20040906", "20041011", "20041111", "20041227", "20041228", "20050103", "20050325", "20050523", "20050701", "20050801", "20050905", "20051010", "20051111", "20051226", "20051227", "20060102", "20060414", "20060522", "20060703", "20060807", "20060904", "20061009", "20061113", "20061225", "20061226", "20070101", "20070406", "20070521", "20070702", "20070806", "20070903", "20071008", "20071112", "20071225", "20071226", "20080101", "20080218", "20080321", "20080519", "20080701", "20080804", "20080901", "20081013", "20081111", "20081225", "20081226", "20090101", "20090216", "20090410", "20090518", "20090701", "20090803", "20090907", "20091012", "20091111", "20091225", "20091228", "20100101", "20100215", "20100402", "20100524", "20100701", "20100802", "20100906", "20101011", "20101111", "20101227", "20101228", "20110103", "20110221", "20110422", "20110523", "20110701", "20110801", "20110905", "20111010", "20111111", "20111226", "20111227", "20120102", "20120220", "20120406", "20120521", "20120702", "20120806", "20120903", "20121008", "20121112", "20121225", "20121226", "20130101", "20130218", "20130329", "20130520", "20130701", "20130805", "20130902", "20131014", "20131111", "20131225", "20131226", "20140101", "20140217", "20140418", "20140519", "20140701", "20140804", "20140901", "20141013", "20141111", "20141225", "20141226", "20150101", "20150216", "20150403", "20150518", "20150701", "20150803", "20150907", "20151012", "20151111", "20151225", "20151228", "20160101", "20160215", "20160325", "20160523", "20160701", "20160801", "20160905", "20161010", "20161111", "20161226", "20161227", "20170102", "20170220", "20170414", "20170522", "20170703", "20170807", "20170904", "20171009", "20171113", "20171225", "20171226", "20180101", "20180219", "20180330", "20180521", "20180702", "20180806", "20180903", "20181008", "20181112", "20181225", "20181226", "20190101", "20190218", "20190419", "20190520", "20190701", "20190805", "20190902", "20191014", "20191111", "20191225", "20191226", "20200101", "20200217", "20200410", "20200518", "20200701", "20200803", "20200907", "20201012", "20201111", "20201225", "20201228", "20210101", "20210215", "20210402", "20210524", "20210701", "20210802", "20210906", "20211011", "20211111", "20211227", "20211228", "20220103", "20220221", "20220415", "20220523", "20220701", "20220801", "20220905", "20221010", "20221111", "20221226", "20221227", "20230102", "20230220", "20230407", "20230522", "20230703", "20230807", "20230904", "20231009", "20231113", "20231225", "20231226", "20240101", "20240219", "20240329", "20240520", "20240701", "20240805", "20240902", "20241014", "20241111", "20241225", "20241226", "20250101", "20250217", "20250418", "20250519", "20250701", "20250804", "20250901", "20251013", "20251111", "20251225", "20251226", "20260101", "20260216", "20260403", "20260518", "20260701", "20260803", "20260907", "20261012", "20261111", "20261225", "20261228", "20270101", "20270215", "20270326", "20270524", "20270701", "20270802", "20270906", "20271011", "20271111", "20271227", "20271228", "20280103", "20280221", "20280414", "20280522", "20280703", "20280807", "20280904", "20281009", "20281113", "20281225", "20281226", "20290101", "20290219", "20290330", "20290521", "20290702", "20290806", "20290903", "20291008", "20291112", "20291225", "20291226", "20300101", "20300218", "20300419", "20300520", "20300701", "20300805", "20300902", "20301014", "20301111", "20301225", "20301226", "20310101", "20310217", "20310411", "20310519", "20310701", "20310804", "20310901", "20311013", "20311111", "20311225", "20311226", "20320101", "20320216", "20320326", "20320524", "20320701", "20320802", "20320906", "20321011", "20321111", "20321227", "20321228", "20330103", "20330221", "20330415", "20330523", "20330701", "20330801", "20330905", "20331010", "20331111", "20331226", "20331227", "20340102", "20340220", "20340407", "20340522", "20340703", "20340807", "20340904", "20341009", "20341113", "20341225", "20341226", "20350101", "20350219", "20350323", "20350521", "20350702", "20350806", "20350903", "20351008", "20351112", "20351225", "20351226", "20360101", "20360218", "20360411", "20360519", "20360701", "20360804", "20360901", "20361013", "20361111", "20361225", "20361226", "20370101", "20370216", "20370403", "20370518", "20370701", "20370803", "20370907", "20371012", "20371111", "20371225", "20371228", "20380101", "20380215", "20380423", "20380524", "20380701", "20380802", "20380906", "20381011", "20381111", "20381227", "20381228", "20390103", "20390221", "20390408", "20390523", "20390701", "20390801", "20390905", "20391010", "20391111", "20391226", "20391227", "20400102", "20400220", "20400330", "20400521", "20400702", "20400806", "20400903", "20401008", "20401112", "20401225", "20401226", "20410101", "20410218", "20410419", "20410520", "20410701", "20410805", "20410902", "20411014", "20411111", "20411225", "20411226", "20420101", "20420217", "20420404", "20420519", "20420701", "20420804", "20420901", "20421013", "20421111", "20421225", "20421226", "20430101", "20430216", "20430327", "20430518", "20430701", "20430803", "20430907", "20431012", "20431111", "20431225", "20431228", "20440101", "20440215", "20440415", "20440523", "20440701", "20440801", "20440905", "20441010", "20441111", "20441226", "20441227", "20450102", "20450220", "20450407", "20450522", "20450703", "20450807", "20450904", "20451009", "20451113", "20451225", "20451226", "20460101", "20460219", "20460323", "20460521", "20460702", "20460806", "20460903", "20461008", "20461112", "20461225", "20461226", "20470101", "20470218", "20470412", "20470520", "20470701", "20470805", "20470902", "20471014", "20471111", "20471225", "20471226", "20480101", "20480217", "20480403", "20480518", "20480701", "20480803", "20480907", "20481012", "20481111", "20481225", "20481228", "20490101", "20490215", "20490416", "20490524", "20490701", "20490802", "20490906", "20491011", "20491111", "20491227", "20491228", "20500103", "20500221", "20500408", "20500523", "20500701", "20500801", "20500905", "20501010", "20501111", "20501226", "20501227", "20510102", "20510220", "20510331", "20510522", "20510703", "20510807", "20510904", "20511009", "20511113", "20511225", "20511226", "20520101", "20520219", "20520419", "20520520", "20520701", "20520805", "20520902", "20521014", "20521111", "20521225", "20521226", "20530101", "20530217", "20530404", "20530519", "20530701", "20530804", "20530901", "20531013", "20531111", "20531225", "20531226", "20540101", "20540216", "20540327", "20540518", "20540701", "20540803", "20540907", "20541012", "20541111", "20541225", "20541228", "20550101", "20550215", "20550416", "20550524", "20550701", "20550802", "20550906", "20551011", "20551111", "20551227", "20551228", "20560103", "20560221", "20560331", "20560522", "20560703", "20560807", "20560904", "20561009", "20561113", "20561225", "20561226", "20570101", "20570219", "20570420", "20570521", "20570702", "20570806", "20570903", "20571008", "20571112", "20571225", "20571226", "20580101", "20580218", "20580412", "20580520", "20580701", "20580805", "20580902", "20581014", "20581111", "20581225", "20581226", "20590101", "20590217", "20590328", "20590519", "20590701", "20590804", "20590901", "20591013", "20591111", "20591225", "20591226", "20600101", "20600216", "20600416", "20600524", "20600701", "20600802", "20600906", "20601011", "20601111", "20601227", "20601228", "20610103", "20610221", "20610408", "20610523", "20610701", "20610801", "20610905", "20611010", "20611111", "20611226", "20611227" ], + "MonthsToExclude": [] + }, + "VIE": { + "InheritedCalendar": [], + "Name": "VIE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19800501", "19800815", "19801208", "19801225", "19801226", "19810101", "19810106", "19810501", "19811026", "19811208", "19811225", "19820101", "19820106", "19821026", "19821101", "19821208", "19830106", "19830815", "19831026", "19831101", "19831208", "19831226", "19840106", "19840501", "19840815", "19841026", "19841101", "19841225", "19841226", "19850101", "19850501", "19850815", "19851101", "19851225", "19851226", "19860101", "19860106", "19860501", "19860815", "19861208", "19861225", "19861226", "19870101", "19870106", "19870501", "19871026", "19871208", "19871225", "19880101", "19880106", "19880815", "19881026", "19881101", "19881208", "19881226", "19890106", "19890501", "19890815", "19891026", "19891101", "19891208", "19891225", "19891226", "19900101", "19900501", "19900815", "19901026", "19901101", "19901225", "19901226", "19910101", "19910501", "19910815", "19911101", "19911225", "19911226", "19920101", "19920106", "19920501", "19921026", "19921208", "19921225", "19930101", "19930106", "19931026", "19931101", "19931208", "19940106", "19940815", "19941026", "19941101", "19941208", "19941226", "19950106", "19950417", "19950501", "19950605", "19950615", "19950815", "19951026", "19951101", "19951208", "19951225", "19951226", "19960101", "19960408", "19960501", "19960516", "19960527", "19960606", "19960815", "19961101", "19961225", "19961226", "19970101", "19970106", "19970331", "19970501", "19970508", "19970519", "19970529", "19970815", "19971208", "19971225", "19971226", "19980101", "19980106", "19980413", "19980501", "19980521", "19980601", "19980611", "19981026", "19981208", "19981225", "19990101", "19990106", "19990405", "19990513", "19990524", "19990603", "19991026", "19991101", "19991208", "19991224", "19991231", "20000106", "20000424", "20000501", "20000601", "20000612", "20000622", "20000815", "20001026", "20001101", "20001208", "20001225", "20001226", "20010101", "20010413", "20010416", "20010501", "20010604", "20010614", "20010815", "20010915", "20011026", "20011101", "20011224", "20011225", "20011226", "20011231", "20020101", "20020329", "20020401", "20020501", "20020520", "20020815", "20021101", "20021224", "20021225", "20021226", "20030101", "20030106", "20030421", "20030501", "20030529", "20030609", "20030619", "20030815", "20031208", "20031224", "20031225", "20031226", "20040101", "20040106", "20040412", "20040520", "20040531", "20040610", "20041026", "20041101", "20041208", "20041224", "20050106", "20050328", "20050505", "20050516", "20050526", "20050815", "20051026", "20051101", "20051208", "20051226", "20060106", "20060417", "20060501", "20060525", "20060605", "20060615", "20060815", "20061026", "20061101", "20061208", "20061225", "20061226", "20070101", "20070409", "20070501", "20070517", "20070528", "20070607", "20070815", "20071026", "20071101", "20071224", "20071225", "20071226", "20080101", "20080324", "20080501", "20080512", "20080522", "20080815", "20081208", "20081224", "20081225", "20081226", "20090101", "20090106", "20090413", "20090501", "20090521", "20090601", "20090611", "20091026", "20091208", "20091224", "20091225", "20100101", "20100106", "20100405", "20100513", "20100524", "20100603", "20101026", "20101101", "20101208", "20101224", "20110106", "20110425", "20110602", "20110613", "20110623", "20110815", "20111026", "20111101", "20111208", "20111226", "20120106", "20120409", "20120501", "20120517", "20120528", "20120607", "20120815", "20121026", "20121101", "20121224", "20121225", "20121226", "20130101", "20130401", "20130501", "20130509", "20130520", "20130530", "20130815", "20131101", "20131224", "20131225", "20131226", "20140101", "20140106", "20140421", "20140501", "20140529", "20140609", "20140619", "20140815", "20141208", "20141224", "20141225", "20141226", "20150101", "20150106", "20150406", "20150501", "20150514", "20150525", "20150604", "20151026", "20151208", "20151224", "20151225", "20160101", "20160106", "20160328", "20160505", "20160516", "20160526", "20160815", "20161026", "20161101", "20161208", "20161226", "20170106", "20170417", "20170501", "20170525", "20170605", "20170615", "20170815", "20171026", "20171101", "20171208", "20171225", "20171226", "20180101", "20180402", "20180501", "20180510", "20180521", "20180531", "20180815", "20181026", "20181101", "20181224", "20181225", "20181226", "20190101", "20190422", "20190501", "20190530", "20190610", "20190620", "20190815", "20191101", "20191224", "20191225", "20191226", "20200101", "20200106", "20200413", "20200501", "20200521", "20200601", "20200611", "20201026", "20201208", "20201224", "20201225", "20210101", "20210106", "20210405", "20210513", "20210524", "20210603", "20211026", "20211101", "20211208", "20211224", "20220106", "20220418", "20220526", "20220606", "20220616", "20220815", "20221026", "20221101", "20221208", "20221226", "20230106", "20230410", "20230501", "20230518", "20230529", "20230608", "20230815", "20231026", "20231101", "20231208", "20231225", "20231226", "20240101", "20240401", "20240501", "20240509", "20240520", "20240530", "20240815", "20241101", "20241224", "20241225", "20241226", "20250101", "20250106", "20250421", "20250501", "20250529", "20250609", "20250619", "20250815", "20251208", "20251224", "20251225", "20251226", "20260101", "20260106", "20260406", "20260501", "20260514", "20260525", "20260604", "20261026", "20261208", "20261224", "20261225", "20270101", "20270106", "20270329", "20270506", "20270517", "20270527", "20271026", "20271101", "20271208", "20271224", "20280106", "20280417", "20280501", "20280525", "20280605", "20280615", "20280815", "20281026", "20281101", "20281208", "20281225", "20281226", "20290101", "20290402", "20290501", "20290510", "20290521", "20290531", "20290815", "20291026", "20291101", "20291224", "20291225", "20291226", "20300101", "20300422", "20300501", "20300530", "20300610", "20300620", "20300815", "20301101", "20301224", "20301225", "20301226", "20310101", "20310106", "20310414", "20310501", "20310522", "20310602", "20310612", "20310815", "20311208", "20311224", "20311225", "20311226", "20320101", "20320106", "20320329", "20320506", "20320517", "20320527", "20321026", "20321101", "20321208", "20321224", "20330106", "20330418", "20330526", "20330606", "20330616", "20330815", "20331026", "20331101", "20331208", "20331226", "20340106", "20340410", "20340501", "20340518", "20340529", "20340608", "20340815", "20341026", "20341101", "20341208", "20341225", "20341226", "20350101", "20350326", "20350501", "20350503", "20350514", "20350524", "20350815", "20351026", "20351101", "20351224", "20351225", "20351226", "20360101", "20360414", "20360501", "20360522", "20360602", "20360612", "20360815", "20361208", "20361224", "20361225", "20361226", "20370101", "20370106", "20370406", "20370501", "20370514", "20370525", "20370604", "20371026", "20371208", "20371224", "20371225", "20380101", "20380106", "20380426", "20380603", "20380614", "20380624", "20381026", "20381101", "20381208", "20381224", "20390106", "20390411", "20390519", "20390530", "20390609", "20390815", "20391026", "20391101", "20391208", "20391226", "20400106", "20400402", "20400501", "20400510", "20400521", "20400531", "20400815", "20401026", "20401101", "20401224", "20401225", "20401226", "20410101", "20410422", "20410501", "20410530", "20410610", "20410620", "20410815", "20411101", "20411224", "20411225", "20411226", "20420101", "20420106", "20420407", "20420501", "20420515", "20420526", "20420605", "20420815", "20421208", "20421224", "20421225", "20421226", "20430101", "20430106", "20430330", "20430501", "20430507", "20430518", "20430528", "20431026", "20431208", "20431224", "20431225", "20440101", "20440106", "20440418", "20440526", "20440606", "20440616", "20440815", "20441026", "20441101", "20441208", "20441226", "20450106", "20450410", "20450501", "20450518", "20450529", "20450608", "20450815", "20451026", "20451101", "20451208", "20451225", "20451226", "20460101", "20460326", "20460501", "20460503", "20460514", "20460524", "20460815", "20461026", "20461101", "20461224", "20461225", "20461226", "20470101", "20470415", "20470501", "20470523", "20470603", "20470613", "20470815", "20471101", "20471224", "20471225", "20471226", "20480101", "20480106", "20480406", "20480501", "20480514", "20480525", "20480604", "20481026", "20481208", "20481224", "20481225", "20490101", "20490106", "20490419", "20490527", "20490607", "20490617", "20491026", "20491101", "20491208", "20491224", "20500106", "20500411", "20500519", "20500530", "20500609", "20500815", "20501026", "20501101", "20501208", "20501226", "20510106", "20510403", "20510501", "20510511", "20510522", "20510601", "20510815", "20511026", "20511101", "20511208", "20511225", "20511226", "20520101", "20520422", "20520501", "20520530", "20520610", "20520620", "20520815", "20521101", "20521224", "20521225", "20521226", "20530101", "20530106", "20530407", "20530501", "20530515", "20530526", "20530605", "20530815", "20531208", "20531224", "20531225", "20531226", "20540101", "20540106", "20540330", "20540501", "20540507", "20540518", "20540528", "20541026", "20541208", "20541224", "20541225", "20550101", "20550106", "20550419", "20550527", "20550607", "20550617", "20551026", "20551101", "20551208", "20551224", "20560106", "20560403", "20560501", "20560511", "20560522", "20560601", "20560815", "20561026", "20561101", "20561208", "20561225", "20561226", "20570101", "20570423", "20570501", "20570531", "20570611", "20570621", "20570815", "20571026", "20571101", "20571224", "20571225", "20571226", "20580101", "20580415", "20580501", "20580523", "20580603", "20580613", "20580815", "20581101", "20581224", "20581225", "20581226", "20590101", "20590106", "20590331", "20590501", "20590508", "20590519", "20590529", "20590815", "20591208", "20591224", "20591225", "20591226", "20600101", "20600106", "20600419", "20600527", "20600607", "20600617", "20601026", "20601101", "20601208", "20601224", "20610106", "20610411", "20610519", "20610530", "20610609", "20610815", "20611026", "20611101", "20611208", "20611226", "20620106", "20620501", "20620815", "20621026", "20621101", "20621208", "20621225", "20621226", "20630101", "20630501", "20630815", "20631026", "20631101", "20631225", "20631226", "20640101", "20640501", "20640815", "20641208", "20641225", "20641226", "20650101", "20650106", "20650501", "20651026", "20651208", "20651225", "20660101", "20660106", "20661026", "20661101", "20661208", "20670106", "20670815", "20671026", "20671101", "20671208", "20671226", "20680106", "20680501", "20680815", "20681026", "20681101", "20681225", "20681226", "20690101", "20690501", "20690815", "20691101", "20691225", "20691226", "20700101", "20700106", "20700501", "20700815", "20701208", "20701225", "20701226" ], + "MonthsToExclude": [] + }, + "VNS": { + "InheritedCalendar": [], + "Name": "VNS", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20070101", "20070216", "20070312", "20070409", "20070410", "20070430", "20070501", "20070507", "20070625", "20070706", "20070815", "20071101", "20071102", "20071224", "20071225", "20071226", "20071231", "20080101", "20080218", "20080310", "20080311", "20080324", "20080325", "20080501", "20080502", "20080505", "20080623", "20080624", "20080707", "20080815", "20081103", "20081225", "20081226", "20090101", "20090102", "20090216", "20090311", "20090413", "20090501", "20090624", "20090706", "20091225", "20100101", "20100215", "20100216", "20100311", "20100312", "20100405", "20100624", "20100625", "20100705", "20100706", "20101101", "20101224", "20110216", "20110311", "20110425", "20110624", "20110706", "20110815", "20111031", "20111101", "20111226", "20120216", "20120409", "20120501", "20120706", "20120815", "20121101", "20121224", "20121225", "20121226", "20130101", "20130311", "20130401", "20130501", "20130624", "20130815", "20130816", "20131101", "20131224", "20131225", "20131226", "20131227", "20140101", "20140310", "20140311", "20140421", "20140501", "20140502", "20140623", "20140624", "20140815", "20141224", "20141225", "20141226", "20150101", "20150102", "20150216", "20150311", "20150406", "20150501", "20150624", "20150706", "20151224", "20151225", "20160101", "20160215", "20160216", "20160311", "20160328", "20160624", "20160706", "20160815", "20161031", "20161101", "20161226", "20170216", "20170217", "20170417", "20170501", "20170706", "20170707", "20170814", "20170815", "20171101", "20171225", "20171226", "20180101", "20180216", "20180402", "20180430", "20180501", "20180706", "20180815", "20181101", "20181102", "20181224", "20181225", "20181226", "20181231", "20190101", "20190311", "20190422", "20190501", "20190624", "20190815", "20190816", "20191101", "20191224", "20191225", "20191226", "20191227", "20200101", "20200311", "20200413", "20200501", "20200624", "20200706", "20201224", "20201225", "20210101", "20210215", "20210216", "20210311", "20210312", "20210405", "20210624", "20210625", "20210705", "20210706", "20211101", "20211224", "20220216", "20220311", "20220418", "20220624", "20220706", "20220815", "20221031", "20221101", "20221226", "20230216", "20230217", "20230410", "20230501", "20230706", "20230707", "20230814", "20230815", "20231101", "20231225", "20231226", "20240101", "20240216", "20240311", "20240401", "20240501", "20240624", "20240815", "20240816", "20241101", "20241224", "20241225", "20241226", "20241227", "20250101", "20250310", "20250311", "20250421", "20250501", "20250502", "20250623", "20250624", "20250815", "20251224", "20251225", "20251226", "20260101", "20260102", "20260216", "20260311", "20260406", "20260501", "20260624", "20260706", "20261224", "20261225", "20270101", "20270215", "20270216", "20270311", "20270312", "20270329", "20270624", "20270625", "20270705", "20270706", "20271101", "20271224", "20280216", "20280417", "20280501", "20280706", "20280707", "20280814", "20280815", "20281101", "20281225", "20281226", "20290101", "20290216", "20290402", "20290430", "20290501", "20290706", "20290815", "20291101", "20291102", "20291224", "20291225", "20291226", "20291231", "20300101", "20300311", "20300422", "20300501", "20300624", "20300815", "20300816", "20301101", "20301224", "20301225", "20301226", "20301227", "20310101", "20310310", "20310311", "20310414", "20310501", "20310502", "20310623", "20310624", "20310815", "20311224", "20311225", "20311226", "20320101", "20320102", "20320216", "20320311", "20320312", "20320329", "20320624", "20320625", "20320705", "20320706", "20321101", "20321224", "20330216", "20330311", "20330418", "20330624", "20330706", "20330815", "20331031", "20331101", "20331226", "20340216", "20340217", "20340410", "20340501", "20340706", "20340707", "20340814", "20340815", "20341101", "20341225", "20341226", "20350101", "20350216", "20350326", "20350430", "20350501", "20350706", "20350815", "20351101", "20351102", "20351224", "20351225", "20351226", "20351231", "20360101", "20360310", "20360311", "20360414", "20360501", "20360502", "20360623", "20360624", "20360815", "20361224", "20361225", "20361226", "20370101", "20370102", "20370216", "20370311", "20370406", "20370501", "20370624", "20370706", "20371224", "20371225", "20380101", "20380215", "20380216", "20380311", "20380312", "20380426", "20380624", "20380625", "20380705", "20380706", "20381101", "20381224", "20390216", "20390311", "20390411", "20390624", "20390706", "20390815", "20391031", "20391101", "20391226", "20400216", "20400217", "20400402", "20400430", "20400501", "20400706", "20400815", "20401101", "20401102", "20401224", "20401225", "20401226", "20401231", "20410101", "20410311", "20410422", "20410501", "20410624", "20410815", "20410816", "20411101", "20411224", "20411225", "20411226", "20411227", "20420101", "20420310", "20420311", "20420407", "20420501", "20420502", "20420623", "20420624", "20420815", "20421224", "20421225", "20421226", "20430101", "20430102", "20430216", "20430311", "20430330", "20430501", "20430624", "20430706", "20431224", "20431225", "20440101", "20440215", "20440216", "20440311", "20440418", "20440624", "20440706", "20440815", "20441031", "20441101", "20441226", "20450216", "20450217", "20450410", "20450501", "20450706", "20450707", "20450814", "20450815", "20451101", "20451225", "20451226", "20460101", "20460216", "20460326", "20460430", "20460501", "20460706", "20460815", "20461101", "20461102", "20461224", "20461225", "20461226", "20461231", "20470101", "20470311", "20470415", "20470501", "20470624", "20470815", "20470816", "20471101", "20471224", "20471225", "20471226", "20471227", "20480101", "20480311", "20480406", "20480501", "20480624", "20480706", "20481224", "20481225", "20490101", "20490215", "20490216", "20490311", "20490312", "20490419", "20490624", "20490625", "20490705", "20490706", "20491101", "20491224", "20500216", "20500311", "20500411", "20500624", "20500706", "20500815", "20501031", "20501101", "20501226", "20510216", "20510217", "20510403", "20510501", "20510706", "20510707", "20510814", "20510815", "20511101", "20511225", "20511226", "20520101", "20520216", "20520311", "20520422", "20520501", "20520624", "20520815", "20520816", "20521101", "20521224", "20521225", "20521226", "20521227", "20530101", "20530310", "20530311", "20530407", "20530501", "20530502", "20530623", "20530624", "20530815", "20531224", "20531225", "20531226", "20540101", "20540102", "20540216", "20540311", "20540330", "20540501", "20540624", "20540706", "20541224", "20541225", "20550101", "20550215", "20550216", "20550311", "20550312", "20550419", "20550624", "20550625", "20550705", "20550706", "20551101", "20551224", "20560216", "20560403", "20560501", "20560706", "20560707", "20560814", "20560815", "20561101", "20561225", "20561226", "20570101", "20570216", "20570423", "20570430", "20570501", "20570706", "20570815", "20571101", "20571102", "20571224", "20571225", "20571226", "20571231", "20580101", "20580311", "20580415", "20580501", "20580624", "20580815", "20580816", "20581101", "20581224", "20581225", "20581226", "20581227", "20590101", "20590310", "20590311", "20590331", "20590501", "20590502", "20590623", "20590624", "20590815", "20591224", "20591225", "20591226", "20600101", "20600102", "20600216", "20600311", "20600312", "20600419", "20600624", "20600625", "20600705", "20600706", "20601101", "20601224", "20610216", "20610311", "20610411", "20610624", "20610706", "20610815", "20611031", "20611101", "20611226" ], + "MonthsToExclude": [] + }, + "WAR": { + "InheritedCalendar": [], + "Name": "WAR", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800101", "19800501", "19800815", "19801111", "19801225", "19801226", "19810101", "19810501", "19811111", "19811225", "19820101", "19820503", "19821101", "19821111", "19830503", "19830815", "19831101", "19831111", "19831226", "19840501", "19840503", "19840815", "19841101", "19841225", "19841226", "19850101", "19850501", "19850503", "19850815", "19851101", "19851111", "19851225", "19851226", "19860101", "19860501", "19860815", "19861111", "19861225", "19861226", "19870101", "19870501", "19871111", "19871225", "19880101", "19880503", "19880815", "19881101", "19881111", "19881226", "19890501", "19890503", "19890815", "19891101", "19891225", "19891226", "19900101", "19900501", "19900503", "19900815", "19901101", "19901225", "19901226", "19910101", "19910501", "19910503", "19910815", "19911101", "19911111", "19911225", "19911226", "19920101", "19920501", "19921111", "19921225", "19930101", "19930503", "19931101", "19931111", "19940503", "19940815", "19941101", "19941111", "19941226", "19950501", "19950503", "19950815", "19951101", "19951225", "19951226", "19960101", "19960501", "19960503", "19960815", "19961101", "19961111", "19961225", "19961226", "19970101", "19970501", "19970815", "19971111", "19971225", "19971226", "19980101", "19980413", "19980501", "19980611", "19981111", "19981225", "19990101", "19990405", "19990503", "19990603", "19991101", "19991111", "20000424", "20000501", "20000503", "20000622", "20000815", "20001101", "20001225", "20001226", "20010101", "20010416", "20010501", "20010503", "20010614", "20010815", "20011101", "20011225", "20011226", "20020101", "20020401", "20020501", "20020503", "20020530", "20020815", "20021101", "20021111", "20021225", "20021226", "20030101", "20030421", "20030501", "20030619", "20030815", "20031111", "20031225", "20031226", "20040101", "20040412", "20040503", "20040610", "20041101", "20041111", "20050328", "20050503", "20050526", "20050815", "20051101", "20051111", "20051226", "20060417", "20060501", "20060503", "20060615", "20060815", "20061101", "20061225", "20061226", "20070101", "20070409", "20070501", "20070503", "20070607", "20070815", "20071101", "20071225", "20071226", "20080101", "20080324", "20080501", "20080522", "20080815", "20081111", "20081225", "20081226", "20090101", "20090413", "20090501", "20090611", "20091111", "20091225", "20100101", "20100405", "20100503", "20100603", "20101101", "20101111", "20110106", "20110425", "20110503", "20110623", "20110815", "20111101", "20111111", "20111226", "20120106", "20120409", "20120501", "20120503", "20120607", "20120815", "20121101", "20121225", "20121226", "20130101", "20130401", "20130501", "20130503", "20130530", "20130815", "20131101", "20131111", "20131225", "20131226", "20140101", "20140106", "20140421", "20140501", "20140619", "20140815", "20141111", "20141225", "20141226", "20150101", "20150106", "20150406", "20150501", "20150604", "20151111", "20151225", "20160101", "20160106", "20160328", "20160503", "20160526", "20160815", "20161101", "20161111", "20161226", "20170106", "20170417", "20170501", "20170503", "20170615", "20170815", "20171101", "20171225", "20171226", "20180101", "20180402", "20180501", "20180503", "20180531", "20180815", "20181101", "20181225", "20181226", "20190101", "20190422", "20190501", "20190503", "20190620", "20190815", "20191101", "20191111", "20191225", "20191226", "20200101", "20200106", "20200413", "20200501", "20200611", "20201111", "20201225", "20210101", "20210106", "20210405", "20210503", "20210603", "20211101", "20211111", "20220106", "20220418", "20220503", "20220616", "20220815", "20221101", "20221111", "20221226", "20230106", "20230410", "20230501", "20230503", "20230608", "20230815", "20231101", "20231225", "20231226", "20240101", "20240401", "20240501", "20240503", "20240530", "20240815", "20241101", "20241111", "20241225", "20241226", "20250101", "20250106", "20250421", "20250501", "20250619", "20250815", "20251111", "20251225", "20251226", "20260101", "20260106", "20260406", "20260501", "20260604", "20261111", "20261225", "20270101", "20270106", "20270329", "20270503", "20270527", "20271101", "20271111", "20280106", "20280417", "20280501", "20280503", "20280615", "20280815", "20281101", "20281225", "20281226", "20290101", "20290402", "20290501", "20290503", "20290531", "20290815", "20291101", "20291225", "20291226", "20300101", "20300422", "20300501", "20300503", "20300620", "20300815", "20301101", "20301111", "20301225", "20301226", "20310101", "20310106", "20310414", "20310501", "20310612", "20310815", "20311111", "20311225", "20311226", "20320101", "20320106", "20320329", "20320503", "20320527", "20321101", "20321111", "20330106", "20330418", "20330503", "20330616", "20330815", "20331101", "20331111", "20331226", "20340106", "20340410", "20340501", "20340503", "20340608", "20340815", "20341101", "20341225", "20341226", "20350101", "20350326", "20350501", "20350503", "20350524", "20350815", "20351101", "20351225", "20351226", "20360101", "20360414", "20360501", "20360612", "20360815", "20361111", "20361225", "20361226", "20370101", "20370106", "20370406", "20370501", "20370604", "20371111", "20371225", "20380101", "20380106", "20380426", "20380503", "20380624", "20381101", "20381111", "20390106", "20390411", "20390503", "20390609", "20390815", "20391101", "20391111", "20391226", "20400106", "20400402", "20400501", "20400503", "20400531", "20400815", "20401101", "20401225", "20401226", "20410101", "20410422", "20410501", "20410503", "20410620", "20410815", "20411101", "20411111", "20411225", "20411226", "20420101", "20420106", "20420407", "20420501", "20420605", "20420815", "20421111", "20421225", "20421226", "20430101", "20430106", "20430330", "20430501", "20430528", "20431111", "20431225", "20440101", "20440106", "20440418", "20440503", "20440616", "20440815", "20441101", "20441111", "20441226", "20450106", "20450410", "20450501", "20450503", "20450608", "20450815", "20451101", "20451225", "20451226", "20460101", "20460326", "20460501", "20460503", "20460524", "20460815", "20461101", "20461225", "20461226", "20470101", "20470415", "20470501", "20470503", "20470613", "20470815", "20471101", "20471111", "20471225", "20471226", "20480101", "20480106", "20480406", "20480501", "20480604", "20481111", "20481225", "20490101", "20490106", "20490419", "20490503", "20490617", "20491101", "20491111", "20500106", "20500411", "20500503", "20500609", "20500815", "20501101", "20501111", "20501226", "20510106", "20510403", "20510501", "20510503", "20510601", "20510815", "20511101", "20511225", "20511226", "20520101", "20520422", "20520501", "20520503", "20520620", "20520815", "20521101", "20521111", "20521225", "20521226", "20530101", "20530106", "20530407", "20530501", "20530605", "20530815", "20531111", "20531225", "20531226", "20540101", "20540106", "20540330", "20540501", "20540528", "20541111", "20541225", "20550101", "20550106", "20550419", "20550503", "20550617", "20551101", "20551111", "20560106", "20560403", "20560501", "20560503", "20560601", "20560815", "20561101", "20561225", "20561226", "20570101", "20570423", "20570501", "20570503", "20570621", "20570815", "20571101", "20571225", "20571226", "20580101", "20580415", "20580501", "20580503", "20580613", "20580815", "20581101", "20581111", "20581225", "20581226", "20590101", "20590106", "20590331", "20590501", "20590529", "20590815", "20591111", "20591225", "20591226", "20600101", "20600106", "20600419", "20600503", "20600617", "20601101", "20601111", "20610106", "20610411", "20610503", "20610609", "20610815", "20611101", "20611111", "20611226", "20620501", "20620503", "20620815", "20621101", "20621225", "20621226", "20630101", "20630501", "20630503", "20630815", "20631101", "20631225", "20631226", "20640101", "20640501", "20640815", "20641111", "20641225", "20641226", "20650101", "20650501", "20651111", "20651225", "20660101", "20660503", "20661101", "20661111", "20670503", "20670815", "20671101", "20671111", "20671226", "20680501", "20680503", "20680815", "20681101", "20681225", "20681226", "20690101", "20690501", "20690503", "20690815", "20691101", "20691111", "20691225", "20691226", "20700101", "20700501", "20700815", "20701111", "20701225", "20701226" ], + "MonthsToExclude": [] + }, + "WEL": { + "InheritedCalendar": [], + "Name": "WEL", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19970206", "19970328", "19970331", "19970425", "19970602", "19971027", "19971225", "19971226", "19980101", "19980102", "20020329", "20020401", "20030206", "20030418", "20030421", "20030425", "20030602", "20031027", "20031225", "20031226", "20040101", "20040102", "20040119", "20040206", "20040409", "20040412", "20040607", "20041025", "20041227", "20041228", "20050103", "20050104", "20050124", "20050325", "20050328", "20050425", "20050606", "20051024", "20051226", "20051227", "20060102", "20060103", "20060123", "20060206", "20060414", "20060417", "20060425", "20060605", "20061023", "20061225", "20061226", "20070101", "20070102", "20070122", "20070206", "20070406", "20070409", "20070425", "20070604", "20071022", "20071225", "20071226", "20080101", "20080102", "20080121", "20080206", "20080321", "20080324", "20080425", "20080602", "20081027", "20081225", "20081226", "20090101", "20090102", "20090119", "20090206", "20090410", "20090413", "20090601", "20091026", "20091225", "20091228", "20100101", "20100104", "20100125", "20100402", "20100405", "20100607", "20101025", "20101227", "20101228", "20110103", "20110104", "20110124", "20110422", "20110425", "20110606", "20111024", "20111226", "20111227", "20120102", "20120103", "20120123", "20120206", "20120406", "20120409", "20120425", "20120604", "20121022", "20121225", "20121226", "20130101", "20130102", "20130121", "20130206", "20130329", "20130401", "20130425", "20130603", "20131028", "20131225", "20131226", "20140101", "20140102", "20140120", "20140206", "20140418", "20140421", "20140425", "20140602", "20141027", "20141225", "20141226", "20150101", "20150102", "20150119", "20150206", "20150403", "20150406", "20150601", "20151026", "20151225", "20151228", "20160101", "20160104", "20160125", "20160325", "20160328", "20160425", "20160606", "20161024", "20161226", "20161227", "20170102", "20170103", "20170123", "20170206", "20170414", "20170417", "20170425", "20170605", "20171023", "20171225", "20171226", "20180101", "20180102", "20180122", "20180206", "20180330", "20180402", "20180425", "20180604", "20181022", "20181225", "20181226", "20190101", "20190102", "20190121", "20190206", "20190419", "20190422", "20190425", "20190603", "20191028", "20191225", "20191226", "20200101", "20200102", "20200120", "20200206", "20200410", "20200413", "20200601", "20201026", "20201225", "20201228", "20210101", "20210104", "20210125", "20210402", "20210405", "20210607", "20211025", "20211227", "20211228", "20220103", "20220104", "20220124", "20220415", "20220418", "20220425", "20220606", "20221024", "20221226", "20221227", "20230102", "20230103", "20230123", "20230206", "20230407", "20230410", "20230425", "20230605", "20231023", "20231225", "20231226", "20240101", "20240102", "20240122", "20240206", "20240329", "20240401", "20240425", "20240603", "20241028", "20241225", "20241226", "20250101", "20250102", "20250120", "20250206", "20250418", "20250421", "20250425", "20250602", "20251027", "20251225", "20251226", "20260101", "20260102", "20260119", "20260206", "20260403", "20260406", "20260601", "20261026", "20261225", "20261228", "20270101", "20270104", "20270125", "20270326", "20270329", "20270607", "20271025", "20271227", "20271228", "20280103", "20280104", "20280124", "20280414", "20280417", "20280425", "20280605", "20281023", "20281225", "20281226", "20290101", "20290102", "20290122", "20290206", "20290330", "20290402", "20290425", "20290604", "20291022", "20291225", "20291226", "20300101", "20300102", "20300121", "20300206", "20300419", "20300422", "20300425", "20300603", "20301028", "20301225", "20301226", "20310101", "20310102", "20310120", "20310206", "20310411", "20310414", "20310425", "20310602", "20311027", "20311225", "20311226", "20320101", "20320102", "20320119", "20320206", "20320326", "20320329", "20320607", "20321025", "20321227", "20321228", "20330103", "20330104", "20330124", "20330415", "20330418", "20330425", "20330606", "20331024", "20331226", "20331227", "20340102", "20340103", "20340123", "20340206", "20340407", "20340410", "20340425", "20340605", "20341023", "20341225", "20341226", "20350101", "20350102", "20350122", "20350206", "20350323", "20350326", "20350425", "20350604", "20351022", "20351225", "20351226", "20360101", "20360102", "20360121", "20360206", "20360411", "20360414", "20360425", "20360602", "20361027", "20361225", "20361226", "20370101", "20370102", "20370119", "20370206", "20370403", "20370406", "20370601", "20371026", "20371225", "20371228", "20380101", "20380104", "20380125", "20380423", "20380426", "20380607", "20381025", "20381227", "20381228", "20390103", "20390104", "20390124", "20390408", "20390411", "20390425", "20390606", "20391024", "20391226", "20391227", "20400102", "20400103", "20400123", "20400206", "20400330", "20400402", "20400425", "20400604", "20401022", "20401225", "20401226", "20410101", "20410102", "20410121", "20410206", "20410419", "20410422", "20410425", "20410603", "20411028", "20411225", "20411226", "20420101", "20420102", "20420120", "20420206", "20420404", "20420407", "20420425", "20420602", "20421027", "20421225", "20421226", "20430101", "20430102", "20430119", "20430206", "20430327", "20430330", "20430601", "20431026", "20431225", "20431228", "20440101", "20440104", "20440125", "20440415", "20440418", "20440425", "20440606", "20441024", "20441226", "20441227", "20450102", "20450103", "20450123", "20450206", "20450407", "20450410", "20450425", "20450605", "20451023", "20451225", "20451226", "20460101", "20460102", "20460122", "20460206", "20460323", "20460326", "20460425", "20460604", "20461022", "20461225", "20461226", "20470101", "20470102", "20470121", "20470206", "20470412", "20470415", "20470425", "20470603", "20471028", "20471225", "20471226", "20480101", "20480102", "20480120", "20480206", "20480403", "20480406", "20480601", "20481026", "20481225", "20481228", "20490101", "20490104", "20490125", "20490416", "20490419", "20490607", "20491025", "20491227", "20491228", "20500103", "20500104", "20500124", "20500408", "20500411", "20500425", "20500606", "20501024", "20501226", "20501227", "20510102", "20510103", "20510123", "20510206", "20510331", "20510403", "20510425", "20510605", "20511023", "20511225", "20511226", "20520101", "20520102", "20520122", "20520206", "20520419", "20520422", "20520425", "20520603", "20521028", "20521225", "20521226", "20530101", "20530102", "20530120", "20530206", "20530404", "20530407", "20530425", "20530602", "20531027", "20531225", "20531226", "20540101", "20540102", "20540119", "20540206", "20540327", "20540330", "20540601", "20541026", "20541225", "20541228", "20550101", "20550104", "20550125", "20550416", "20550419", "20550607", "20551025", "20551227", "20551228", "20560103", "20560104", "20560124", "20560331", "20560403", "20560425", "20560605", "20561023", "20561225", "20561226", "20570101", "20570102", "20570122", "20570206", "20570420", "20570423", "20570425", "20570604", "20571022", "20571225", "20571226", "20580101", "20580102", "20580121", "20580206", "20580412", "20580415", "20580425", "20580603", "20581028", "20581225", "20581226", "20590101", "20590102", "20590120", "20590206", "20590328", "20590331", "20590425", "20590602", "20591027", "20591225", "20591226", "20600101", "20600102", "20600119", "20600206", "20600416", "20600419", "20600607", "20601025", "20601227", "20601228", "20610103", "20610104", "20610124", "20610408", "20610411", "20610425", "20610606", "20611024", "20611226", "20611227" ], + "MonthsToExclude": [] + }, + "ZAB": { + "InheritedCalendar": [], + "Name": "ZAB", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20031008", "20031225", "20031226", "20040101", "20040106", "20040412", "20040610", "20040622", "20040625", "20040805", "20041008", "20041101", "20050106", "20050328", "20050526", "20050622", "20050805", "20050815", "20051101", "20051226", "20060106", "20060417", "20060501", "20060615", "20060622", "20060815", "20061101", "20061225", "20061226", "20070101", "20070409", "20070501", "20070607", "20070622", "20070625", "20070815", "20071008", "20071101", "20071225", "20071226", "20080101", "20080324", "20080501", "20080522", "20080625", "20080805", "20080815", "20081008", "20081225", "20081226", "20090101", "20090106", "20090413", "20090501", "20090611", "20090622", "20090625", "20090805", "20091008", "20091225", "20100101", "20100106", "20100405", "20100603", "20100622", "20100625", "20100805", "20101008", "20101101", "20110106", "20110425", "20110622", "20110623", "20110805", "20110815", "20111101", "20111226", "20120106", "20120409", "20120501", "20120607", "20120622", "20120625", "20120815", "20121008", "20121101", "20121225", "20121226", "20130101", "20130401", "20130501", "20130530", "20130625", "20130805", "20130815", "20131008", "20131101", "20131225", "20131226", "20140101", "20140106", "20140421", "20140501", "20140619", "20140625", "20140805", "20140815", "20141008", "20141225", "20141226", "20150101", "20150106", "20150406", "20150501", "20150604", "20150622", "20150625", "20150805", "20151008", "20151225", "20160101", "20160106", "20160328", "20160526", "20160622", "20160805", "20160815", "20161101", "20161226", "20170106", "20170417", "20170501", "20170615", "20170622", "20170815", "20171101", "20171225", "20171226", "20180101", "20180402", "20180501", "20180531", "20180622", "20180625", "20180815", "20181008", "20181101", "20181225", "20181226", "20190101", "20190422", "20190501", "20190620", "20190625", "20190805", "20190815", "20191008", "20191101", "20191225", "20191226", "20200101", "20200106", "20200413", "20200501", "20200611", "20200622", "20200625", "20200805", "20201008", "20201225", "20210101", "20210106", "20210405", "20210603", "20210622", "20210625", "20210805", "20211008", "20211101", "20220106", "20220418", "20220616", "20220622", "20220805", "20220815", "20221101", "20221226", "20230106", "20230410", "20230501", "20230608", "20230622", "20230815", "20231101", "20231225", "20231226", "20240101", "20240401", "20240501", "20240530", "20240625", "20240805", "20240815", "20241008", "20241101", "20241225", "20241226", "20250101", "20250106", "20250421", "20250501", "20250619", "20250625", "20250805", "20250815", "20251008", "20251225", "20251226", "20260101", "20260106", "20260406", "20260501", "20260604", "20260622", "20260625", "20260805", "20261008", "20261225", "20270101", "20270106", "20270329", "20270527", "20270622", "20270625", "20270805", "20271008", "20271101", "20280106", "20280417", "20280501", "20280615", "20280622", "20280815", "20281101", "20281225", "20281226", "20290101", "20290402", "20290501", "20290531", "20290622", "20290625", "20290815", "20291008", "20291101", "20291225", "20291226", "20300101", "20300422", "20300501", "20300620", "20300625", "20300805", "20300815", "20301008", "20301101", "20301225", "20301226", "20310101", "20310106", "20310414", "20310501", "20310612", "20310625", "20310805", "20310815", "20311008", "20311225", "20311226", "20320101", "20320106", "20320329", "20320527", "20320622", "20320625", "20320805", "20321008", "20321101", "20330106", "20330418", "20330616", "20330622", "20330805", "20330815", "20331101", "20331226", "20340106", "20340410", "20340501", "20340608", "20340622", "20340815", "20341101", "20341225", "20341226", "20350101", "20350326", "20350501", "20350524", "20350622", "20350625", "20350815", "20351008", "20351101", "20351225", "20351226", "20360101", "20360414", "20360501", "20360612", "20360625", "20360805", "20360815", "20361008", "20361225", "20361226", "20370101", "20370106", "20370406", "20370501", "20370604", "20370622", "20370625", "20370805", "20371008", "20371225", "20380101", "20380106", "20380426", "20380622", "20380624", "20380625", "20380805", "20381008", "20381101", "20390106", "20390411", "20390609", "20390622", "20390805", "20390815", "20391101", "20391226", "20400106", "20400402", "20400501", "20400531", "20400622", "20400625", "20400815", "20401008", "20401101", "20401225", "20401226", "20410101", "20410422", "20410501", "20410620", "20410625", "20410805", "20410815", "20411008", "20411101", "20411225", "20411226", "20420101", "20420106", "20420407", "20420501", "20420605", "20420625", "20420805", "20420815", "20421008", "20421225", "20421226", "20430101", "20430106", "20430330", "20430501", "20430528", "20430622", "20430625", "20430805", "20431008", "20431225", "20440101", "20440106", "20440418", "20440616", "20440622", "20440805", "20440815", "20441101", "20441226", "20450106", "20450410", "20450501", "20450608", "20450622", "20450815", "20451101", "20451225", "20451226", "20460101", "20460326", "20460501", "20460524", "20460622", "20460625", "20460815", "20461008", "20461101", "20461225", "20461226", "20470101", "20470415", "20470501", "20470613", "20470625", "20470805", "20470815", "20471008", "20471101", "20471225", "20471226", "20480101", "20480106", "20480406", "20480501", "20480604", "20480622", "20480625", "20480805", "20481008", "20481225", "20490101", "20490106", "20490419", "20490617", "20490622", "20490625", "20490805", "20491008", "20491101", "20500106", "20500411", "20500609", "20500622", "20500805", "20500815", "20501101", "20501226", "20510106", "20510403", "20510501", "20510601", "20510622", "20510815", "20511101", "20511225", "20511226", "20520101", "20520422", "20520501", "20520620", "20520625", "20520805", "20520815", "20521008", "20521101", "20521225", "20521226", "20530101", "20530106", "20530407", "20530501", "20530605", "20530625", "20530805", "20530815", "20531008", "20531225", "20531226", "20540101", "20540106", "20540330", "20540501", "20540528", "20540622", "20540625", "20540805", "20541008", "20541225", "20550101", "20550106", "20550419", "20550617", "20550622", "20550625", "20550805", "20551008", "20551101", "20560106", "20560403", "20560501", "20560601", "20560622", "20560815", "20561101", "20561225", "20561226", "20570101", "20570423", "20570501", "20570621", "20570622", "20570625", "20570815", "20571008", "20571101", "20571225", "20571226", "20580101", "20580415", "20580501", "20580613", "20580625", "20580805", "20580815", "20581008", "20581101", "20581225", "20581226", "20590101", "20590106", "20590331", "20590501", "20590529", "20590625", "20590805", "20590815", "20591008", "20591225", "20591226", "20600101", "20600106", "20600419", "20600617", "20600622", "20600625", "20600805", "20601008", "20601101", "20610106", "20610411", "20610609", "20610622", "20610805", "20610815", "20611101", "20611226" ], + "MonthsToExclude": [] + }, + "ZUR": { + "InheritedCalendar": [], + "Name": "ZUR", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "19800102", "19810102", "19840102", "19850102", "19860102", "19870102", "19880101", "19880401", "19880404", "19880512", "19880523", "19880801", "19881226", "19890102", "19890324", "19890327", "19890501", "19890504", "19890515", "19890801", "19890907", "19890918", "19891225", "19891226", "19900101", "19900102", "19900413", "19900416", "19900501", "19900524", "19900604", "19900801", "19901224", "19901225", "19901226", "19910101", "19910102", "19910329", "19910401", "19910501", "19910509", "19910520", "19910801", "19911225", "19911226", "19920101", "19920102", "19920417", "19920420", "19920501", "19920528", "19920608", "19921224", "19921225", "19930101", "19930409", "19930412", "19930520", "19930531", "19940401", "19940404", "19940512", "19940523", "19940801", "19941226", "19950102", "19950414", "19950417", "19950501", "19950525", "19950605", "19950801", "19951225", "19951226", "19960101", "19960102", "19960405", "19960408", "19960501", "19960516", "19960527", "19960801", "19961225", "19961226", "19970101", "19970102", "19970328", "19970331", "19970508", "19970519", "19970801", "19971225", "19971226", "19980101", "19980102", "19980410", "19980413", "19980521", "19980601", "19981225", "19990101", "19990402", "19990405", "19990513", "19990524", "19991231", "20000103", "20000421", "20000424", "20000501", "20000601", "20000612", "20000801", "20001225", "20001226", "20010101", "20010102", "20010413", "20010416", "20010501", "20010524", "20010604", "20010801", "20011225", "20011226", "20011231", "20020101", "20020102", "20020329", "20020401", "20020501", "20020509", "20020520", "20020801", "20021225", "20021226", "20030101", "20030102", "20030418", "20030421", "20030501", "20030529", "20030609", "20030801", "20031225", "20031226", "20040101", "20040102", "20040409", "20040412", "20040501", "20040520", "20040531", "20050325", "20050328", "20050501", "20050505", "20050516", "20050801", "20051225", "20051226", "20060102", "20060414", "20060417", "20060501", "20060525", "20060605", "20060801", "20061225", "20061226", "20070101", "20070102", "20070406", "20070409", "20070501", "20070517", "20070528", "20070801", "20071225", "20071226", "20080101", "20080102", "20080321", "20080324", "20080501", "20080512", "20080801", "20081225", "20081226", "20090101", "20090102", "20090410", "20090413", "20090501", "20090521", "20090601", "20091225", "20100101", "20100402", "20100405", "20100513", "20100524", "20110422", "20110425", "20110602", "20110613", "20110801", "20111226", "20120102", "20120406", "20120409", "20120501", "20120517", "20120528", "20120801", "20121225", "20121226", "20130101", "20130102", "20130329", "20130401", "20130501", "20130509", "20130520", "20130801", "20131225", "20131226", "20140101", "20140102", "20140418", "20140421", "20140501", "20140529", "20140609", "20140801", "20141225", "20141226", "20150101", "20150102", "20150403", "20150406", "20150501", "20150514", "20150525", "20151225", "20160101", "20160325", "20160328", "20160505", "20160516", "20160801", "20161226", "20170102", "20170414", "20170417", "20170501", "20170525", "20170605", "20170801", "20171225", "20171226", "20180101", "20180102", "20180330", "20180402", "20180501", "20180510", "20180521", "20180801", "20181225", "20181226", "20190101", "20190102", "20190419", "20190422", "20190501", "20190530", "20190610", "20190801", "20191225", "20191226", "20200101", "20200102", "20200410", "20200413", "20200501", "20200521", "20200601", "20201225", "20210101", "20210402", "20210405", "20210513", "20210524", "20220415", "20220418", "20220526", "20220606", "20220801", "20221226", "20230102", "20230407", "20230410", "20230501", "20230518", "20230529", "20230801", "20231225", "20231226", "20240101", "20240102", "20240329", "20240401", "20240501", "20240509", "20240520", "20240801", "20241225", "20241226", "20250101", "20250102", "20250418", "20250421", "20250501", "20250529", "20250609", "20250801", "20251225", "20251226", "20260101", "20260102", "20260403", "20260406", "20260501", "20260514", "20260525", "20261225", "20270101", "20270326", "20270329", "20270506", "20270517", "20280414", "20280417", "20280501", "20280525", "20280605", "20280801", "20281225", "20281226", "20290101", "20290102", "20290330", "20290402", "20290501", "20290510", "20290521", "20290801", "20291225", "20291226", "20300101", "20300102", "20300419", "20300422", "20300501", "20300530", "20300610", "20300801", "20301225", "20301226", "20310101", "20310102", "20310411", "20310414", "20310501", "20310522", "20310602", "20310801", "20311225", "20311226", "20320101", "20320102", "20320326", "20320329", "20320506", "20320517", "20330415", "20330418", "20330526", "20330606", "20330801", "20331226", "20340102", "20340407", "20340410", "20340501", "20340518", "20340529", "20340801", "20341225", "20341226", "20350101", "20350102", "20350323", "20350326", "20350501", "20350503", "20350514", "20350801", "20351225", "20351226", "20360101", "20360102", "20360411", "20360414", "20360501", "20360522", "20360602", "20360801", "20361225", "20361226", "20370101", "20370102", "20370403", "20370406", "20370501", "20370514", "20370525", "20371225", "20380101", "20380423", "20380426", "20380603", "20380614", "20390408", "20390411", "20390519", "20390530", "20390801", "20391226", "20400102", "20400330", "20400402", "20400501", "20400510", "20400521", "20400801", "20401225", "20401226", "20410101", "20410102", "20410419", "20410422", "20410501", "20410530", "20410610", "20410801", "20411225", "20411226", "20420101", "20420102", "20420404", "20420407", "20420501", "20420515", "20420526", "20420801", "20421225", "20421226", "20430101", "20430102", "20430327", "20430330", "20430501", "20430507", "20430518", "20431225", "20440101", "20440415", "20440418", "20440526", "20440606", "20440801", "20441226", "20450102", "20450407", "20450410", "20450501", "20450518", "20450529", "20450801", "20451225", "20451226", "20460101", "20460102", "20460323", "20460326", "20460501", "20460503", "20460514", "20460801", "20461225", "20461226", "20470101", "20470102", "20470412", "20470415", "20470501", "20470523", "20470603", "20470801", "20471225", "20471226", "20480101", "20480102", "20480403", "20480406", "20480501", "20480514", "20480525", "20481225", "20490101", "20490416", "20490419", "20490527", "20490607", "20500408", "20500411", "20500519", "20500530", "20500801", "20501226", "20510102", "20510331", "20510403", "20510501", "20510511", "20510522", "20510801", "20511225", "20511226", "20520101", "20520102", "20520419", "20520422", "20520501", "20520530", "20520610", "20520801", "20521225", "20521226", "20530101", "20530102", "20530404", "20530407", "20530501", "20530515", "20530526", "20530801", "20531225", "20531226", "20540101", "20540102", "20540327", "20540330", "20540501", "20540507", "20540518", "20541225", "20550101", "20550416", "20550419", "20550527", "20550607", "20560331", "20560403", "20560501", "20560511", "20560522", "20560801", "20561225", "20561226", "20570101", "20570102", "20570420", "20570423", "20570501", "20570531", "20570611", "20570801", "20571225", "20571226", "20580101", "20580102", "20580412", "20580415", "20580501", "20580523", "20580603", "20580801", "20581225", "20581226", "20590101", "20590102", "20590328", "20590331", "20590501", "20590508", "20590519", "20590801", "20591225", "20591226", "20600101", "20600102", "20600416", "20600419", "20600527", "20600607", "20610408", "20610411", "20610519", "20610530", "20610801", "20611226", "20620102", "20630102", "20640102", "20650102", "20680102", "20690102", "20700102" ], + "MonthsToExclude": [] + }, + "FXHISTSIM": { + "InheritedCalendar": [], + "Name": "FXHISTSIM", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20000103", "20000421", "20001225", "20001226", "20010101", "20010413", "20011225", "20011226", "20020101", "20020329", "20021225", "20021226", "20030101", "20030418", "20031225", "20031226", "20040101", "20040409", "20050103", "20050325", "20051226", "20060102", "20060414", "20061225", "20061226", "20070101", "20070406", "20071225", "20071226", "20080101", "20080321", "20081225", "20081226", "20090101", "20090410", "20091225", "20100101", "20100402", "20110103", "20110422", "20111226", "20120102", "20120406", "20121225", "20121226", "20130101", "20130329", "20131225", "20131226", "20140101", "20140418", "20141225", "20141226", "20150101", "20150403", "20151225", "20160101", "20160325", "20161226", "20170102", "20170414", "20171225", "20171226", "20180101", "20180330", "20181225", "20181226", "20190101", "20190419", "20191225", "20191226", "20200101", "20200410", "20201225", "20210101", "20210402", "20220103", "20220415", "20221226", "20230102", "20230407", "20231225", "20231226", "20240101", "20240329", "20241225", "20241226", "20250101", "20250418", "20251225", "20251226", "20260101", "20260403", "20261225", "20270101", "20270326", "20280103", "20280414", "20281225", "20281226", "20290101", "20290330", "20291225", "20291226", "20300101", "20300419", "20301225", "20301226", "20310101", "20310411", "20311225", "20311226", "20320101", "20320326", "20330103", "20330415", "20331226", "20340102", "20340407", "20341225", "20341226", "20350101", "20350323", "20351225", "20351226", "20360101", "20360411", "20361225", "20361226", "20370101", "20370403", "20371225", "20380101", "20380423", "20390103", "20390408", "20391226", "20400102", "20400330", "20401225", "20401226", "20410101", "20410419", "20411225", "20411226", "20420101", "20420404", "20421225", "20421226", "20430101", "20430327", "20431225", "20440101", "20440415", "20441226", "20450102", "20450407", "20451225", "20451226", "20460101", "20460323", "20461225", "20461226", "20470101", "20470412", "20471225", "20471226", "20480101", "20480403", "20481225", "20490101", "20490416", "20500103", "20500408", "20501226", "20510102", "20510331", "20511225", "20511226", "20520101", "20520419", "20521225", "20521226", "20530101", "20530404", "20531225", "20531226", "20540101", "20540327", "20541225", "20550101", "20550416", "20560103", "20560331", "20561225", "20561226", "20570101", "20570420", "20571225", "20571226", "20580101", "20580412", "20581225", "20581226", "20590101", "20590328", "20591225", "20591226", "20600101", "20600416", "20610103", "20610408", "20611226", "20620102", "20620324", "20621225", "20621226", "20630101", "20630413", "20631225", "20631226", "20640101", "20640404", "20641225", "20641226", "20650101", "20650327", "20651225", "20660101", "20660409", "20670103", "20670401", "20671226", "20680102", "20680420", "20681225", "20681226", "20690101", "20690412", "20691225", "20691226", "20700101", "20700328", "20701225", "20701226", "20710101", "20710417", "20711225", "20720101", "20720408", "20721226", "20730102", "20730324", "20731225", "20731226", "20740101", "20740413", "20741225", "20741226", "20750101", "20750405", "20751225", "20751226", "20760101", "20760417", "20761225", "20770101", "20770409", "20780103", "20780401", "20781226", "20790102", "20790421", "20791225", "20791226", "20800101", "20800405", "20801225", "20801226", "20810101", "20810328", "20811225", "20811226", "20820101", "20820417", "20821225", "20830101", "20830402", "20840103", "20840324", "20841225", "20841226", "20850101", "20850413", "20851225", "20851226", "20860101", "20860329", "20861225", "20861226", "20870101", "20870418", "20871225", "20871226", "20880101", "20880409", "20890103", "20890401", "20891226", "20900102", "20900414", "20901225", "20901226", "20910101", "20910406", "20911225", "20911226", "20920101", "20920328", "20921225", "20921226", "20930101", "20930410", "20931225", "20940101", "20940402", "20950103", "20950422", "20951226", "20960102", "20960413", "20961225", "20961226", "20970101", "20970329", "20971225", "20971226", "20980101", "20980418", "20981225", "20981226", "20990101", "20990410", "20991225" ], + "MonthsToExclude": [] + }, + "ATH_SE": { + "InheritedCalendar": [], + "Name": "ATH_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040106", "20040223", "20040325", "20040409", "20040412", "20040531", "20040813", "20041028", "20050106", "20050314", "20050325", "20050328", "20050429", "20050502", "20050620", "20050815", "20051028", "20051226", "20060106", "20060306", "20060414", "20060417", "20060421", "20060424", "20060501", "20060612", "20060815", "20061225", "20061226", "20070101", "20070219", "20070406", "20070409", "20070501", "20070528", "20070815", "20071225", "20071226", "20080101", "20080310", "20080321", "20080324", "20080325", "20080425", "20080428", "20080501", "20080616", "20080815", "20081028", "20081225", "20081226", "20090101", "20090106", "20090302", "20090325", "20090410", "20090413", "20090417", "20090420", "20090501", "20090608", "20091028", "20091225", "20100101", "20100106", "20100215", "20100325", "20100402", "20100405", "20100524", "20101028", "20110106", "20110307", "20110325", "20110422", "20110425", "20110613", "20110815", "20111028", "20111226", "20120106", "20120227", "20120406", "20120409", "20120413", "20120416", "20120501", "20120604", "20120815", "20121225", "20121226", "20130101", "20130318", "20130325", "20130329", "20130401", "20130501", "20130503", "20130506", "20130624", "20130815", "20131028", "20131225", "20131226", "20140101", "20140106", "20140303", "20140325", "20140418", "20140421", "20140501", "20140609", "20140815", "20141028", "20141225", "20141226", "20150101", "20150106", "20150223", "20150325", "20150403", "20150406", "20150410", "20150413", "20150501", "20150601", "20151028", "20151225", "20160101", "20160106", "20160314", "20160325", "20160328", "20160429", "20160502", "20160620", "20160815", "20161028", "20161226", "20170106", "20170227", "20170414", "20170417", "20170501", "20170605", "20170815", "20171225", "20171226", "20180101", "20180219", "20180330", "20180402", "20180406", "20180409", "20180501", "20180528", "20180815", "20181225", "20181226", "20190101", "20190311", "20190325", "20190419", "20190422", "20190426", "20190429", "20190501", "20190617", "20190815", "20191028", "20191225", "20191226", "20200101", "20200106", "20200302", "20200325", "20200410", "20200413", "20200417", "20200420", "20200501", "20200608", "20201028", "20201225" ], + "MonthsToExclude": [] + }, + "BUP_SE": { + "InheritedCalendar": [], + "Name": "BUP_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040102", "20040408", "20040412", "20040820", "20041023", "20041224", "20041225", "20041226", "20050101", "20050324", "20050328", "20050820", "20051023", "20051225", "20051226", "20060101", "20060102", "20060413", "20060417", "20060820", "20061023", "20061225", "20061226", "20070101", "20070102", "20070405", "20070409", "20070820", "20071023", "20071224", "20071225", "20071226", "20080101", "20080102", "20080320", "20080324", "20080820", "20081023", "20081224", "20081225", "20081226", "20090101", "20090102", "20090409", "20090413", "20090820", "20091023", "20091224", "20091225", "20091226", "20100101", "20100401", "20100405", "20100820", "20101023", "20101224", "20101225", "20101226", "20110101", "20110421", "20110425", "20110820", "20111023", "20111225", "20111226", "20120101", "20120102", "20120405", "20120409", "20120820", "20121023", "20121224", "20121225", "20121226", "20130101", "20130102", "20130328", "20130401", "20130820", "20131023", "20131224", "20131225", "20131226", "20140101", "20140102", "20140417", "20140421", "20140820", "20141023", "20141224", "20141225", "20141226", "20150101", "20150102", "20150402", "20150406", "20150820", "20151023", "20151224", "20151225", "20151226", "20160101", "20160324", "20160328", "20160820", "20161023", "20161225", "20161226", "20170101", "20170102", "20170413", "20170417", "20170820", "20171023", "20171225", "20171226", "20180101", "20180102", "20180329", "20180402", "20180820", "20181023", "20181224", "20181225", "20181226", "20190101", "20190102", "20190418", "20190422", "20190820", "20191023", "20191224", "20191225", "20191226", "20200101", "20200102", "20200409", "20200413", "20201224", "20201225", "20201226" ], + "MonthsToExclude": [] + }, + "CBOT": { + "InheritedCalendar": [ "US_EXCH_BASE" ], + "Name": "CBOT", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "20061009", "20070102", "20071008", "20071112", "20081013", "20081111", "20091012", "20091111", "20101011", "20101111" ], + "MonthsToExclude": [] + }, + "CME": { + "InheritedCalendar": [ "US_EXCH_BASE" ], + "Name": "CME", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "20061009", "20070102", "20071008", "20071112", "20081013", "20081111", "20091012", "20091111", "20101011", "20101111" ], + "MonthsToExclude": [] + }, + "COH_SE": { + "InheritedCalendar": [], + "Name": "COH_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040408", "20040409", "20040412", "20040507", "20040520", "20040531", "20041224", "20041231", "20050324", "20050325", "20050328", "20050422", "20050505", "20050516", "20051226", "20060413", "20060414", "20060417", "20060512", "20060525", "20060605", "20061225", "20061226", "20070101", "20070405", "20070406", "20070409", "20070504", "20070517", "20070528", "20070605", "20071224", "20071225", "20071226", "20071231", "20080101", "20080320", "20080321", "20080324", "20080418", "20080501", "20080512", "20080605", "20081224", "20081225", "20081226", "20081231", "20090101", "20090409", "20090410", "20090413", "20090508", "20090521", "20090601", "20090605", "20091224", "20091225", "20091231", "20100101", "20100401", "20100402", "20100405", "20100430", "20100513", "20100524", "20101224", "20101231", "20110421", "20110422", "20110425", "20110520", "20110602", "20110613", "20111226", "20120405", "20120406", "20120409", "20120504", "20120517", "20120528", "20120605", "20121224", "20121225", "20121226", "20121231", "20130101", "20130328", "20130329", "20130401", "20130426", "20130509", "20130520", "20130605", "20131224", "20131225", "20131226", "20131231", "20140101", "20140417", "20140418", "20140421", "20140516", "20140529", "20140605", "20140609", "20141224", "20141225", "20141226", "20141231", "20150101", "20150402", "20150403", "20150406", "20150501", "20150514", "20150525", "20150605", "20151224", "20151225", "20151231", "20160101", "20160324", "20160325", "20160328", "20160422", "20160505", "20160516", "20161226", "20170413", "20170414", "20170417", "20170512", "20170525", "20170605", "20171225", "20171226", "20180101", "20180329", "20180330", "20180402", "20180427", "20180510", "20180521", "20180605", "20181224", "20181225", "20181226", "20181231", "20190101", "20190418", "20190419", "20190422", "20190517", "20190530", "20190605", "20190610", "20191224", "20191225", "20191226", "20191231", "20200101", "20200409", "20200410", "20200413", "20200508", "20200521", "20200601", "20200605", "20201224", "20201225", "20201231" ], + "MonthsToExclude": [] + }, + "DUB_SE": { + "InheritedCalendar": [], + "Name": "DUB_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040409", "20040412", "20040503", "20040607", "20041224", "20041227", "20041228", "20050103", "20050325", "20050328", "20050502", "20050606", "20051226", "20051227", "20060102", "20060414", "20060417", "20060501", "20060605", "20061225", "20061226", "20070101", "20070406", "20070409", "20070507", "20070604", "20071224", "20071225", "20071226", "20080101", "20080321", "20080324", "20080505", "20080602", "20081224", "20081225", "20081226", "20090101", "20090410", "20090413", "20090504", "20090601", "20091224", "20091225", "20091228", "20100101", "20100402", "20100405", "20100503", "20100607", "20101224", "20101227", "20101228", "20110103", "20110422", "20110425", "20110502", "20110606", "20111226", "20111227", "20120102", "20120406", "20120409", "20120507", "20120604", "20121224", "20121225", "20121226", "20130101", "20130329", "20130401", "20130506", "20130603", "20131224", "20131225", "20131226", "20140101", "20140418", "20140421", "20140505", "20140602", "20141224", "20141225", "20141226", "20150101", "20150403", "20150406", "20150504", "20150601", "20151224", "20151225", "20151228", "20160101", "20160325", "20160328", "20160502", "20160606", "20161226", "20161227", "20170102", "20170414", "20170417", "20170501", "20170605", "20171225", "20171226", "20180101", "20180330", "20180402", "20180507", "20180604", "20181224", "20181225", "20181226", "20190101", "20190419", "20190422", "20190506", "20190603", "20191224", "20191225", "20191226", "20200101", "20200410", "20200413", "20200504", "20200601", "20201224", "20201225", "20201228" ], + "MonthsToExclude": [] + }, + "ESX": { + "InheritedCalendar": [], + "Name": "ESX", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20070101", "20070406", "20070409", "20070501", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20081224", "20081225", "20081226", "20081231", "20090101", "20090410", "20090413", "20090501", "20091224", "20091225", "20091231", "20100101", "20100402", "20100405", "20101224", "20101231", "20110422", "20110425", "20111226", "20120406", "20120409", "20120501", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20131224", "20131225", "20131226", "20131231", "20140101", "20140418", "20140421", "20140501", "20141224", "20141225", "20141226", "20141231", "20150101", "20150403", "20150406", "20150501", "20151224", "20151225", "20151231", "20160101", "20160325", "20160328", "20161226", "20170414", "20170417", "20170501", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20191224", "20191225", "20191226", "20191231", "20200101", "20200410", "20200413", "20200501", "20201224", "20201225", "20201231", "20210101", "20210402", "20210405", "20211224", "20211231", "20220415", "20220418", "20221226", "20230407", "20230410", "20230501", "20231225", "20231226", "20240101", "20240329", "20240401", "20240501", "20241224", "20241225", "20241226", "20241231", "20250101", "20250418", "20250421", "20250501", "20251224", "20251225", "20251226", "20251231" ], + "MonthsToExclude": [] + }, + "FRA_SE": { + "InheritedCalendar": [], + "Name": "FRA_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040409", "20040412", "20041224", "20041231", "20050325", "20050328", "20051226", "20060414", "20060417", "20060501", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070528", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20081224", "20081225", "20081226", "20081231", "20090101", "20090410", "20090413", "20090501", "20091224", "20091225", "20091231", "20100101", "20100402", "20100405", "20101224", "20101231", "20110422", "20110425", "20111226", "20120406", "20120409", "20120501", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20131224", "20131225", "20131226", "20131231", "20140101", "20140418", "20140421", "20140501", "20141224", "20141225", "20141226", "20141231", "20150101", "20150403", "20150406", "20150501", "20151224", "20151225", "20151231", "20160101", "20160325", "20160328", "20161226", "20170414", "20170417", "20170501", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20191224", "20191225", "20191226", "20191231", "20200101", "20200410", "20200413", "20200501", "20201224", "20201225", "20201231" ], + "MonthsToExclude": [] + }, + "HEL_SE": { + "InheritedCalendar": [], + "Name": "HEL_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040106", "20040409", "20040412", "20040520", "20040625", "20041206", "20041224", "20041231", "20050106", "20050325", "20050328", "20050505", "20050624", "20051206", "20051226", "20060106", "20060414", "20060417", "20060501", "20060525", "20060623", "20061206", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070517", "20070622", "20071206", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20080620", "20081224", "20081225", "20081226", "20081231", "20090101", "20090106", "20090410", "20090413", "20090501", "20090521", "20090619", "20091224", "20091225", "20091231", "20100101", "20100106", "20100402", "20100405", "20100513", "20100625", "20101206", "20101224", "20101231", "20110106", "20110422", "20110425", "20110602", "20110624", "20111206", "20111226", "20120106", "20120406", "20120409", "20120501", "20120517", "20120622", "20121206", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20130509", "20130621", "20131206", "20131224", "20131225", "20131226", "20131231", "20140101", "20140106", "20140418", "20140421", "20140501", "20140529", "20140620", "20141224", "20141225", "20141226", "20141231", "20150101", "20150106", "20150403", "20150406", "20150501", "20150514", "20150619", "20151224", "20151225", "20151231", "20160101", "20160106", "20160325", "20160328", "20160505", "20160624", "20161206", "20161226", "20170106", "20170414", "20170417", "20170501", "20170525", "20170623", "20171206", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180510", "20180622", "20181206", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20190530", "20190621", "20191206", "20191224", "20191225", "20191226", "20191231", "20200101", "20200106", "20200410", "20200413", "20200501", "20200521", "20200619", "20201224", "20201225", "20201231" ], + "MonthsToExclude": [] + }, + "HKG_SE": { + "InheritedCalendar": [], + "Name": "HKG_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040122", "20040123", "20040405", "20040409", "20040412", "20040526", "20040622", "20040701", "20040929", "20041001", "20041022", "20041227", "20050209", "20050210", "20050211", "20050325", "20050328", "20050405", "20050502", "20050516", "20050701", "20050919", "20051011", "20051226", "20051227", "20060102", "20060130", "20060131", "20060405", "20060414", "20060417", "20060501", "20060505", "20060531", "20061002", "20061030", "20061225", "20061226", "20070101", "20070219", "20070220", "20070405", "20070406", "20070409", "20070501", "20070524", "20070619", "20070702", "20070926", "20071001", "20071019", "20071225", "20071226", "20080101", "20080207", "20080208", "20080321", "20080324", "20080404", "20080501", "20080512", "20080608", "20080609", "20080701", "20080915", "20081001", "20081007", "20081225", "20081226", "20090101", "20090126", "20090127", "20090128", "20090410", "20090413", "20090501", "20090528", "20090701", "20091001", "20091026", "20091225", "20100101", "20100215", "20100216", "20100402", "20100405", "20100521", "20100616", "20100701", "20100923", "20101001", "20101016", "20101227", "20110203", "20110204", "20110405", "20110422", "20110425", "20110502", "20110510", "20110606", "20110701", "20110913", "20111005", "20111226", "20111227", "20120102", "20120123", "20120124", "20120125", "20120405", "20120406", "20120409", "20120501", "20120528", "20120623", "20120702", "20121001", "20121023", "20121225", "20121226", "20130101", "20130211", "20130212", "20130329", "20130401", "20130405", "20130501", "20130612", "20130701", "20130920", "20131001", "20131013", "20131225", "20131226", "20140101", "20140131", "20140203", "20140418", "20140421", "20140501", "20140602", "20140701", "20140909", "20141001", "20141002", "20141225", "20141226", "20150101", "20150219", "20150220", "20150403", "20150406", "20150501", "20150620", "20150701", "20150928", "20151001", "20151021", "20151225", "20160101", "20160208", "20160209", "20160210", "20160325", "20160328", "20160405", "20160502", "20160609", "20160701", "20161009", "20161226", "20161227", "20170102", "20170127", "20170130", "20170405", "20170414", "20170417", "20170501", "20170530", "20171002", "20171028", "20171225", "20171226", "20180101", "20180216", "20180219", "20180330", "20180402", "20180405", "20180501", "20180618", "20180702", "20181001", "20181017", "20181225", "20181226", "20190101", "20190205", "20190206", "20190207", "20190405", "20190419", "20190422", "20190501", "20190607", "20190701", "20191001", "20191007", "20191225", "20191226", "20200101", "20200124", "20200127", "20200410", "20200413", "20200501", "20200625", "20200701", "20201001", "20201025", "20201225", "20210212", "20210215", "20220201", "20220202", "20220203", "20230123", "20230124", "20240209", "20240212", "20250129", "20250130", "20250131", "20260217", "20260218", "20260219", "20270205", "20270208", "20280126", "20280127", "20280128", "20290213", "20290214", "20290215" ], + "MonthsToExclude": [] + }, + "ICE": { + "InheritedCalendar": [ "US_XMAS", "BOXINGDAY", "EASTER_GF", "US_NYD" ], + "Name": "ICE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20060102", "20060414", "20060529", "20061225", "20070101", "20070406", "20071225", "20080101", "20080321", "20081225", "20090101", "20090410", "20091225", "20100101", "20100402", "20110422", "20111226", "20120102", "20120406", "20121225", "20130101", "20130329", "20131225", "20140101", "20140418", "20141225", "20150101", "20150403", "20151225", "20160101", "20160325", "20161226", "20170102", "20170414", "20171225", "20180101", "20180330", "20181225", "20190101", "20190419", "20191225", "20200101", "20200410", "20201225" ], + "MonthsToExclude": [] + }, + "JOA_SE": { + "InheritedCalendar": [], + "Name": "JOA_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040409", "20040412", "20050101", "20050325", "20050328", "20050502", "20060101", "20060414", "20060417", "20060501", "20070101", "20070406", "20070409", "20070501", "20080101", "20080321", "20080324", "20080501", "20090101", "20090410", "20090413", "20090427", "20090501", "20090616", "20090924", "20091225", "20100101", "20100402", "20100405", "20100427", "20100616", "20100924", "20101227", "20110101", "20110321", "20110422", "20110425", "20110427", "20110502", "20110616", "20111226", "20120101", "20120321", "20120406", "20120409", "20120427", "20120501", "20120924", "20121225", "20121226", "20130101", "20130321", "20130329", "20130401", "20130501", "20130924", "20131225", "20131226", "20140101", "20140321", "20140418", "20140421", "20140428", "20140501", "20140616", "20140924", "20141225", "20141226", "20150101", "20150403", "20150406", "20150427", "20150501", "20150616", "20150924", "20151225", "20160101", "20160321", "20160325", "20160328", "20160427", "20160502", "20160616", "20161226", "20170101", "20170321", "20170414", "20170417", "20170427", "20170501", "20170616", "20170925", "20171225", "20171226", "20180101", "20180321", "20180330", "20180402", "20180427", "20180501", "20180924", "20181225", "20181226", "20190101", "20190321", "20190419", "20190422", "20190501", "20190924", "20191225", "20191226", "20200101", "20200410", "20200413", "20200427", "20200501", "20200616", "20200924", "20201225", "20210427", "20210616", "20210924", "20211227", "20220321", "20220427", "20220616", "20221226", "20230321", "20230427", "20230616", "20230925", "20231225", "20231226", "20240321", "20240924", "20241225", "20241226", "20250321", "20250428", "20250616", "20250924", "20251225", "20251226", "20260427", "20260616", "20260924", "20261225" ], + "MonthsToExclude": [] + }, + "LBMA": { + "InheritedCalendar": [], + "Name": "LBMA", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20060102", "20060414", "20060417", "20060501", "20060529", "20060828", "20061225", "20061226", "20070101", "20070406", "20070409", "20070507", "20070528", "20070827", "20071225", "20071226", "20080101", "20080321", "20080324", "20080505", "20080526", "20080825", "20081225", "20081226", "20090101", "20090410", "20090413", "20090504", "20090525", "20090831", "20091225", "20091228", "20100101", "20100402", "20100405", "20100503", "20100531", "20100830", "20101227", "20101228", "20110103", "20110422", "20110425", "20110429", "20110502", "20110530", "20110829", "20111226", "20111227", "20120102", "20120406", "20120409", "20120507", "20120604", "20120605", "20120827", "20121225", "20121226", "20130101", "20130329", "20130401", "20130506", "20130527", "20130826", "20131225", "20131226", "20140101", "20140418", "20140421", "20140505", "20140526", "20140825", "20141225", "20141226", "20150101", "20150403", "20150406", "20150504", "20150525", "20150831", "20151225", "20151228", "20160101", "20160325", "20160328", "20160502", "20160530", "20160829", "20161226", "20161227", "20170102", "20170414", "20170417", "20170501", "20170529", "20170828", "20171225", "20171226", "20180101", "20180330", "20180402", "20180507", "20180528", "20180827", "20181225", "20181226", "20190101", "20190419", "20190422", "20190506", "20190527", "20190826", "20191225", "20191226", "20200101", "20200410", "20200413", "20200504", "20200525", "20200831", "20201225", "20201228" ], + "MonthsToExclude": [] + }, + "LBMP": { + "InheritedCalendar": [], + "Name": "LBMP", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20060102", "20060414", "20060417", "20060501", "20060529", "20060828", "20061222", "20061225", "20061226", "20070101", "20070406", "20070409", "20070507", "20070528", "20070827", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080505", "20080526", "20080825", "20081224", "20081225", "20081226", "20081231", "20090101", "20090410", "20090413", "20090504", "20090525", "20090831", "20091224", "20091225", "20091228", "20091231", "20100101", "20100402", "20100405", "20100503", "20100531", "20100830", "20101224", "20101227", "20101228", "20101231", "20110103", "20110422", "20110425", "20110429", "20110502", "20110530", "20110829", "20111226", "20111227", "20111230", "20120102", "20120406", "20120409", "20120507", "20120604", "20120605", "20120827", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130506", "20130527", "20130826", "20131224", "20131225", "20131226", "20131231", "20140101", "20140418", "20140421", "20140505", "20140526", "20140825", "20141224", "20141225", "20141226", "20141231", "20150101", "20150403", "20150406", "20150504", "20150525", "20150831", "20151224", "20151225", "20151228", "20151231", "20160101", "20160325", "20160328", "20160502", "20160530", "20160829", "20161223", "20161226", "20161227", "20161230", "20170102", "20170414", "20170417", "20170501", "20170529", "20170828", "20171222", "20171225", "20171226", "20171229", "20180101", "20180330", "20180402", "20180507", "20180528", "20180827", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190506", "20190527", "20190826", "20191224", "20191225", "20191226", "20191231", "20200101", "20200410", "20200413", "20200504", "20200525", "20200831", "20201224", "20201225", "20201228", "20201231" ], + "MonthsToExclude": [] + }, + "LME": { + "InheritedCalendar": [], + "Name": "LME", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20060102", "20060414", "20060417", "20060501", "20060529", "20060828", "20061225", "20061226", "20070101", "20070406", "20070409", "20070507", "20070528", "20070827", "20071224", "20071225", "20071226", "20080101", "20080321", "20080324", "20080505", "20080526", "20080825", "20081225", "20081226", "20090101", "20090410", "20090413", "20090504", "20090525", "20090831", "20091225", "20091228", "20100101", "20100402", "20100405", "20100503", "20100531", "20100830", "20101227", "20101228", "20110103", "20110422", "20110425", "20110429", "20110502", "20110530", "20110829", "20111226", "20111227", "20120102", "20120406", "20120409", "20120507", "20120604", "20120605", "20120827", "20121225", "20121226", "20130101", "20130329", "20130401", "20130506", "20130527", "20130826", "20131225", "20131226", "20140101", "20140418", "20140421", "20140505", "20140526", "20140825", "20141225", "20141226", "20150101", "20150403", "20150406", "20150504", "20150525", "20150831", "20151225", "20151228", "20160101", "20160325", "20160328", "20160502", "20160530", "20160829", "20161226", "20161227", "20170102", "20170414", "20170417", "20170501", "20170529", "20170828", "20171225", "20171226", "20180101", "20180330", "20180402", "20180507", "20180528", "20180827", "20181225", "20181226", "20190101", "20190419", "20190422", "20190506", "20190527", "20190826", "20191225", "20191226", "20200101", "20200410", "20200413", "20200504", "20200525", "20200831", "20201225", "20201228" ], + "MonthsToExclude": [] + }, + "LON_SE": { + "InheritedCalendar": [], + "Name": "LON_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040409", "20040412", "20040503", "20040531", "20040830", "20041227", "20041228", "20050103", "20050325", "20050328", "20050502", "20050530", "20050829", "20051226", "20051227", "20060102", "20060414", "20060417", "20060501", "20060529", "20060828", "20061225", "20061226", "20070101", "20070406", "20070409", "20070507", "20070528", "20070827", "20071225", "20071226", "20080101", "20080321", "20080324", "20080505", "20080526", "20080825", "20081225", "20081226", "20090101", "20090410", "20090413", "20090504", "20090525", "20090831", "20091225", "20091228", "20100101", "20100402", "20100405", "20100503", "20100531", "20100830", "20101227", "20101228", "20110103", "20110422", "20110425", "20110429", "20110502", "20110530", "20110829", "20111226", "20111227", "20120102", "20120406", "20120409", "20120507", "20120604", "20120605", "20120827", "20121225", "20121226", "20130101", "20130329", "20130401", "20130506", "20130527", "20130826", "20131225", "20131226", "20140101", "20140418", "20140421", "20140505", "20140526", "20140825", "20141225", "20141226", "20150101", "20150403", "20150406", "20150504", "20150525", "20150831", "20151225", "20151228", "20160101", "20160325", "20160328", "20160502", "20160530", "20160829", "20161226", "20161227", "20170102", "20170414", "20170417", "20170501", "20170529", "20170828", "20171225", "20171226", "20180101", "20180330", "20180402", "20180507", "20180528", "20180827", "20181225", "20181226", "20190101", "20190419", "20190422", "20190506", "20190527", "20190826", "20191225", "20191226", "20200101", "20200410", "20200413", "20200504", "20200525", "20200831", "20201225", "20201228" ], + "MonthsToExclude": [] + }, + "LUX_SE": { + "InheritedCalendar": [], + "Name": "LUX_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040409", "20040412", "20040520", "20040531", "20040623", "20041101", "20041224", "20050325", "20050328", "20050505", "20050516", "20050623", "20050801", "20050815", "20051101", "20051226", "20060414", "20060417", "20060501", "20060525", "20060605", "20060623", "20060815", "20061101", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070517", "20070528", "20070815", "20071101", "20071224", "20071225", "20071226", "20080101", "20080321", "20080324", "20080501", "20080512", "20080623", "20080815", "20081224", "20081225", "20081226", "20090101", "20090410", "20090413", "20090501", "20090521", "20090601", "20090623", "20091224", "20091225", "20100101", "20100402", "20100405", "20100513", "20100524", "20100623", "20101101", "20101224", "20110422", "20110425", "20110602", "20110613", "20110623", "20110815", "20111101", "20111226", "20120406", "20120409", "20120501", "20120517", "20120528", "20120815", "20121101", "20121224", "20121225", "20121226", "20130101", "20130329", "20130401", "20130501", "20130509", "20130520", "20130815", "20131101", "20131224", "20131225", "20131226", "20140101", "20140418", "20140421", "20140501", "20140529", "20140609", "20140623", "20140815", "20141224", "20141225", "20141226", "20150101", "20150403", "20150406", "20150501", "20150514", "20150525", "20150623", "20151224", "20151225", "20160101", "20160325", "20160328", "20160505", "20160516", "20160623", "20160815", "20161101", "20161226", "20170414", "20170417", "20170501", "20170525", "20170605", "20170623", "20170815", "20171101", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180510", "20180521", "20180815", "20181101", "20181224", "20181225", "20181226", "20190101", "20190419", "20190422", "20190501", "20190530", "20190610", "20190815", "20191101", "20191224", "20191225", "20191226", "20200101", "20200410", "20200413", "20200501", "20200521", "20200601", "20200623", "20201224", "20201225" ], + "MonthsToExclude": [] + }, + "MAD_SE": { + "InheritedCalendar": [], + "Name": "MAD_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040106", "20040409", "20040412", "20040816", "20041012", "20041101", "20041206", "20041208", "20041224", "20041231", "20050106", "20050325", "20050328", "20051226", "20060106", "20060414", "20060417", "20060501", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20081224", "20081225", "20081226", "20081231", "20090101", "20090410", "20090413", "20090501", "20091224", "20091225", "20091231", "20100101", "20100402", "20100405", "20101224", "20101231", "20110422", "20110425", "20111226", "20120406", "20120409", "20120501", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20131224", "20131225", "20131226", "20131231", "20140101", "20140418", "20140421", "20140501", "20141224", "20141225", "20141226", "20141231", "20150101", "20150403", "20150406", "20150501", "20151224", "20151225", "20151231", "20160101", "20160325", "20160328", "20161226", "20170414", "20170417", "20170501", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20191224", "20191225", "20191226", "20191231", "20200101", "20200410", "20200413", "20200501", "20201224", "20201225", "20201231" ], + "MonthsToExclude": [] + }, + "MIL_SE": { + "InheritedCalendar": [], + "Name": "MIL_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040409", "20040412", "20041224", "20041231", "20050325", "20050328", "20050815", "20051226", "20060414", "20060417", "20060501", "20060815", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070815", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20080815", "20081224", "20081225", "20081226", "20081231", "20090101", "20090410", "20090413", "20090501", "20091224", "20091225", "20091231", "20100101", "20100402", "20100405", "20101224", "20101231", "20110422", "20110425", "20110815", "20111226", "20120406", "20120409", "20120501", "20120815", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20130815", "20131224", "20131225", "20131226", "20131231", "20140101", "20140418", "20140421", "20140501", "20140815", "20141224", "20141225", "20141226", "20141231", "20150101", "20150403", "20150406", "20150501", "20151224", "20151225", "20151231", "20160101", "20160325", "20160328", "20160815", "20161226", "20170414", "20170417", "20170501", "20170815", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180815", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20190815", "20191224", "20191225", "20191226", "20191231", "20200101", "20200410", "20200413", "20200501", "20201224", "20201225", "20201231" ], + "MonthsToExclude": [] + }, + "MOS_SE": { + "InheritedCalendar": [], + "Name": "MOS_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20050101", "20050103", "20050501", "20060101", "20060102", "20060103", "20060501", "20070101", "20070102", "20070103", "20070501", "20071231", "20080101", "20080102", "20080103", "20080501", "20081231", "20090101", "20090102", "20090105", "20090106", "20090107", "20090108", "20090501", "20090612", "20091231", "20100101", "20100104", "20100105", "20100106", "20100107", "20100108", "20100223", "20100308", "20100501", "20100611", "20100614", "20101104", "20101231", "20110101", "20110103", "20110104", "20110105", "20110106", "20110107", "20110223", "20110308", "20110501", "20110613", "20111104", "20120101", "20120102", "20120103", "20120104", "20120105", "20120106", "20120224", "20120308", "20120501", "20120611", "20120612", "20121105", "20121231", "20130101", "20130102", "20130103", "20130104", "20130107", "20130225", "20130308", "20130501", "20130611", "20130612", "20131104", "20131231", "20140101", "20140102", "20140103", "20140224", "20140310", "20140501", "20140611", "20140612", "20141104", "20141231", "20150101", "20150102", "20150223", "20150309", "20150501", "20150611", "20150612", "20151104", "20151231", "20160101", "20160224", "20160308", "20160501", "20160613", "20161104", "20170101", "20170102", "20170103", "20170223", "20170308", "20170501", "20170612", "20171106", "20180101", "20180102", "20180103", "20180223", "20180308", "20180501", "20181105", "20181231", "20190101", "20190102", "20190103", "20190225", "20190308", "20190501", "20191104", "20191231", "20200101", "20200102", "20200103", "20200224", "20200309", "20200501", "20201104", "20201231", "20210223", "20210308", "20211104", "20220223", "20220308", "20221104", "20230223", "20230308", "20231106", "20240226", "20240308", "20241104" ], + "MonthsToExclude": [] + }, + "NDE_SE": { + "InheritedCalendar": [], + "Name": "NDE_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040302", "20040409", "20041111", "20050101", "20050325", "20051101", "20060101", "20060111", "20060209", "20060406", "20060414", "20060513", "20061002", "20061102", "20070101", "20070130", "20070216", "20070327", "20070406", "20070502", "20071002", "20071102", "20071109", "20080101", "20080306", "20080321", "20080413", "20080519", "20081002", "20081028", "20081102", "20081209", "20090101", "20090108", "20090126", "20090223", "20090311", "20090403", "20090410", "20090509", "20091002", "20091102", "20091128", "20091225", "20100101", "20100126", "20100212", "20100301", "20100324", "20100402", "20100527", "20101002", "20101102", "20101105", "20101217", "20110101", "20110126", "20110303", "20110319", "20110412", "20110422", "20111002", "20111026", "20111102", "20111107", "20120101", "20120126", "20120220", "20120308", "20120401", "20120406", "20121002", "20121027", "20121102", "20121113", "20121225", "20130101", "20130310", "20130327", "20130329", "20130420", "20131002", "20131016", "20131102", "20131104", "20131225", "20140101", "20140228", "20140317", "20140408", "20140418", "20141002", "20141005", "20141023", "20141102", "20141225", "20150101", "20150126", "20150217", "20150307", "20150328", "20150403", "20151002", "20151102", "20151111", "20151225", "20160101", "20160126", "20160325", "20161002", "20161031", "20161102", "20170101", "20170126", "20170414", "20171002", "20171019", "20171102", "20171225", "20180101", "20180126", "20180330", "20181002", "20181102", "20181107", "20181225", "20190101", "20190419", "20191002", "20191028", "20191102", "20191225", "20200101", "20200410", "20201002", "20201102", "20201116", "20201225", "20210126", "20211002", "20211102", "20220126", "20230126", "20231225", "20240126", "20241225", "20251225", "20260126", "20261225", "20270126" ], + "MonthsToExclude": [] + }, + "NYBOT": { + "InheritedCalendar": [ "US_EXCH_BASE" ], + "Name": "NYBOT", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "20071123", "20071224", "20110103" ], + "MonthsToExclude": [] + }, + "NYC_SE": { + "InheritedCalendar": [], + "Name": "NYC_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040119", "20040216", "20040409", "20040531", "20040611", "20040705", "20040906", "20041125", "20041224", "20050117", "20050221", "20050325", "20050530", "20050704", "20050905", "20051124", "20051226", "20060102", "20060116", "20060220", "20060414", "20060529", "20060704", "20060904", "20061123", "20061225", "20070101", "20070102", "20070115", "20070219", "20070406", "20070528", "20070704", "20070903", "20071122", "20071225", "20080101", "20080121", "20080218", "20080321", "20080526", "20080704", "20080901", "20081127", "20081225", "20090101", "20090119", "20090216", "20090410", "20090525", "20090703", "20090907", "20091126", "20091225", "20100101", "20100118", "20100215", "20100402", "20100531", "20100705", "20100906", "20101125", "20101224", "20110117", "20110221", "20110422", "20110530", "20110704", "20110905", "20111124", "20111226", "20120102", "20120116", "20120220", "20120406", "20120528", "20120704", "20120903", "20121122", "20121225", "20130101", "20130121", "20130218", "20130329", "20130527", "20130704", "20130902", "20131128", "20131225", "20140101", "20140120", "20140217", "20140418", "20140526", "20140704", "20140901", "20141127", "20141225", "20150101", "20150119", "20150216", "20150403", "20150525", "20150703", "20150907", "20151126", "20151225", "20160101", "20160118", "20160215", "20160325", "20160530", "20160704", "20160905", "20161124", "20161226", "20170102", "20170116", "20170220", "20170414", "20170529", "20170704", "20170904", "20171123", "20171225", "20180101", "20180115", "20180219", "20180330", "20180528", "20180704", "20180903", "20181122", "20181225", "20190101", "20190121", "20190218", "20190419", "20190527", "20190704", "20190902", "20191128", "20191225", "20200101", "20200120", "20200217", "20200410", "20200525", "20200703", "20200907", "20201126", "20201225" ], + "MonthsToExclude": [] + }, + "US_EXCH_BASE": { + "InheritedCalendar": [ "US_NYD", "US_MLK98on", "US_WB", "US_MEMORIAL", "US_IND", "US_LABOR", "US_TG", "US_XMAS", "EASTER_GF", "US_JUNETEENTH" ], + "Name": "US_EXCH_BASE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "NYMEX": { + "InheritedCalendar": [ "US_EXCH_BASE" ], + "Name": "NYMEX", + "DaysToAlwaysExclude": [], + "DaysToExclude": [ "19831125", "19841123", "19841224", "19841231", "19850705", "19851129", "19851224", "19860703", "19861128", "19861226", "19871127", "19881125", "19921127", "19931126", "19940427", "19941125", "19950703", "19951124", "19960705", "19961129", "19971128", "19981127", "19991126", "20000103", "20000703", "20001124", "20010912", "20010913", "20011123", "20011224", "20020705", "20021129", "20031128", "20031226", "20040102", "20040611", "20041126", "20051125", "20070102" ], + "MonthsToExclude": [] + }, + "NYMEXThanksGiving": { + "InheritedCalendar": [ "NYMEX", "US_TGdayAfter" ], + "Name": "NYMEXThanksGiving", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "Null": { + "InheritedCalendar": [], + "Name": "Null", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "Weekends": { + "InheritedCalendar": [], + "Name": "Weekends", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "OSL_SE": { + "InheritedCalendar": [], + "Name": "OSL_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040408", "20040409", "20040412", "20040517", "20040520", "20040531", "20041224", "20041231", "20050324", "20050325", "20050328", "20050505", "20050516", "20050517", "20051226", "20060413", "20060414", "20060417", "20060501", "20060517", "20060525", "20060605", "20061225", "20061226", "20070101", "20070405", "20070406", "20070409", "20070501", "20070517", "20070528", "20071224", "20071225", "20071226", "20071231", "20080101", "20080320", "20080321", "20080324", "20080501", "20080512", "20081224", "20081225", "20081226", "20081231", "20090101", "20090409", "20090410", "20090413", "20090501", "20090521", "20090601", "20091224", "20091225", "20091231", "20100101", "20100401", "20100402", "20100405", "20100513", "20100517", "20100524", "20101224", "20101231", "20110421", "20110422", "20110425", "20110517", "20110602", "20110613", "20111226", "20120405", "20120406", "20120409", "20120501", "20120517", "20120528", "20121224", "20121225", "20121226", "20121231", "20130101", "20130328", "20130329", "20130401", "20130501", "20130509", "20130517", "20130520", "20131224", "20131225", "20131226", "20131231", "20140101", "20140417", "20140418", "20140421", "20140501", "20140529", "20140609", "20141224", "20141225", "20141226", "20141231", "20150101", "20150402", "20150403", "20150406", "20150501", "20150514", "20150525", "20151224", "20151225", "20151231", "20160101", "20160324", "20160325", "20160328", "20160505", "20160516", "20160517", "20161226", "20170413", "20170414", "20170417", "20170501", "20170517", "20170525", "20170605", "20171225", "20171226", "20180101", "20180329", "20180330", "20180402", "20180501", "20180510", "20180517", "20180521", "20181224", "20181225", "20181226", "20181231", "20190101", "20190418", "20190419", "20190422", "20190501", "20190517", "20190530", "20190610", "20191224", "20191225", "20191226", "20191231", "20200101", "20200409", "20200410", "20200413", "20200501", "20200521", "20200601", "20201224", "20201225", "20201231" ], + "MonthsToExclude": [] + }, + "SAFEX": { + "InheritedCalendar": [ "JHB" ], + "Name": "SAFEX", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "SEO_SE": { + "InheritedCalendar": [], + "Name": "SEO_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040121", "20040122", "20040123", "20040301", "20040405", "20040415", "20040505", "20040526", "20040927", "20040928", "20040929", "20041231", "20050208", "20050209", "20050210", "20050301", "20050405", "20050505", "20050606", "20050815", "20050919", "20051003", "20051230", "20060130", "20060301", "20060501", "20060505", "20060531", "20060606", "20060717", "20060815", "20061003", "20061005", "20061006", "20061225", "20061229", "20070101", "20070219", "20070301", "20070501", "20070524", "20070606", "20070717", "20070815", "20070924", "20070925", "20070926", "20071003", "20071225", "20071231", "20080101", "20080206", "20080207", "20080208", "20080301", "20080409", "20080501", "20080505", "20080512", "20080606", "20080717", "20080815", "20080915", "20081003", "20081225", "20081231", "20090101", "20090126", "20090127", "20090501", "20090505", "20090717", "20091002", "20091225", "20091231", "20100101", "20100215", "20100301", "20100505", "20100521", "20100921", "20100922", "20100923", "20101231", "20110202", "20110203", "20110204", "20110301", "20110505", "20110510", "20110606", "20110815", "20110912", "20110913", "20111003", "20111230", "20120123", "20120124", "20120301", "20120501", "20120528", "20120606", "20120717", "20120815", "20121001", "20121003", "20121225", "20121231", "20130101", "20130211", "20130301", "20130501", "20130606", "20130717", "20130815", "20130918", "20130919", "20130920", "20131003", "20131225", "20131231", "20140101", "20140130", "20140131", "20140203", "20140301", "20140501", "20140505", "20140606", "20140717", "20140815", "20140908", "20140909", "20140910", "20141003", "20141225", "20141231", "20150101", "20150218", "20150219", "20150220", "20150501", "20150505", "20150717", "20150928", "20151225", "20151231", "20160101", "20160208", "20160209", "20160301", "20160505", "20160606", "20160815", "20160914", "20160915", "20160916", "20161003", "20161230", "20170127", "20170301", "20170501", "20170505", "20170606", "20170717", "20170815", "20171003", "20171004", "20171005", "20171225", "20171229", "20180101", "20180215", "20180216", "20180219", "20180301", "20180501", "20180606", "20180717", "20180815", "20180924", "20180925", "20180926", "20181003", "20181225", "20181231", "20190101", "20190204", "20190205", "20190206", "20190301", "20190501", "20190606", "20190717", "20190815", "20191003", "20191225", "20191231", "20200101", "20200124", "20200501", "20200505", "20200717", "20201225", "20201231", "20210211", "20210212", "20210215", "20220131", "20220201", "20220202", "20230123", "20240209", "20250128", "20250129", "20250130", "20260216", "20260217", "20260218", "20270205", "20280125", "20280126", "20280127", "20290212", "20290213", "20290214" ], + "MonthsToExclude": [] + }, + "SIN_SE": { + "InheritedCalendar": [], + "Name": "SIN_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040122", "20040123", "20040202", "20040409", "20040602", "20040809", "20041111", "20041115", "20050121", "20050209", "20050210", "20050325", "20050502", "20050523", "20050809", "20051101", "20051103", "20051226", "20060102", "20060110", "20060130", "20060131", "20060414", "20060501", "20060512", "20060809", "20061024", "20061225", "20070101", "20070102", "20070219", "20070220", "20070406", "20070501", "20070531", "20070809", "20071108", "20071220", "20071225", "20080101", "20080207", "20080208", "20080321", "20080501", "20080519", "20081001", "20081028", "20081208", "20081225", "20090101", "20090126", "20090127", "20090410", "20090501", "20090810", "20090921", "20091127", "20091225", "20100101", "20100215", "20100216", "20100402", "20100528", "20100809", "20100910", "20101027", "20101105", "20101116", "20110203", "20110204", "20110422", "20110517", "20110809", "20110831", "20111026", "20111107", "20120123", "20120124", "20120406", "20120501", "20120604", "20120809", "20121026", "20121113", "20121225", "20130101", "20130211", "20130212", "20130329", "20130501", "20130809", "20131104", "20131225", "20140101", "20140131", "20140203", "20140418", "20140501", "20141023", "20141225", "20150101", "20150219", "20150220", "20150403", "20150501", "20150810", "20151111", "20151225", "20160101", "20160208", "20160209", "20160325", "20160809", "20161031", "20170130", "20170131", "20170414", "20170501", "20170809", "20171019", "20171225", "20180101", "20180216", "20180219", "20180330", "20180501", "20180809", "20181107", "20181225", "20190101", "20190205", "20190206", "20190419", "20190501", "20190809", "20191028", "20191225", "20200101", "20200127", "20200128", "20200410", "20200501", "20200810", "20201116", "20201225", "20210212", "20210215", "20220201", "20220202", "20230123", "20230124", "20240212", "20240213", "20250129", "20250130", "20260217", "20260218", "20270208", "20270209", "20280126", "20280127", "20290213", "20290214" ], + "MonthsToExclude": [] + }, + "STO_SE": { + "InheritedCalendar": [], + "Name": "STO_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040106", "20040409", "20040412", "20040520", "20040531", "20040625", "20041224", "20041231", "20050106", "20050325", "20050328", "20050505", "20050606", "20050624", "20051226", "20060106", "20060414", "20060417", "20060501", "20060525", "20060606", "20060623", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070517", "20070606", "20070622", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20080606", "20080620", "20081224", "20081225", "20081226", "20081231", "20090101", "20090106", "20090410", "20090413", "20090501", "20090521", "20090619", "20091224", "20091225", "20091231", "20100101", "20100106", "20100402", "20100405", "20100513", "20100625", "20101224", "20101231", "20110106", "20110422", "20110425", "20110602", "20110606", "20110624", "20111226", "20120106", "20120406", "20120409", "20120501", "20120517", "20120606", "20120622", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20130509", "20130606", "20130621", "20131224", "20131225", "20131226", "20131231", "20140101", "20140106", "20140418", "20140421", "20140501", "20140529", "20140606", "20140620", "20141224", "20141225", "20141226", "20141231", "20150101", "20150106", "20150403", "20150406", "20150501", "20150514", "20150619", "20151224", "20151225", "20151231", "20160101", "20160106", "20160325", "20160328", "20160505", "20160606", "20160624", "20161226", "20170106", "20170414", "20170417", "20170501", "20170525", "20170606", "20170623", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180510", "20180606", "20180622", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20190530", "20190606", "20190621", "20191224", "20191225", "20191226", "20191231", "20200101", "20200106", "20200410", "20200413", "20200501", "20200521", "20200619", "20201224", "20201225", "20201231" ], + "MonthsToExclude": [] + }, + "SYD_SE": { + "InheritedCalendar": [], + "Name": "SYD_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040126", "20040409", "20040412", "20040614", "20041227", "20041228", "20050103", "20050126", "20050325", "20050328", "20050425", "20050613", "20051226", "20051227", "20060102", "20060126", "20060414", "20060417", "20060425", "20060612", "20061225", "20061226", "20070101", "20070126", "20070406", "20070409", "20070425", "20070611", "20071225", "20071226", "20080101", "20080127", "20080321", "20080324", "20080425", "20080609", "20081225", "20081226", "20090101", "20090126", "20090410", "20090413", "20090608", "20091225", "20091228", "20100101", "20100126", "20100402", "20100405", "20100614", "20101227", "20101228", "20110103", "20110126", "20110422", "20110425", "20110613", "20111226", "20111227", "20120102", "20120126", "20120406", "20120409", "20120425", "20120611", "20121225", "20121226", "20130101", "20130127", "20130329", "20130401", "20130425", "20130610", "20131225", "20131226", "20140101", "20140127", "20140418", "20140421", "20140425", "20140609", "20141225", "20141226", "20150101", "20150126", "20150403", "20150406", "20150608", "20151225", "20151228", "20160101", "20160126", "20160325", "20160328", "20160425", "20160613", "20161226", "20161227", "20170102", "20170126", "20170414", "20170417", "20170425", "20170612", "20171225", "20171226", "20180101", "20180126", "20180330", "20180402", "20180425", "20180611", "20181225", "20181226", "20190101", "20190127", "20190419", "20190422", "20190425", "20190610", "20191225", "20191226", "20200101", "20200127", "20200410", "20200413", "20200608", "20201225", "20201228" ], + "MonthsToExclude": [] + }, + "TAI_SE": { + "InheritedCalendar": [], + "Name": "TAI_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040119", "20040120", "20040121", "20040122", "20040123", "20040126", "20040622", "20040824", "20040825", "20040928", "20041025", "20090129", "20090130", "20090528", "20100211", "20100212", "20100219", "20100616", "20050204", "20050207", "20050208", "20050209", "20050210", "20050211", "20050228", "20050405", "20050502", "20050611", "20050718", "20050805", "20050901", "20051010", "20060126", "20060127", "20060130", "20060131", "20060201", "20060202", "20060228", "20060405", "20060501", "20060531", "20061006", "20061009", "20061010", "20070101", "20070215", "20070216", "20070219", "20070220", "20070221", "20070222", "20070223", "20070228", "20070405", "20070406", "20070501", "20070619", "20070925", "20071010", "20080101", "20080204", "20080205", "20080206", "20080207", "20080208", "20080211", "20080228", "20080501", "20081010", "20090101", "20090122", "20090123", "20090126", "20090127", "20090128", "20090501", "20090807", "20100101", "20100215", "20100216", "20100217", "20100218", "20100405", "20100922", "20110131", "20110201", "20110202", "20110203", "20110204", "20110207", "20110228", "20110405", "20110912", "20111010", "20120118", "20120119", "20120120", "20120123", "20120124", "20120125", "20120228", "20120405", "20120501", "20121010", "20130101", "20130207", "20130208", "20130211", "20130212", "20130213", "20130214", "20130228", "20130405", "20130501", "20130919", "20131010", "20140101", "20140128", "20140129", "20140130", "20140131", "20140203", "20140204", "20140228", "20140501", "20140908", "20141010", "20150101", "20150216", "20150217", "20150218", "20150219", "20150220", "20150223", "20150501", "20160101", "20160203", "20160204", "20160205", "20160208", "20160209", "20160210", "20160405", "20160916", "20161010", "20170125", "20170126", "20170127", "20170130", "20170131", "20170201", "20170228", "20170405", "20170501", "20171010", "20180101", "20180213", "20180214", "20180215", "20180216", "20180219", "20180220", "20180228", "20180405", "20180501", "20181010", "20190101", "20190131", "20190201", "20190204", "20190205", "20190206", "20190207", "20190228", "20190405", "20190501", "20191010", "20200101", "20200122", "20200123", "20200124", "20200127", "20200128", "20200129", "20200228", "20200501", "20210209", "20210210", "20210211", "20210212", "20210215", "20210216", "20220127", "20220128", "20220131", "20220201", "20220202", "20220203", "20230119", "20230120", "20230123", "20230124", "20230125", "20230126", "20240207", "20240208", "20240209", "20240212", "20240213", "20240214", "20250124", "20250127", "20250128", "20250129", "20250130", "20250131", "20260212", "20260213", "20260216", "20260217", "20260218", "20260219", "20270203", "20270204", "20270205", "20270208", "20270209", "20270210", "20280121", "20280124", "20280125", "20280126", "20280127", "20280128", "20290208", "20290209", "20290212", "20290213", "20290214", "20290215" ], + "MonthsToExclude": [] + }, + "TOK_SE": { + "InheritedCalendar": [], + "Name": "TOK_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040102", "20040112", "20040211", "20040429", "20040503", "20040504", "20040505", "20040719", "20040920", "20040923", "20041011", "20041103", "20041123", "20041223", "20041231", "20050103", "20050110", "20050211", "20050321", "20050429", "20050503", "20050504", "20050505", "20050718", "20050919", "20050923", "20051010", "20051103", "20051123", "20051223", "20060102", "20060103", "20060109", "20060321", "20060503", "20060504", "20060505", "20060717", "20060918", "20061009", "20061103", "20061123", "20070101", "20070102", "20070103", "20070108", "20070212", "20070321", "20070430", "20070503", "20070504", "20070716", "20070917", "20070924", "20071008", "20071123", "20071224", "20071231", "20080101", "20080102", "20080103", "20080114", "20080211", "20080320", "20080429", "20080505", "20080506", "20080721", "20080915", "20080923", "20081013", "20081103", "20081124", "20081223", "20081231", "20090101", "20090102", "20090112", "20090211", "20090320", "20090429", "20090504", "20090505", "20090720", "20090921", "20090922", "20090923", "20091012", "20091103", "20091123", "20091223", "20091231", "20100101", "20100111", "20100211", "20100322", "20100429", "20100503", "20100504", "20100505", "20100719", "20100920", "20100923", "20101011", "20101103", "20101123", "20101223", "20101231", "20110103", "20110110", "20110211", "20110321", "20110429", "20110503", "20110504", "20110505", "20110718", "20110919", "20110923", "20111010", "20111103", "20111123", "20111223", "20120102", "20120103", "20120109", "20120320", "20120430", "20120503", "20120504", "20120716", "20120917", "20121008", "20121123", "20121224", "20121231", "20130101", "20130102", "20130103", "20130114", "20130211", "20130320", "20130429", "20130503", "20130715", "20130916", "20130923", "20131014", "20131104", "20131223", "20131231", "20140101", "20140102", "20140103", "20140113", "20140211", "20140321", "20140429", "20140505", "20140721", "20140915", "20140923", "20141013", "20141103", "20141124", "20141223", "20141231", "20150101", "20150102", "20150112", "20150211", "20150429", "20150504", "20150505", "20150720", "20150921", "20150922", "20150923", "20151012", "20151103", "20151123", "20151223", "20151231", "20160101", "20160111", "20160211", "20160321", "20160429", "20160503", "20160504", "20160505", "20160718", "20160919", "20160922", "20161010", "20161103", "20161123", "20161223", "20170102", "20170103", "20170109", "20170320", "20170503", "20170504", "20170505", "20170717", "20170918", "20171009", "20171103", "20171123", "20180101", "20180102", "20180103", "20180108", "20180212", "20180321", "20180430", "20180503", "20180504", "20180716", "20180917", "20180924", "20181008", "20181123", "20181224", "20181231", "20190101", "20190102", "20190103", "20190114", "20190211", "20190321", "20190429", "20190503", "20190715", "20190916", "20190923", "20191014", "20191223", "20191231", "20200101", "20200102", "20200103", "20200113", "20200211", "20200320", "20200429", "20200504", "20200505", "20200720", "20200921", "20200922", "20201012", "20201103", "20201123", "20201223", "20201231" ], + "MonthsToExclude": [] + }, + "TOR_SE": { + "InheritedCalendar": [], + "Name": "TOR_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040409", "20040524", "20040701", "20040802", "20040906", "20041011", "20041227", "20041228", "20050103", "20050325", "20050523", "20050701", "20050801", "20050905", "20051010", "20051226", "20051227", "20060102", "20060414", "20060522", "20060703", "20060807", "20060904", "20061009", "20061225", "20061226", "20070101", "20070406", "20070521", "20070702", "20070806", "20070903", "20071008", "20071225", "20071226", "20080101", "20080218", "20080321", "20080519", "20080701", "20080804", "20080901", "20081013", "20081225", "20081226", "20090101", "20090219", "20090410", "20090518", "20090701", "20090803", "20090907", "20091012", "20091225", "20091228", "20100101", "20100215", "20100402", "20100524", "20100701", "20100802", "20100906", "20101011", "20101227", "20101228", "20110103", "20110221", "20110422", "20110523", "20110701", "20110801", "20110905", "20111010", "20111226", "20111227", "20120102", "20120220", "20120406", "20120521", "20120702", "20120806", "20120903", "20121008", "20121225", "20121226", "20130101", "20130218", "20130329", "20130520", "20130701", "20130805", "20130902", "20131014", "20131225", "20131226", "20140101", "20140217", "20140418", "20140519", "20140701", "20140804", "20140901", "20141013", "20141225", "20141226", "20150101", "20150216", "20150403", "20150518", "20150701", "20150803", "20150907", "20151012", "20151225", "20151228", "20160101", "20160215", "20160325", "20160523", "20160701", "20160801", "20160905", "20161010", "20161226", "20161227", "20170102", "20170220", "20170414", "20170522", "20170703", "20170807", "20170904", "20171009", "20171225", "20171226", "20180101", "20180219", "20180330", "20180521", "20180702", "20180806", "20180903", "20181008", "20181225", "20181226", "20190101", "20190218", "20190419", "20190520", "20190701", "20190805", "20190902", "20191014", "20191225", "20191226", "20200101", "20200217", "20200410", "20200518", "20200701", "20200803", "20200907", "20201012", "20201225", "20201228" ], + "MonthsToExclude": [] + }, + "VIE_SE": { + "InheritedCalendar": [], + "Name": "VIE_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040106", "20040409", "20040412", "20040520", "20040531", "20040610", "20041026", "20041101", "20041208", "20041224", "20041231", "20050106", "20050325", "20050328", "20050505", "20050516", "20050526", "20050815", "20051026", "20051101", "20051208", "20051226", "20051230", "20060106", "20060414", "20060417", "20060501", "20060525", "20060605", "20060615", "20060815", "20061026", "20061101", "20061208", "20061225", "20061226", "20061229", "20070101", "20070406", "20070409", "20070501", "20070517", "20070528", "20070607", "20070815", "20071026", "20071101", "20071224", "20071225", "20071226", "20071231", "20080101", "20080321", "20080324", "20080501", "20080512", "20080522", "20080815", "20081208", "20081224", "20081225", "20081226", "20081231", "20090101", "20090106", "20090410", "20090413", "20090501", "20090521", "20090601", "20090611", "20091026", "20091208", "20091224", "20091225", "20091231", "20100101", "20100106", "20100402", "20100405", "20100513", "20100524", "20100603", "20101026", "20101101", "20101208", "20101224", "20101231", "20110106", "20110422", "20110425", "20110602", "20110613", "20110623", "20110815", "20111026", "20111101", "20111208", "20111226", "20111230", "20120106", "20120406", "20120409", "20120501", "20120517", "20120528", "20120607", "20120815", "20121026", "20121101", "20121224", "20121225", "20121226", "20121231", "20130101", "20130329", "20130401", "20130501", "20130509", "20130520", "20130530", "20130815", "20131101", "20131224", "20131225", "20131226", "20131231", "20140101", "20140106", "20140418", "20140421", "20140501", "20140529", "20140609", "20140619", "20140815", "20141208", "20141224", "20141225", "20141226", "20141231", "20150101", "20150106", "20150403", "20150406", "20150501", "20150514", "20150525", "20150604", "20151026", "20151208", "20151224", "20151225", "20151231", "20160101", "20160106", "20160325", "20160328", "20160505", "20160516", "20160526", "20160815", "20161026", "20161101", "20161208", "20161226", "20161230", "20170106", "20170414", "20170417", "20170501", "20170525", "20170605", "20170615", "20170815", "20171026", "20171101", "20171208", "20171225", "20171226", "20171229", "20180101", "20180330", "20180402", "20180501", "20180510", "20180521", "20180531", "20180815", "20181026", "20181101", "20181224", "20181225", "20181226", "20181231", "20190101", "20190419", "20190422", "20190501", "20190530", "20190610", "20190620", "20190815", "20191101", "20191224", "20191225", "20191226", "20191231", "20200101", "20200106", "20200410", "20200413", "20200501", "20200521", "20200601", "20200611", "20201026", "20201208", "20201224", "20201225", "20201231" ], + "MonthsToExclude": [] + }, + "WAR_SE": { + "InheritedCalendar": [], + "Name": "WAR_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040409", "20040412", "20040501", "20040610", "20040815", "20041101", "20041224", "20041225", "20041226", "20050101", "20050325", "20050328", "20050501", "20050526", "20050815", "20051101", "20051225", "20051226", "20060101", "20060414", "20060417", "20060501", "20060615", "20060815", "20061101", "20061225", "20061226", "20070101", "20070406", "20070409", "20070501", "20070607", "20070815", "20071101", "20071224", "20071225", "20071226", "20080101", "20080321", "20080324", "20080501", "20080522", "20080815", "20081101", "20081224", "20081225", "20081226", "20090101", "20090410", "20090413", "20090501", "20090611", "20090815", "20091101", "20091111", "20091224", "20091225", "20091226", "20100101", "20100402", "20100405", "20100501", "20100503", "20100603", "20100815", "20101101", "20101111", "20101224", "20101225", "20101226", "20110101", "20110422", "20110425", "20110501", "20110503", "20110623", "20110815", "20111101", "20111111", "20111225", "20111226", "20120101", "20120406", "20120409", "20120501", "20120503", "20120607", "20120815", "20121101", "20121224", "20121225", "20121226", "20130101", "20130329", "20130401", "20130501", "20130503", "20130530", "20130815", "20131101", "20131111", "20131224", "20131225", "20131226", "20140101", "20140418", "20140421", "20140501", "20140619", "20140815", "20141101", "20141111", "20141224", "20141225", "20141226", "20150101", "20150403", "20150406", "20150501", "20150604", "20150815", "20151101", "20151111", "20151224", "20151225", "20151226", "20160101", "20160325", "20160328", "20160501", "20160503", "20160526", "20160815", "20161101", "20161111", "20161225", "20161226", "20170101", "20170414", "20170417", "20170501", "20170503", "20170615", "20170815", "20171101", "20171225", "20171226", "20180101", "20180330", "20180402", "20180501", "20180503", "20180531", "20180815", "20181101", "20181224", "20181225", "20181226", "20190101", "20190419", "20190422", "20190501", "20190503", "20190620", "20190815", "20191101", "20191111", "20191224", "20191225", "20191226", "20200101", "20200410", "20200413", "20200501", "20200611", "20200815", "20201101", "20201111", "20201224", "20201225", "20201226" ], + "MonthsToExclude": [] + }, + "ZUR_SE": { + "InheritedCalendar": [], + "Name": "ZUR_SE", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [ "20040101", "20040102", "20040409", "20040412", "20040520", "20040531", "20041224", "20041231", "20050325", "20050328", "20050505", "20050516", "20051226", "20060102", "20060414", "20060417", "20060501", "20060525", "20060605", "20060801", "20061225", "20061226", "20070101", "20070102", "20070406", "20070409", "20070501", "20070517", "20070528", "20070801", "20071224", "20071225", "20071226", "20071231", "20080101", "20080102", "20080321", "20080324", "20080501", "20080512", "20080801", "20081224", "20081225", "20081226", "20081231", "20090101", "20090102", "20090410", "20090413", "20090501", "20090521", "20090601", "20091224", "20091225", "20091231", "20100101", "20100402", "20100405", "20100513", "20100524", "20101224", "20101231", "20110422", "20110425", "20110602", "20110613", "20110801", "20111226", "20120102", "20120406", "20120409", "20120501", "20120517", "20120528", "20120801", "20121224", "20121225", "20121226", "20121231", "20130101", "20130102", "20130329", "20130401", "20130501", "20130509", "20130520", "20130801", "20131224", "20131225", "20131226", "20131231", "20140101", "20140102", "20140418", "20140421", "20140501", "20140529", "20140609", "20140801", "20141224", "20141225", "20141226", "20141231", "20150101", "20150102", "20150403", "20150406", "20150501", "20150514", "20150525", "20151224", "20151225", "20151231", "20160101", "20160325", "20160328", "20160505", "20160516", "20160801", "20161226", "20170102", "20170414", "20170417", "20170501", "20170525", "20170605", "20170801", "20171225", "20171226", "20180101", "20180102", "20180330", "20180402", "20180501", "20180510", "20180521", "20180801", "20181224", "20181225", "20181226", "20181231", "20190101", "20190102", "20190419", "20190422", "20190501", "20190530", "20190610", "20190801", "20191224", "20191225", "20191226", "20191231", "20200101", "20200102", "20200410", "20200413", "20200501", "20200521", "20200601", "20201224", "20201225", "20201231" ], + "MonthsToExclude": [] + }, + "USD": { + "InheritedCalendar": [ "NYC" ], + "Name": "USD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "GBP": { + "InheritedCalendar": [ "LON" ], + "Name": "GBP", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "CHF": { + "InheritedCalendar": [ "ZUR" ], + "Name": "CHF", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "ZAR": { + "InheritedCalendar": [ "JHB" ], + "Name": "ZAR", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "AUD": { + "InheritedCalendar": [ "SYD" ], + "Name": "AUD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "NZD": { + "InheritedCalendar": [ "WEL" ], + "Name": "NZD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "CAD": { + "InheritedCalendar": [ "TOR" ], + "Name": "CAD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "CZK": { + "InheritedCalendar": [ "PRA" ], + "Name": "CZK", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "SEK": { + "InheritedCalendar": [ "STO" ], + "Name": "SEK", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "NOK": { + "InheritedCalendar": [ "OSL" ], + "Name": "NOK", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "DKK": { + "InheritedCalendar": [ "COH" ], + "Name": "DKK", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "HUF": { + "InheritedCalendar": [ "BUD" ], + "Name": "HUF", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "BRL": { + "InheritedCalendar": [ "SAO" ], + "Name": "BRL", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "KRW": { + "InheritedCalendar": [ "SEO" ], + "Name": "KRW", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "HKD": { + "InheritedCalendar": [ "HKG" ], + "Name": "HKD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "THB": { + "InheritedCalendar": [ "BAN" ], + "Name": "THB", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "INR": { + "InheritedCalendar": [ "MUM" ], + "Name": "INR", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "JPY": { + "InheritedCalendar": [ "TOK" ], + "Name": "JPY", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "RUB": { + "InheritedCalendar": [ "MOS" ], + "Name": "RUB", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "MXN": { + "InheritedCalendar": [ "MEX" ], + "Name": "MXN", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "CNY": { + "InheritedCalendar": [ "BEB" ], + "Name": "CNY", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "CNH": { + "InheritedCalendar": [ "BEB" ], + "Name": "CNH", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "PHP": { + "InheritedCalendar": [ "MAN" ], + "Name": "PHP", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "TWD": { + "InheritedCalendar": [ "TAI" ], + "Name": "TWD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "XAU": { + "InheritedCalendar": [ "LON" ], + "Name": "XAU", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "XAG": { + "InheritedCalendar": [ "LON" ], + "Name": "XAG", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "XPT": { + "InheritedCalendar": [ "LON" ], + "Name": "XPT", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "XPD": { + "InheritedCalendar": [ "LON" ], + "Name": "XPD", + "DaysToAlwaysExclude": [ 6, 0 ], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "BTC": { + "InheritedCalendar": [ "NONE" ], + "Name": "BTC", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "MonthsToExclude": [] + }, + "ETH": { + "InheritedCalendar": [ "NONE" ], + "Name": "ETH", + "DaysToAlwaysExclude": [], + "DaysToExclude": [], + "MonthsToExclude": [] + } +} diff --git a/clients/Qwack.Excel.Next/Capital/CapitalFunctions.cs b/clients/Qwack.Excel.Next/Capital/CapitalFunctions.cs new file mode 100644 index 00000000..d329ed92 --- /dev/null +++ b/clients/Qwack.Excel.Next/Capital/CapitalFunctions.cs @@ -0,0 +1,462 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using ExcelDna.Integration; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Core.Instruments; +using Qwack.Excel.Curves; +using Qwack.Core.Models; +using Qwack.Core.Curves; +using Qwack.Models.Risk; +using Qwack.Core.Cubes; +using Qwack.Models.Solvers; +using Qwack.Models.Models; +using Qwack.Transport.BasicTypes; + +namespace Qwack.Excel.Capital +{ + public class CapitalFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Computes SA-CCR EAD", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(ComputeEAD))] + public static object ComputeEAD( + [ExcelArgument(Description = "Portfolio object")] string PortfolioName, + [ExcelArgument(Description = "AssetFx model")] string VanillaModel, + [ExcelArgument(Description = "Reporting currency")] string ReportingCurrency, + [ExcelArgument(Description = "Map for assetIds to commodity types")] object[,] AssetIdToTypeMap, + [ExcelArgument(Description = "Map for types to commodity hedge sets")] object[,] TypeToHedgeSetMap) + { + return ExcelHelper.Execute(_logger, () => + { + var pf = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache().GetObjectOrThrow(VanillaModel, $"Model {VanillaModel} not found"); + var ccy = ContainerStores.CurrencyProvider.GetCurrency(ReportingCurrency); + var assetIdToTypeMap = AssetIdToTypeMap.RangeToDictionary(); + var typeToHedgeSetMap = TypeToHedgeSetMap.RangeToDictionary(); + var pv = pf.PV(model.Value, ccy).SumOfAllRows; + var epe = System.Math.Max(pv, 0); + return pf.SaCcrEad(model.Value, ccy, assetIdToTypeMap, typeToHedgeSetMap, ContainerStores.CurrencyProvider, epe); + }); + } + + + [ExcelFunction(Description = "Computes CVA from an EPE profile", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(ComputeCVA))] + public static object ComputeCVA( + [ExcelArgument(Description = "Hazzard curve")] string HazzardCurveName, + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "EPE profile, cube or array")] object EPEProfile, + [ExcelArgument(Description = "Loss-given-default, e.g. 0.4")] double LGD) + { + return ExcelHelper.Execute(_logger, () => + { + var hz = ContainerStores.GetObjectCache().GetObjectOrThrow(HazzardCurveName, $"Hazzard curve {HazzardCurveName} not found"); + var disc = ContainerStores.GetObjectCache().GetObjectOrThrow(DiscountCurve, $"Discount curve {DiscountCurve} not found"); + + if (EPEProfile is object[,] arr) + { + if (arr.GetLength(1) != 2) + throw new Exception("Expected Nx2 array for EPE"); + + var epeDates = new DateTime[arr.GetLength(0)]; + var epeValues = new double[arr.GetLength(0)]; + for (var i = 0; i < arr.GetLength(0); i++) + { + epeDates[i] = (DateTime)arr[i, 0]; + epeValues[i] = (double)arr[i, 1]; + } + return XVACalculator.CVA(OriginDate, epeDates, epeValues, hz.Value, disc.Value, LGD); + } + else if (EPEProfile is string epeCubeName) + { + var cube = ContainerStores.GetObjectCache().GetObjectOrThrow(epeCubeName, $"Cube {epeCubeName} not found"); + return XVACalculator.CVA(OriginDate, cube.Value, hz.Value, disc.Value, LGD); + } + + throw new Exception("EPE profile must be cube reference or Nx2 array"); + }); + } + + [ExcelFunction(Description = "Computes approximate CVA for a portfolio", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(ComputeCVAApprox))] + public static object ComputeCVAApprox( + [ExcelArgument(Description = "Hazzard curve")] string HazzardCurveName, + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "Exposure dates")] double[] ExposureDates, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "Asset-FX Model")] string Model, + [ExcelArgument(Description = "Loss-given-default, e.g. 0.4")] double LGD, + [ExcelArgument(Description = "Reporting currency")] string Currency) + { + return ExcelHelper.Execute(_logger, () => + { + var hz = ContainerStores.GetObjectCache().GetObjectOrThrow(HazzardCurveName, $"Hazzard curve {HazzardCurveName} not found"); + var disc = ContainerStores.GetObjectCache().GetObjectOrThrow(DiscountCurve, $"Discount curve {DiscountCurve} not found"); + var model = ContainerStores.GetObjectCache().GetObjectOrThrow(Model, $"Asset-FX model {Model} not found"); + var expDates = ExposureDates.ToDateTimeArray(model.Value.BuildDate); + var portfolio = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio); + + var repCcy = ContainerStores.CurrencyProvider.GetCurrency(Currency); + return XVACalculator.CVA_Approx(expDates, portfolio, hz.Value, model.Value, disc.Value, LGD, repCcy, ContainerStores.CurrencyProvider); + }); + } + + [ExcelFunction(Description = "Solves strike for a target RoC", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(SolveStrikeForTargetRoC), IsThreadSafe = false)] + public static object SolveStrikeForTargetRoC( + [ExcelArgument(Description = "Hazzard curve")] string HazzardCurveName, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "Asset-FX Model")] string Model, + [ExcelArgument(Description = "Loss-given-default, e.g. 0.4")] double LGD, + [ExcelArgument(Description = "Party risk weight, e.g. 1.0")] double PartyRiskWeight, + [ExcelArgument(Description = "Reporting currency")] string Currency, + [ExcelArgument(Description = "Target RoC")] double TargetRoC, + [ExcelArgument(Description = "Weight for CVA Capital")] double CVACapitalWeight, + [ExcelArgument(Description = "(Optional) LGD for xVA")] object LGDOverrideXVA, + [ExcelArgument(Description = "AssetId to Category map")] object[,] AssetIdToCategoryMap, + [ExcelArgument(Description = "Category to CCF map")] object[,] CategoryToCCFMap) + { + return ExcelHelper.Execute(_logger, () => + { + var hz = ContainerStores.GetObjectCache().GetObjectOrThrow(HazzardCurveName, $"Hazzard curve {HazzardCurveName} not found"); + var disc = ContainerStores.GetObjectCache().GetObjectOrThrow(DiscountCurve, $"Discount curve {DiscountCurve} not found"); + var portfolio = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio); + var model = ContainerStores.GetObjectCache().GetObjectOrThrow(Model, $"Asset-FX model {Model} not found"); + var repCcy = ContainerStores.CurrencyProvider.GetCurrency(Currency); + var xvaLgd = LGDOverrideXVA.OptionalExcel(LGD); + var assetIdToCategory = AssetIdToCategoryMap.RangeToDictionary(); + var categoryToCCF = CategoryToCCFMap.RangeToDictionary(); + return SimplePortfolioSolver.SolveStrikeForGrossRoC(portfolio, model.Value, TargetRoC, repCcy, hz.Value, LGD, xvaLgd, PartyRiskWeight, + CVACapitalWeight, disc.Value, ContainerStores.CurrencyProvider, assetIdToCategory, categoryToCCF); + }); + } + + [ExcelFunction(Description = "Computes Basel II CVA risk weighted assets from an EPE profile", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(ComputeCvaRwaBaselII_IMM))] + public static object ComputeCvaRwaBaselII_IMM( + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "EPE profile, cube or array")] object EPEProfile, + [ExcelArgument(Description = "Loss-given-default, e.g. 0.4")] double LGD, + [ExcelArgument(Description = "Probability-of-default, e.g. 0.02")] double PD) + { + return ExcelHelper.Execute(_logger, () => + { + if (EPEProfile is object[,] arr) + { + if (arr.GetLength(1) != 2) + throw new Exception("Expected Nx2 array for EPE"); + + var epeDates = new DateTime[arr.GetLength(0)]; + var epeValues = new double[arr.GetLength(0)]; + for (var i = 0; i < arr.GetLength(0); i++) + { + epeDates[i] = (DateTime)arr[i, 0]; + epeValues[i] = (double)arr[i, 1]; + } + return XVACalculator.RWA_BaselII_CCR_IMM(OriginDate, epeDates, epeValues, PD, LGD); + } + else if (EPEProfile is string epeCubeName) + { + var cube = ContainerStores.GetObjectCache().GetObjectOrThrow(epeCubeName, $"Cube {epeCubeName} not found"); + return XVACalculator.RWA_BaselII_IMM(OriginDate, cube.Value, PD, LGD); + } + + throw new Exception("EPE profile must be cube reference or Nx2 array"); + }); + } + + + [ExcelFunction(Description = "Computes Basel III CVA capital from an EPE profile", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(ComputeCVACapitalBaselIII))] + public static object ComputeCVACapitalBaselIII( + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "EPE profile, cube or array")] object EPEProfile, + [ExcelArgument(Description = "Loss-given-default, e.g. 0.4")] double LGD, + [ExcelArgument(Description = "Probability-of-default, e.g. 0.02")] double PD, + [ExcelArgument(Description = "Counterparty weighting, e.g. 0.1")] double PartyWeight) + { + return ExcelHelper.Execute(_logger, () => + { + if (EPEProfile is object[,] arr) + { + if (arr.GetLength(1) != 2) + throw new Exception("Expected Nx2 array for EPE"); + + var epeDates = new DateTime[arr.GetLength(0)]; + var epeValues = new double[arr.GetLength(0)]; + for (var i = 0; i < arr.GetLength(0); i++) + { + epeDates[i] = (DateTime)arr[i, 0]; + epeValues[i] = (double)arr[i, 1]; + } + return XVACalculator.RWA_BaselIII_CVA_IMM(OriginDate, epeDates, epeValues, PD, LGD, PartyWeight); + } + else if (EPEProfile is string epeCubeName) + { + var cube = ContainerStores.GetObjectCache().GetObjectOrThrow(epeCubeName, $"Cube {epeCubeName} not found"); + return XVACalculator.RWA_BaselIII_IMM(OriginDate, cube.Value, PD, LGD, PartyWeight); + } + + throw new Exception("EPE profile must be cube reference or Nx2 array"); + }); + } + + [ExcelFunction(Description = "Returns PV capital / BaselII / IMM given an EAD profile and credit info", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(PortfolioPvCcrCapital))] + public static object PortfolioPvCcrCapital( + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "Expected EAD cube name")] string EADCubeName, + [ExcelArgument(Description = "Credit settings object name")] string CreditSettingsName, + [ExcelArgument(Description = "Origin date")] DateTime OriginDate) + { + return ExcelHelper.Execute(_logger, () => + { + var eadCube = ContainerStores.GetObjectCache() + .GetObjectOrThrow(EADCubeName, $"Could not find cube with name {EADCubeName}"); + var creditSettings = ContainerStores.GetObjectCache() + .GetObjectOrThrow(CreditSettingsName, $"Could not find credit settings with name {CreditSettingsName}"); + var portfolio = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio); + + var result = CapitalCalculator.PVCapital_BII_IMM(OriginDate, eadCube.Value, creditSettings.Value.CreditCurve, creditSettings.Value.BaseDiscountCurve, creditSettings.Value.LGD, portfolio); + return result; + }); + } + + [ExcelFunction(Description = "Returns PV CCR capital / BaselII / SM given portfolio, model and credit info", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(PortfolioPvCcrCapital_B2_SM))] + public static object PortfolioPvCcrCapital_B2_SM( + [ExcelArgument(Description = "Hazzard curve")] string HazzardCurveName, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "Asset-FX Model")] string Model, + [ExcelArgument(Description = "Loss-given-default, e.g. 0.4")] double LGD, + [ExcelArgument(Description = "Reporting currency")] string Currency, + [ExcelArgument(Description = "EPE cube")] string EPECube, + [ExcelArgument(Description = "AssetId to CCF map")] object[,] AssetIdToCCFMap) + { + return ExcelHelper.Execute(_logger, () => + { + var epeCube = ContainerStores.GetObjectCache().GetObjectOrThrow(EPECube, $"EPE cube {EPECube} not found"); + var hz = ContainerStores.GetObjectCache().GetObjectOrThrow(HazzardCurveName, $"Hazzard curve {HazzardCurveName} not found"); + var disc = ContainerStores.GetObjectCache().GetObjectOrThrow(DiscountCurve, $"Discount curve {DiscountCurve} not found"); + var portfolio = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio); + var model = ContainerStores.GetObjectCache().GetObjectOrThrow(Model, $"Asset-FX model {Model} not found"); + var repCcy = ContainerStores.CurrencyProvider.GetCurrency(Currency); + var expDates = epeCube.Value.GetAllRows().Select(r => (DateTime)r.MetaData[0]).ToArray(); + var epeValues = epeCube.Value.GetAllRows().Select(r => r.Value).ToArray(); + var models = new IAssetFxModel[expDates.Length]; + var m = model.Value.TrimModel(portfolio, null, new[] { Currency }); + + for (var i = 0; i < models.Length; i++) + { + m = m.RollModel(expDates[i], ContainerStores.CurrencyProvider); + models[i] = m; + } + var assetIdToCCFMap = AssetIdToCCFMap.RangeToDictionary(); + var result = CapitalCalculator.PvCcrCapital_BII_SM(model.Value.BuildDate, expDates, models, portfolio, hz.Value, repCcy, disc.Value, LGD, + assetIdToCCFMap, ContainerStores.CurrencyProvider, epeValues); + return result; + }); + } + + [ExcelFunction(Description = "Returns PV CVA capital / BaselII / SM given portfolio, model and credit info", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(PortfolioPvCvaCapital_B2_SM))] + public static object PortfolioPvCvaCapital_B2_SM( + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "Asset-FX Model")] string Model, + [ExcelArgument(Description = "Reporting currency")] string Currency, + [ExcelArgument(Description = "EPE cube")] string EPECube, + [ExcelArgument(Description = "Party risk weight")] double CvaRiskWeight, + [ExcelArgument(Description = "Asset Id to CCF map")] object[,] AssetIdToCCFMap) + { + return ExcelHelper.Execute(_logger, () => + { + var epeCube = ContainerStores.GetObjectCache().GetObjectOrThrow(EPECube, $"EPE cube {EPECube} not found"); + var disc = ContainerStores.GetObjectCache().GetObjectOrThrow(DiscountCurve, $"Discount curve {DiscountCurve} not found"); + var portfolio = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio); + var model = ContainerStores.GetObjectCache().GetObjectOrThrow(Model, $"Asset-FX model {Model} not found"); + var repCcy = ContainerStores.CurrencyProvider.GetCurrency(Currency); + var expDates = epeCube.Value.GetAllRows().Select(r => (DateTime)r.MetaData[0]).ToArray(); + var epeValues = epeCube.Value.GetAllRows().Select(r => r.Value).ToArray(); + var models = new IAssetFxModel[expDates.Length]; + var m = model.Value.TrimModel(portfolio, null, new[] { Currency }); + for (var i = 0; i < models.Length; i++) + { + m = m.RollModel(expDates[i], ContainerStores.CurrencyProvider); + models[i] = m; + } + + var assetIdToCCFMap = AssetIdToCCFMap.RangeToDictionary(); + var result = CapitalCalculator.PvCvaCapital_BII_SM(model.Value.BuildDate, expDates, models, portfolio, repCcy, disc.Value, CvaRiskWeight, + assetIdToCCFMap, ContainerStores.CurrencyProvider, epeValues); + return result; + }); + } + + [ExcelFunction(Description = "Returns PV CVA and CCR capital under a blend of B2 and B3, given portfolio, model and credit info", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(PortfolioPvCapitalSplit))] + public static object PortfolioPvCapitalSplit( + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Hazzard curve")] string HazzardCurve, + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "Asset-FX Model")] string Model, + [ExcelArgument(Description = "Reporting currency")] string Currency, + [ExcelArgument(Description = "EPE cube")] string EPECube, + [ExcelArgument(Description = "Loss-Given-Default")] double LGD, + [ExcelArgument(Description = "Cva risk weight")] double CvaRiskWeight, + [ExcelArgument(Description = "Party risk weight")] double PartyRiskWeight, + [ExcelArgument(Description = "Map for assetIds to commodity types")] object[,] AssetIdToTypeMap, + [ExcelArgument(Description = "Map for types to commodity hedge sets")] object[,] TypeToHedgeSetMap, + [ExcelArgument(Description = "Asset Id to CCF map")] object[,] AssetIdToCCFMap, + [ExcelArgument(Description = "Basel II / Basel II cutover date")] DateTime ChangeOverDate, + [ExcelArgument(Description = "Tier 1 capital, i.e. 0.10")] double Tier1CapitalRatio, + [ExcelArgument(Description = "Tier 2 capital, i.e. 0.015")] double Tier2CapitalRatio, + [ExcelArgument(Description = "Tier 1 capital cost, i.e. 0.15")] double Tier1CapitalCost, + [ExcelArgument(Description = "Tier 2 capital cost, i.e. 0.03")] double Tier2CapitalCost) + { + return ExcelHelper.Execute(_logger, () => + { + var epeCube = ContainerStores.GetObjectCache().GetObjectOrThrow(EPECube, $"EPE cube {EPECube} not found"); + var disc = ContainerStores.GetObjectCache().GetObjectOrThrow(DiscountCurve, $"Discount curve {DiscountCurve} not found"); + var hz = ContainerStores.GetObjectCache().GetObjectOrThrow(HazzardCurve, $"Hazzard curve {HazzardCurve} not found"); + var portfolio = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio); + var model = ContainerStores.GetObjectCache().GetObjectOrThrow(Model, $"Asset-FX model {Model} not found"); + var repCcy = ContainerStores.CurrencyProvider.GetCurrency(Currency); + var expDates = epeCube.Value.GetAllRows().Select(r => (DateTime)r.MetaData[0]).ToArray(); + var epeValues = epeCube.Value.GetAllRows().Select(r => r.Value).ToArray(); + var models = new IAssetFxModel[expDates.Length]; + var m = model.Value.TrimModel(portfolio, null, new[] { Currency }); + for (var i = 0; i < models.Length; i++) + { + m = m.RollModel(expDates[i], ContainerStores.CurrencyProvider); + models[i] = m; + } + + var assetIdToCCFMap = AssetIdToCCFMap.RangeToDictionary(); + var assetIdToTypeMap = AssetIdToTypeMap.RangeToDictionary(); + var typeToHedgeSetMap = TypeToHedgeSetMap.RangeToDictionary(); + var (CVA_t1, CVA_t2, CCR_t1, CCR_t2) = CapitalCalculator.PvCapital_Split(model.Value.BuildDate, expDates, models, portfolio, hz.Value, repCcy, disc.Value, + LGD, CvaRiskWeight, PartyRiskWeight, assetIdToTypeMap, typeToHedgeSetMap, assetIdToCCFMap, ContainerStores.CurrencyProvider, epeValues, + Tier1CapitalRatio, Tier2CapitalRatio, Tier1CapitalCost, Tier2CapitalCost, ChangeOverDate); + + return new object[,] + { + { "Type","Tier1","Tier2" }, + { "CCR", CCR_t1, CCR_t2 }, + { "CVA", CVA_t1, CVA_t2 } }; + }); + } + + [ExcelFunction(Description = "Returns EAD profile / BaselII / SM given portfolio, model and credit info", Category = CategoryNames.Capital, + Name = CategoryNames.Capital + "_" + nameof(PortfolioExpectedEad_B2_SM))] + public static object PortfolioExpectedEad_B2_SM( + [ExcelArgument(Description = "Output cube name")] string OutputName, + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "Asset-FX Model")] string Model, + [ExcelArgument(Description = "Reporting currency")] string Currency, + [ExcelArgument(Description = "EPE cube")] string EPECube, + [ExcelArgument(Description = "AssetId to CCF map")] object[,] AssetIdToCCFMap) + { + return ExcelHelper.Execute(_logger, () => + { + var epeCube = ContainerStores.GetObjectCache().GetObjectOrThrow(EPECube, $"EPE cube {EPECube} not found"); + var portfolio = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio); + var model = ContainerStores.GetObjectCache().GetObjectOrThrow(Model, $"Asset-FX model {Model} not found"); + var repCcy = ContainerStores.CurrencyProvider.GetCurrency(Currency); + var expDates = epeCube.Value.GetAllRows().Select(r => (DateTime)r.MetaData[0]).ToArray(); + var epeValues = epeCube.Value.GetAllRows().Select(r => r.Value).ToArray(); + var models = new IAssetFxModel[expDates.Length]; + var m = model.Value.TrimModel(portfolio, null, new[] { Currency }); + for (var i = 0; i < models.Length; i++) + { + m = m.RollModel(expDates[i], ContainerStores.CurrencyProvider); + models[i] = m; + } + var assetIdToCCFMap = AssetIdToCCFMap.RangeToDictionary(); + var result = CapitalCalculator.EAD_BII_SM(model.Value.BuildDate, expDates, epeValues, models, portfolio, repCcy, assetIdToCCFMap, ContainerStores.CurrencyProvider); + var cube = ExcelHelper.PackResults(expDates, result, "EAD"); + return ExcelHelper.PushToCache(cube, OutputName); + }); + } + + [ExcelFunction(Description = "Returns EAD profile under a blend of B2 and B3, given portfolio, model and credit info", Category = CategoryNames.Capital, + Name = CategoryNames.Capital + "_" + nameof(PortfolioExpectedEadSplit))] + public static object PortfolioExpectedEadSplit( + [ExcelArgument(Description = "Output cube name")] string OutputName, + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "Asset-FX Model")] string Model, + [ExcelArgument(Description = "Reporting currency")] string Currency, + [ExcelArgument(Description = "EPE cube")] string EPECube, + [ExcelArgument(Description = "Map for assetIds to commodity types")] object[,] AssetIdToTypeMap, + [ExcelArgument(Description = "Map for types to commodity hedge sets")] object[,] TypeToHedgeSetMap, + [ExcelArgument(Description = "Asset Id to CCF map")] object[,] AssetIdToCCFMap, + [ExcelArgument(Description = "Basel II / Basel II cutover date")] DateTime ChangeOverDate) + { + return ExcelHelper.Execute(_logger, () => + { + var epeCube = ContainerStores.GetObjectCache().GetObjectOrThrow(EPECube, $"EPE cube {EPECube} not found"); + var portfolio = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio); + var model = ContainerStores.GetObjectCache().GetObjectOrThrow(Model, $"Asset-FX model {Model} not found"); + var repCcy = ContainerStores.CurrencyProvider.GetCurrency(Currency); + var expDates = epeCube.Value.GetAllRows().Select(r => (DateTime)r.MetaData[0]).ToArray(); + var epeValues = epeCube.Value.GetAllRows().Select(r => r.Value).ToArray(); + var models = new IAssetFxModel[expDates.Length]; + var m = model.Value.TrimModel(portfolio, null, new[] { Currency }); + for (var i = 0; i < models.Length; i++) + { + m = m.RollModel(expDates[i], ContainerStores.CurrencyProvider); + models[i] = m; + } + var assetIdToCCFMap = AssetIdToCCFMap.RangeToDictionary(); + var assetIdToTypeMap = AssetIdToTypeMap.RangeToDictionary(); + var typeToHedgeSetMap = TypeToHedgeSetMap.RangeToDictionary(); + var result = CapitalCalculator.EAD_Split(model.Value.BuildDate, expDates, epeValues, models, portfolio, repCcy, assetIdToTypeMap, typeToHedgeSetMap, + assetIdToCCFMap, ChangeOverDate, ContainerStores.CurrencyProvider); + var cube = ExcelHelper.PackResults(expDates, result, "EAD"); + return ExcelHelper.PushToCache(cube, OutputName); + }); + } + + [ExcelFunction(Description = "Returns RAW profile given portfolio, ead cube and credit info", Category = CategoryNames.Capital, + Name = CategoryNames.Capital + "_" + nameof(PortfolioExpectedRwa))] + public static object PortfolioExpectedRwa( + [ExcelArgument(Description = "Output cube name")] string OutputName, + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "EAD cube")] string EADCube, + [ExcelArgument(Description = "Hazzard curve")] string HazardCurve, + [ExcelArgument(Description = "Loss-given-default, e.g 0.45")] double LGD) + { + return ExcelHelper.Execute(_logger, () => + { + var eadCube = ContainerStores.GetObjectCache().GetObjectOrThrow(EADCube, $"EAD cube {EADCube} not found"); + var portfolio = Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio); + var hz = ContainerStores.GetObjectCache().GetObjectOrThrow(HazardCurve, $"Hazzard curve {HazardCurve} not found"); + var result = CapitalCalculator.RwaCalculator(eadCube.Value, hz.Value, portfolio, LGD); + return ExcelHelper.PushToCache(result, OutputName); + }); + } + + [ExcelFunction(Description = "Returns notional-weighted maturity of a portfolio, given a value date", Category = CategoryNames.Capital, + Name = CategoryNames.Capital + "_" + nameof(PortfolioWeightedMaturity))] + public static object PortfolioWeightedMaturity( + [ExcelArgument(Description = "Portfolio")] string Portfolio, + [ExcelArgument(Description = "Value date")] DateTime ValueDate) => + ExcelHelper.Execute(_logger, () => Instruments.InstrumentFunctions.GetPortfolioOrTradeFromCache(Portfolio).WeightedMaturity(ValueDate)); + + [ExcelFunction(Description = "Computes basel K factor", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(BaselK))] + public static object BaselK( + [ExcelArgument(Description = "Probability-of-default")] double PD, + [ExcelArgument(Description = "Loss-given-default")] double LGD, + [ExcelArgument(Description = "Weighted maturity")] double M) + => ExcelHelper.Execute(_logger, () => BaselHelper.K(PD, LGD, M)); + + [ExcelFunction(Description = "Computes basel B factor", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(BaselB))] + public static object BaselB( + [ExcelArgument(Description = "Probability-of-default")] double PD) + => ExcelHelper.Execute(_logger, () => BaselHelper.B(PD)); + + [ExcelFunction(Description = "Computes basel R factor", Category = CategoryNames.Capital, Name = CategoryNames.Capital + "_" + nameof(BaselR))] + public static object BaselR( + [ExcelArgument(Description = "Probability-of-default")] double PD) + => ExcelHelper.Execute(_logger, () => BaselHelper.R(PD)); + } +} diff --git a/clients/Qwack.Excel.Next/CategoryNames.cs b/clients/Qwack.Excel.Next/CategoryNames.cs new file mode 100644 index 00000000..d74e6611 --- /dev/null +++ b/clients/Qwack.Excel.Next/CategoryNames.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Qwack.Excel +{ + internal static class CategoryNames + { + internal const string Dates = "QDates"; + internal const string Options = "QOpt"; + internal const string Volatility = "QVol"; + internal const string Interpolation = "QInterp"; + internal const string Curves = "QCurves"; + internal const string Instruments = "QIns"; + internal const string Cubes = "QCube"; + internal const string Math = "QMath"; + internal const string Models = "QModels"; + internal const string Risk = "QRisk"; + internal const string Capital = "QCap"; + } +} diff --git a/clients/Qwack.Excel.Next/ContainerStores.cs b/clients/Qwack.Excel.Next/ContainerStores.cs new file mode 100644 index 00000000..74fa93cf --- /dev/null +++ b/clients/Qwack.Excel.Next/ContainerStores.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Qwack.Core.Basic; +using Qwack.Dates; +using Qwack.Excel.Utils; +using Qwack.Futures; +using Qwack.Models.Models; +using Qwack.Providers.Json; +using Qwack.Utils; + +namespace Qwack.Excel +{ + public static class ContainerStores + { + private const string _calendarJSONFile = "Calendars.json"; + private const string _futureSettingsFile = "futuresettings.json"; + private const string _currenciesFile = "currencies.json"; + + private static object _lock = new object(); + private static object _sessionLock = new object(); + + static ContainerStores() + { + try + { + GlobalContainer = ((IServiceCollection)new ServiceCollection()) + .AddQwackLogging() + .AddCalendarsFromJson(GetCalendarFilename()) + .AddFutureSettingsFromJson(GetFutureSettingsFile()) + .AddCurrenciesFromJson(GetCurrenciesFilename()) + .AddSingleton(typeof(IObjectStore<>), typeof(ExcelObjectStore<>)) + .BuildServiceProvider(); + + SessionContainer = GlobalContainer.CreateScope().ServiceProvider; + + SessionContainer.GetRequiredService(); + + PnLAttributor = new PnLAttributor(); + } + catch (Exception ex) + { + if (Directory.Exists(@"C:\Temp")) + { + File.WriteAllText($@"C:\Temp\QwackInitializationError_{DateTime.Now:yyyyMMdd_HHmmss}.txt", ex.ToString()); + } + } + } + + public static IServiceProvider GlobalContainer { get; internal set; } + + private static IServiceProvider _sessionContainer; + public static IServiceProvider SessionContainer + { + get + { + lock (_sessionLock) + { return _sessionContainer; } + } + set + { + lock (_sessionLock) + { + _sessionContainer = value; + } + } + } + public static ICurrencyProvider CurrencyProvider => GlobalContainer.GetRequiredService(); + public static ICalendarProvider CalendarProvider => GlobalContainer.GetRequiredService(); + public static IFutureSettingsProvider FuturesProvider => GlobalContainer.GetRequiredService(); + public static ILogger GetLogger() => GlobalContainer.GetRequiredService().CreateLogger(); + + private static ConcurrentDictionary _registeredTypes = new ConcurrentDictionary(); + + public static IPnLAttributor PnLAttributor { get; set; } + + private static string GetFutureSettingsFile() => Path.Combine(GetRunningDirectory(), _futureSettingsFile); + + private static string GetRunningDirectory() + { + var codeBaseUrl = new Uri(Assembly.GetExecutingAssembly().CodeBase); + var codeBasePath = Uri.UnescapeDataString(codeBaseUrl.AbsolutePath); + var dirPath = Path.GetDirectoryName(codeBasePath); + return dirPath; + } + + private static string GetCalendarFilename() => Path.Combine(GetRunningDirectory(), _calendarJSONFile); + private static string GetCurrenciesFilename() => Path.Combine(GetRunningDirectory(), _currenciesFile); + + public static IObjectStore GetObjectCache() + { + lock (_lock) + { + var os = SessionContainer.GetService>(); + _registeredTypes.AddOrUpdate(typeof(T), os, (x, y) => os); + return os; + } + } + public static T GetObjectFromCache(string name) + { + lock (_lock) + { + return SessionContainer.GetService>().GetObject(name).Value; + } + } + public static void PutObjectToCache(string name, T obj) => GetObjectCache().PutObject(name, new SessionItem { Name = name, Value = obj, Version = 1 }); + + public static void FlushCache() => SessionContainer.GetService>().Clear(); + public static void FlushAllCaches() + { + foreach (var t in _registeredTypes.Values.ToArray()) + { + t.Clear(); + } + } + } +} diff --git a/clients/Qwack.Excel.Next/Cubes/CubeFunctions.cs b/clients/Qwack.Excel.Next/Cubes/CubeFunctions.cs new file mode 100644 index 00000000..15cfeef5 --- /dev/null +++ b/clients/Qwack.Excel.Next/Cubes/CubeFunctions.cs @@ -0,0 +1,361 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using ExcelDna.Integration; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Core.Cubes; +using Qwack.Excel.Curves; +using System.Security.Policy; + +namespace Qwack.Excel.Cubes +{ + public class CubeFunctions + { + private const bool Parallel = true; + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Displays a cube object", Category = CategoryNames.Cubes, Name = CategoryNames.Cubes + "_" + nameof(DisplayCube), IsThreadSafe = Parallel)] + public static object DisplayCube( + [ExcelArgument(Description = "Cube name")] string ObjectName, + [ExcelArgument(Description = "Pad output with whitespace beyond edges of result - defualt false")] object PaddedOutput, + [ExcelArgument(Description = "Hide zero value rows - defualt false")] object HideZeroRows) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.GetObjectCache().TryGetObject(ObjectName, out var cube)) + throw new Exception($"Could not find cube {ObjectName}"); + + var pad = PaddedOutput.OptionalExcel(false); + var hideZero = HideZeroRows.OptionalExcel(false); + + var rows = cube.Value.GetAllRows(); + + var o = new List(); //[rows.Length + 1, cube.Value.DataTypes.Count+1]; + var width = cube.Value.DataTypes.Count + 1; + o.Add(new object[width]); + var c = 0; + foreach (var t in cube.Value.DataTypes) + { + o[0][c] = t.Key; + c++; + } + o[0][o[0].Length - 1] = "Value"; + + var r = 1; + foreach (var row in rows) + { + if (!hideZero || row.Value != 0) + { + o.Add(new object[width]); + for (c = 0; c < cube.Value.DataTypes.Count; c++) + { + o[r][c] = row.MetaData[c]; + } + o[r][o[r].Length - 1] = row.Value; + + r++; + } + } + + var oo = new object[o.Count, width]; + for(var i=0;i + { + var cube = ContainerStores.GetObjectCache().GetObjectOrThrow(ObjectName, $"Could not find cube {ObjectName}"); + var rows = cube.Value.GetAllRows(); + + if(rows.Length + { + var cube = ContainerStores.GetObjectCache().GetObjectOrThrow(ObjectName, $"Could not find cube {ObjectName}"); + return cube.Value.SumOfAllRows ; + }); + } + + [ExcelFunction(Description = "Creates a cube object", Category = CategoryNames.Cubes, Name = CategoryNames.Cubes + "_" + nameof(CreateCube), IsThreadSafe = Parallel)] + public static object CreateCube( + [ExcelArgument(Description = "Cube name")] string ObjectName, + [ExcelArgument(Description = "Header range")] object[] Headers, + [ExcelArgument(Description = "Metadata range")] object[,] MetaData, + [ExcelArgument(Description = "Value range")] double[] Data) + { + return ExcelHelper.Execute(_logger, () => + { + if (Headers.Length != MetaData.GetLength(1)) + throw new Exception("Headers must match width of metadata range"); + + if (Data.Length != MetaData.GetLength(0)) + throw new Exception("Data vector must match length of metadata range"); + + var cube = new ResultCube(); + var dataTypes = Headers.ToDictionary(h => (string)h, h => typeof(string)); + cube.Initialize(dataTypes); + + for (var r = 0; r < MetaData.GetLength(0); r++) + { + var rowMeta = new object[MetaData.GetLength(1)]; + for (var c = 0; c < MetaData.GetLength(1); c++) + { + rowMeta[c] = MetaData[r, c]; + } + cube.AddRow(rowMeta, Data[r]); + } + var cubeCache = ContainerStores.GetObjectCache(); + cubeCache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = cube }); + return ObjectName + '¬' + cubeCache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Creates a new cube object by aggregating another cube object", Category = CategoryNames.Cubes, Name = CategoryNames.Cubes + "_" + nameof(AggregateCube), IsThreadSafe = Parallel)] + public static object AggregateCube( + [ExcelArgument(Description = "Output cube name")] string OutputObjectName, + [ExcelArgument(Description = "Input cube name")] string InputObjectName, + [ExcelArgument(Description = "Field to aggregate by")] object[] AggregationField, + [ExcelArgument(Description = "Aggregation details")] string AggregateAction) + { + return ExcelHelper.Execute(_logger, () => + { + var cubeCache = ContainerStores.GetObjectCache(); + var inCube = cubeCache.GetObjectOrThrow(InputObjectName, $"Could not find cube {InputObjectName}"); + + var aggDeets = (AggregationAction)Enum.Parse(typeof(AggregationAction), AggregateAction); + + var outCube = inCube.Value.Pivot(AggregationField.ObjectRangeToVector(), aggDeets); + + cubeCache.PutObject(OutputObjectName, new SessionItem { Name = OutputObjectName, Value = outCube }); + return OutputObjectName + '¬' + cubeCache.GetObject(OutputObjectName).Version; + }); + } + + [ExcelFunction(Description = "Creates a new cube object by filtering another cube object", Category = CategoryNames.Cubes, Name = CategoryNames.Cubes + "_" + nameof(FilterCube), IsThreadSafe = Parallel)] + public static object FilterCube( + [ExcelArgument(Description = "Output cube name")] string OutputObjectName, + [ExcelArgument(Description = "Input cube name")] string InputObjectName, + [ExcelArgument(Description = "Filter fields and values")] object[,] FilterDetails, + [ExcelArgument(Description = "Filter out? default false (i.e. filter in)")] object FilterOut) + { + return ExcelHelper.Execute(_logger, () => + { + var filterOut = FilterOut.OptionalExcel(false); + var cubeCache = ContainerStores.GetObjectCache(); + var inCube = cubeCache.GetObjectOrThrow(InputObjectName, $"Could not find cube {InputObjectName}"); + + var filterDeets = FilterDetails.RangeToKvList(); + + var outCube = inCube.Value.Filter(filterDeets, filterOut); + + cubeCache.PutObject(OutputObjectName, new SessionItem { Name = OutputObjectName, Value = outCube }); + return OutputObjectName + '¬' + cubeCache.GetObject(OutputObjectName).Version; + }); + } + + [ExcelFunction(Description = "Creates a new cube object by filtering another cube object", Category = CategoryNames.Cubes, + Name = CategoryNames.Cubes + "_" + nameof(FilterCubeSpecific), IsThreadSafe = Parallel)] + public static object FilterCubeSpecific( + [ExcelArgument(Description = "Output cube name")] string OutputObjectName, + [ExcelArgument(Description = "Input cube name")] string InputObjectName, + [ExcelArgument(Description = "Filter field")] string FilterField, + [ExcelArgument(Description = "Filter value")] object FilterValue, + [ExcelArgument(Description = "Filter out? default false (i.e. filter in)")] object FilterOut) + { + return ExcelHelper.Execute(_logger, () => + { + var filterOut = FilterOut.OptionalExcel(false); + var cubeCache = ContainerStores.GetObjectCache(); + var inCube = cubeCache.GetObjectOrThrow(InputObjectName, $"Could not find cube {InputObjectName}"); + + var filterDeets = new Dictionary() { { FilterField, FilterValue } }; + + var outCube = inCube.Value.Filter(filterDeets, filterOut); + + cubeCache.PutObject(OutputObjectName, new SessionItem { Name = OutputObjectName, Value = outCube }); + return OutputObjectName + '¬' + cubeCache.GetObject(OutputObjectName).Version; + }); + } + + [ExcelFunction(Description = "Creates a new cube object by sorting another cube object", Category = CategoryNames.Cubes, Name = CategoryNames.Cubes + "_" + nameof(SortCube), IsThreadSafe = Parallel)] + public static object SortCube( + [ExcelArgument(Description = "Output cube name")] string OutputObjectName, + [ExcelArgument(Description = "Input cube name")] string InputObjectName, + [ExcelArgument(Description = "Fields to sort on")] object[] SortDetails) + { + return ExcelHelper.Execute(_logger, () => + { + var cubeCache = ContainerStores.GetObjectCache(); + var inCube = cubeCache.GetObjectOrThrow(InputObjectName, $"Could not find cube {InputObjectName}"); + + var sortDeets = SortDetails.ObjectRangeToVector().ToList(); + + var outCube = inCube.Value.Sort(sortDeets); + + cubeCache.PutObject(OutputObjectName, new SessionItem { Name = OutputObjectName, Value = outCube }); + return OutputObjectName + '¬' + cubeCache.GetObject(OutputObjectName).Version; + }); + } + + [ExcelFunction(Description = "Lists distinct values in a specified field for a given cube", Category = CategoryNames.Cubes, Name = CategoryNames.Cubes + "_" + nameof(FieldValues), IsThreadSafe = Parallel)] + public static object FieldValues( + [ExcelArgument(Description = "Input cube name")] string InputObjectName, + [ExcelArgument(Description = "Field name")] string FieldName) + { + return ExcelHelper.Execute(_logger, () => + { + var cubeCache = ContainerStores.GetObjectCache(); + var inCube = cubeCache.GetObjectOrThrow(InputObjectName, $"Could not find cube {InputObjectName}"); + + var output = inCube.Value.KeysForField(FieldName); + + return ((object[])output).ReturnExcelRangeVector(); + }); + } + + [ExcelFunction(Description = "Produces a matrix for two given fields from a given cube", Category = CategoryNames.Cubes, Name = CategoryNames.Cubes + "_" + nameof(CubeToMatrix), IsThreadSafe = Parallel)] + public static object CubeToMatrix( + [ExcelArgument(Description = "Input cube name")] string InputObjectName, + [ExcelArgument(Description = "Field name vertical")] string FieldNameV, + [ExcelArgument(Description = "Field name horizontal")] string FieldNameH, + [ExcelArgument(Description = "Sort fields - true or false")] bool SortFields, + [ExcelArgument(Description = "Hide zero value rows/cols - defualt false")] object HideZeroRows) + { + return ExcelHelper.Execute(_logger, () => + { + var cubeCache = ContainerStores.GetObjectCache(); + var inCube = cubeCache.GetObjectOrThrow(InputObjectName, $"Could not find cube {InputObjectName}"); + var hideZero = HideZeroRows.OptionalExcel(false); + + var output = inCube.Value.ToMatrix(FieldNameV, FieldNameH, SortFields); + + if(hideZero) + { + //first remove columns + var columnsToRemove = new List(); + + for(var c=1;c + { + var cubeCache = ContainerStores.GetObjectCache(); + var inCube = cubeCache.GetObjectOrThrow(InputObjectName, $"Could not find cube {InputObjectName}"); + + inCube.Value.ToCSVFile(FileName); + + return $"Saved to {FileName}"; + }); + } + + [ExcelFunction(Description = "Reads contents of cube object from csv", Category = CategoryNames.Cubes, Name = CategoryNames.Cubes + "_" + nameof(CubeFromCSV), IsThreadSafe = Parallel)] + public static object CubeFromCSV( + [ExcelArgument(Description = "Output cube name")] string ObjectName, + [ExcelArgument(Description = "Input filename")] string FileName, + [ExcelArgument(Description = "Has header row, default true")] object HasHeaderRow, + [ExcelArgument(Description = "Has value column, default true")] object HasValueColumn) + { + return ExcelHelper.Execute(_logger, () => + { + var hasHeader = HasHeaderRow.OptionalExcel(true); + var hasValue = HasValueColumn.OptionalExcel(true); + + + var cube = (!hasHeader && !hasValue) ? + CubeEx.FromCSVFileRaw(FileName) : + CubeEx.FromCSVFile(FileName, hasHeader, hasValue); + return RiskFunctions.PushCubeToCache(cube, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a new cube, adding a bucketed time field", Category = CategoryNames.Cubes, Name = CategoryNames.Cubes + "_" + nameof(BucketTimeAxis), IsThreadSafe = Parallel)] + public static object BucketTimeAxis( + [ExcelArgument(Description = "Output cube name")] string OutputObjectName, + [ExcelArgument(Description = "Input cube name")] string InputObjectName, + [ExcelArgument(Description = "Field name to bucket on")] string InputTimeFieldName, + [ExcelArgument(Description = "Output field name")] string OutputBucketedFieldName, + [ExcelArgument(Description = "Bucket labels and boundaries, date first, label second")] object[,] BucketLabelsAndBoundaries) + { + return ExcelHelper.Execute(_logger, () => + { + var cubeCache = ContainerStores.GetObjectCache(); + var inCube = cubeCache.GetObjectOrThrow(InputObjectName, $"Could not find cube {InputObjectName}"); + + var bucketBoundaries = BucketLabelsAndBoundaries.RangeToDictionary(); + + var outCube = inCube.Value.BucketTimeAxis(InputTimeFieldName, OutputBucketedFieldName, bucketBoundaries); + + cubeCache.PutObject(OutputObjectName, new SessionItem { Name = OutputObjectName, Value = outCube }); + return OutputObjectName + '¬' + cubeCache.GetObject(OutputObjectName).Version; + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Currencies.json b/clients/Qwack.Excel.Next/Currencies.json new file mode 100644 index 00000000..797bb476 --- /dev/null +++ b/clients/Qwack.Excel.Next/Currencies.json @@ -0,0 +1,158 @@ +[ + { + "Ccy": "USD", + "DayCount": "Act_360", + "SettlementCalendarName": "NYC" + }, + { + "Ccy": "EUR", + "DayCount": "Act_360", + "SettlementCalendarName": "EUR" + }, + { + "Ccy": "GBP", + "DayCount": "Act_360", + "SettlementCalendarName": "LON" + }, + { + "Ccy": "XAF", + "DayCount": "Act365F", + "SettlementCalendarName": "LON" + }, + { + "Ccy": "ZAR", + "DayCount": "Act365F", + "SettlementCalendarName": "JHB" + }, + { + "Ccy": "CAD", + "DayCount": "Act365F", + "SettlementCalendarName": "TOR" + }, + { + "Ccy": "AUD", + "DayCount": "Act365F", + "SettlementCalendarName": "SYD" + }, + { + "Ccy": "NZD", + "DayCount": "Act365F", + "SettlementCalendarName": "WEL" + }, + { + "Ccy": "ZMW", + "DayCount": "Act365F", + "SettlementCalendarName": "JHB" + }, + { + "Ccy": "NGN", + "DayCount": "Act365F", + "SettlementCalendarName": "JHB" + }, + { + "Ccy": "XAU", + "DayCount": "Act360", + "SettlementCalendarName": "LON" + }, + { + "Ccy": "XAG", + "DayCount": "Act360", + "SettlementCalendarName": "LON" + }, + { + "Ccy": "XPD", + "DayCount": "Act360", + "SettlementCalendarName": "LON" + }, + { + "Ccy": "XPT", + "DayCount": "Act360", + "SettlementCalendarName": "LON" + }, + { + "Ccy": "JPY", + "DayCount": "Act360", + "SettlementCalendarName": "JPY" + }, + { + "Ccy": "NOK", + "DayCount": "Act360", + "SettlementCalendarName": "NOK" + }, + { + "Ccy": "SEK", + "DayCount": "Act360", + "SettlementCalendarName": "SEK" + }, + { + "Ccy": "DKK", + "DayCount": "Act360", + "SettlementCalendarName": "DKK" + }, + { + "Ccy": "BRL", + "DayCount": "Act360", + "SettlementCalendarName": "BRL" + }, + { + "Ccy": "RUB", + "DayCount": "Act_Act", + "SettlementCalendarName": "RUB" + }, + { + "Ccy": "CNY", + "DayCount": "Act365", + "SettlementCalendarName": "CNY" + }, + { + "Ccy": "CNH", + "DayCount": "Act365", + "SettlementCalendarName": "CNH" + }, + { + "Ccy": "KRW", + "DayCount": "Act365", + "SettlementCalendarName": "KRW" + }, + { + "Ccy": "INR", + "DayCount": "Act365", + "SettlementCalendarName": "INR" + }, + { + "Ccy": "PHP", + "DayCount": "Act360", + "SettlementCalendarName": "PHP" + }, + { + "Ccy": "TWD", + "DayCount": "Act365", + "SettlementCalendarName": "TWD" + }, + { + "Ccy": "MXN", + "DayCount": "Act360", + "SettlementCalendarName": "MXN" + }, + { + "Ccy": "HKD", + "DayCount": "Act360", + "SettlementCalendarName": "HKD" + }, + { + "Ccy": "CHF", + "DayCount": "Act_360", + "SettlementCalendarName": "CHF" + }, + { + "Ccy": "BTC", + "DayCount": "Act365", + "SettlementCalendarName": "USD" + }, + { + "Ccy": "ETH", + "DayCount": "Act365", + "SettlementCalendarName": "USD" + } + +] diff --git a/clients/Qwack.Excel.Next/Curves/CreditCurveFunctions.cs b/clients/Qwack.Excel.Next/Curves/CreditCurveFunctions.cs new file mode 100644 index 00000000..928ddf7e --- /dev/null +++ b/clients/Qwack.Excel.Next/Curves/CreditCurveFunctions.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Core.Curves; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Math.Interpolation; +using Qwack.Dates; +using Qwack.Transport.BasicTypes; +using Qwack.Core.Basic; +using Qwack.Core.Instruments.Credit; +using Qwack.Models.Calibrators; + +namespace Qwack.Excel.Curves +{ + public class CreditCurveFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Creates a credit curve with constant hazzard rate", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateConstantHazzardCurve))] + public static object CreateConstantHazzardCurve( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Hazzard rate")] double HazzardRate, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Basis, default Act365F")] object Basis) + { + return ExcelHelper.Execute(_logger, () => + { + var basis = Basis.OptionalExcel("Act365F"); + if (!Enum.TryParse(basis, out DayCountBasis dayCountBasis)) + throw new Exception($"Could not parse basis type - {basis}"); + + var cObj = new HazzardCurve(BuildDate, dayCountBasis, new ConstantHazzardInterpolator(HazzardRate)) + { + ConstantPD = HazzardRate + }; + + return ExcelHelper.PushToCache(cObj, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a CDS object", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateCDS))] + public static object CreateCDS( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Tenor rate")] string Tenor, + [ExcelArgument(Description = "Spread")] double Spread, + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Notional, default 1,000,000")] object Notional, + [ExcelArgument(Description = "Schedule type, default Basic")] object ScheduleType, + [ExcelArgument(Description = "Basis, default Act365F")] object Basis) + { + return ExcelHelper.Execute(_logger, () => + { + var basis = Basis.OptionalExcel("Act365F"); + var scheduleType = ScheduleType.OptionalExcel("Basic"); + var notional = Notional.OptionalExcel(1.0e6); + if (!Enum.TryParse(basis, out DayCountBasis dayCountBasis)) + throw new Exception($"Could not parse basis type - {basis}"); + if (!Enum.TryParse(scheduleType, out CdsScheduleType shed)) + throw new Exception($"Could not parse cds schedule type - {scheduleType}"); + var ccy = ContainerStores.CurrencyProvider.GetCurrency(Currency); + + var cdsObj = new CDS() + { + Basis = dayCountBasis, + Currency = ccy, + Notional = notional, + Tenor = new Frequency(Tenor), + OriginDate = OriginDate, + Spread = Spread, + ScheduleType = shed + }; + + cdsObj.Init(); + + return ExcelHelper.PushToCache(cdsObj, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a Hazzard curve from CDS objects", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateHazzardCurveFromCDSs))] + public static object CreateHazzardCurveFromCDSs( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "CDSs")] object[,] CDSs, + [ExcelArgument(Description = "Recovery Rate")] double RecoveryRate, + [ExcelArgument(Description = "Discount Curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var cdsObjects = ExcelHelper.GetAnyFromCache(CDSs); + var disco = ContainerStores.GetObjectCache().GetObjectOrThrow(DiscountCurve, $"Could not find discount curve {DiscountCurve}"); + var solver = new NewtonRaphsonCreditCurveSolver(); + var hzCurve = solver.Solve(cdsObjects.ToList(), RecoveryRate, disco.Value, OriginDate); + return ExcelHelper.PushToCache(hzCurve, ObjectName); + }); + } + + [ExcelFunction(Description = "Gets survival probability from a hazzard curve", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(GetSurvivalProbability))] + public static object GetSurvivalProbability( + [ExcelArgument(Description = "Curve object name")] string ObjectName, + [ExcelArgument(Description = "Start date")] DateTime StartDate, + [ExcelArgument(Description = "End date")] DateTime EndDate) + { + return ExcelHelper.Execute(_logger, () => + { + return ContainerStores + .GetObjectCache() + .GetObjectOrThrow(ObjectName, $"Could not find curve {ObjectName}") + .Value.GetSurvivalProbability(StartDate, EndDate); + }); + } + + + [ExcelFunction(Description = "Gets risky discount factor from a pair of hazzard and discount curves", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(GetRiskyDiscountFactor))] + public static object GetRiskyDiscountFactor( + [ExcelArgument(Description = "Credit curve object name")] string ObjectName, + [ExcelArgument(Description = "Discount curve object name")] string DiscoObjectName, + [ExcelArgument(Description = "Start date")] DateTime StartDate, + [ExcelArgument(Description = "End date")] DateTime EndDate, + [ExcelArgument(Description = "LGD, e.g. 0.45")] double LGD) + { + return ExcelHelper.Execute(_logger, () => + { + var disco = ContainerStores.GetObjectCache().GetObjectOrThrow(DiscoObjectName, $"Could not find discount curve {DiscoObjectName}"); + return ContainerStores + .GetObjectCache() + .GetObjectOrThrow(ObjectName, $"Could not find curve {ObjectName}") + .Value.RiskyDiscountFactor(StartDate, EndDate, disco.Value, LGD); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Curves/IRCurveFunctions.cs b/clients/Qwack.Excel.Next/Curves/IRCurveFunctions.cs new file mode 100644 index 00000000..0e462de4 --- /dev/null +++ b/clients/Qwack.Excel.Next/Curves/IRCurveFunctions.cs @@ -0,0 +1,497 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Core.Curves; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Transport.BasicTypes; +using Qwack.Core.Basic; +using Qwack.Dates; +using Qwack.Core.Models; +using Qwack.Models.Calibrators; +using Qwack.Core.Instruments.Funding; +using Qwack.Models; + +namespace Qwack.Excel.Curves +{ + public class IRCurveFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Creates a discount curve", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateDiscountCurveFromCCRates), IsThreadSafe = false)] + public static object CreateDiscountCurveFromCCRates( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Curve name")] object CurveName, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, + [ExcelArgument(Description = "Array of CC zero rates")] double[] ZeroRates, + [ExcelArgument(Description = "Type of interpolation")] object InterpolationType, + [ExcelArgument(Description = "Currency - default USD")] object Currency, + [ExcelArgument(Description = "Collateral Spec - default LIBOR.3M")] object CollateralSpec) + { + return ExcelHelper.Execute(_logger, () => + { + var curveName = CurveName.OptionalExcel(ObjectName); + var curveTypeStr = InterpolationType.OptionalExcel("Linear"); + var ccyStr = Currency.OptionalExcel("USD"); + var colSpecStr = CollateralSpec.OptionalExcel("LIBOR.3M"); + + if (!Enum.TryParse(curveTypeStr, out Interpolator1DType iType)) + { + return $"Could not parse interpolator type - {curveTypeStr}"; + } + + var pDates = Pillars.ToDateTimeArray(); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ccyStr, out var ccyCal); + var ccy = ContainerStores.GlobalContainer.GetRequiredService()[ccyStr]; + + var cObj = new IrCurve(pDates, ZeroRates, BuildDate, curveName, iType, ccy, colSpecStr); + var cache = ContainerStores.GetObjectCache(); + cache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = cObj }); + return ObjectName + '¬' + cache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Creates a discount curve", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateDiscountCurveFromRates), IsThreadSafe = false)] + public static object CreateDiscountCurveFromRates( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Curve name")] object CurveName, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, + [ExcelArgument(Description = "Array of rates")] double[] ZeroRates, + [ExcelArgument(Description = "Rate type, e.g. CC or Linear")] object RateType, + [ExcelArgument(Description = "Type of interpolation, e.g. CubicSpline or Linear")] object InterpolationType, + [ExcelArgument(Description = "Currency - default USD")] object Currency, + [ExcelArgument(Description = "Collateral Spec - default LIBOR.3M")] object CollateralSpec) + { + return ExcelHelper.Execute(_logger, () => + { + var curveName = CurveName.OptionalExcel(ObjectName); + var ccyStr = Currency.OptionalExcel("USD"); + var colSpecStr = CollateralSpec.OptionalExcel("LIBOR.3M"); + + if (!Enum.TryParse(InterpolationType.OptionalExcel("Linear"), out Interpolator1DType iType)) + { + return $"Could not parse interpolator type - {InterpolationType}"; + } + + if (!Enum.TryParse(RateType.OptionalExcel("CC"), out RateType rType)) + { + return $"Could not parse rate type - {RateType}"; + } + + var pDates = Pillars.ToDateTimeArray(); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ccyStr, out var ccyCal); + var ccy = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(ccyStr); + + var cObj = new IrCurve(pDates, ZeroRates, BuildDate, curveName, iType, ccy, colSpecStr, rType); + return ExcelHelper.PushToCache(cObj, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a discount curve", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateDiscountCurveFromDFs), IsThreadSafe = false)] + public static object CreateDiscountCurveFromDFs( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Curve name")] object CurveName, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, + [ExcelArgument(Description = "Array of discount factors")] double[] DiscountFactors, + [ExcelArgument(Description = "Type of interpolation")] object InterpolationType, + [ExcelArgument(Description = "Currency - default USD")] object Currency, + [ExcelArgument(Description = "Collateral Spec - default LIBOR.3M")] object CollateralSpec, + [ExcelArgument(Description = "Rate storage format - default Exponential")] object RateStorageType) + { + return ExcelHelper.Execute(_logger, () => + { + var curveName = CurveName.OptionalExcel(ObjectName); + var curveTypeStr = InterpolationType.OptionalExcel("Linear"); + var ccyStr = Currency.OptionalExcel("USD"); + var colSpecStr = CollateralSpec.OptionalExcel("LIBOR.3M"); + var rateTypeStr = RateStorageType.OptionalExcel("CC"); + + if (!Enum.TryParse(curveTypeStr, out Interpolator1DType iType)) + { + return $"Could not parse interpolator type - {curveTypeStr}"; + } + + if (!Enum.TryParse(rateTypeStr, out RateType rType)) + { + return $"Could not parse rate type - {rateTypeStr}"; + } + + var pDates = Pillars.ToDateTimeArray(); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ccyStr, out var ccyCal); + var ccy = ContainerStores.GlobalContainer.GetRequiredService()[ccyStr]; + + var zeroRates = DiscountFactors + .Select((df, ix) => + DateTime.FromOADate(Pillars[ix])==BuildDate ? 0.0 + : IrCurve.RateFromDF(BuildDate.CalculateYearFraction(DateTime.FromOADate(Pillars[ix]), DayCountBasis.ACT365F),df, rType)) + .ToArray(); + + if (DateTime.FromOADate(Pillars[0]) == BuildDate && zeroRates.Length > 1) + zeroRates[0] = zeroRates[1]; + + var cObj = new IrCurve(pDates, zeroRates, BuildDate, curveName, iType, ccy, colSpecStr, rType); + return ExcelHelper.PushToCache(cObj, ObjectName); + }); + } + + [ExcelFunction(Description = "Gets a discount factor from a curve", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(GetDF), IsThreadSafe = false)] + public static object GetDF( + [ExcelArgument(Description = "Curve object name")] string ObjectName, + [ExcelArgument(Description = "Discount factor start date")] DateTime StartDate, + [ExcelArgument(Description = "Discount factor end date")] DateTime EndDate) + { + return ExcelHelper.Execute(_logger, () => + { + if (ContainerStores.GetObjectCache().TryGetObject(ObjectName, out var curve)) + { + return curve.Value.GetDf(StartDate,EndDate); + } + + return $"IR curve {ObjectName} not found in cache"; + }); + } + + [ExcelFunction(Description = "Gets a forward rate from a curve", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(GetForwardRate), IsThreadSafe = false)] + public static object GetForwardRate( + [ExcelArgument(Description = "Curve object name")] string ObjectName, + [ExcelArgument(Description = "Rate start date")] DateTime StartDate, + [ExcelArgument(Description = "Rate end date")] DateTime EndDate, + [ExcelArgument(Description = "Rate type, e.g. linear, CC")] object RateType, + [ExcelArgument(Description = "Basis, e.g. Act365F")] object Basis) + { + return ExcelHelper.Execute(_logger, () => + { + if (StartDate >= EndDate) + return "End date must be strictly greater that start date"; + + var rateType = RateType.OptionalExcel("Linear"); + var basis = Basis.OptionalExcel("Act365F"); + + if (!Enum.TryParse(rateType, out RateType rType)) + { + return $"Could not parse rate type - {rateType}"; + } + if (!Enum.TryParse(basis, out DayCountBasis dType)) + { + return $"Could not daycount basis - {basis}"; + } + + if (ContainerStores.GetObjectCache().TryGetObject(ObjectName, out var curve)) + { + return curve.Value.GetForwardRate(StartDate, EndDate, rType, dType); + } + + return $"IR curve {ObjectName} not found in cache"; + }); + } + + [ExcelFunction(Description = "Gets a forward fx rate from a funding model", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(GetForwardFxRate), IsThreadSafe = false)] + public static object GetForwardFxRate( + [ExcelArgument(Description = "Funding model object name")] string ObjectName, + [ExcelArgument(Description = "Settlement date")] DateTime SettleDate, + [ExcelArgument(Description = "Currency pair")] string CcyPair) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.GetObjectCache().TryGetObject(ObjectName, out var model)) + { + return $"Funding model with name {ObjectName} not found"; + } + + var fwd = model.Value.GetFxRate(SettleDate, CcyPair); + return fwd; + }); + } + + [ExcelFunction(Description = "Creates and calibrates a funding model to a funding instrument collection", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateFundingModel), IsThreadSafe = false)] + public static object CreateFundingModel( + [ExcelArgument(Description = "Funding model name")] string ObjectName, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Funding instrument collection")] string FundingInstrumentCollection, + [ExcelArgument(Description = "Curve to solve stage mappings")] object SolveStages, + [ExcelArgument(Description = "Fx matrix object")] object FxMatrix, + [ExcelArgument(Description = "Fx vol surfaces")] object FxVolSurfaces) + { + return ExcelHelper.Execute(_logger, () => + { + ContainerStores.GetObjectCache().TryGetObject(FundingInstrumentCollection, out var fic); + + IFxMatrix fxMatrix = null; + if (!(FxMatrix is ExcelMissing)) + { + var fxMatrixCache = ContainerStores.GetObjectCache(); + fxMatrix = fxMatrixCache.GetObject((string)FxMatrix).Value; + } + + var emptyCurves = new Dictionary(); + if (fic != null) + { + emptyCurves = fic.Value.ImplyContainedCurves(BuildDate, Interpolator1DType.LinearFlatExtrap); + + var stageDict = !(SolveStages is ExcelMissing) + ? ((object[,])SolveStages).RangeToDictionary() + : fic.Value.ImplySolveStages(fxMatrix); + + foreach (var kv in stageDict) + { + if (emptyCurves.TryGetValue(kv.Key, out var curve)) + { + curve.SolveStage = kv.Value; + } + else + { + throw new Exception($"Solve stage specified for curve {kv.Key} but curve not present"); + } + } + } + + var model = new FundingModel(BuildDate, emptyCurves.Values.ToArray(), ContainerStores.CurrencyProvider, ContainerStores.CalendarProvider); + + if (!(FxMatrix is ExcelMissing)) + model.SetupFx(fxMatrix); + + if (!(FxVolSurfaces is ExcelMissing)) + { + IEnumerable surfaces = null; + if (FxVolSurfaces is string vsStr) + surfaces = (new object[] { vsStr }).GetAnyFromCache(); + else + surfaces = ((object[,])FxVolSurfaces).GetAnyFromCache(); + if (surfaces.Any()) + model.VolSurfaces = surfaces.ToDictionary(k => k.Name, v => v); + } + + if (fic != null) + { + var calibrator = new NewtonRaphsonMultiCurveSolverStaged() + { + InLineCurveGuessing = true + }; + calibrator.Solve(model, fic.Value); + } + + return ExcelHelper.PushToCache(model, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates and calibrates a funding model to a funding instrument collection", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateFundingModelParallel), IsThreadSafe = false)] + public static object CreateFundingModelParallel( + [ExcelArgument(Description = "Funding model name")] string ObjectName, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Funding instrument collection")] string FundingInstrumentCollection, + [ExcelArgument(Description = "Curve to solve stage mappings")] object SolveStages, + [ExcelArgument(Description = "Fx matrix object")] object FxMatrix, + [ExcelArgument(Description = "Fx vol surfaces")] object FxVolSurfaces) + { + return ExcelHelper.Execute(_logger, () => + { + ContainerStores.GetObjectCache().TryGetObject(FundingInstrumentCollection, out var fic); + + IFxMatrix fxMatrix = null; + if (!(FxMatrix is ExcelMissing)) + { + var fxMatrixCache = ContainerStores.GetObjectCache(); + fxMatrix = fxMatrixCache.GetObject((string)FxMatrix).Value; + } + + var stageDict = fic.Value.ImplySolveStages2(fxMatrix); + var emptyCurves = fic.Value.ImplyContainedCurves(BuildDate, Interpolator1DType.LinearFlatExtrap); + + var model = new FundingModel(BuildDate, emptyCurves.Values.ToArray(), ContainerStores.CurrencyProvider, ContainerStores.CalendarProvider); + + if (!(FxMatrix is ExcelMissing)) + model.SetupFx(fxMatrix); + + if (!(FxVolSurfaces is ExcelMissing)) + { + IEnumerable surfaces = null; + if (FxVolSurfaces is string vsStr) + surfaces = (new object[] { vsStr }).GetAnyFromCache(); + else + surfaces = ((object[,])FxVolSurfaces).GetAnyFromCache(); + if (surfaces.Any()) + model.VolSurfaces = surfaces.ToDictionary(k => k.Name, v => v); + } + + if (fic != null) + { + var calibrator = new NewtonRaphsonMultiCurveSolverStaged() + { + InLineCurveGuessing = true + }; + calibrator.Solve(model, fic.Value, stageDict); + } + + return ExcelHelper.PushToCache(model, ObjectName); + }); + } + + + [ExcelFunction(Description = "Creates a funding model from one or more curves", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateFundingModelFromCurves), IsThreadSafe = false)] + public static object CreateFundingModelFromCurves( + [ExcelArgument(Description = "Output funding model")] string ObjectName, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Curves")] object[] Curves, + [ExcelArgument(Description = "Fx matrix object")] object FxMatrix, + [ExcelArgument(Description = "Fx vol surfaces")] object FxVolSurfaces) + { + return ExcelHelper.Execute(_logger, () => + { + var curveCache = ContainerStores.GetObjectCache(); + var curves = Curves + .Where(s => curveCache.Exists(s as string)) + .Select(s => curveCache.GetObject(s as string).Value as IrCurve) + .ToArray(); + + var fModel = new FundingModel(BuildDate, curves, ContainerStores.CurrencyProvider, ContainerStores.CalendarProvider); + + if (!(FxMatrix is ExcelMissing)) + { + var fxMatrixCache = ContainerStores.GetObjectCache(); + var fxMatrix = fxMatrixCache.GetObject((string)FxMatrix); + fModel.SetupFx(fxMatrix.Value); + } + + if (!(FxVolSurfaces is ExcelMissing)) + { + var surfaces = (new object[] { FxVolSurfaces }).GetAnyFromCache(); + if (surfaces.Any()) + fModel.VolSurfaces = surfaces.ToDictionary(k => k.Name, v => v); + } + + return ExcelHelper.PushToCache(fModel, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a new funding model by combining two others", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(MergeFundingModels), IsThreadSafe = false)] + public static object MergeFundingModels( + [ExcelArgument(Description = "Output funding model")] string ObjectName, + [ExcelArgument(Description = "Funding model A")] string FundingModelA, + [ExcelArgument(Description = "Funding model B")] string FundingModelB) + { + return ExcelHelper.Execute(_logger, () => + { + var modelCache = ContainerStores.GetObjectCache(); + if(!modelCache.TryGetObject(FundingModelA,out var modelA)) + { + return $"Could not find funding model {FundingModelA}"; + } + if (!modelCache.TryGetObject(FundingModelB, out var modelB)) + { + return $"Could not find funding model {FundingModelB}"; + } + + var combinedCurves = modelA.Value.Curves.Values.Concat(modelB.Value.Curves.Values).ToArray(); + + if(combinedCurves.Length != combinedCurves.Select(x=>x.Name).Distinct().Count()) + { + return $"Not all curves have unique names"; + } + + var outModel = new FundingModel(modelA.Value.BuildDate, combinedCurves, ContainerStores.CurrencyProvider, ContainerStores.CalendarProvider); + + foreach (var vs in modelA.Value.VolSurfaces) + outModel.VolSurfaces.Add(vs.Key, vs.Value); + foreach (var vs in modelB.Value.VolSurfaces) + outModel.VolSurfaces.Add(vs.Key, vs.Value); + + var fxA = modelA.Value.FxMatrix; + var fxB = modelB.Value.FxMatrix; + + var spotRates = new Dictionary(); + foreach (var s in fxA.SpotRates) + spotRates.Add(s.Key, s.Value); + foreach (var s in fxB.SpotRates) + spotRates.Add(s.Key, s.Value); + + var discoMap = new Dictionary(); + foreach (var s in fxA.DiscountCurveMap) + discoMap.Add(s.Key, s.Value); + foreach (var s in fxB.DiscountCurveMap) + discoMap.Add(s.Key, s.Value); + + var pairs = fxA.FxPairDefinitions.Concat(fxB.FxPairDefinitions).Distinct().ToList(); + + var fxMatrix = new FxMatrix(ContainerStores.CurrencyProvider); + fxMatrix.Init(fxA.BaseCurrency, modelA.Value.BuildDate, spotRates, pairs, discoMap); + + outModel.SetupFx(fxMatrix); + + return ExcelHelper.PushToCache(outModel, ObjectName); + }); + } + + [ExcelFunction(Description = "Lists curves in a funding model", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(ListCurvesInModel), IsThreadSafe = false)] + public static object ListCurvesInModel( + [ExcelArgument(Description = "Funding model name")] string FundingModelName) + { + return ExcelHelper.Execute(_logger, () => + { + var modelCache = ContainerStores.GetObjectCache(); + var model = modelCache.GetObject(FundingModelName).Value; + + return model.Curves.Keys.Select(x=>x as string).ToArray().ReturnExcelRangeVector(); + }); + } + + [ExcelFunction(Description = "Extracts a curve from a funding model", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(ExtractCurveFromModel), IsThreadSafe = false)] + public static object ExtractCurveFromModel( + [ExcelArgument(Description = "Funding model name")] string FundingModelName, + [ExcelArgument(Description = "Curve name")] string CurveName, + [ExcelArgument(Description = "Output curve object name")] string OutputName) + { + return ExcelHelper.Execute(_logger, () => + { + var model = ContainerStores.GetObjectCache().GetObject(FundingModelName).Value; + + return model.Curves.TryGetValue(CurveName, out var curve) ? + ExcelHelper.PushToCache(curve, OutputName) : + $"Curve {CurveName} not found in model"; + }); + } + + [ExcelFunction(Description = "Extracts a calibration info from a funding model", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(ExtractCalibrationInfoFromModel), IsThreadSafe = false)] + public static object ExtractCalibrationInfoFromModel( + [ExcelArgument(Description = "Funding model name")] string FundingModelName) + { + return ExcelHelper.Execute(_logger, () => + { + var model = ContainerStores.GetObjectCache().GetObject(FundingModelName).Value; + + if (model.CalibrationItterations != null) + { + var o = new object[model.CalibrationItterations.Count() + 1, 3]; + + o[0, 0] = "Time (ms)"; + o[0, 1] = model.CalibrationTimeMs; + o[0, 2] = "Curves in stage"; + + for (var i = 1; i <= model.CalibrationItterations.Count(); i++) + { + o[i, 0] = $"Passes Stage {i - 1}"; + o[i, 1] = model.CalibrationItterations[i - 1]; + o[i, 2] = model.CalibrationCurves[i - 1]; + } + + return o; + } + else + { + var o = new object[1, 2]; + + o[0, 0] = "Time (ms)"; + o[0, 1] = model.CalibrationTimeMs; + + return o; + } + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Curves/PriceCurveFunctions.cs b/clients/Qwack.Excel.Next/Curves/PriceCurveFunctions.cs new file mode 100644 index 00000000..3ba91720 --- /dev/null +++ b/clients/Qwack.Excel.Next/Curves/PriceCurveFunctions.cs @@ -0,0 +1,552 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Core.Curves; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Core.Instruments.Asset; +using Qwack.Core.Models; +using Qwack.Models; +using Qwack.Core.Basic; +using Qwack.Models.Models; +using Qwack.Futures; +using Qwack.Dates; +using Qwack.Math; +using Qwack.Core.Instruments; +using Qwack.Transport.BasicTypes; +using Qwack.Core.Basic.Correlation; + +namespace Qwack.Excel.Curves +{ + public class PriceCurveFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Creates a price curve", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreatePriceCurve), IsThreadSafe = false)] + public static object CreatePriceCurve( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, + [ExcelArgument(Description = "Array of prices values")] double[] Prices, + [ExcelArgument(Description = "Type of curve, e.g. LME, ICE, NYMEX etc")] object CurveType, + [ExcelArgument(Description = "Array of pillar labels (optional)")] object PillarLabels, + [ExcelArgument(Description = "Currency - default USD")] object Currency, + [ExcelArgument(Description = "Collateral spec, required for delta calculation - default LIBOR.3M")] object CollateralSpec, + [ExcelArgument(Description = "Spot lag, required for theta, default 0b")] object SpotLag, + [ExcelArgument(Description = "Spot calendar, required for theta, default USD")] object SpotCalendar) + { + return ExcelHelper.Execute(_logger, () => + { + var curveTypeStr = CurveType.OptionalExcel("Linear"); + var ccy = Currency.OptionalExcel("USD"); + var colSpec = CollateralSpec.OptionalExcel("LIBOR.3M"); + var spotLagStr = SpotLag.OptionalExcel("0b"); + var spotCalStr = SpotCalendar.OptionalExcel("USD"); + + if (!Enum.TryParse(curveTypeStr, out PriceCurveType cType)) + { + return $"Could not parse price curve type - {curveTypeStr}"; + } + + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ccy, out var ccyCal); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(spotCalStr, out var spotCal); + var ccyObj = ContainerStores.GlobalContainer.GetRequiredService()[ccy]; + + var labels = (PillarLabels is ExcelMissing) ? null : ((object[,])PillarLabels).ObjectRangeToVector(); + + var pDates = Pillars.ToDateTimeArray(); + var cObj = new BasicPriceCurve(BuildDate, pDates, Prices, cType, ContainerStores.GlobalContainer.GetRequiredService(), labels) + { + Name = AssetId ?? ObjectName, + AssetId = AssetId ?? ObjectName, + Currency = ccyObj, + CollateralSpec = colSpec, + SpotCalendar = spotCal, + SpotLag = new Frequency(spotLagStr) + }; + + var cache = ContainerStores.GetObjectCache(); + cache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = cObj }); + return ObjectName + '¬' + cache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Creates a contango price curve for precious metals", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateContangoPriceCurve), IsThreadSafe = false)] + public static object CreateContangoPriceCurve( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Spot date")] DateTime SpotDate, + [ExcelArgument(Description = "Spot price")] double SpotPrice, + [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, + [ExcelArgument(Description = "Array of contango values")] double[] ContangoRates, + [ExcelArgument(Description = "Array of pillar labels (optional)")] object PillarLabels, + [ExcelArgument(Description = "Spot lag (default 2b)")] object SpotLag, + [ExcelArgument(Description = "Spot calendar (default USD)")] object SpotCalendar) + { + return ExcelHelper.Execute(_logger, () => + { + var labels = (PillarLabels is ExcelMissing) ? null : ((object[,])PillarLabels).ObjectRangeToVector(); + var pDates = Pillars.ToDateTimeArray(); + ContainerStores.CalendarProvider.Collection.TryGetCalendar(SpotCalendar.OptionalExcel("Weekends"), out var spotCal); + var cObj = new ContangoPriceCurve(BuildDate, SpotPrice, SpotDate, pDates, ContangoRates, ContainerStores.GlobalContainer.GetRequiredService(), DayCountBasis.Act360, labels) + { + Name = AssetId ?? ObjectName, + AssetId = AssetId ?? ObjectName, + SpotLag = new Frequency(SpotLag.OptionalExcel("2b")), + SpotCalendar = spotCal + }; + return ExcelHelper.PushToCache(cObj, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a sparse price curve", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateSparsePriceCurve), IsThreadSafe = false)] + public static object CreateSparsePriceCurve( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, + [ExcelArgument(Description = "Array of prices values")] double[] Prices, + [ExcelArgument(Description = "Type of curve, e.g. Coal etc")] object CurveType) + { + return ExcelHelper.Execute(_logger, () => + { + var curveTypeStr = CurveType.OptionalExcel("Coal"); + if (!Enum.TryParse(curveTypeStr, out SparsePriceCurveType cType)) + { + return $"Could not parse price curve type - {curveTypeStr}"; + } + + var pDates = Pillars.ToDateTimeArray(); + var cObj = new SparsePriceCurve(BuildDate, pDates, Prices, cType, ContainerStores.GlobalContainer.GetRequiredService()) + { + Name = AssetId ?? ObjectName, + AssetId = AssetId ?? ObjectName + }; + return ExcelHelper.PushToCache(cObj, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a sparse price curve from swap objects", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateSparsePriceCurveFromSwaps), IsThreadSafe = false)] + public static object CreateSparsePriceCurveFromSwaps( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, + [ExcelArgument(Description = "Array of swap objects")] object[] Swaps, + [ExcelArgument(Description = "Discount curve name")] string DiscountCurveName, + [ExcelArgument(Description = "Type of curve, e.g. Coal etc")] object CurveType) + { + return ExcelHelper.Execute(_logger, () => + { + var curveTypeStr = CurveType.OptionalExcel("Coal"); + if (!Enum.TryParse(curveTypeStr, out SparsePriceCurveType cType)) + { + return $"Could not parse price curve type - {curveTypeStr}"; + } + + var irCache = ContainerStores.GetObjectCache(); + if (!irCache.TryGetObject(DiscountCurveName, out var irCurveObj)) + { + return $"Could not find ir curve with name {DiscountCurveName}"; + } + var irCurve = irCurveObj.Value; + + var swapCache = ContainerStores.GetObjectCache(); + var swaps = Swaps.Select(s => swapCache.GetObject(s as string)).Select(x => x.Value); + + var pDates = Pillars.ToDateTimeArray(); + var fitter = new Models.Calibrators.NewtonRaphsonAssetCurveSolver(); + var cObj = (SparsePriceCurve)fitter.Solve(swaps.ToList(), pDates.ToList(), irCurve, BuildDate, ContainerStores.GlobalContainer.GetRequiredService()); + cObj.Name = AssetId ?? ObjectName; + cObj.AssetId = AssetId ?? ObjectName; + + return ExcelHelper.PushToCache(cObj, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a price curve from basis swap objects", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreatePriceCurveFromBasisSwaps), IsThreadSafe = false)] + public static object CreatePriceCurveFromBasisSwaps( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Base curve object")] string BaseCurve, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, + [ExcelArgument(Description = "Array of swap objects")] object[] Swaps, + [ExcelArgument(Description = "Discount curve name")] string DiscountCurveName, + [ExcelArgument(Description = "Type of curve, e.g. LME, ICE, NYMEX etc")] object CurveType) + { + return ExcelHelper.Execute(_logger, () => + { + var curveTypeStr = CurveType.OptionalExcel("Coal"); + if (!Enum.TryParse(curveTypeStr, out PriceCurveType cType)) + { + return $"Could not parse price curve type - {curveTypeStr}"; + } + + var irCache = ContainerStores.GetObjectCache(); + if(!irCache.TryGetObject(DiscountCurveName, out var irCurveObj)) + { + return $"Could not find ir curve with name {DiscountCurveName}"; + } + var irCurve = irCurveObj.Value; + + var curveCache = ContainerStores.GetObjectCache(); + if (!curveCache.TryGetObject(BaseCurve, out var bCurveObj)) + { + return $"Could not find ir curve with name {DiscountCurveName}"; + } + var baseCurve = bCurveObj.Value; + + var swapCache = ContainerStores.GetObjectCache(); + var swaps = Swaps.Select(s => swapCache.GetObject(s as string)).Select(x => (IAssetInstrument)x.Value); + + var pDates = Pillars.ToDateTimeArray(); + var fitter = new Models.Calibrators.NewtonRaphsonAssetBasisCurveSolver(ContainerStores.CurrencyProvider); + var cObj = (BasicPriceCurve)fitter.SolveCurve(swaps.ToList(), pDates.ToList(), irCurve, baseCurve, BuildDate, cType); + cObj.Name = AssetId ?? ObjectName; + cObj.AssetId = AssetId ?? ObjectName; + + curveCache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = cObj }); + return ObjectName + '¬' + curveCache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Creates a price curve from basis swap objects", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateBasisPriceCurve), IsThreadSafe = false)] + public static object CreateBasisPriceCurve( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Base curve object")] string BaseCurve, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, + [ExcelArgument(Description = "Array of swap objects")] object[,] Swaps, + [ExcelArgument(Description = "Discount curve name")] string DiscountCurveName, + [ExcelArgument(Description = "Type of curve, e.g. LME, ICE, NYMEX etc")] object CurveType, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "(Optional) Pillar labels")] object PillarLabels) + { + return ExcelHelper.Execute(_logger, () => + { + var curveTypeStr = CurveType.OptionalExcel("Coal"); + if (!Enum.TryParse(curveTypeStr, out PriceCurveType cType)) + { + return $"Could not parse price curve type - {curveTypeStr}"; + } + + var irCache = ContainerStores.GetObjectCache(); + if (!irCache.TryGetObject(DiscountCurveName, out var irCurveObj)) + { + return $"Could not find ir curve with name {DiscountCurveName}"; + } + var irCurve = irCurveObj.Value; + + var curveCache = ContainerStores.GetObjectCache(); + if (!curveCache.TryGetObject(BaseCurve, out var bCurveObj)) + { + return $"Could not find ir curve with name {DiscountCurveName}"; + } + var baseCurve = bCurveObj.Value; + + var pf = Instruments.InstrumentFunctions.GetPortfolio(Swaps); + var ccy = ContainerStores.CurrencyProvider.GetCurrency(Currency); + + var labels = PillarLabels is ExcelMissing ? null : ((object[,])PillarLabels).ObjectRangeToVector().ToList(); + + var pDates = Pillars.ToDateTimeArray().ToList(); + var cObj = new BasisPriceCurve(pf.Instruments.Where(x=>x is IAssetInstrument).Select(x=>x as IAssetInstrument).ToList(), pDates, irCurve, baseCurve, BuildDate, cType, new Models.Calibrators.NewtonRaphsonAssetBasisCurveSolver(ContainerStores.CurrencyProvider), labels) + { + Name = ObjectName, + AssetId = AssetId, + Currency = ccy + }; + + curveCache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = cObj }); + return ObjectName + '¬' + curveCache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Queries a price curve for a price for a give date", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(GetPrice), IsThreadSafe = false)] + public static object GetPrice( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Price date")] DateTime Date) + { + return ExcelHelper.Execute(_logger, () => + { + if (ContainerStores.GetObjectCache().TryGetObject(ObjectName, out var curve)) + { + return curve.Value.GetPriceForDate(Date); + } + + return $"Price curve {ObjectName} not found in cache"; + }); + } + + [ExcelFunction(Description = "Queries a price curve for an average price for give dates", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(GetAveragePrice), IsThreadSafe = false)] + public static object GetAveragePrice( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Price dates")] double[] Dates) + { + return ExcelHelper.Execute(_logger, () => + { + if (ContainerStores.GetObjectCache().TryGetObject(ObjectName, out var curve)) + { + return curve.Value.GetAveragePriceForDates(Dates.ToDateTimeArray()); + } + + return $"Price curve {ObjectName} not found in cache"; + }); + } + + [ExcelFunction(Description = "Creates a new Asset-FX model", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateAssetFxModel), IsThreadSafe = false)] + public static object CreateAssetFxModel( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Price curves")] object[] PriceCurves, + [ExcelArgument(Description = "Vol surfaces")] object[] VolSurfaces, + [ExcelArgument(Description = "Funding model")] object[] FundingModel, + [ExcelArgument(Description = "Fixing dictionaries")] object[] Fixings, + [ExcelArgument(Description = "Correlation matrix")] object[] CorrelationMatrix) + { + return ExcelHelper.Execute(_logger, () => + { + var curves = PriceCurves.GetAnyFromCache(); + var fundingModel = FundingModel.GetAnyFromCache().First(); + var fixings = Fixings.GetAnyFromCache(); + var volSurfaces = VolSurfaces.GetAnyFromCache(); + var correlatinMatrix = CorrelationMatrix.GetAnyFromCache(); + + var model = new AssetFxModel(BuildDate, fundingModel); + + foreach (var curve in curves) + model.AddPriceCurve(curve.Name, curve); + foreach (var vs in volSurfaces) + model.AddVolSurface(vs.Name, vs); + foreach (var f in fixings) + model.AddFixingDictionary(f.Name, f); + + if(correlatinMatrix.Any()) + { + model.CorrelationMatrix = correlatinMatrix.First(); + } + + return ExcelHelper.PushToCache(model, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a fixing dictionary", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateFixingDictionary), IsThreadSafe = false)] + public static object CreateFixingDictionary( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Fixings array, 1st column dates / 2nd column fixings")] object[,] Fixings, + [ExcelArgument(Description = "Type, Asset or FX - default Asset")] object FixingType, + [ExcelArgument(Description = "Fx pair (optional)")] string FxPair) + { + return ExcelHelper.Execute(_logger, () => + { + var fixTypeStr = FixingType.OptionalExcel("Asset"); + if(!Enum.TryParse(fixTypeStr, out var fixType)) + { + throw new Exception($"Unknown fixing dictionary type {fixTypeStr}"); + } + var dict = new FixingDictionary + { + Name = AssetId, + AssetId = AssetId, + FixingDictionaryType = fixType, + FxPair = FxPair + }; + + var dictData = Fixings.RangeToDictionary(); + foreach (var kv in dictData) + dict.Add(kv.Key, kv.Value); + + return ExcelHelper.PushToCache(dict, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a fixing dictionary", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateFixingDictionaryFromVectors), IsThreadSafe = false)] + public static object CreateFixingDictionaryFromVectors( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Fixings dates")] double[] FixingDates, + [ExcelArgument(Description = "Fixings dates")] double[] Fixings, + [ExcelArgument(Description = "Type, Asset or FX - default Asset")] object FixingType, + [ExcelArgument(Description = "Fx pair (optional)")] string FxPair) + { + return ExcelHelper.Execute(_logger, () => + { + if (FixingDates.Length != Fixings.Length) + throw new Exception("Fixings and FixingDates must be of same length"); + + var fixTypeStr = FixingType.OptionalExcel("Asset"); + if (!Enum.TryParse(fixTypeStr, out var fixType)) + { + throw new Exception($"Unknown fixing dictionary type {fixTypeStr}"); + } + + var dict = new FixingDictionary + { + Name = AssetId, + AssetId = AssetId, + FixingDictionaryType = fixType, + FxPair = FxPair + }; + for (var i = 0; i < FixingDates.Length; i++) + if (FixingDates[i] != 0) + dict.Add(DateTime.FromOADate(FixingDates[i]), Fixings[i]); + + return ExcelHelper.PushToCache(dict, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a fixing dictionary for a rolling futures index", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(CreateFixingDictionaryForRollingFuture), IsThreadSafe = false)] + public static object CreateFixingDictionaryForRollingFuture( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Futures code, e.g. QS or CO")] string FuturesCode, + [ExcelArgument(Description = "1st month fixings array, 1st column dates / 2nd column fixings")] object[,] Fixings1m, + [ExcelArgument(Description = "2nd month fixings array, 1st column dates / 2nd column fixings")] object[,] Fixings2m) + { + return ExcelHelper.Execute(_logger, () => + { + var dict = new FixingDictionary + { + Name = AssetId, + AssetId = AssetId, + FixingDictionaryType = FixingDictionaryType.Asset + }; + var futuresProvider = ContainerStores.SessionContainer.GetRequiredService(); + var dictData1m = Fixings1m.RangeToDictionary(); + var dictData2m = Fixings2m.RangeToDictionary(); + var fc = new FutureCode(FuturesCode, futuresProvider); + fc.YearBeforeWhich2DigitDatesAreUsed = DateTime.Today.Year - 2; + + foreach (var kv in dictData1m) + { + var currentFM = fc.GetFrontMonth(kv.Key, true); + var cfm = new FutureCode(currentFM, DateTime.Today.Year - 2, futuresProvider); + if(kv.Key<=cfm.GetRollDate()) + dict.Add(kv.Key, kv.Value); + else + dict.Add(kv.Key, dictData2m[kv.Key]); + } + return ExcelHelper.PushToCache(dict, ObjectName); + }); + } + + [ExcelFunction(Description = "Display contents of a fixing dictionary", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(DisplayFixingDictionary), IsThreadSafe = false)] + public static object DisplayFixingDictionary( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Optional - fixing date")] object FixingDate, + [ExcelArgument(Description = "Reverse sort order, False (default) or True")] bool ReverseSort) + { + return ExcelHelper.Execute(_logger, () => + { + var dict = ContainerStores.GetObjectCache().GetObjectOrThrow(ObjectName, $"Fixing dictionary not found with name {ObjectName}"); + + if (FixingDate is ExcelMissing) + { + var o = new object[dict.Value.Count, 2]; + var c = 0; + + if (ReverseSort) + foreach (var kv in dict.Value.OrderByDescending(x=>x.Key)) + { + o[c, 0] = kv.Key; + o[c, 1] = kv.Value; + c++; + } + else + foreach (var kv in dict.Value) + { + o[c, 0] = kv.Key; + o[c, 1] = kv.Value; + c++; + } + + return o; + } + else + { + var d = FixingDate as double?; + if (!d.HasValue || !dict.Value.TryGetValue(DateTime.FromOADate(d.Value), out var fixing)) + throw new Exception($"Fixing not found for date {FixingDate}"); + + return fixing; + } + }); + } + + [ExcelFunction(Description = "Creates a correlation matrix", Category = CategoryNames.Curves, + Name = CategoryNames.Curves + "_" + nameof(CreateCorrelationMatrix), IsThreadSafe = false, IsVolatile = true)] + public static object CreateCorrelationMatrix( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Labels X")] object[] LabelsX, + [ExcelArgument(Description = "Labels Y")] object[] LabelsY, + [ExcelArgument(Description = "Correlations")] double[,] Correlations) + { + return ExcelHelper.Execute(_logger, () => + { + var matrix = new CorrelationMatrix(LabelsX.ObjectRangeToVector(), LabelsY.ObjectRangeToVector(), Correlations.SquareToJagged()); + return ExcelHelper.PushToCache(matrix, ObjectName); + }); + } + + + [ExcelFunction(Description = "Creates a correlation matrix/time vector", Category = CategoryNames.Curves, + Name = CategoryNames.Curves + "_" + nameof(CreateCorrelationTimeVecvtor), IsThreadSafe = false, IsVolatile = true)] + public static object CreateCorrelationTimeVecvtor( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Label A")] string LabelA, + [ExcelArgument(Description = "Labels B")] object[] LabelsB, + [ExcelArgument(Description = "Times")] double[] Times, + [ExcelArgument(Description = "Correlations")] double[,] Correlations, + [ExcelArgument(Description = "Interpolation type, default Linear")] object InterpType) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(InterpType.OptionalExcel("Linear"), out var iType)) + throw new Exception($"Could not parse interpolator type {InterpType}"); + + var matrix = new CorrelationTimeVector(LabelA, LabelsB.ObjectRangeToVector(), Correlations.SquareToJagged(), Times, iType); + return ExcelHelper.PushToCache(matrix, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a correlation matrix collection", Category = CategoryNames.Curves, + Name = CategoryNames.Curves + "_" + nameof(CreateCorrelationMatrixCollection), IsThreadSafe = false, IsVolatile = true)] + public static object CreateCorrelationMatrixCollection( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Matrix names")] object[,] Matrices) + { + return ExcelHelper.Execute(_logger, () => + { + var matrices = ExcelHelper.GetAnyFromCache(Matrices); + var matrix = new CorrelationMatrixCollection(matrices.ToArray()); + return ExcelHelper.PushToCache(matrix, ObjectName); + }); + } + + [ExcelFunction(Description = "Bends a spread curve to a sparse set of updated spreads", Category = CategoryNames.Curves, Name = CategoryNames.Curves + "_" + nameof(BendCurve), IsThreadSafe = false)] + public static object BendCurve( + [ExcelArgument(Description = "Input spreads")] double[] InputSpreads, + [ExcelArgument(Description = "Sparse new spreads")] object[] SparseNewSpreads) + { + return ExcelHelper.Execute(_logger, () => + { + var sparseSpreads = SparseNewSpreads + .Select(x => x is ExcelEmpty || !(x is double) ? + null : (double?)x).ToArray(); + if (sparseSpreads.All(x => x is null)) + return ExcelHelper.ReturnExcelRangeVectorFromDouble(InputSpreads); + var o = CurveBender.Bend(InputSpreads, sparseSpreads); + return o.ReturnExcelRangeVectorFromDouble(); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Dates/BusinessDateFunctions.cs b/clients/Qwack.Excel.Next/Dates/BusinessDateFunctions.cs new file mode 100644 index 00000000..e8182265 --- /dev/null +++ b/clients/Qwack.Excel.Next/Dates/BusinessDateFunctions.cs @@ -0,0 +1,362 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Dates; +using Qwack.Excel.Services; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Qwack.Transport.BasicTypes; +using Qwack.Core.Basic; + +namespace Qwack.Excel.Dates +{ + public class BusinessDateFunctions + { + private const bool Parallel = false; + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Checks if the given date is a holiday according to the specified calendars", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_IsHoliday( + [ExcelArgument(Description = "The date to check")] DateTime DateToCheck, + [ExcelArgument(Description = "The calendar(s) to check against")]string calendar) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(calendar, out var cal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", calendar); + return $"Calendar {calendar} not found in cache"; + } + return cal.IsHoliday(DateToCheck); + }); + } + + [ExcelFunction(Description = "Adds a specified period to a date, adjusting for holidays", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_AddPeriod( + [ExcelArgument(Description = "Starting date")] DateTime StartDate, + [ExcelArgument(Description = "Period specified as a string e.g. 1w")]string Period, + [ExcelArgument(Description = "Roll method, default following")]object RollMethod, + [ExcelArgument(Description = "Calendar(s) to check against, default Weekends")] object Calendar) + { + return ExcelHelper.Execute(_logger, () => + { + var _rollMethod = RollMethod.OptionalExcel("F"); + var _calendar = Calendar.OptionalExcel("Weekends"); + + if (!ValidateCalendarAndRoll(_rollMethod, _calendar, out var rollMethod, out var cal, out var errorMessage)) + return errorMessage; + + if(!Frequency.TryParse(Period, out var period)) + { + return $"Could not parse period {Period}"; + } + + return StartDate.AddPeriod(rollMethod, cal, period); + + }); + } + + [ExcelFunction(Description = "Subtracts a specified period from a date, adjusting for holidays", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_SubtractPeriod( + [ExcelArgument(Description = "Starting date")] DateTime StartDate, + [ExcelArgument(Description = "Period specified as a string e.g. 1w")]string Period, + [ExcelArgument(Description = "Roll method, default previous")] object RollMethod, + [ExcelArgument(Description = "Calendar(s) to check against, default Weekends")] object Calendar) + { + return ExcelHelper.Execute(_logger, () => + { + var _rollMethod = RollMethod.OptionalExcel("P"); + var _calendar = Calendar.OptionalExcel("Weekends"); + + if (!ValidateCalendarAndRoll(_rollMethod, _calendar, out var rollMethod, out var cal, out var errorMessage)) + return errorMessage; + + if (!Frequency.TryParse(Period, out var period)) + { + return $"Could not parse period {Period}"; + } + + return StartDate.SubtractPeriod(rollMethod, cal, period); + + }); + } + + private static bool ValidateCalendarAndRoll(string rollMethod, string calendar, out RollType rollType, out Calendar calendarObject, out string errorMessage) + { + rollType = default; + calendarObject = default; + errorMessage = default; + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(calendar, out calendarObject)) + { + errorMessage = $"Calendar {calendar} not found in cache"; + return false; + } + + if (!Enum.TryParse(rollMethod, out rollType)) + { + errorMessage = $"Unknown roll method {rollMethod}"; + return false; + } + + return true; + } + + [ExcelFunction(Description = "Returns N-th instance of a specific weekday in a given month", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_SpecificWeekday( + [ExcelArgument(Description = "Date in month")] DateTime DateInMonth, + [ExcelArgument(Description = "Day of week")]string DayOfWeek, + [ExcelArgument(Description = "Nth day to extract - e.g. 3 would give the 3rd instance of the day")]int N) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(DayOfWeek, out DayOfWeek weekDay)) + return $"Unknown weekday {DayOfWeek}"; + + return DateInMonth.NthSpecificWeekDay(weekDay, N); + }); + } + + [ExcelFunction(Description = "Returns N-th last instance of a specific weekday in a given month", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_SpecificLastWeekday( + [ExcelArgument(Description = "Date in month")] DateTime DateInMonth, + [ExcelArgument(Description = "Day of week")]string DayOfWeek, + [ExcelArgument(Description = "Nth day to extract - e.g. 3 would give the 3rd instance of the day")]int N) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(DayOfWeek, out DayOfWeek weekDay)) + return $"Unknown weekday {DayOfWeek}"; + + return DateInMonth.NthLastSpecificWeekDay(weekDay, N); + }); + } + + [ExcelFunction(Description = "Returns 3rd Wednesday in a given month", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_ThirdWednesday( + [ExcelArgument(Description = "Date in month")] DateTime DateInMonth) + { + return ExcelHelper.Execute(_logger, () => + { + return DateInMonth.ThirdWednesday(); + }); + } + + [ExcelFunction(Description = "Returns year faction for two dates and a given day count method", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_YearFraction( + [ExcelArgument(Description = "Period start date (inclusive)")] DateTime StartDate, + [ExcelArgument(Description = "Period end date (exclusive)")] DateTime EndDate, + [ExcelArgument(Description = "Day count method")] string DayCountMethod) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(DayCountMethod, out DayCountBasis dayCount)) + return $"Unknown daycount method {DayCountMethod}"; + + return dayCount.CalculateYearFraction(StartDate, EndDate); + }); + } + + [ExcelFunction(Description = "Returns number of business days in a period for a give calendar", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_NumBusinessDaysInPeriod( + [ExcelArgument(Description = "Period start date (inclusive)")] DateTime StartDate, + [ExcelArgument(Description = "Period end date (inclusive)")] DateTime EndDate, + [ExcelArgument(Description = "Calendar to check")] string Calendar) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(Calendar, out var cal)) + return $"Calendar {Calendar} not found in cache"; + + return StartDate.BusinessDaysInPeriod(EndDate, cal).Count; + }); + } + + [ExcelFunction(Description = "Returns list of business days in a period for a give calendar", Category = "QDates", IsThreadSafe = Parallel)] + public static object[] QDates_ListBusinessDaysInPeriod( + [ExcelArgument(Description = "Period start date (inclusive)")] DateTime StartDate, + [ExcelArgument(Description = "Period end date (inclusive)")] DateTime EndDate, + [ExcelArgument(Description = "Calendar to check")] string calendar) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(calendar, out var cal)) + { + return new object[] { $"Calendar {calendar} not found in cache" }; + } + return StartDate.BusinessDaysInPeriod(EndDate, cal).Select(x => (object)x.ToOADate()).ToArray(); + }); + } + + [ExcelFunction(Description = "Returns list of Fridays in a period for a give calendar", Category = "QDates", IsThreadSafe = Parallel)] + public static object[] QDates_ListFridaysInPeriod( + [ExcelArgument(Description = "Period start date (inclusive)")] DateTime StartDate, + [ExcelArgument(Description = "Period end date (inclusive)")] DateTime EndDate, + [ExcelArgument(Description = "Calendar to check")] string calendar) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(calendar, out var cal)) + { + return new object[] { $"Calendar {calendar} not found in cache" }; + } + return StartDate.FridaysInPeriod(EndDate, cal).Select(x => (object)x.ToOADate()).ToArray(); + }); + } + + [ExcelFunction(Description = "Returns start and end dates for a period code", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_DatesForPeriodCode( + [ExcelArgument(Description = "Period code")] object Code) + { + return ExcelHelper.Execute(_logger, () => + { + if (Code is double @double) + { + Code = DateTime.FromOADate(@double).ToString("MMM-yy"); + } + var (Start, End) = DateExtensions.ParsePeriod((string)Code); + return (new object[] { Start, End }).ReturnExcelRangeVector(); + }); + } + + [ExcelFunction(Description = "Returns the last business day in a month for a give calendar", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_LastBusinessDay( + [ExcelArgument(Description = "Date in month")] DateTime Date, + [ExcelArgument(Description = "Calendar to check")] string Calendar) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(Calendar, out var cal)) + return $"Calendar {Calendar} not found in cache"; + + return Date.LastBusinessDayOfMonth(cal); + }); + } + + [ExcelFunction(Description = "Returns the last business day in a month for a give calendar", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_FirstBusinessDay( + [ExcelArgument(Description = "Date in month")] DateTime Date, + [ExcelArgument(Description = "Calendar to check")] string Calendar) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(Calendar, out var cal)) + return $"Calendar {Calendar} not found in cache"; + + return Date.FirstBusinessDayOfMonth(cal); + }); + } + + [ExcelFunction(Description = "Returns the last calendar day in a month for a give calendar", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_LastDay( + [ExcelArgument(Description = "Date in month")] DateTime Date) + { + return ExcelHelper.Execute(_logger, () => + { + return Date.LastDayOfMonth(); + }); + } + + [ExcelFunction(Description = "Returns the last calendar day in a month for a give calendar", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_FirstDay( + [ExcelArgument(Description = "Date in month")] DateTime Date) + { + return ExcelHelper.Execute(_logger, () => + { + return Date.FirstDayOfMonth(); + }); + } + + [ExcelFunction(Description = "Returns a list of all calendar names", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_ListCalendars() + { + return ExcelHelper.Execute(_logger, () => + { + return ContainerStores.SessionContainer.GetService().Collection.ListCalendarNames(); + }); + } + + [ExcelFunction(Description = "Returns next isntance of specific weekday", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_NextWeekday( + [ExcelArgument(Description = "Date")] DateTime Date, + [ExcelArgument(Description = "Weekday")] string Weekday) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(Weekday, out DayOfWeek weekday)) + return $"Unknown weekday {Weekday}"; + + return Date.GetNextWeekday(weekday); + }); + } + + [ExcelFunction(Description = "Returns the spot date for a lag and calendar pair", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_SpotDate( + [ExcelArgument(Description = "Value Date")] DateTime ValDate, + [ExcelArgument(Description = "Spot Lag")] string SpotLag, + [ExcelArgument(Description = "Primary calendar")] string PrimaryCalendar, + [ExcelArgument(Description = "Secondary calendar")] string SecondaryCalendar) + { + + return ExcelHelper.Execute(_logger, () => + { + if (!Frequency.TryParse(SpotLag, out var lag)) + return $"Could not parse lag string {SpotLag}"; + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(PrimaryCalendar, out var cal1)) + return $"Calendar {PrimaryCalendar} not found in cache"; + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(SecondaryCalendar, out var cal2)) + return $"Calendar {SecondaryCalendar} not found in cache"; + + return ValDate.SpotDate(lag, cal1, cal2); + }); + } + + [ExcelFunction(Description = "Returns the option expiry date given an Fx pair and a tenor", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_FxOptionExpiryFromTenor( + [ExcelArgument(Description = "Value Date")] DateTime ValDate, + [ExcelArgument(Description = "Fx Pair")] string FxPair, + [ExcelArgument(Description = "Tenor")] string Tenor) + { + + return ExcelHelper.Execute(_logger, () => + { + if (!Frequency.TryParse(Tenor, out var tenor)) + return $"Could not parse tenor string {Tenor}"; + + var pair = ContainerStores.GetObjectCache().GetObjectOrThrow(FxPair, $"Unable to find fx pair object {FxPair}"); + + return pair.Value.OptionExpiry(ValDate, tenor); + }); + } + + [ExcelFunction(Description = "Returns dates for Good Friday and Easter Monday in the given year", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_Easter( + [ExcelArgument(Description = "Date")] DateTime Date) + { + return ExcelHelper.Execute(_logger, () => + { + var (GoodFriday, EasterMonday) = Date.Easter(); + return new object[] { GoodFriday, EasterMonday }; + }); + } + + [ExcelFunction(Description = "Lists holidays for a calendar between two dates", Category = "QDates", IsThreadSafe = Parallel)] + public static object QDates_ListHolidays( + [ExcelArgument(Description = "Start Date")] DateTime StartDate, + [ExcelArgument(Description = "End Date")] DateTime EndDate, + [ExcelArgument(Description = "calendar")] string Calendar) + { + + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(Calendar, out var cal)) + return $"Calendar {Calendar} not found in cache"; + + return cal.HolidaysForRange(StartDate, EndDate).ReturnExcelRangeVectorFromDate(); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Dates/FuturesFunctions.cs b/clients/Qwack.Excel.Next/Dates/FuturesFunctions.cs new file mode 100644 index 00000000..38e8e3fa --- /dev/null +++ b/clients/Qwack.Excel.Next/Dates/FuturesFunctions.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Core.Curves; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Math.Interpolation; +using Qwack.Core.Basic; +using Qwack.Dates; +using Qwack.Futures; +using Qwack.Transport.BasicTypes; + +namespace Qwack.Excel.Dates +{ + public class FuturesFunctions + { + private const bool Parallel = false; + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Returns expiry date for a given futures code", Category = CategoryNames.Dates, + Name = CategoryNames.Dates + "_" + nameof(FuturesExpiryFromCode), IsThreadSafe = Parallel)] + public static object FuturesExpiryFromCode( + [ExcelArgument(Description = "Futures code, e.g. CLZ3")] string FuturesCode) + { + return ExcelHelper.Execute(_logger, () => + { + return FutureCode.GetExpiryFromCode(FuturesCode, ContainerStores.SessionContainer.GetService()); + }); + } + + [ExcelFunction(Description = "Returns roll date for a given futures code", Category = CategoryNames.Dates, + Name = CategoryNames.Dates + "_" + nameof(FuturesRollFromCode), IsThreadSafe = Parallel)] + public static object FuturesRollFromCode( + [ExcelArgument(Description = "Futures code, e.g. CLZ3")] string FuturesCode) + { + return ExcelHelper.Execute(_logger, () => + { + var c = new FutureCode(FuturesCode, DateTime.Today.Year - 2, ContainerStores.SessionContainer.GetService()); + + return c.GetRollDate(); + }); + } + + [ExcelFunction(Description = "Returns front month code for a given futures root and value date", Category = CategoryNames.Dates, + Name = CategoryNames.Dates + "_" + nameof(FuturesGetFrontMonth), IsThreadSafe = Parallel)] + public static object FuturesGetFrontMonth( + [ExcelArgument(Description = "Value date")] DateTime ValueDate, + [ExcelArgument(Description = "Futures code root, e.g. CL")] string FuturesCodeRoot, + [ExcelArgument(Description = "Use expiry rather than roll date")] bool UseExpiryRatherThanRoll) + { + return ExcelHelper.Execute(_logger, () => + { + var dummyFutureCode = $"{FuturesCodeRoot}Z{DateExtensions.SingleDigitYear(DateTime.Today.Year + 2)}"; + + var c = new FutureCode(dummyFutureCode, DateTime.Today.Year - 2, ContainerStores.SessionContainer.GetService()); + + return c.GetFrontMonth(ValueDate, UseExpiryRatherThanRoll); + }); + } + + [ExcelFunction(Description = "Returns next code in expiry sequence from a given code", Category = CategoryNames.Dates, + Name = CategoryNames.Dates + "_" + nameof(FuturesNextCode), IsThreadSafe = Parallel)] + public static object FuturesNextCode( + [ExcelArgument(Description = "Futures code, e.g. CLZ3")] string FuturesCode) + { + return ExcelHelper.Execute(_logger, () => + { + var c = new FutureCode(FuturesCode, DateTime.Today.Year - 2, ContainerStores.SessionContainer.GetService()); + + return c.GetNextCode(false); + }); + } + + [ExcelFunction(Description = "Returns previous code in expiry sequence from a given code", Category = CategoryNames.Dates, + Name = CategoryNames.Dates + "_" + nameof(FuturesPreviousCode), IsThreadSafe = Parallel)] + public static object FuturesPreviousCode( + [ExcelArgument(Description = "Futures code, e.g. CLZ3")] string FuturesCode) + { + return ExcelHelper.Execute(_logger, () => + { + var c = new FutureCode(FuturesCode, DateTime.Today.Year - 2, ContainerStores.SessionContainer.GetService()); + + return c.GetPreviousCode(); + }); + } + + [ExcelFunction(Description = "Generates next LME curve date", Category = CategoryNames.Dates, + Name = CategoryNames.Dates + "_" + nameof(NextLMECurveDate), IsThreadSafe = Parallel)] + public static object NextLMECurveDate( + [ExcelArgument(Description = "Previous date")] DateTime PrevDate, + [ExcelArgument(Description = "3m date")] DateTime ThreeMonthDate, + [ExcelArgument(Description = "Whether all daily expiries are required")] bool DailyExpiries) + { + return ExcelHelper.Execute(_logger, () => + { + ContainerStores. + SessionContainer. + GetService(). + Collection. + TryGetCalendar("LON+NYC", out var cal); + + if (DailyExpiries) + { + if (PrevDate < ThreeMonthDate) + return PrevDate.AddPeriod(RollType.F, cal, new Frequency(1, DatePeriodType.B)); + + if (PrevDate < ThreeMonthDate.AddMonths(3)) + return PrevDate.GetNextWeekday(DayOfWeek.Wednesday).IfHolidayRollForward(cal); + + if (PrevDate < PrevDate.ThirdWednesday()) + return PrevDate.ThirdWednesday(); + + return PrevDate.AddMonths(1).ThirdWednesday(); + } + else + { + var next3w = (PrevDate < PrevDate.ThirdWednesday()) ? + PrevDate.ThirdWednesday() : + PrevDate.AddMonths(1).ThirdWednesday(); + + if (PrevDate < ThreeMonthDate && next3w > ThreeMonthDate) + return ThreeMonthDate; + + return next3w; + } + + }); + } + + [ExcelFunction(Description = "Generates LME 3m date", Category = CategoryNames.Dates, + Name = CategoryNames.Dates + "_" + nameof(GetLME3mDate), IsThreadSafe = Parallel)] + public static object GetLME3mDate( + [ExcelArgument(Description = "Value date")] DateTime ValueDate) + { + return ExcelHelper.Execute(_logger, () => + { + ContainerStores. + SessionContainer. + GetService(). + Collection. + TryGetCalendar("LON+NYC", out var cal); + + return ValueDate.AddPeriod(RollType.LME_Nearest, cal, new Frequency(3, DatePeriodType.M)); + }); + } + + [ExcelFunction(Description = "Gets month code and year for a given date", Category = CategoryNames.Dates, + Name = CategoryNames.Dates + "_" + nameof(GetMonthCodeAndYear), IsThreadSafe = Parallel)] + public static object GetMonthCodeAndYear( + [ExcelArgument(Description = "Value date")] DateTime ValueDate, + [ExcelArgument(Description = "Number of year digits - 1,2 or 4")] int NumYearDigits) + { + return ExcelHelper.Execute(_logger, () => + { + return ListedUtils.DateTimeToFuturesCode("", ValueDate, NumYearDigits); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/GlobalSuppressions.cs b/clients/Qwack.Excel.Next/GlobalSuppressions.cs new file mode 100644 index 00000000..8134f704 --- /dev/null +++ b/clients/Qwack.Excel.Next/GlobalSuppressions.cs @@ -0,0 +1,162 @@ + +// This file is used by Code Analysis to maintain SuppressMessage +// attributes that are applied to this project. +// Project-level suppressions either have no target or are given +// a specific target and scoped to a namespace, type, member, etc. + +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreatePriceCurve(System.String,System.DateTime,System.Double[],System.Double[],System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateSparsePriceCurve(System.String,System.DateTime,System.Double[],System.Double[],System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.CreateDiscountCurveFromCCRates(System.String,System.DateTime,System.Double[],System.Double[],System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.GetAveragePrice(System.String,System.Double[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_RemoveWhitespace(System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateSparsePriceCurveFromSwaps(System.String,System.DateTime,System.Double[],System.Object[],System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_IsHoliday(System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.GetPrice(System.String,System.DateTime)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_Sort(System.Object[,],System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_Unique(System.Object[,],System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.AsianFunctions.TurnbullWakemanStrikeForPV(System.DateTime,System.DateTime,System.DateTime,System.Double,System.Double,System.Double,System.Double,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.AsianFunctions.ClewlowPV(System.DateTime,System.DateTime,System.DateTime,System.Double,System.Double,System.Double,System.Double,System.Double,System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.AsianFunctions.ClewlowDelta(System.DateTime,System.DateTime,System.DateTime,System.Double,System.Double,System.Double,System.Double,System.Double,System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.BlackFunctions.BlackPV(System.Double,System.Double,System.Double,System.Double,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.BlackFunctions.BlackDelta(System.Double,System.Double,System.Double,System.Double,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.AsianFunctions.TurnbullWakemanDelta(System.DateTime,System.DateTime,System.DateTime,System.Double,System.Double,System.Double,System.Double,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.AmericanFunctions.AmericanFutureOptionPV(System.Double,System.Double,System.Double,System.Double,System.Double,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.AsianFunctions.TurnbullWakemanPV(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.AsianFunctions.TurnbullWakemanPV2(System.DateTime,System.DateTime,System.DateTime,System.Double,System.Double,System.Double,System.Double,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.BlackFunctions.BlackGamma(System.Double,System.Double,System.Double,System.Double,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.BlackFunctions.BlackVega(System.Double,System.Double,System.Double,System.Double,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.AmericanFunctions.AmericanFutureOptionImpliedVol(System.Double,System.Double,System.Double,System.Double,System.Double,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Interpolation.InterpolatorFunctions.Interpolate1dAverage(System.String,System.Double[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Interpolation.InterpolatorFunctions.Interpolate2d(System.String,System.Double,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.InstrumentFunctions.CreateAsianSwap(System.String,System.String,System.String,System.String,System.Double,System.Double,System.Object,System.Object,System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Interpolation.InterpolatorFunctions.Create1dInterpolator(System.String,System.Double[],System.Double[],System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Interpolation.InterpolatorFunctions.Create2dInterpolator(System.String,System.Double[],System.Double[],System.Double[,],System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Interpolation.InterpolatorFunctions.Interpolate1d(System.String,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.BlackFunctions.BlackImpliedVol(System.Double,System.Double,System.Double,System.Double,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.LMEFunctions.QOpt_LMEBlackPV(System.DateTime,System.DateTime,System.DateTime,System.Double,System.Double,System.Double,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.FundingInstrumentFunctions.CreateFRA(System.String,System.DateTime,System.String,System.String,System.String,System.Double,System.Double,System.String,System.String,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_LastBusinessDay(System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_YearFraction(System.DateTime,System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_ListBusinessDaysInPeriod(System.DateTime,System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_SpecificLastWeekday(System.DateTime,System.String,System.Int32)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_DatesForPeriodCode(System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_SpecificWeekday(System.DateTime,System.String,System.Int32)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_NumBusinessDaysInPeriod(System.DateTime,System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_ListFridaysInPeriod(System.DateTime,System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.LMEFunctions.QOpt_LMEBlackDelta(System.DateTime,System.DateTime,System.Double,System.Double,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_FirstBusinessDay(System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.LMEFunctions.QOpt_LMEBlackGamma(System.DateTime,System.DateTime,System.Double,System.Double,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.LMEFunctions.QOpt_LMEBlackVega(System.DateTime,System.DateTime,System.DateTime,System.Double,System.Double,System.Double,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.LMEFunctions.QOpt_LMEBlackImpliedVol(System.DateTime,System.DateTime,System.DateTime,System.Double,System.Double,System.Double,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.CreateConstantVolSurface(System.String,System.DateTime,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.CreateGridVolSurface(System.String,System.DateTime,System.Double[],System.Double[],System.Double[,],System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.GetVolForDeltaStrike(System.String,System.Double,System.DateTime,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_ThirdWednesday(System.DateTime)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_SubtractPeriod(System.DateTime,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_Filter(System.Object[],System.Object[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.GetDF(System.String,System.DateTime,System.DateTime)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_AddPeriod(System.DateTime,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.GetVolForAbsoluteStrike(System.String,System.Double,System.DateTime,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Cubes.CubeFunctions.DisplayCube(System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Cubes.CubeFunctions.AggregateCube(System.String,System.String,System.Object[],System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.CreateDiscountCurveFromCCRates(System.String,System.Object,System.DateTime,System.Double[],System.Double[],System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.CreateDiscountCurveFromDFs(System.String,System.Object,System.DateTime,System.Double[],System.Double[],System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Cubes.CubeFunctions.CubeToMatrix(System.String,System.String,System.String,System.Boolean)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Cubes.CubeFunctions.SortCube(System.String,System.String,System.Object[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Cubes.CubeFunctions.CubeToCSV(System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.GetForwardRate(System.String,System.DateTime,System.DateTime,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.ExtractCurveFromModel(System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.CreateAsianSwap(System.String,System.Object,System.String,System.String,System.Double,System.Double,System.Object,System.Object,System.Object,System.Object,System.Object,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.CreateFuture(System.String,System.DateTime,System.String,System.String,System.Double,System.Double,System.Double,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Cubes.CubeFunctions.DisplayCubeValueForRow(System.String,System.Int32)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Cubes.CubeFunctions.CreateCube(System.String,System.Object[],System.Object[,],System.Double[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.CreateDiscountCurveFromDFs(System.String,System.Object,System.DateTime,System.Double[],System.Double[],System.Object,System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.CreateFundingModelFromCurves(System.String,System.DateTime,System.Object[],System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.ListCurvesInModel(System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.MergeFundingModels(System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateSparsePriceCurve(System.String,System.String,System.DateTime,System.Double[],System.Double[],System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateFixingDictionaryFromVectors(System.String,System.String,System.Double[],System.Double[],System.Object,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreatePriceCurveFromBasisSwaps(System.String,System.String,System.String,System.DateTime,System.Double[],System.Object[],System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.FuturesFunctions.NextLMECurveDate(System.DateTime,System.DateTime,System.Boolean)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.FuturesFunctions.FuturesNextCode(System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.FuturesFunctions.FuturesRollFromCode(System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_NextWeekday(System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_Trim(System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.GenerateCompoSmile(System.String,System.String,System.String,System.DateTime,System.Double,System.Double,System.Double,System.Int32)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_SerializeObject(System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.GeneratePDF(System.String,System.String,System.DateTime,System.Double,System.Int32)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.GenerateCDF(System.String,System.String,System.DateTime,System.Double,System.Int32)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.CreateRiskyFlyVolSurface(System.String,System.String,System.DateTime,System.Double[],System.Double[],System.Double[],System.Double[,],System.Double[,],System.Object,System.Object,System.Object,System.Object,System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_ToNumbers(System.Object[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_GoodValues(System.Object[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_FileTimeStamp(System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Utils.ExcelUtils.QUtils_DeSerializeObject(System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.CreateGridVolSurface(System.String,System.String,System.DateTime,System.Double[],System.Double[],System.Double[,],System.Object,System.Object,System.Object,System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.BlackFunctions.AbsoluteStrikeFromDelta(System.Double,System.Double,System.Double,System.Double,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.ModelFunctions.McPortfolioPFE(System.String,System.String,System.String,System.String,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.ModelFunctions.McPortfolioPV(System.String,System.String,System.String,System.String,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Options.VolSurfaceFunctions.CreateConstantVolSurface(System.String,System.String,System.DateTime,System.Double,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioVega(System.String,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioDelta(System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.ProductPV(System.String,System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioDeltaGamma(System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.ProductParRate(System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioFxDelta(System.String,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioTheta(System.String,System.String,System.String,System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioFxVega(System.String,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.FuturesFunctions.GetMonthCodeAndYear(System.DateTime,System.Int32)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateFRA(System.String,System.DateTime,System.String,System.String,System.String,System.Double,System.Double,System.String,System.String,System.Object,System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateIRS(System.String,System.DateTime,System.String,System.String,System.Double,System.Double,System.String,System.String,System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateSTIRFromCode(System.String,System.DateTime,System.String,System.String,System.Double,System.Double,System.Double,System.String,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.FuturesFunctions.FuturesGetFrontMonth(System.DateTime,System.String,System.Boolean)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.FuturesFunctions.GetLME3mDate(System.DateTime)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.FuturesFunctions.FuturesExpiryFromCode(System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.FuturesFunctions.FuturesPreviousCode(System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_SpotDate(System.DateTime,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.CreateFutureOption(System.String,System.DateTime,System.String,System.String,System.Double,System.Double,System.Double,System.String,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateFxMatrix(System.String,System.String,System.DateTime,System.Object[,],System.Object[],System.Object[,])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.CreateCustomAsianSwap(System.String,System.Object,System.String,System.String,System.Double,System.Double[],System.Object,System.Object,System.Object,System.Object,System.Object,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateFundingInstrumentCollection(System.String,System.Object[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.CreateMonthlyAsianSwap(System.String,System.Object,System.String,System.String,System.Double,System.Double,System.Object,System.Object,System.Object,System.Object,System.Object,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioPV(System.String,System.String,System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateFxPair(System.String,System.String,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.CreateAsianOption(System.String,System.Object,System.String,System.String,System.Double,System.String,System.Double,System.Object,System.Object,System.Object,System.Object,System.Object,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioIrDelta(System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.CreateAsianCrackDiffSwap(System.String,System.Object,System.String,System.String,System.String,System.Double,System.Double,System.Double,System.Object,System.Object,System.Object,System.Object,System.Object,System.Object,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateFixedRateLoanDepo(System.String,System.DateTime,System.DateTime,System.Double,System.String,System.String,System.Double,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioGreeks(System.String,System.String,System.String,System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateIRBasisSwap(System.String,System.DateTime,System.String,System.String,System.String,System.Double,System.Object,System.Double,System.String,System.String,System.String,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioThetaCharm(System.String,System.String,System.String,System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateFxForward(System.String,System.DateTime,System.String,System.String,System.Double,System.Double,System.String,System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateRateIndex(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_FirstDay(System.DateTime)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPnLAttribution(System.String,System.String,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_ListCalendars~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_DatesForPeriodCode(System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.FundingInstrumentFunctions.CreateOISFutureFromCode(System.String,System.DateTime,System.String,System.String,System.Double,System.Double,System.String,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPnLAttributionExplain(System.String,System.String,System.String,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.BendCurve(System.Double[],System.Object[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.CreateFundingModel(System.String,System.DateTime,System.String,System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreatePriceCurve(System.String,System.String,System.DateTime,System.Double[],System.Double[],System.Object,System.Object,System.Object,System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateContangoPriceCurve(System.String,System.String,System.DateTime,System.DateTime,System.Double,System.Double[],System.Double[],System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateSparsePriceCurveFromSwaps(System.String,System.String,System.DateTime,System.Double[],System.Object[],System.String,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateAssetFxModel(System.String,System.DateTime,System.Object[],System.Object[],System.Object[],System.Object[],System.Object[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateFixingDictionary(System.String,System.String,System.Object[,],System.Object,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.DisplayFixingDictionary(System.String,System.Object,System.Boolean)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateCorrelationMatrix(System.String,System.Object[],System.Object[],System.Double[,])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPortfolioCorrelationDelta(System.String,System.String,System.String,System.String,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.PriceCurveFunctions.CreateFixingDictionaryForRollingFuture(System.String,System.String,System.String,System.Object[,],System.Object[,])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Cubes.CubeFunctions.FilterCube(System.String,System.String,System.Object[,])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Dates.BusinessDateFunctions.QDates_LastDay(System.DateTime)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.CreatePortfolio(System.String,System.Object[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.FilterPortfolio(System.String,System.String,System.Object[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Math.MathFunctions.FisherTransform(System.Double,System.Double,System.Double,System.Boolean)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.AssetPnLAttributionExplainWithActivity(System.String,System.String,System.String,System.String,System.String,System.String,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Math.MathFunctions.LinearRegression(System.Double[],System.Double[])~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Instruments.InstrumentFunctions.DisplayPortfolio(System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Math.MathFunctions.BivariateNormalPDF(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Math.MathFunctions.BivariateNormalStdPDF(System.Double,System.Double,System.Double)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.ModelFunctions.CreateMcSettings(System.String,System.Int32,System.Int32,System.Object,System.Object,System.Object)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Curves.IRCurveFunctions.GetForwardFxRate(System.String,System.DateTime,System.String)~System.Object")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0022:Use expression body for methods", Justification = "", Scope = "member", Target = "~M:Qwack.Excel.Cubes.CubeFunctions.FieldValues(System.String,System.String)~System.Object")] + diff --git a/clients/Qwack.Excel.Next/Instruments/FundingInstrumentFunctions.cs b/clients/Qwack.Excel.Next/Instruments/FundingInstrumentFunctions.cs new file mode 100644 index 00000000..7885515e --- /dev/null +++ b/clients/Qwack.Excel.Next/Instruments/FundingInstrumentFunctions.cs @@ -0,0 +1,685 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Core.Basic; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Dates; +using Qwack.Core.Instruments.Funding; +using Qwack.Futures; +using Qwack.Core.Models; +using Qwack.Models; +using System.CodeDom.Compiler; +using System.Windows.Forms; +using Qwack.Transport.BasicTypes; + +namespace Qwack.Excel.Instruments +{ + public class FundingInstrumentFunctions + { + private const bool Parallel = false; + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + + [ExcelFunction(Description = "Creates a FRA object", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(CreateFRA), IsThreadSafe = Parallel)] + public static object CreateFRA( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Value date")] DateTime ValDate, + [ExcelArgument(Description = "FRA code e.g. 3X6")] string PeriodCode, + [ExcelArgument(Description = "Rate Index")] string RateIndex, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Par Rate")] double ParRate, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Forecast Curve")] string ForecastCurve, + [ExcelArgument(Description = "Discount Curve")] string DiscountCurve, + [ExcelArgument(Description = "DiscountingType")] object DiscountingType, + [ExcelArgument(Description = "Pay / Receive")] object PayRec, + [ExcelArgument(Description = "Solve Curve name ")] object SolveCurve, + [ExcelArgument(Description = "Solve Pillar Date")] object SolvePillarDate) + { + return ExcelHelper.Execute(_logger, () => + { + var discType = DiscountingType.OptionalExcel("Isda"); + var payRec = PayRec.OptionalExcel("Pay"); + + if (!ContainerStores.GetObjectCache().TryGetObject(RateIndex, out var rIndex)) + { + _logger?.LogInformation("Rate index {index} not found in cache", RateIndex); + return $"Rate index {RateIndex} not found in cache"; + } + + if (!Enum.TryParse(payRec, out SwapPayReceiveType pType)) + return $"Could not parse pay/rec - {payRec}"; + + if (!Enum.TryParse(discType, out FraDiscountingType fType)) + return $"Could not parse FRA discounting type - {discType}"; + + ContainerStores.CurrencyProvider.TryGetCurrency(Currency, out var ccy); + + var product = new ForwardRateAgreement(ValDate, PeriodCode, ParRate, rIndex.Value, pType, fType, ForecastCurve, DiscountCurve) + { + Notional = Notional, + TradeId = ObjectName, + SolveCurve = SolveCurve.OptionalExcel(rIndex.Name), + Currency = ccy + }; + product.PillarDate = SolvePillarDate.OptionalExcel(product.FlowScheduleFra.Flows.Last().AccrualPeriodEnd); + + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates an fx forward object", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(CreateFxForward), IsThreadSafe = Parallel)] + public static object CreateFxForward( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Settle Date")] DateTime SettleDate, + [ExcelArgument(Description = "Domestic Currency")] string DomesticCcy, + [ExcelArgument(Description = "Foreign Currency")] string ForeignCcy, + [ExcelArgument(Description = "Domestic Notional")] double DomesticNotional, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Foreign Discount Curve")] string DiscountCurve, + [ExcelArgument(Description = "Solve Curve name ")] string SolveCurve, + [ExcelArgument(Description = "Solve Pillar Date")] object SolvePillarDate) + { + return ExcelHelper.Execute(_logger, () => + { + var solvePillarDate = DateTime.FromOADate(SolvePillarDate.OptionalExcel(SettleDate.ToOADate())); + + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(DomesticCcy, out var domesticCal); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ForeignCcy, out var foreignCal); + + + var product = new FxForward + { + DomesticCCY = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(DomesticCcy), + ForeignCCY = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(ForeignCcy), + DomesticQuantity = DomesticNotional, + DeliveryDate = SettleDate, + ForeignDiscountCurve = DiscountCurve, + SolveCurve = SolveCurve, + PillarDate = solvePillarDate, + Strike = Strike, + TradeId = ObjectName + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates an fx swap object", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(CreateFxSwap), IsThreadSafe = Parallel)] + public static object CreateFxSwap( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Value Date")] DateTime ValDate, + [ExcelArgument(Description = "Tenor")] string Tenor, + [ExcelArgument(Description = "Spot Price")] double SpotPrice, + [ExcelArgument(Description = "Domestic Currency")] string DomesticCcy, + [ExcelArgument(Description = "Foreign Currency")] string ForeignCcy, + [ExcelArgument(Description = "Domestic Notional")] double DomesticNotional, + [ExcelArgument(Description = "Swap Points")] double SwapPoints, + [ExcelArgument(Description = "Foreign Discount Curve")] string DiscountCurve, + [ExcelArgument(Description = "Solve Curve name ")] string SolveCurve, + [ExcelArgument(Description = "Solve Pillar Date")] object SolvePillarDate, + [ExcelArgument(Description = "Divisor, defualt 10,000")] object Divisor, + [ExcelArgument(Description = "Spot lag, defualt 2b")] object SpotLag) + { + return ExcelHelper.Execute(_logger, () => + { + var spotLag = SpotLag.OptionalExcel("2b"); + var divisor = Divisor.OptionalExcel(10000.0); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(DomesticCcy, out var domesticCal); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ForeignCcy, out var foreignCal); + var domesticCCY = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(DomesticCcy); + var foreignCCY = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(ForeignCcy); + + var pair = new FxPair() { Domestic = domesticCCY, Foreign = foreignCCY, SpotLag = new Frequency(spotLag), PrimaryCalendar = domesticCal, SecondaryCalendar = foreignCal }; + var SettleDate = new DateTime(); + var SolveDate = new DateTime(); + var fwd = SpotPrice; + switch (Tenor.ToUpper()) + { + case "ON": + case "O/N": + case "OVERNIGHT": + SettleDate = ValDate.AddPeriod(RollType.F, domesticCal, 1.Bd()); + SettleDate = SettleDate.IfHolidayRollForward(foreignCal); + + var swapProduct = new FxSwap(SwapPoints,ValDate,SettleDate, DomesticNotional, ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(DomesticCcy), ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(ForeignCcy)) + { + SolveCurve = SolveCurve, + PillarDate = DateTime.FromOADate(SolvePillarDate.OptionalExcel(SettleDate.ToOADate())), + }; + + return ExcelHelper.PushToCache(swapProduct, ObjectName); + case "T/N": + case "TN": + SettleDate = pair.SpotDate(ValDate).SubtractPeriod(RollType.P, domesticCal, 1.Bd()); + var startDate = SettleDate.IfHolidayRollBack(foreignCal); + SolveDate = DateTime.FromOADate(SolvePillarDate.OptionalExcel(pair.SpotDate(ValDate).ToOADate())); + fwd -= SwapPoints / divisor; + break; + default: + SettleDate = pair.SpotDate(ValDate); + var rt = Tenor.EndsWith("M") || Tenor.EndsWith("Y") ? RollType.MF : RollType.F; + SettleDate = SettleDate.AddPeriod(rt, domesticCal, new Frequency(Tenor)); + SettleDate = SettleDate.IfHolidayRollForward(foreignCal); + fwd += SwapPoints / divisor; + SolveDate = DateTime.FromOADate(SolvePillarDate.OptionalExcel(SettleDate.ToOADate())); ; + break; + } + + + + var product = new FxForward + { + DomesticCCY = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(DomesticCcy), + ForeignCCY = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(ForeignCcy), + DomesticQuantity = DomesticNotional, + DeliveryDate = SettleDate, + ForeignDiscountCurve = DiscountCurve, + SolveCurve = SolveCurve, + PillarDate = SolveDate, + Strike = fwd, + TradeId = ObjectName + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a standard interest rate swap object following conventions for the given rate index", + Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateIRS), IsThreadSafe = Parallel)] + public static object CreateIRS( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Value date")] DateTime ValDate, + [ExcelArgument(Description = "Tenor")] string SwapTenor, + [ExcelArgument(Description = "Rate Index")] string RateIndex, + [ExcelArgument(Description = "Par Rate")] double ParRate, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Forecast Curve")] string ForecastCurve, + [ExcelArgument(Description = "Discount Curve")] string DiscountCurve, + [ExcelArgument(Description = "Pay / Receive")] object PayRec, + [ExcelArgument(Description = "Solve Curve name ")] object SolveCurve, + [ExcelArgument(Description = "Solve Pillar Date")] object SolvePillarDate) + { + return ExcelHelper.Execute(_logger, () => + { + var payRec = PayRec.OptionalExcel("Pay"); + + if (!ContainerStores.GetObjectCache().TryGetObject(RateIndex, out var rIndex)) + { + _logger?.LogInformation("Rate index {index} not found in cache", RateIndex); + return $"Rate index {RateIndex} not found in cache"; + } + + if (!Enum.TryParse(payRec, out SwapPayReceiveType pType)) + { + return $"Could not parse pay/rec - {payRec}"; + } + + var tenor = new Frequency(SwapTenor); + + var product = new IrSwap(ValDate, tenor, rIndex.Value, ParRate, pType, ForecastCurve, DiscountCurve) + { + TradeId = ObjectName, + SolveCurve = SolveCurve.OptionalExcel(rIndex.Name), + Notional = Notional + }; + product.PillarDate = SolvePillarDate.OptionalExcel(product.EndDate); + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a floating rate deposit following conventions for the given rate index", + Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateFloatingDepo), IsThreadSafe = Parallel)] + public static object CreateFloatingDepo( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Start date")] DateTime StartDate, + [ExcelArgument(Description = "Tenor")] string SwapTenor, + [ExcelArgument(Description = "Rate Index")] string RateIndex, + [ExcelArgument(Description = "Par Rate")] double ParRate, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Forecast Curve")] string ForecastCurve, + [ExcelArgument(Description = "Discount Curve")] string DiscountCurve, + [ExcelArgument(Description = "Pay / Receive")] object PayRec, + [ExcelArgument(Description = "Solve Curve name ")] object SolveCurve, + [ExcelArgument(Description = "Solve Pillar Date")] object SolvePillarDate) + { + return ExcelHelper.Execute(_logger, () => + { + var payRec = PayRec.OptionalExcel("Pay"); + + if (!ContainerStores.GetObjectCache().TryGetObject(RateIndex, out var rIndex)) + { + _logger?.LogInformation("Rate index {index} not found in cache", RateIndex); + return $"Rate index {RateIndex} not found in cache"; + } + + if (!Enum.TryParse(payRec, out SwapPayReceiveType pType)) + { + return $"Could not parse pay/rec - {payRec}"; + } + + var tenor = new Frequency(SwapTenor); + + var product = new FloatingRateLoanDepo(StartDate, tenor, rIndex.Value, Notional, ParRate, ForecastCurve, DiscountCurve) + { + TradeId = ObjectName, + SolveCurve = SolveCurve.OptionalExcel(rIndex.Name), + }; + product.PillarDate = DateTime.FromOADate(SolvePillarDate.OptionalExcel(product.LastSensitivityDate.ToOADate())); + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a short-term interest rate future object from a futures code", + Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateSTIRFromCode), IsThreadSafe = Parallel)] + public static object CreateSTIRFromCode( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Value date")] DateTime ValDate, + [ExcelArgument(Description = "Futures Code, e.g. EDZ9")] string FuturesCode, + [ExcelArgument(Description = "Rate Index")] string RateIndex, + [ExcelArgument(Description = "Price")] double Price, + [ExcelArgument(Description = "Quantity in lots")] double Quantity, + [ExcelArgument(Description = "Convexity adjustment")] double ConvexityAdjustment, + [ExcelArgument(Description = "Forecast Curve")] string ForecastCurve, + [ExcelArgument(Description = "Solve Curve name ")] object SolveCurve, + [ExcelArgument(Description = "Solve Pillar Date")] object SolvePillarDate) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.GetObjectCache().TryGetObject(RateIndex, out var rIndex)) + { + _logger?.LogInformation("Rate index {index} not found in cache", RateIndex); + return $"Rate index {RateIndex} not found in cache"; + } + + var c = new FutureCode(FuturesCode, DateTime.Today.Year - 2, ContainerStores.SessionContainer.GetService()); + + var expiry = c.GetExpiry(); + var accrualStart = expiry.AddPeriod(RollType.F, rIndex.Value.HolidayCalendars, rIndex.Value.FixingOffset); + var accrualEnd = accrualStart.AddPeriod(rIndex.Value.RollConvention, rIndex.Value.HolidayCalendars, rIndex.Value.ResetTenor); + //var dcf = accrualStart.CalculateYearFraction(accrualEnd, rIndex.Value.DayCountBasis); + var product = new STIRFuture + { + Currency = rIndex.Value.Currency, + ContractSize = c.Settings.LotSize, + //DCF = dcf, + ConvexityAdjustment = ConvexityAdjustment, + Expiry = expiry, + ForecastCurve = ForecastCurve, + Index = rIndex.Value, + Position = Quantity, + Price = Price, + SolveCurve = SolveCurve.OptionalExcel(ForecastCurve), + PillarDate = SolvePillarDate.OptionalExcel(accrualEnd), + TradeId = ObjectName + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a compounded overnight interest rate future object from a futures code", + Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateOISFutureFromCode), IsThreadSafe = Parallel)] + public static object CreateOISFutureFromCode( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Value date")] DateTime ValDate, + [ExcelArgument(Description = "Futures Code, e.g. EDZ9")] string FuturesCode, + [ExcelArgument(Description = "Rate Index")] string RateIndex, + [ExcelArgument(Description = "Price")] double Price, + [ExcelArgument(Description = "Quantity in lots")] double Quantity, + [ExcelArgument(Description = "Forecast Curve")] string ForecastCurve, + [ExcelArgument(Description = "Solve Curve name ")] object SolveCurve, + [ExcelArgument(Description = "Solve Pillar Date")] object SolvePillarDate) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.GetObjectCache().TryGetObject(RateIndex, out var rIndex)) + { + _logger?.LogInformation("Rate index {index} not found in cache", RateIndex); + return $"Rate index {RateIndex} not found in cache"; + } + + var c = new FutureCode(FuturesCode, DateTime.Today.Year - 2, ContainerStores.SessionContainer.GetService()); + + var expiry = c.GetExpiry(); + var accrualStart = expiry.FirstDayOfMonth(); + var accrualEnd = expiry.LastDayOfMonth(); + var dcf = accrualStart.CalculateYearFraction(accrualEnd, rIndex.Value.DayCountBasis); + var product = new OISFuture + { + Currency = rIndex.Value.Currency, + ContractSize = c.Settings.LotSize, + DCF = dcf, + AverageStartDate = accrualStart, + AverageEndDate = accrualEnd, + ForecastCurve = ForecastCurve, + Index = rIndex.Value, + Position = Quantity, + Price = Price, + SolveCurve = SolveCurve.OptionalExcel(rIndex.Name), + PillarDate = SolvePillarDate.OptionalExcel(accrualEnd), + TradeId = ObjectName + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates an interest rate basis swap object following conventions for the given rate index", + Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateIRBasisSwap), IsThreadSafe = Parallel)] + public static object CreateIRBasisSwap( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Value date")] DateTime ValDate, + [ExcelArgument(Description = "Tenor")] string SwapTenor, + [ExcelArgument(Description = "Rate Index Pay")] string RateIndexPay, + [ExcelArgument(Description = "Rate Index Receive")] string RateIndexRec, + [ExcelArgument(Description = "Par Spread Pay")] double ParSpread, + [ExcelArgument(Description = "Spread on Pay leg?")] object ParSpreadOnPay, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Forecast Curve Pay")] string ForecastCurvePay, + [ExcelArgument(Description = "Forecast Curve Receive")] string ForecastCurveRec, + [ExcelArgument(Description = "Discount Curve")] string DiscountCurve, + [ExcelArgument(Description = "Solve Curve name ")] object SolveCurve, + [ExcelArgument(Description = "Solve Pillar Date")] object SolvePillarDate) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.GetObjectCache().TryGetObject(RateIndexPay, out var rIndexPay)) + { + _logger?.LogInformation("Rate index {index} not found in cache", RateIndexPay); + return $"Rate index {RateIndexPay} not found in cache"; + } + + if (!ContainerStores.GetObjectCache().TryGetObject(RateIndexRec, out var rIndexRec)) + { + _logger?.LogInformation("Rate index {index} not found in cache", RateIndexRec); + return $"Rate index {RateIndexRec} not found in cache"; + } + + var spreadOnPay = ParSpreadOnPay.OptionalExcel(true); + var tenor = new Frequency(SwapTenor); + + var product = new IrBasisSwap(ValDate, tenor, ParSpread, spreadOnPay, rIndexPay.Value, rIndexRec.Value, ForecastCurvePay, ForecastCurveRec, DiscountCurve) + { + SolveCurve = SolveCurve.OptionalExcel(rIndexPay.Name), + TradeId = ObjectName + }; + product.PillarDate = SolvePillarDate.OptionalExcel(product.EndDate); + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a fixed-rate loan/depo object", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(CreateFixedRateLoanDepo), IsThreadSafe = Parallel)] + public static object CreateFixedRateLoanDepo( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Start date")] DateTime StartDate, + [ExcelArgument(Description = "End date")] DateTime EndDate, + [ExcelArgument(Description = "Fixed rate")] double FixedRate, + [ExcelArgument(Description = "Daycount basis, e.g. Act360")] string Basis, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Notional, negative for loan")] double Notional, + [ExcelArgument(Description = "Discount Curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(Currency, out var cal); + var ccy = ContainerStores.GlobalContainer.GetRequiredService()[Currency]; + + if (!Enum.TryParse(Basis, out DayCountBasis basis)) + { + return $"Could not parse daycount basis - {Basis}"; + } + + var product = new FixedRateLoanDeposit(StartDate, EndDate, FixedRate, ccy, basis, Notional, DiscountCurve) + { + TradeId = ObjectName + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a metal contango swap", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(CreateContangoSwap), IsThreadSafe = Parallel)] + public static object CreateContangoSwap( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Spot Date")] DateTime SpotDate, + [ExcelArgument(Description = "Settle Date")] DateTime SettleDate, + [ExcelArgument(Description = "Metal Currency")] string MetalCcy, + [ExcelArgument(Description = "Cash Currency")] string CashCcy, + [ExcelArgument(Description = "Metal Notional")] double MetalNotional, + [ExcelArgument(Description = "Contango")] double Contango, + [ExcelArgument(Description = "Cash Discount Curve")] string DiscountCurve, + [ExcelArgument(Description = "Solve Curve name ")] string SolveCurve, + [ExcelArgument(Description = "Solve Pillar Date")] object SolvePillarDate) + { + return ExcelHelper.Execute(_logger, () => + { + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(MetalCcy, out var metalCcy); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(CashCcy, out var cashCcy); + + var product = new ContangoSwap + { + MetalCCY = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(MetalCcy), + CashCCY = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(CashCcy), + MetalQuantity = MetalNotional, + DeliveryDate = SettleDate, + CashDiscountCurve = DiscountCurve, + SolveCurve = SolveCurve, + PillarDate = DateTime.FromOADate(SolvePillarDate.OptionalExcel(SettleDate.ToOADate())), + ContangoRate = Contango, + TradeId = ObjectName, + Basis = DayCountBasis.ACT360, + SpotDate = SpotDate + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a collection of funding instruments to calibrate a curve engine", + Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateFundingInstrumentCollection), IsThreadSafe = Parallel)] + public static object CreateFundingInstrumentCollection( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Instruments")] object[,] InstrumentsA, + [ExcelArgument(Description = "Instruments")] object[,] InstrumentsB, + [ExcelArgument(Description = "Instruments")] object[,] InstrumentsC, + [ExcelArgument(Description = "Instruments")] object[,] InstrumentsD, + [ExcelArgument(Description = "Instruments")] object[,] InstrumentsE, + [ExcelArgument(Description = "Instruments")] object[,] InstrumentsF, + [ExcelArgument(Description = "Instruments")] object[,] InstrumentsG, + [ExcelArgument(Description = "Instruments")] object[,] InstrumentsH, + [ExcelArgument(Description = "Instruments")] object[,] InstrumentsI) + { + return ExcelHelper.Execute(_logger, () => + { + var Instruments = InstrumentsA.Flatten2d() + .Concat(InstrumentsB.Flatten2d()) + .Concat(InstrumentsC.Flatten2d()) + .Concat(InstrumentsD.Flatten2d()) + .Concat(InstrumentsE.Flatten2d()) + .Concat(InstrumentsF.Flatten2d()) + .Concat(InstrumentsG.Flatten2d()) + .Concat(InstrumentsH.Flatten2d()) + .Concat(InstrumentsI.Flatten2d()) + .ToArray(); + + var swaps = Instruments.GetAnyFromCache(); + var fras = Instruments.GetAnyFromCache(); + var futures = Instruments.GetAnyFromCache(); + var oisFutures = Instruments.GetAnyFromCache(); + var fxFwds = Instruments.GetAnyFromCache(); + var fxSwaps = Instruments.GetAnyFromCache(); + var xccySwaps = Instruments.GetAnyFromCache(); + var basisSwaps = Instruments.GetAnyFromCache(); + var loanDepos = Instruments.GetAnyFromCache(); + var ctgoSwaps = Instruments.GetAnyFromCache(); + var flrDepos = Instruments.GetAnyFromCache(); + + //allows merging of FICs into portfolios + var ficInstruments = Instruments.GetAnyFromCache() + .SelectMany(s => s); + + var fic = new FundingInstrumentCollection(ContainerStores.CurrencyProvider); + fic.AddRange(swaps); + fic.AddRange(fras); + fic.AddRange(futures); + fic.AddRange(oisFutures); + fic.AddRange(fxFwds); + fic.AddRange(fxSwaps); + fic.AddRange(xccySwaps); + fic.AddRange(basisSwaps); + fic.AddRange(ficInstruments); + fic.AddRange(loanDepos); + fic.AddRange(ctgoSwaps); + fic.AddRange(flrDepos); + + return ExcelHelper.PushToCache(fic, ObjectName); + }); + } + + [ExcelFunction(Description = "Implies solve stages from a Funding Instrument Collection", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(ImplySolveStages), IsThreadSafe = Parallel)] + public static object ImplySolveStages( + [ExcelArgument(Description = "Funding Instrument Collection Name")] string FICName, + [ExcelArgument(Description = "Fx Matrix Name")] string FxMatrixName) + { + return ExcelHelper.Execute(_logger, () => + { + var fic = ContainerStores.GetObjectCache().GetObjectOrThrow(FICName, $"Could not find FIC {FICName}"); + var fx = ContainerStores.GetObjectCache().GetObjectOrThrow(FxMatrixName, $"Could not find FxMatrix {FxMatrixName}"); + + var stages = fic.Value.ImplySolveStages(fx.Value); + + return stages.DictionaryToRange(); + }); + } + + [ExcelFunction(Description = "Creates a new rate index object", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(CreateRateIndex), IsVolatile = true, IsThreadSafe = Parallel)] + public static object CreateRateIndex( + [ExcelArgument(Description = "Index name")] string IndexName, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Rate forecast tenor")] string ForecastTenor, + [ExcelArgument(Description = "Day count basis, float leg")] string DaycountBasisFloat, + [ExcelArgument(Description = "Day count basis, fixed leg")] string DaycountBasisFixed, + [ExcelArgument(Description = "Fixed leg reset tenor")] string FixedTenor, + [ExcelArgument(Description = "Holiday calendars")] string HolidayCalendars, + [ExcelArgument(Description = "Fixing offset, e.g. 2b")] string FixingOffset, + [ExcelArgument(Description = "Roll convention")] string RollConvention) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(DaycountBasisFixed, out DayCountBasis dFixed)) + return $"Could not parse fixed daycount - {DaycountBasisFixed}"; + if (!Enum.TryParse(DaycountBasisFloat, out DayCountBasis dFloat)) + return $"Could not parse float daycount - {DaycountBasisFloat}"; + if (!Enum.TryParse(RollConvention, out RollType rConv)) + return $"Could not parse roll convention - {RollConvention}"; + + var floatTenor = new Frequency(ForecastTenor); + var fixedTenor = new Frequency(FixedTenor); + var fixOffset = new Frequency(FixingOffset); + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(HolidayCalendars, out var cal)) + { + _logger?.LogInformation("Calendar {HolidayCalendars} not found in cache", HolidayCalendars); + return $"Calendar {HolidayCalendars} not found in cache"; + } + + var rIndex = new FloatRateIndex + { + Currency = ContainerStores.GlobalContainer.GetRequiredService()[Currency], + RollConvention = rConv, + FixingOffset = fixOffset, + ResetTenor = floatTenor, + ResetTenorFixed = fixedTenor, + HolidayCalendars = cal, + DayCountBasis = dFloat, + DayCountBasisFixed = dFixed + }; + + return ExcelHelper.PushToCache(rIndex, IndexName); + }); + } + + [ExcelFunction(Description = "Creates a new fx spot rate matrix", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(CreateFxMatrix), IsThreadSafe = Parallel)] + public static object CreateFxMatrix( + [ExcelArgument(Description = "Fx matrix name")] string ObjectName, + [ExcelArgument(Description = "Base currency")] string BaseCurrency, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Spot rates")] object[,] SpotRateMap, + [ExcelArgument(Description = "Fx pair definitions")] object[] FxPairDefinitions, + [ExcelArgument(Description = "DiscountCurves")] object[,] DiscountCurves) + { + return ExcelHelper.Execute(_logger, () => + { + var fxPairsCache = ContainerStores.GetObjectCache(); + var fxPairs = FxPairDefinitions + .Where(s => fxPairsCache.Exists(s as string)) + .Select(s => fxPairsCache.GetObject(s as string).Value) + .ToList(); + var currencies = ContainerStores.GlobalContainer.GetRequiredService(); + + var spotRatesRaw = SpotRateMap.RangeToDictionary(); + + var spotRates = spotRatesRaw.ToDictionary(y => currencies[y.Key], y => y.Value); + + var discountCurvesRaw = DiscountCurves.RangeToDictionary(); + var discountCurves = discountCurvesRaw.ToDictionary(y => currencies[y.Key], y => y.Value); + + + var matrix = new FxMatrix(currencies); + matrix.Init(currencies[BaseCurrency], BuildDate, spotRates, fxPairs, discountCurves); + + return ExcelHelper.PushToCache(matrix, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a new fx pair definition", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(CreateFxPair), IsVolatile = true, IsThreadSafe = Parallel)] + public static object CreateFxPair( + [ExcelArgument(Description = "Fx pair name")] string ObjectName, + [ExcelArgument(Description = "Domestic currency")] string DomesticCurrency, + [ExcelArgument(Description = "Foreign currency")] string ForeignCurrency, + [ExcelArgument(Description = "Settlement calendar")] string Calendar, + [ExcelArgument(Description = "Spot lag")] string SpotLag) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(Calendar, out var cal)) + { + return $"Calendar {Calendar} not found in cache"; + } + + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(DomesticCurrency, out var domesticCal); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ForeignCurrency, out var foreignCal); + + var pair = new FxPair() + { + Domestic = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(DomesticCurrency), + Foreign = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(ForeignCurrency), + PrimaryCalendar = cal, + SecondaryCalendar = cal, + SpotLag = new Frequency(SpotLag) + }; + + return ExcelHelper.PushToCache(pair, ObjectName); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Instruments/InstrumentFunctions.cs b/clients/Qwack.Excel.Next/Instruments/InstrumentFunctions.cs new file mode 100644 index 00000000..e149bfc6 --- /dev/null +++ b/clients/Qwack.Excel.Next/Instruments/InstrumentFunctions.cs @@ -0,0 +1,1491 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Core.Curves; +using Qwack.Core.Basic; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Dates; +using Qwack.Core.Instruments.Asset; +using Qwack.Core.Instruments.Funding; +using Qwack.Core.Instruments; +using Qwack.Core.Models; +using Qwack.Models.Models; +using Qwack.Core.Cubes; +using Qwack.Models.Risk; +using Qwack.Models.MCModels; +using Qwack.Transport.BasicTypes; +using Qwack.Transport.TransportObjects.Instruments.Asset; +using Qwack.Transport.TransportObjects.Instruments; + +namespace Qwack.Excel.Instruments +{ + public class InstrumentFunctions + { + private const bool Parallel = false; + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Creates an asian swap, term settled / single period", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateAsianSwap), IsThreadSafe = Parallel)] + public static object CreateAsianSwap( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Period code or dates")] object PeriodCodeOrDates, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Fixing calendar")] object FixingCalendar, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset or date")] object PaymentOffsetOrDate, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Fixing date generation type")] object DateGenerationType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Fx conversion type, default ATC")] object FxConversionType) + + { + return ExcelHelper.Execute(_logger, () => + { + var fixingCal = FixingCalendar.OptionalExcel("WeekendsOnly"); + var paymentCal = PaymentCalendar.OptionalExcel("WeekendsOnly"); + var spotLag = SpotLag.OptionalExcel("0b"); + var dGenType = DateGenerationType.OptionalExcel("BusinessDays"); + var paymentOffset = PaymentOffsetOrDate is double ? "0b" : PaymentOffsetOrDate.OptionalExcel("0b"); + var fxConv = FxConversionType.OptionalExcel("ATC"); + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixingCal, out var fCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fixingCal); + return $"Calendar {fixingCal} not found in cache"; + } + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(paymentCal, out var pCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", paymentCal); + return $"Calendar {paymentCal} not found in cache"; + } + var pOffset = new Frequency(paymentOffset); + var sLag = new Frequency(spotLag); + if (!Enum.TryParse(dGenType, out DateGenerationType dType)) + { + return $"Could not parse date generation type - {dGenType}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService()[Currency]; + if (!Enum.TryParse(fxConv, out FxConversionType fxType)) + { + return $"Could not parse fx conversion type - {fxConv}"; + } + + AsianSwap product; + if (PeriodCodeOrDates is object[,] v) + { + var dates = v.ObjectRangeToVector().ToDateTimeArray(); + if (PaymentOffsetOrDate is double) + product = AssetProductFactory.CreateTermAsianSwap(dates[0], dates[1], Strike, AssetId, fCal, DateTime.FromOADate((double)PaymentOffsetOrDate), currency, TradeDirection.Long, sLag, Notional, dType); + else + product = AssetProductFactory.CreateTermAsianSwap(dates[0], dates[1], Strike, AssetId, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + else if (PeriodCodeOrDates is double) + { + PeriodCodeOrDates = DateTime.FromOADate((double)PeriodCodeOrDates).ToString("MMM-yy"); + product = AssetProductFactory.CreateTermAsianSwap(PeriodCodeOrDates as string, Strike, AssetId, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + else + product = AssetProductFactory.CreateTermAsianSwap(PeriodCodeOrDates as string, Strike, AssetId, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + + product.TradeId = ObjectName; + product.DiscountCurve = DiscountCurve; + product.FxConversionType = fxType; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a forward", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateForward), IsThreadSafe = Parallel)] + public static object CreateForward( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Expiry Date")] DateTime ExpiryDate, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset or date")] object PaymentOffsetOrDate, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Fx conversion type, default ATC")] object FxConversionType) + + { + return ExcelHelper.Execute(_logger, () => + { + var fxConv = FxConversionType.OptionalExcel("ATC"); + if (!Enum.TryParse(fxConv, out FxConversionType fxType)) + { + return $"Could not parse fx conversion type - {fxConv}"; + } + + var dto = new TO_Forward + { + AssetId = AssetId, + Direction = TradeDirection.Long, + DiscountCurve = DiscountCurve, + ExpiryDate = ExpiryDate, + FxConversionType = fxType, + Notional = Notional, + PaymentCalendar = PaymentCalendar.OptionalExcel("WeekendsOnly"), + PaymentCurrency = Currency, + PaymentLag = PaymentOffsetOrDate is double ? null : PaymentOffsetOrDate.OptionalExcel("0b"), + PaymentDate = PaymentOffsetOrDate is double pd ? DateTime.FromOADate(pd) : default, + SpotLag = SpotLag.OptionalExcel("0b"), + Strike = Strike, + TradeId = ObjectName, + }; + + var product = InstrumentFactory.GetInstrument( + new TO_Instrument { Forward = dto, AssetInstrumentType = AssetInstrumentType.Forward }, + ContainerStores.CurrencyProvider, + ContainerStores.CalendarProvider) as Forward; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + + [ExcelFunction(Description = "Creates an asian crack/diff swap, term settled / single period", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateAsianCrackDiffSwap), IsThreadSafe = Parallel)] + public static object CreateAsianCrackDiffSwap( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Period code")] object PeriodCodeOrDates, + [ExcelArgument(Description = "Asset Id pay")] string AssetIdPay, + [ExcelArgument(Description = "Asset Id receive")] string AssetIdRec, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Notional pay")] double NotionalPay, + [ExcelArgument(Description = "Notional receive")] double NotionalRec, + [ExcelArgument(Description = "Fixing calendar pay")] object FixingCalendarPay, + [ExcelArgument(Description = "Fixing calendar receive")] object FixingCalendarRec, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset")] object PaymentOffset, + [ExcelArgument(Description = "Spot lag pay")] object SpotLagPay, + [ExcelArgument(Description = "Spot lag receive")] object SpotLagRec, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var fixingCalPay = FixingCalendarPay.OptionalExcel("WeekendsOnly"); + var fixingCalRec = FixingCalendarRec.OptionalExcel("WeekendsOnly"); + var paymentCal = PaymentCalendar.OptionalExcel("WeekendsOnly"); + var spotLagPay = SpotLagPay.OptionalExcel("0b"); + var spotLagRec = SpotLagRec.OptionalExcel("0b"); + + var paymentOffset = PaymentOffset.OptionalExcel("0b"); + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixingCalPay, out var fCalPay)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fixingCalPay); + return $"Calendar {fixingCalPay} not found in cache"; + } + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixingCalRec, out var fCalRec)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fixingCalRec); + return $"Calendar {fixingCalRec} not found in cache"; + } + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(paymentCal, out var pCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", paymentCal); + return $"Calendar {paymentCal} not found in cache"; + } + + var pOffset = new Frequency(paymentOffset); + var sLagPay = new Frequency(spotLagPay); + var sLagRec = new Frequency(spotLagRec); + + var currency = ContainerStores.GlobalContainer.GetRequiredService()[Currency]; + + AsianBasisSwap product = null; + if (PeriodCodeOrDates is double dateDbl) + { + PeriodCodeOrDates = DateTime.FromOADate(dateDbl).ToString("MMM-yy"); + product = AssetProductFactory.CreateTermAsianBasisSwap(PeriodCodeOrDates as string, Strike, AssetIdPay, AssetIdRec, fCalPay, fCalRec, pCal, pOffset, currency, sLagPay, sLagRec, NotionalPay, NotionalRec); + } + else if (PeriodCodeOrDates is string dateStr) + { + product = AssetProductFactory.CreateTermAsianBasisSwap(dateStr, Strike, AssetIdPay, AssetIdRec, fCalPay, fCalRec, pCal, pOffset, currency, sLagPay, sLagRec, NotionalPay, NotionalRec); + } + else if (PeriodCodeOrDates is object[,] v) + { + var dates = v.ObjectRangeToVector().ToDateTimeArray(); + product = AssetProductFactory.CreateTermAsianBasisSwap(dates[0], dates[1], Strike, AssetIdPay, AssetIdRec, fCalPay, fCalRec, pCal, pOffset, currency, sLagPay, sLagRec, NotionalPay, NotionalRec); + } + + + + product.TradeId = ObjectName; + foreach (var ps in product.PaySwaplets) + ps.DiscountCurve = DiscountCurve; + foreach (var rs in product.RecSwaplets) + rs.DiscountCurve = DiscountCurve; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a futures crack/diff swap, term settled / single period", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateFutureCrackDiffSwap), IsThreadSafe = Parallel)] + public static object CreateFutureCrackDiffSwap( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Pay future code")] string PayFuture, + [ExcelArgument(Description = "Rec future code")] string RecFuture, + [ExcelArgument(Description = "Asset Id pay")] string AssetIdPay, + [ExcelArgument(Description = "Asset Id receive")] string AssetIdRec, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Notional pay")] double NotionalPay, + [ExcelArgument(Description = "Notional receive")] double NotionalRec, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var currency = ContainerStores.GlobalContainer.GetRequiredService()[Currency]; + + var fPayExpiry = Futures.FutureCode.GetRollFromCode(PayFuture, ContainerStores.FuturesProvider); + var fRecExpiry = Futures.FutureCode.GetRollFromCode(RecFuture, ContainerStores.FuturesProvider); + var product = AssetProductFactory.CreateBulletBasisSwap(fPayExpiry, fRecExpiry, Strike, AssetIdPay, AssetIdRec, currency, NotionalPay, NotionalRec); + + product.TradeId = ObjectName; + foreach (var ps in product.PaySwaplets) + ps.DiscountCurve = DiscountCurve; + foreach (var rs in product.RecSwaplets) + rs.DiscountCurve = DiscountCurve; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a commodity future position", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateFuture), IsThreadSafe = Parallel)] + public static object CreateFuture( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Expiry date")] DateTime ExpiryDate, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Quantity of contracts")] double Quantity, + [ExcelArgument(Description = "Contract lot size")] double LotSize, + [ExcelArgument(Description = "Price multiplier - default 1.0")] object PriceMultiplier) + { + return ExcelHelper.Execute(_logger, () => + { + var multiplier = PriceMultiplier.OptionalExcel(1.0); + var currency = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(Currency); + + var product = new Future + { + AssetId = AssetId, + ContractQuantity = Quantity, + LotSize = LotSize, + PriceMultiplier = multiplier, + Currency = currency, + Strike = Strike, + Direction = TradeDirection.Long, + ExpiryDate = ExpiryDate, + TradeId = ObjectName + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a commodity futures option position", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateFutureOption), IsThreadSafe = Parallel)] + public static object CreateFutureOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Expiry date")] DateTime ExpiryDate, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Quantity of contracts")] double Quantity, + [ExcelArgument(Description = "Contract lot size")] double LotSize, + [ExcelArgument(Description = "Call or Put flag")] string CallPut, + [ExcelArgument(Description = "Exercise style - default European")] object ExerciseStyle, + [ExcelArgument(Description = "Margining type, FuturesStyle or Regular - default FuturesStyle")] object MarginType) + + { + return ExcelHelper.Execute(_logger, () => + { + var currency = ContainerStores.GlobalContainer.GetRequiredService()[Currency]; + var exStyle = ExerciseStyle.OptionalExcel("European"); + var mStyle = MarginType.OptionalExcel("FuturesStyle"); + + if (!Enum.TryParse(CallPut, true, out OptionType cp)) + throw new Exception($"Could not parse call/put flag {CallPut}"); + if (!Enum.TryParse(exStyle, true, out OptionExerciseType exType)) + throw new Exception($"Could not parse option style flag {exStyle}"); + if (!Enum.TryParse(mStyle, true, out OptionMarginingType mType)) + throw new Exception($"Could not parse margining type flag {mStyle}"); + + var product = new FuturesOption + { + AssetId = AssetId, + ContractQuantity = Quantity, + LotSize = LotSize, + PriceMultiplier = 1.0, + Currency = currency, + Strike = Strike, + Direction = TradeDirection.Long, + ExpiryDate = ExpiryDate, + TradeId = ObjectName, + CallPut = cp, + ExerciseType = exType, + MarginingType = mType + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a monthly-settled asian swap", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateMonthlyAsianSwap), IsThreadSafe = Parallel)] + public static object CreateMonthlyAsianSwap( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Period code or dates")] object PeriodCodeOrDates, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Fixing calendar")] object FixingCalendar, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset or date")] object PaymentOffset, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Fixing date generation type")] object DateGenerationType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var fixingCal = FixingCalendar.OptionalExcel("WeekendsOnly"); + var paymentCal = PaymentCalendar.OptionalExcel("WeekendsOnly"); + var spotLag = SpotLag.OptionalExcel("0b"); + var dGenType = DateGenerationType.OptionalExcel("BusinessDays"); + var paymentOffset = PaymentOffset.OptionalExcel("0b"); + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixingCal, out var fCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fixingCal); + return $"Calendar {fixingCal} not found in cache"; + } + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(paymentCal, out var pCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", paymentCal); + return $"Calendar {paymentCal} not found in cache"; + } + var pOffset = new Frequency(paymentOffset); + var sLag = new Frequency(spotLag); + if (!Enum.TryParse(dGenType, out DateGenerationType dType)) + { + return $"Could not parse date generation type - {dGenType}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService()[Currency]; + + AsianSwapStrip product; + if (PeriodCodeOrDates is object[,]) + { + var dates = ((object[,])PeriodCodeOrDates).ObjectRangeToVector().ToDateTimeArray(); + product = AssetProductFactory.CreateMonthlyAsianSwap(dates[0], dates[1], Strike, AssetId, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + else if (PeriodCodeOrDates is double) + { + PeriodCodeOrDates = DateTime.FromOADate((double)PeriodCodeOrDates).ToString("MMM-yy"); + product = AssetProductFactory.CreateMonthlyAsianSwap(PeriodCodeOrDates as string, Strike, AssetId, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + else + product = AssetProductFactory.CreateMonthlyAsianSwap(PeriodCodeOrDates as string, Strike, AssetId, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + + product.TradeId = ObjectName; + foreach(var s in product.Swaplets) + { + s.DiscountCurve = DiscountCurve; + } + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates an asian swap with custom pricing periods", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateCustomAsianSwap), IsThreadSafe = Parallel)] + public static object CreateCustomAsianSwap( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Period dates")] object PeriodDates, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Notionals")] double[] Notionals, + [ExcelArgument(Description = "Fixing calendar")] object FixingCalendar, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset")] object PaymentOffset, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Fixing date generation type")] object DateGenerationType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var fixingCal = FixingCalendar.OptionalExcel("WeekendsOnly"); + var paymentCal = PaymentCalendar.OptionalExcel("WeekendsOnly"); + var spotLag = SpotLag.OptionalExcel("0b"); + var dGenType = DateGenerationType.OptionalExcel("BusinessDays"); + var paymentOffset = PaymentOffset.OptionalExcel("0b"); + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixingCal, out var fCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fixingCal); + return $"Calendar {fixingCal} not found in cache"; + } + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(paymentCal, out var pCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", paymentCal); + return $"Calendar {paymentCal} not found in cache"; + } + var pOffset = new Frequency(paymentOffset); + var sLag = new Frequency(spotLag); + if (!Enum.TryParse(dGenType, out DateGenerationType dType)) + { + return $"Could not parse date generation type - {dGenType}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService()[Currency]; + + AsianSwapStrip product; + if (PeriodDates is object[,] pd && pd.GetLength(1) == 2) + { + if(Notionals.Length!=pd.GetLength(0)) + throw new Exception("Number of notionals must match number of periods"); + + var doubles = pd.ObjectRangeToMatrix(); + var swaplets = new List(); + + for (var i = 0; i < doubles.GetLength(0); i++) + { + if (doubles[i, 0] == 0 || doubles[i, 1] == 0) + break; + + var start = DateTime.FromOADate(doubles[i, 0]); + var end = DateTime.FromOADate(doubles[i, 1]); + swaplets.Add(AssetProductFactory.CreateTermAsianSwap(start, end, Strike, AssetId, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notionals[i], dType)); + } + + product = new AsianSwapStrip + { + Swaplets = swaplets.ToArray() + }; + } + else + throw new Exception("Expecting a Nx2 array of period dates"); + + product.TradeId = ObjectName; + foreach (var s in product.Swaplets) + { + s.DiscountCurve = DiscountCurve; + } + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates an asian option", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateAsianOption), IsThreadSafe = Parallel)] + public static object CreateAsianOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Period code")] object PeriodCodeOrDates, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Put/Call")] string PutOrCall, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Fixing calendar")] object FixingCalendar, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset")] object PaymentOffsetOrDate, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Fixing date generation type")] object DateGenerationType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var fixingCal = FixingCalendar.OptionalExcel("WeekendsOnly"); + var paymentCal = PaymentCalendar.OptionalExcel("WeekendsOnly"); + var spotLag = SpotLag.OptionalExcel("0b"); + var dGenType = DateGenerationType.OptionalExcel("BusinessDays"); + var paymentOffset = PaymentOffsetOrDate is double ? "0b" : PaymentOffsetOrDate.OptionalExcel("0b"); + + if (!Enum.TryParse(PutOrCall, out OptionType oType)) + { + return $"Could not parse put/call flag - {PutOrCall}"; + } + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixingCal, out var fCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fixingCal); + return $"Calendar {fixingCal} not found in cache"; + } + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(paymentCal, out var pCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", paymentCal); + return $"Calendar {paymentCal} not found in cache"; + } + var pOffset = new Frequency(paymentOffset); + var sLag = new Frequency(spotLag); + if (!Enum.TryParse(dGenType, out DateGenerationType dType)) + { + return $"Could not parse date generation type - {dGenType}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService()[Currency]; + + AsianOption product; + if (PeriodCodeOrDates is object[,]) + { + var dates = ((object[,])PeriodCodeOrDates).ObjectRangeToVector().ToDateTimeArray(); + if (PaymentOffsetOrDate is double) + product = AssetProductFactory.CreateAsianOption(dates[0], dates[1], Strike, AssetId, oType, fCal, DateTime.FromOADate((double)PaymentOffsetOrDate), currency, TradeDirection.Long, sLag, Notional, dType); + else + { + product = AssetProductFactory.CreateAsianOption(dates[0], dates[1], Strike, AssetId, oType, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + } + else if (PeriodCodeOrDates is double) + { + PeriodCodeOrDates = DateTime.FromOADate((double)PeriodCodeOrDates).ToString("MMM-yy"); + product = AssetProductFactory.CreateAsianOption(PeriodCodeOrDates as string, Strike, AssetId, oType, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + else + product = AssetProductFactory.CreateAsianOption(PeriodCodeOrDates as string, Strike, AssetId, oType, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + + product.TradeId = ObjectName; + product.DiscountCurve = DiscountCurve; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates an asian lookback option", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateAsianLookbackOption), IsThreadSafe = Parallel)] + public static object CreateAsianLookbackOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Period code")] object PeriodCodeOrDates, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Put/Call")] string PutOrCall, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Fixing calendar")] object FixingCalendar, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset")] object PaymentOffsetOrDate, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Fixing date generation type")] object DateGenerationType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var fixingCal = FixingCalendar.OptionalExcel("WeekendsOnly"); + var paymentCal = PaymentCalendar.OptionalExcel("WeekendsOnly"); + var spotLag = SpotLag.OptionalExcel("0b"); + var dGenType = DateGenerationType.OptionalExcel("BusinessDays"); + var paymentOffset = PaymentOffsetOrDate is double ? "0b" : PaymentOffsetOrDate.OptionalExcel("0b"); + + if (!Enum.TryParse(PutOrCall, out OptionType oType)) + { + return $"Could not parse put/call flag - {PutOrCall}"; + } + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixingCal, out var fCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fixingCal); + return $"Calendar {fixingCal} not found in cache"; + } + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(paymentCal, out var pCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", paymentCal); + return $"Calendar {paymentCal} not found in cache"; + } + var pOffset = new Frequency(paymentOffset); + var sLag = new Frequency(spotLag); + if (!Enum.TryParse(dGenType, out DateGenerationType dType)) + { + return $"Could not parse date generation type - {dGenType}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(Currency); + + AsianLookbackOption product; + if (PeriodCodeOrDates is object[,]) + { + var dates = ((object[,])PeriodCodeOrDates).ObjectRangeToVector().ToDateTimeArray(); + if (PaymentOffsetOrDate is double) + product = AssetProductFactory.CreateAsianLookbackOption(dates[0], dates[1], AssetId, oType, fCal, DateTime.FromOADate((double)PaymentOffsetOrDate), currency, TradeDirection.Long, sLag, Notional, dType); + else + { + product = AssetProductFactory.CreateAsianLookbackOption(dates[0], dates[1], AssetId, oType, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + } + else if (PeriodCodeOrDates is double) + { + PeriodCodeOrDates = DateTime.FromOADate((double)PeriodCodeOrDates).ToString("MMM-yy"); + product = AssetProductFactory.CreateAsianLookbackOption(PeriodCodeOrDates as string, AssetId, oType, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + else + product = AssetProductFactory.CreateAsianLookbackOption(PeriodCodeOrDates as string, AssetId, oType, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + + product.TradeId = ObjectName; + product.DiscountCurve = DiscountCurve; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a backpricing option", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateBackPricingOption), IsThreadSafe = Parallel)] + public static object CreateBackPricingOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Period code")] object PeriodCodeOrDates, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Put/Call")] string PutOrCall, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Fixing calendar")] object FixingCalendar, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset")] object PaymentOffsetOrDate, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Fixing date generation type")] object DateGenerationType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var fixingCal = FixingCalendar.OptionalExcel("WeekendsOnly"); + var paymentCal = PaymentCalendar.OptionalExcel("WeekendsOnly"); + var spotLag = SpotLag.OptionalExcel("0b"); + var dGenType = DateGenerationType.OptionalExcel("BusinessDays"); + var paymentOffset = PaymentOffsetOrDate is double ? "0b" : PaymentOffsetOrDate.OptionalExcel("0b"); + + if (!Enum.TryParse(PutOrCall, out OptionType oType)) + { + return $"Could not parse put/call flag - {PutOrCall}"; + } + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixingCal, out var fCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fixingCal); + return $"Calendar {fixingCal} not found in cache"; + } + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(paymentCal, out var pCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", paymentCal); + return $"Calendar {paymentCal} not found in cache"; + } + var pOffset = new Frequency(paymentOffset); + var sLag = new Frequency(spotLag); + if (!Enum.TryParse(dGenType, out DateGenerationType dType)) + { + return $"Could not parse date generation type - {dGenType}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(Currency); + + BackPricingOption product; + if (PeriodCodeOrDates is object[,] dateRange) + { + var dates = dateRange.ObjectRangeToVector().ToDateTimeArray(); + if (dates.Length == 2) + dates = new[] { dates[0], dates[1], dates[1] }; + + if (PaymentOffsetOrDate is double dateDouble) + product = AssetProductFactory.CreateBackPricingOption(dates[0], dates[1], dates[2], AssetId, oType, fCal, DateTime.FromOADate(dateDouble), currency, TradeDirection.Long, sLag, Notional, dType); + else + { + product = AssetProductFactory.CreateBackPricingOption(dates[0], dates[1], dates[2], AssetId, oType, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + } + else if (PeriodCodeOrDates is double dateDouble) + { + PeriodCodeOrDates = DateTime.FromOADate(dateDouble).ToString("MMM-yy"); + product = AssetProductFactory.CreateBackPricingOption(PeriodCodeOrDates as string, AssetId, oType, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + } + else + product = AssetProductFactory.CreateBackPricingOption(PeriodCodeOrDates as string, AssetId, oType, fCal, pCal, pOffset, currency, TradeDirection.Long, sLag, Notional, dType); + + product.TradeId = ObjectName; + product.DiscountCurve = DiscountCurve; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a multi-period backpricing option", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateMultiPeriodBackPricingOption), IsThreadSafe = Parallel)] + public static object CreateMultiPeriodBackPricingOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Period dates array")] object PeriodDates, + [ExcelArgument(Description = "Decision date")] DateTime DecisionDate, + [ExcelArgument(Description = "Settlement date")] DateTime PayDate, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Put/Call")] string PutOrCall, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Fixing calendar")] object FixingCalendar, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Fixing date generation type")] object DateGenerationType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var fixingCal = FixingCalendar.OptionalExcel("WeekendsOnly"); + var spotLag = SpotLag.OptionalExcel("0b"); + var dGenType = DateGenerationType.OptionalExcel("BusinessDays"); + + if (!Enum.TryParse(PutOrCall, out OptionType oType)) + { + return $"Could not parse put/call flag - {PutOrCall}"; + } + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixingCal, out var fCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fixingCal); + return $"Calendar {fixingCal} not found in cache"; + } + + var sLag = new Frequency(spotLag); + if (!Enum.TryParse(dGenType, out DateGenerationType dType)) + { + return $"Could not parse date generation type - {dGenType}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(Currency); + + MultiPeriodBackpricingOption product; + if (!(PeriodDates is object[,] pd) || pd.GetLength(1) != 2) + throw new Exception("Period dates must be a Nx2 range"); + + var dates = pd.ObjectRangeToVector().ToDateTimeArray(); + + product = AssetProductFactory.CreateMultiPeriodBackPricingOption(dates, DecisionDate, AssetId, oType, fCal, PayDate, currency, TradeDirection.Long, sLag, Notional, dType); + product.TradeId = ObjectName; + product.DiscountCurve = DiscountCurve; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a european option with a continuous american barrier", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateAmericanBarrierOption), IsThreadSafe = Parallel)] + public static object CreateAmericanBarrierOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Barrier observation start date")] DateTime ObservationStart, + [ExcelArgument(Description = "Barrier observation end date")] DateTime ObservationEnd, + [ExcelArgument(Description = "Option expiry date")] DateTime Expiry, + [ExcelArgument(Description = "Payment date")] DateTime PayDate, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Put/Call")] string PutOrCall, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Barrier level")] double Barrier, + [ExcelArgument(Description = "Barrier side, Up or Down")] object BarrierSide, + [ExcelArgument(Description = "Barrier type, KI or KO")] object BarrierType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Spot lag: 0b (Energy), 2b (PM) or 2w (BM) typically")] object SpotLag, + [ExcelArgument(Description = "Fixing calendar for spot lag")] object FixingCalendar) + { + return ExcelHelper.Execute(_logger, () => + { + var bSideStr = BarrierSide.OptionalExcel("Up"); + var bTypeStr = BarrierType.OptionalExcel("KI"); + var spotLag = SpotLag.OptionalExcel("0b"); + var fCal = FixingCalendar.OptionalExcel(Currency); + + if (!Enum.TryParse(bSideStr, out BarrierSide bSide)) + { + return $"Could not parse barrier side {bSideStr}"; + } + if (!Enum.TryParse(bTypeStr, out BarrierType bType)) + { + return $"Could not parse barrier type {bTypeStr}"; + } + if (!Enum.TryParse(PutOrCall, out OptionType oType)) + { + return $"Could not parse put/call flag - {PutOrCall}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(Currency); + var sLag = new Frequency(spotLag); + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fCal, out var cal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fCal); + return $"Calendar {fCal} not found in cache"; + } + + var product = new EuropeanBarrierOption + { + AssetId = AssetId, + Barrier = Barrier, + BarrierObservationEndDate = ObservationEnd, + BarrierObservationStartDate = ObservationStart, + BarrierType = bType, + BarrierObservationType = BarrierObservationType.Continuous, + BarrierSide = bSide, + CallPut = oType, + Direction = TradeDirection.Long, + DiscountCurve = DiscountCurve, + ExpiryDate = Expiry, + Notional = Notional, + PaymentCurrency = currency, + PaymentDate = PayDate, + Strike = Strike, + TradeId = ObjectName, + SpotLag = sLag, + FixingCalendar = cal + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a one-touch/no-touch option with a continuous american barrier", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateOneTouchOption), IsThreadSafe = Parallel)] + public static object CreateOneTouchOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Barrier observation start date")] DateTime ObservationStart, + [ExcelArgument(Description = "Barrier observation end date")] DateTime ObservationEnd, + [ExcelArgument(Description = "Payment date")] DateTime PayDate, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Barrier level")] double Barrier, + [ExcelArgument(Description = "Barrier side, Up or Down")] object BarrierSide, + [ExcelArgument(Description = "Barrier type, KI or KO")] object BarrierType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Spot lag: 0b (Energy), 2b (PM) or 2w (BM) typically")] object SpotLag, + [ExcelArgument(Description = "Fixing calendar for spot lag")] object FixingCalendar) + { + return ExcelHelper.Execute(_logger, () => + { + var bSideStr = BarrierSide.OptionalExcel("Up"); + var bTypeStr = BarrierType.OptionalExcel("KI"); + var spotLag = SpotLag.OptionalExcel("0b"); + var fCal = FixingCalendar.OptionalExcel(Currency); + + if (!Enum.TryParse(bSideStr, out BarrierSide bSide)) + { + return $"Could not parse barrier side {bSideStr}"; + } + if (!Enum.TryParse(bTypeStr, out BarrierType bType)) + { + return $"Could not parse barrier type {bTypeStr}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(Currency); + var sLag = new Frequency(spotLag); + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fCal, out var cal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fCal); + return $"Calendar {fCal} not found in cache"; + } + + var product = new OneTouchOption + { + AssetId = AssetId, + Barrier = Barrier, + BarrierObservationEndDate = ObservationEnd, + BarrierObservationStartDate = ObservationStart, + BarrierType = bType, + BarrierObservationType = BarrierObservationType.Continuous, + BarrierSide = bSide, + Direction = TradeDirection.Long, + DiscountCurve = DiscountCurve, + Notional = Notional, + PaymentCurrency = currency, + PaymentDate = PayDate, + TradeId = ObjectName, + SpotLag = sLag, + FixingCalendar = cal + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a double-no-touch option with a continuous american barrier", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateDoubleNoTouchOption), IsThreadSafe = Parallel)] + public static object CreateDoubleNoTouchOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Barrier observation start date")] DateTime ObservationStart, + [ExcelArgument(Description = "Barrier observation end date")] DateTime ObservationEnd, + [ExcelArgument(Description = "Payment date")] DateTime PayDate, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Barrier up level")] double BarrierUp, + [ExcelArgument(Description = "Barrier down level")] double BarrierDown, + [ExcelArgument(Description = "Barrier type, KI or KO")] object BarrierType, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve, + [ExcelArgument(Description = "Spot lag: 0b (Energy), 2b (PM) or 2w (BM) typically")] object SpotLag, + [ExcelArgument(Description = "Fixing calendar for spot lag")] object FixingCalendar) + { + return ExcelHelper.Execute(_logger, () => + { + var bTypeStr = BarrierType.OptionalExcel("KI"); + var spotLag = SpotLag.OptionalExcel("0b"); + var fCal = FixingCalendar.OptionalExcel(Currency); + + if (!Enum.TryParse(bTypeStr, out BarrierType bType)) + { + return $"Could not parse barrier type {bTypeStr}"; + } + var currency = ContainerStores.GlobalContainer.GetRequiredService().GetCurrency(Currency); + var sLag = new Frequency(spotLag); + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fCal, out var cal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", fCal); + return $"Calendar {fCal} not found in cache"; + } + + var product = new DoubleNoTouchOption + { + AssetId = AssetId, + BarrierUp = BarrierUp, + BarrierDown = BarrierDown, + BarrierObservationEndDate = ObservationEnd, + BarrierObservationStartDate = ObservationStart, + BarrierType = bType, + BarrierObservationType = BarrierObservationType.Continuous, + Direction = TradeDirection.Long, + DiscountCurve = DiscountCurve, + Notional = Notional, + PaymentCurrency = currency, + PaymentDate = PayDate, + TradeId = ObjectName, + SpotLag = sLag, + FixingCalendar = cal + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates an european option", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateEuropeanOption), IsThreadSafe = Parallel)] + public static object CreateEuropeanOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Expiry date")] DateTime ExpiryDate, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Put/Call")] string PutOrCall, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset")] object PaymentOffsetOrDate, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var paymentCal = PaymentCalendar.OptionalExcel("WeekendsOnly"); + var spotLag = SpotLag.OptionalExcel("0b"); + var paymentOffset = PaymentOffsetOrDate is double ? "0b" : PaymentOffsetOrDate.OptionalExcel("0b"); + + if (!Enum.TryParse(PutOrCall, out OptionType oType)) + { + return $"Could not parse put/call flag - {PutOrCall}"; + } + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(paymentCal, out var pCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", paymentCal); + return $"Calendar {paymentCal} not found in cache"; + } + var pOffset = new Frequency(paymentOffset); + var sLag = new Frequency(spotLag); + var currency = ContainerStores.CurrencyProvider.GetCurrency(Currency); + + var product = new EuropeanOption() + { + AssetId = AssetId, + CallPut = oType, + Direction = TradeDirection.Long, + ExpiryDate = ExpiryDate, + PaymentCurrency = currency, + FxConversionType = currency.Ccy != "USD" & !AssetId.EndsWith(currency.Ccy) ? FxConversionType.ConvertThenAverage : FxConversionType.None, + PaymentDate = PaymentOffsetOrDate is double pdd ? DateTime.FromOADate(pdd) : ExpiryDate.AddPeriod(RollType.F, pCal, new Frequency(paymentOffset)), + TradeId = ObjectName, + DiscountCurve = DiscountCurve, + SpotLag = sLag, + Notional = Notional, + PaymentCalendar = pCal, + PaymentLag = new Frequency(paymentOffset), + Strike = Strike + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates an european fx option", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreateEuropeanFxOption), IsThreadSafe = Parallel)] + public static object CreateEuropeanFxOption( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Expiry date")] DateTime ExpiryDate, + [ExcelArgument(Description = "Fx pair")] string FxPair, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Put/Call")] string PutOrCall, + [ExcelArgument(Description = "Notional")] double Notional, + [ExcelArgument(Description = "Payment calendar")] object PaymentCalendar, + [ExcelArgument(Description = "Payment offset")] object PaymentOffsetOrDate, + [ExcelArgument(Description = "Spot lag")] object SpotLag, + [ExcelArgument(Description = "Discount curve")] string DiscountCurve) + { + return ExcelHelper.Execute(_logger, () => + { + var paymentCal = PaymentCalendar.OptionalExcel("WeekendsOnly"); + var paymentOffset = PaymentOffsetOrDate is double ? "0b" : PaymentOffsetOrDate.OptionalExcel("0b"); + var spotLag = SpotLag.OptionalExcel("0b"); + + if (!Enum.TryParse(PutOrCall, out OptionType oType)) + { + return $"Could not parse put/call flag - {PutOrCall}"; + } + + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(paymentCal, out var pCal)) + { + _logger?.LogInformation("Calendar {calendar} not found in cache", paymentCal); + return $"Calendar {paymentCal} not found in cache"; + } + var pOffset = new Frequency(paymentOffset); + var sLag = new Frequency(spotLag); + var pair = FxPair.FxPairFromString(ContainerStores.CurrencyProvider, ContainerStores.CalendarProvider); + + var product = new FxVanillaOption(ContainerStores.CurrencyProvider,ContainerStores.CalendarProvider) + { + CallPut = oType, + ExpiryDate = ExpiryDate, + DomesticCCY = pair.Domestic, + ForeignCCY = pair.Foreign, + DeliveryDate = PaymentOffsetOrDate is double pdd ? DateTime.FromOADate(pdd) : ExpiryDate.AddPeriod(RollType.F, pCal, new Frequency(paymentOffset)), + TradeId = ObjectName, + ForeignDiscountCurve = DiscountCurve, + DomesticQuantity = Notional, + Strike = Strike, + }; + + return ExcelHelper.PushToCache(product, ObjectName); + }); + } + + [ExcelFunction(Description = "Returns par rate of a trade given an AssetFx model", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(ProductParRate), IsThreadSafe = Parallel)] + public static object ProductParRate( + [ExcelArgument(Description = "Trade object name")] string TradeName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.GetObjectCache().TryGetObject(ModelName, out var model)) + throw new Exception($"Could not find model with name {ModelName}"); + + var pf = GetPortfolio(new[,] { { TradeName } }); + + if(!pf.Instruments.Any()) + throw new Exception($"Could not find any trade with name {TradeName}"); + + if (!(pf.Instruments.First() is IAssetInstrument trade)) + throw new Exception($"Could not find asset trade with name {TradeName}"); + + var result = trade.ParRate(model.Value); + + return result; + }); + } + + [ExcelFunction(Description = "Returns PV of a trade given an AssetFx model", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(ProductPV), IsThreadSafe = Parallel)] + public static object ProductPV( + [ExcelArgument(Description = "Trade object name")] string TradeName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "Reporting currency (optional)")] object ReportingCcy) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.GetObjectCache().TryGetObject(ModelName, out var model)) + throw new Exception($"Could not find model with name {ModelName}"); + + var pf = GetPortfolio(new[,] { { TradeName } }); + + if (!pf.Instruments.Any()) + throw new Exception($"Could not find any trade with name {TradeName}"); + + if (!(pf.Instruments.First() is IAssetInstrument trade)) + throw new Exception($"Could not find asset trade with name {TradeName}"); + + Currency ccy = null; + if (!(ReportingCcy is ExcelMissing)) + ccy = ContainerStores.CurrencyProvider.GetCurrency(ReportingCcy as string); + + var result = pf.PV(model.Value, ccy); + + return result.GetAllRows().First().Value; + }); + } + + [ExcelFunction(Description = "Returns quick PFE of a trade asian swap and AssetFx model", Category = CategoryNames.Instruments, + Name = CategoryNames.Instruments + "_" + nameof(QuickPFE), IsThreadSafe = Parallel)] + public static object QuickPFE( + [ExcelArgument(Description = "Trade object name")] string TradeName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "Confidence interval, e.g. 0.95")] double ConfidenceInterval, + [ExcelArgument(Description = "Reporting currency")] string ReportingCcy) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.GetObjectCache().TryGetObject(ModelName, out var model)) + throw new Exception($"Could not find model with name {ModelName}"); + + if (!ContainerStores.GetObjectCache().TryGetObject(TradeName, out var swap)) + throw new Exception($"Could not find asian swap with name {TradeName}"); + + var ccy = ContainerStores.CurrencyProvider.GetCurrency(ReportingCcy); + + var result = swap.Value.QuickPFE(ConfidenceInterval, model.Value); + + return result; + }); + } + + + [ExcelFunction(Description = "Returns PV of a portfolio given an AssetFx model", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(AssetPortfolioPV), IsThreadSafe = Parallel)] + public static object AssetPortfolioPV( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "Reporting currency (optional)")] object ReportingCcy) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + + Currency ccy = null; + if (!(ReportingCcy is ExcelMissing)) + { + ccy = ContainerStores.CurrencyProvider[ReportingCcy as string]; + } + + var result = pfolio.PV(model.Value, ccy); + return ExcelHelper.PushToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Returns expected cashflows of a portfolio given an AssetFx model", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(AssetPortfolioExpectedFlows), IsThreadSafe = Parallel)] + public static object AssetPortfolioExpectedFlows( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + + var result = pfolio.ExpectedCashFlows(model.Value); + return ExcelHelper.PushToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Performs PnL attribution between two AssetFx models", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(AssetPnLAttribution), IsThreadSafe = Parallel)] + public static object AssetPnLAttribution( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Starting Asset-FX model name")] string ModelNameStart, + [ExcelArgument(Description = "Ending Asset-FX model name")] string ModelNameEnd, + [ExcelArgument(Description = "Reporting currency")] string ReportingCcy) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = GetPortfolioOrTradeFromCache(PortfolioName); + var modelStart = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelNameStart, $"Could not find model with name {ModelNameStart}"); + var modelEnd = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelNameEnd, $"Could not find model with name {ModelNameEnd}"); + var ccy = ContainerStores.CurrencyProvider[ReportingCcy]; + + var result = ContainerStores.PnLAttributor.BasicAttribution(pfolio , modelStart.Value, modelEnd.Value, ccy, ContainerStores.CurrencyProvider); + return ExcelHelper.PushToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Performs PnL attribution/explain between two AssetFx models", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(AssetPnLAttributionExplain), IsThreadSafe = Parallel)] + public static object AssetPnLAttributionExplain( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Starting Asset-FX model name")] string ModelNameStart, + [ExcelArgument(Description = "Ending Asset-FX model name")] string ModelNameEnd, + [ExcelArgument(Description = "Starting greeks cube")] string GreeksStart, + [ExcelArgument(Description = "Reporting currency")] string ReportingCcy) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = GetPortfolioOrTradeFromCache(PortfolioName); + var modelStart = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelNameStart, $"Could not find model with name {ModelNameStart}"); + var modelEnd = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelNameEnd, $"Could not find model with name {ModelNameEnd}"); + var greeksStart = ContainerStores.GetObjectCache() + .GetObjectOrThrow(GreeksStart, $"Could not find greeks cube with name {GreeksStart}"); + var ccy = ContainerStores.CurrencyProvider[ReportingCcy]; + + var result = ContainerStores.PnLAttributor.ExplainAttribution(pfolio, modelStart.Value, modelEnd.Value, greeksStart.Value, ccy, ContainerStores.CurrencyProvider); + return ExcelHelper.PushToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Performs PnL attribution/explain between two AssetFx models, computing activity PnL", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(AssetPnLAttributionExplainWithActivity), IsThreadSafe = Parallel)] + public static object AssetPnLAttributionExplainWithActivity( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Starting portolio object name")] string PortfolioStartName, + [ExcelArgument(Description = "Ending portolio object name")] string PortfolioEndName, + [ExcelArgument(Description = "Starting Asset-FX model name")] string ModelNameStart, + [ExcelArgument(Description = "Ending Asset-FX model name")] string ModelNameEnd, + [ExcelArgument(Description = "Reporting currency")] string ReportingCcy, + [ExcelArgument(Description = "Today cash already paid? (false)")] object CashTodayAlreadyPaid) + { + return ExcelHelper.Execute(_logger, () => + { + var cashTodayAlradyPaid = CashTodayAlreadyPaid.OptionalExcel(false); + var pfolioStart = GetPortfolioOrTradeFromCache(PortfolioStartName); + var pfolioEnd = GetPortfolioOrTradeFromCache(PortfolioEndName); + var modelStart = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelNameStart, $"Could not find model with name {ModelNameStart}"); + var modelEnd = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelNameEnd, $"Could not find model with name {ModelNameEnd}"); + var ccy = ContainerStores.CurrencyProvider[ReportingCcy]; + + var result = ContainerStores.PnLAttributor.ExplainAttribution(pfolioStart, pfolioEnd, modelStart.Value, modelEnd.Value, ccy, ContainerStores.CurrencyProvider, cashTodayAlradyPaid); + return ExcelHelper.PushToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Creates a portfolio of instruments", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(CreatePortfolio), IsThreadSafe = Parallel)] + public static object CreatePortfolio( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Instruments")] object[,] Instruments, + [ExcelArgument(Description = "Instruments")] object Instruments2, + [ExcelArgument(Description = "Instruments")] object Instruments3, + [ExcelArgument(Description = "Instruments")] object Instruments4, + [ExcelArgument(Description = "Instruments")] object Instruments5) + { + return ExcelHelper.Execute(_logger, () => + { + var pf = GetPortfolio(Instruments); + if(!(Instruments2 is ExcelMissing) && Instruments2 is object[,] r2) + { + var pf2 = GetPortfolio(r2); + pf = new Portfolio() { Instruments = pf.Instruments.Concat(pf2.Instruments).ToList()}; + } + if (!(Instruments3 is ExcelMissing) && Instruments3 is object[,] r3) + { + var pf3 = GetPortfolio(r3); + pf = new Portfolio() { Instruments = pf.Instruments.Concat(pf3.Instruments).ToList() }; + } + if (!(Instruments4 is ExcelMissing) && Instruments4 is object[,] r4) + { + var pf4 = GetPortfolio(r4); + pf = new Portfolio() { Instruments = pf.Instruments.Concat(pf4.Instruments).ToList() }; + } + if (!(Instruments5 is ExcelMissing) && Instruments5 is object[,] r5) + { + var pf5 = GetPortfolio(r5); + pf = new Portfolio() { Instruments = pf.Instruments.Concat(pf5.Instruments).ToList() }; + } + + return ExcelHelper.PushToCache(pf, ObjectName); + }); + } + + [ExcelFunction(Description = "Returns a subset of trades from a portfolio object", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(FilterPortfolio), IsThreadSafe = Parallel)] + public static object FilterPortfolio( + [ExcelArgument(Description = "Output object name")] string ObjectName, + [ExcelArgument(Description = "Input portfolio object name")] string PortfolioName, + [ExcelArgument(Description = "Trade Ids")] object[] TradeIds, + [ExcelArgument(Description = "Filter out? (false)")] object FilterOut) + { + return ExcelHelper.Execute(_logger, () => + { + var fo = FilterOut.OptionalExcel(false); + var pFolioCache = ContainerStores.GetObjectCache(); + var pfIn = pFolioCache.GetObjectOrThrow(PortfolioName, $"Portfolio {PortfolioName} not found"); + var ids = TradeIds.ObjectRangeToVector(); + var pf = new Portfolio + { + Instruments = new List + ( + fo ? + pfIn.Value.Instruments.Where(x => !ids.Contains(x.TradeId)) : + pfIn.Value.Instruments.Where(x => ids.Contains(x.TradeId)) + ) + }; + pFolioCache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = pf }); + return ObjectName + '¬' + pFolioCache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Returns a subset of trades from a portfolio object", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(FilterPortfolioByName), IsThreadSafe = Parallel)] + public static object FilterPortfolioByName( + [ExcelArgument(Description = "Output object name")] string ObjectName, + [ExcelArgument(Description = "Input portfolio object name")] string PortfolioName, + [ExcelArgument(Description = "Portfolios to filter on")] object[] FilterPortfolios) + { + return ExcelHelper.Execute(_logger, () => + { + + var pFolioCache = ContainerStores.GetObjectCache(); + var pfIn = pFolioCache.GetObjectOrThrow(PortfolioName, $"Portfolio {PortfolioName} not found"); + var ids = FilterPortfolios.ObjectRangeToVector(); + var pf = new Portfolio + { + Instruments = new List + ( + pfIn.Value.Instruments.Where(x => ids.Contains(x.PortfolioName)) + ) + }; + pFolioCache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = pf }); + return ObjectName + '¬' + pFolioCache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Returns a subset of trades from a portfolio object", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(FilterPortfolioByDate), IsThreadSafe = Parallel)] + public static object FilterPortfolioByDate( + [ExcelArgument(Description = "Output object name")] string ObjectName, + [ExcelArgument(Description = "Input portfolio object name")] string PortfolioName, + [ExcelArgument(Description = "Date to filter out on-or-before")] DateTime FilterDate) + { + return ExcelHelper.Execute(_logger, () => + { + + var pFolioCache = ContainerStores.GetObjectCache(); + var pfIn = pFolioCache.GetObjectOrThrow(PortfolioName, $"Portfolio {PortfolioName} not found"); + var pf = pfIn.Value.FilterOnSettleDate(FilterDate); + pFolioCache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = pf }); + return ObjectName + '¬' + pFolioCache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Displays a portfolio of instruments", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(DisplayPortfolio), IsThreadSafe = Parallel)] + public static object DisplayPortfolio( + [ExcelArgument(Description = "Object name")] string ObjectName) + { + return ExcelHelper.Execute(_logger, () => + { + var pf = ContainerStores.GetObjectCache().GetObjectOrThrow(ObjectName, $"Portfolio {ObjectName} not found"); + + return pf.Value.Details(); + + }); + } + + [ExcelFunction(Description = "Computes a set of simulation dates for a portfolio", Category = CategoryNames.Instruments, Name = CategoryNames.Instruments + "_" + nameof(ComputeSimDates), IsThreadSafe = Parallel)] + public static object ComputeSimDates( + [ExcelArgument(Description = "Portfolio name")] string ObjectName, + [ExcelArgument(Description = "First/Anchor date")] DateTime AnchorDate, + [ExcelArgument(Description = "Frequency (Month)")] object Frequency) + { + return ExcelHelper.Execute(_logger, () => + { + var pf = ContainerStores.GetObjectCache().GetObjectOrThrow(ObjectName, $"Portfolio {ObjectName} not found"); + var freq = Frequency.OptionalExcel("Month"); + if (!Enum.TryParse(freq, out var freqEnum)) + throw new Exception($"Unable to parse frequency {freq}"); + return ExcelHelper.ReturnExcelRangeVectorFromDate(pf.Value.ComputeSimDates(AnchorDate, freqEnum)); + }); + } + + public static Portfolio GetPortfolioOrTradeFromCache(string name) + { + var pfolioCache = ContainerStores.GetObjectCache(); + if(!pfolioCache.TryGetObject(name, out var pfolio)) + { + var newPf = GetPortfolio(new[,] { { name } }); + if (newPf.Instruments.Any()) + return newPf; + + throw new Exception($"Could not find portfolio or trade with name {name}"); + } + + return pfolio.Value; + } + + public static IPvModel GetModelFromCache(string name, string portfolio) + { + var pf = GetPortfolioOrTradeFromCache(portfolio); + return GetModelFromCache(name, pf); + } + + public static IPvModel GetModelFromCache(string name, Portfolio portfolio) + { + if (ContainerStores.GetObjectCache().TryGetObject(name, out var modelObj)) + { + var m = modelObj.Value.Clone(); + m.AttachPortfolio(portfolio); + return m; + } + if (ContainerStores.GetObjectCache().TryGetObject(name, out var precModelObj)) + { + return precModelObj.Value.ToModel(portfolio); + } + throw new Exception($"Could not find model with name {name} in cahce"); + } + + public static Portfolio GetPortfolio(object[,] Instruments) + { + var swaps = Instruments.GetAnyFromCache(); + var fras = Instruments.GetAnyFromCache(); + var futures = Instruments.GetAnyFromCache(); + var fxFwds = Instruments.GetAnyFromCache(); + var fxSwaps = Instruments.GetAnyFromCache(); + var xccySwaps = Instruments.GetAnyFromCache(); + var basisSwaps = Instruments.GetAnyFromCache(); + var loanDepos = Instruments.GetAnyFromCache(); + + var asianOptions = Instruments.GetAnyFromCache(); + var asianStrips = Instruments.GetAnyFromCache(); + var asianSwaps = Instruments.GetAnyFromCache(); + var asianBasisSwaps = Instruments.GetAnyFromCache(); + var forwards = Instruments.GetAnyFromCache(); + var assetFutures = Instruments.GetAnyFromCache(); + var europeanFxOptions = Instruments.GetAnyFromCache(); + var europeanOptions = Instruments.GetAnyFromCache(); + var futuresOptions = Instruments.GetAnyFromCache(); + var lookbacks = Instruments.GetAnyFromCache(); + var bps = Instruments.GetAnyFromCache(); + var mpbps = Instruments.GetAnyFromCache(); + var baOpts = Instruments.GetAnyFromCache(); + var otOpts = Instruments.GetAnyFromCache(); + var dntOpts = Instruments.GetAnyFromCache(); + var fltDepos = Instruments.GetAnyFromCache(); + + //allows merging of FICs into portfolios + var ficInstruments = Instruments.GetAnyFromCache() + .SelectMany(s => s); + + //allows merging of portfolios into portfolios + var pfInstruments = Instruments.GetAnyFromCache() + .SelectMany(s => s.Instruments); + + var pf = new Portfolio + { + Instruments = new List() + }; + + pf.Instruments.AddRange(swaps); + pf.Instruments.AddRange(fras); + pf.Instruments.AddRange(futures); + pf.Instruments.AddRange(fxFwds); + pf.Instruments.AddRange(fxSwaps); + pf.Instruments.AddRange(xccySwaps); + pf.Instruments.AddRange(basisSwaps); + pf.Instruments.AddRange(loanDepos); + pf.Instruments.AddRange(ficInstruments); + + pf.Instruments.AddRange(pfInstruments); + pf.Instruments.AddRange(asianOptions); + pf.Instruments.AddRange(asianStrips); + pf.Instruments.AddRange(asianSwaps); + pf.Instruments.AddRange(asianBasisSwaps); + pf.Instruments.AddRange(forwards); + pf.Instruments.AddRange(assetFutures); + pf.Instruments.AddRange(europeanOptions); + pf.Instruments.AddRange(europeanFxOptions); + pf.Instruments.AddRange(futuresOptions); + pf.Instruments.AddRange(lookbacks); + pf.Instruments.AddRange(bps); + pf.Instruments.AddRange(mpbps); + pf.Instruments.AddRange(baOpts); + pf.Instruments.AddRange(otOpts); + pf.Instruments.AddRange(dntOpts); + pf.Instruments.AddRange(fltDepos); + + return pf; + } + } +} diff --git a/clients/Qwack.Excel.Next/Interpolation/InterpolatorFunctions.cs b/clients/Qwack.Excel.Next/Interpolation/InterpolatorFunctions.cs new file mode 100644 index 00000000..75a28e23 --- /dev/null +++ b/clients/Qwack.Excel.Next/Interpolation/InterpolatorFunctions.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Math; +using Qwack.Math.Interpolation; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Transport.BasicTypes; + +namespace Qwack.Excel.Interpolation +{ + public class InterpolatorFunctions + { + private const bool Parallel = false; + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Creates a 1-dimensional interpolator", Category = CategoryNames.Interpolation, Name = CategoryNames.Interpolation + "_" + nameof(Create1dInterpolator), IsThreadSafe = Parallel)] + public static object Create1dInterpolator( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Array of X values")] double[] X, + [ExcelArgument(Description = "Array of Y values")] double[] Y, + [ExcelArgument(Description = "Type of interpolator, e.g. Linear")] string InterpolatorType) + { + return ExcelHelper.Execute(_logger, () => + { + var interpType = InterpolatorType.OptionalExcel("Linear"); + if (!Enum.TryParse(interpType, out Interpolator1DType iType)) + { + return $"Could not parse 1d interpolator type - {interpType}"; + } + + var iObj = InterpolatorFactory.GetInterpolator(X, Y, iType); + var cache = ContainerStores.GetObjectCache(); + cache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = iObj }); + return ObjectName + '¬' + cache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Creates a 1-dimensional interpolator, tollerant of errors", Category = CategoryNames.Interpolation, Name = CategoryNames.Interpolation + "_" + nameof(Create1dInterpolatorSafe), IsThreadSafe = Parallel)] + public static object Create1dInterpolatorSafe( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Array of X values")] object[] X, + [ExcelArgument(Description = "Array of Y values")] object[] Y, + [ExcelArgument(Description = "Type of interpolator, e.g. Linear")] string InterpolatorType) + { + return ExcelHelper.Execute(_logger, () => + { + var interpType = InterpolatorType.OptionalExcel("Linear"); + if (!Enum.TryParse(interpType, out Interpolator1DType iType)) + { + return $"Could not parse 1d interpolator type - {interpType}"; + } + + if (X.Length != Y.Length) + throw new Exception("Input vectors must be same length"); + + var xList = new List(); + var yList = new List(); + + for(var i=0;i(); + cache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = iObj }); + return ObjectName + '¬' + cache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Creates a 2-dimensional interpolator", Category = CategoryNames.Interpolation, Name = CategoryNames.Interpolation + "_" + nameof(Create2dInterpolator), IsThreadSafe = Parallel)] + public static object Create2dInterpolator( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Array of X values")] double[] X, + [ExcelArgument(Description = "Array of Y values")] double[] Y, + [ExcelArgument(Description = "2d array of Z values")] double[,] Z, + [ExcelArgument(Description = "Type of interpolator, e.g. Bilinear")] string InterpolatorType) + { + return ExcelHelper.Execute(_logger, () => + { + var interpType = InterpolatorType.OptionalExcel("Bilinear"); + if (!Enum.TryParse(interpType, out Interpolator2DType iType)) + { + return $"Could not parse 2d interpolator type - {interpType}"; + } + + var iObj = InterpolatorFactory.GetInterpolator(X, Y, Z, iType); + var cache = ContainerStores.GetObjectCache(); + cache.PutObject(ObjectName, new SessionItem { Name = ObjectName, Value = iObj }); + return ObjectName + '¬' + cache.GetObject(ObjectName).Version; + }); + } + + [ExcelFunction(Description = "Queries a 1-dimensional interpolator", Category = CategoryNames.Interpolation, Name = CategoryNames.Interpolation + "_" + nameof(Interpolate1d), IsThreadSafe = Parallel)] + public static object Interpolate1d( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "X value to interpolate")] double X) + { + return ExcelHelper.Execute(_logger, () => + { + var interpolator = ContainerStores.GetObjectCache().GetObjectOrThrow(ObjectName, $"1d interpolator {ObjectName} not found in cache"); + return interpolator.Value.Interpolate(X); + }); + } + + [ExcelFunction(Description = "Queries a 2-dimensional interpolator", Category = CategoryNames.Interpolation, Name = CategoryNames.Interpolation + "_" + nameof(Interpolate2d), IsThreadSafe = Parallel)] + public static object Interpolate2d( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "X value to interpolate")] double X, + [ExcelArgument(Description = "Y value to interpolate")] double Y) + { + return ExcelHelper.Execute(_logger, () => + { + var interpolator = ContainerStores.GetObjectCache().GetObjectOrThrow(ObjectName, $"2d interpolator {ObjectName} not found in cache"); + return interpolator.Value.Interpolate(X,Y); + }); + } + + [ExcelFunction(Description = "Queries a 1-dimensional interpolator and returns average value", Category = CategoryNames.Interpolation, Name = CategoryNames.Interpolation + "_" + nameof(Interpolate1dAverage), IsThreadSafe = Parallel)] + public static object Interpolate1dAverage( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "X values to interpolate")] double[] Xs) + { + return ExcelHelper.Execute(_logger, () => + { + var interpolator = ContainerStores.GetObjectCache().GetObjectOrThrow(ObjectName, $"1d interpolator {ObjectName} not found in cache"); + return interpolator.Value.Average(Xs); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Math/MathFunctions.cs b/clients/Qwack.Excel.Next/Math/MathFunctions.cs new file mode 100644 index 00000000..92a36e5e --- /dev/null +++ b/clients/Qwack.Excel.Next/Math/MathFunctions.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Math; +using Qwack.Math.Distributions; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; + +namespace Qwack.Excel.Math +{ + public class MathFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Returns fisher transform on correlation for a given sample size and confidence level", Category = CategoryNames.Math, Name = CategoryNames.Math + "_" + nameof(FisherTransform))] + public static object FisherTransform( + [ExcelArgument(Description = "Input correlation")] double Correlation, + [ExcelArgument(Description = "Confidence level, e.g. 0.75")] double ConfidenceLevel, + [ExcelArgument(Description = "Sample size, e.g. 90")] double SampleSize, + [ExcelArgument(Description = "True for bid, false for offer")] bool IsBid) + { + return ExcelHelper.Execute(_logger, () => + { + return Statistics.FisherTransform(Correlation, ConfidenceLevel, SampleSize, IsBid); + }); + } + + [ExcelFunction(Description = "Performs linear regression on a set of samples", Category = CategoryNames.Math, Name = CategoryNames.Math + "_" + nameof(LinearRegression))] + public static object LinearRegression( + [ExcelArgument(Description = "X values")] double[] Xs, + [ExcelArgument(Description = "Y values")] double[] Ys) + { + return ExcelHelper.Execute(_logger, () => + { + var result = Xs.LinearRegressionNoVector(Ys, true); + var o = new object[,] + { + {result.Alpha,"Alpha"}, + {result.Beta,"Beta"}, + {result.R2,"R2"}, + {result.SSE,"SSE"} + }; + return o; + }); + } + + [ExcelFunction(Description = "Returns value from standard (zero-mean, unit std dev) bivariate normal distribution", Category = CategoryNames.Math, Name = CategoryNames.Math + "_" + nameof(BivariateNormalStdPDF))] + public static object BivariateNormalStdPDF( + [ExcelArgument(Description = "X value")] double X, + [ExcelArgument(Description = "Y value")] double Y, + [ExcelArgument(Description = "Correlation")] double Correlation) + { + return ExcelHelper.Execute(_logger, () => + { + return BivariateNormal.PDF(X, Y, Correlation); + }); + } + + [ExcelFunction(Description = "Returns value from bivariate normal distribution", Category = CategoryNames.Math, Name = CategoryNames.Math + "_" + nameof(BivariateNormalPDF))] + public static object BivariateNormalPDF( + [ExcelArgument(Description = "X value")] double X, + [ExcelArgument(Description = "X mean")] double Xbar, + [ExcelArgument(Description = "X std deviation")] double XStdDev, + [ExcelArgument(Description = "Y values")] double Y, + [ExcelArgument(Description = "Y mean")] double Ybar, + [ExcelArgument(Description = "Y std deviation")] double YStdDev, + [ExcelArgument(Description = "Correlation")] double Correlation) + { + return ExcelHelper.Execute(_logger, () => + { + return BivariateNormal.PDF(X, Xbar, XStdDev, Y, Ybar, YStdDev, Correlation); + }); + } + + [ExcelFunction(Description = "Returns CDF value from standard (zero-mean, unit std dev) bivariate normal distribution", Category = CategoryNames.Math, Name = CategoryNames.Math + "_" + nameof(BivariateNormalStdCDF))] + public static object BivariateNormalStdCDF( + [ExcelArgument(Description = "X value")] double X, + [ExcelArgument(Description = "Y value")] double Y, + [ExcelArgument(Description = "Correlation")] double Correlation) + { + return ExcelHelper.Execute(_logger, () => + { + return BivariateNormal.CDF(X, Y, Correlation); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Models/ModelFunctions.cs b/clients/Qwack.Excel.Next/Models/ModelFunctions.cs new file mode 100644 index 00000000..b1bf7cc5 --- /dev/null +++ b/clients/Qwack.Excel.Next/Models/ModelFunctions.cs @@ -0,0 +1,440 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Core.Curves; +using Qwack.Core.Basic; +using Qwack.Excel.Services; +using Qwack.Excel.Utils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Dates; +using Qwack.Core.Instruments.Asset; +using Qwack.Core.Instruments.Funding; +using Qwack.Core.Instruments; +using Qwack.Core.Models; +using Qwack.Models.Models; +using Qwack.Core.Cubes; +using Qwack.Models.MCModels; +using Qwack.Excel.Instruments; +using Qwack.Models; +using Qwack.Models.Risk; +using Qwack.Transport.BasicTypes; + +namespace Qwack.Excel.Curves +{ + public class ModelFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + + [ExcelFunction(Description = "Creates a monte-carlo settings object", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(CreateMcSettings), IsThreadSafe = false)] + public static object CreateMcSettings( + [ExcelArgument(Description = "Settings object name")] string ObjectName, + [ExcelArgument(Description = "Number of paths")] int NumberOfPaths, + [ExcelArgument(Description = "Number of timesteps")] int NumberOfTimesteps, + [ExcelArgument(Description = "Random number generator, e.g. Sobol or MersenneTwister")] object RandomGenerator, + [ExcelArgument(Description = "Reporting currency")] object ReportingCurrency, + [ExcelArgument(Description = "Model to use, e.g. Black,LocalVol or TurboSkew")] string McModel, + [ExcelArgument(Description = "Full futures simulation? (True/False)")] bool FuturesSim, + [ExcelArgument(Description = "Parallel execution? (True/False)")] bool Parallel, + [ExcelArgument(Description = "Futures mapping dictionary, assetId to futures code")] object FutMappingDict, + [ExcelArgument(Description = "Enable debug mode")] object DebugMode, + [ExcelArgument(Description = "Enable average path correction")] object PathCorrection, + [ExcelArgument(Description = "Enable reduced memory operation")] object CompactMemoryMode, + [ExcelArgument(Description = "Avoid regresison if possible for BackPricing options")] object AvoidBPRegression, + [ExcelArgument(Description = "Enable local correlation? (True/False)")] bool LocalCorrelation, + [ExcelArgument(Description = "Credit settings object")] object CreditSettings) + { + return ExcelHelper.Execute(_logger, () => + { + if (!ContainerStores.GlobalContainer.GetRequiredService().TryGetCurrency(ReportingCurrency.OptionalExcel("USD"), out var repCcy)) + return $"Could not find currency {ReportingCurrency} in cache"; + + if (!Enum.TryParse(RandomGenerator.OptionalExcel("MersenneTwister"), true, out RandomGeneratorType randomGenerator)) + return $"Could not parse random generator name - {RandomGenerator}"; + + if (!Enum.TryParse(McModel.OptionalExcel("Black"), true, out McModelType mcModel)) + return $"Could not parse model type - {McModel}"; + + var settings = new McSettings + { + Generator = randomGenerator, + NumberOfPaths = NumberOfPaths, + NumberOfTimesteps = NumberOfTimesteps, + ReportingCurrency = repCcy, + McModelType = mcModel, + ExpensiveFuturesSimulation = FuturesSim, + Parallelize = Parallel, + FuturesMappingTable = (FutMappingDict is ExcelMissing) ? + new Dictionary() : + ((object[,])FutMappingDict).RangeToDictionary(), + DebugMode = DebugMode.OptionalExcel(false), + AveragePathCorrection = PathCorrection.OptionalExcel(false), + CompactMemoryMode = CompactMemoryMode.OptionalExcel(false), + AvoidRegressionForBackPricing = AvoidBPRegression.OptionalExcel(false), + LocalCorrelation = LocalCorrelation, + CreditSettings = (CreditSettings is ExcelMissing) ? null : ContainerStores.GetObjectCache().GetObjectOrThrow(CreditSettings as string, $"Unable to find Credit Settings {CreditSettings}").Value + }; + + return ExcelHelper.PushToCache(settings, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a credit settings object for monte-carlo", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(CreateCreditSettings), IsThreadSafe = false)] + public static object CreateCreditSettings( + [ExcelArgument(Description = "Credit settings object name")] string ObjectName, + [ExcelArgument(Description = "Forward exposure dates for PFE etc")] object PFEDates, + [ExcelArgument(Description = "Portfolio regression method for PFE etc")] object PortfolioRegressor, + [ExcelArgument(Description = "Metric to calculate, default PV")] object Metric, + [ExcelArgument(Description = "Credit curve for CVA calc")] object CreditCurve, + [ExcelArgument(Description = "Funding curve for xVA")] object FundingCurve, + [ExcelArgument(Description = "Base discount curve for xVA")] object BaseDiscountCurve, + [ExcelArgument(Description = "Loss-given-default, e.g. 0.4")] double LGD, + [ExcelArgument(Description = "Confidence interval, e.g. 0.95")] double ConfidenceInterval, + [ExcelArgument(Description = "Counterparty risk weighting, e.g. 1.20")] double PartyRiskWeighting) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(PortfolioRegressor.OptionalExcel("MultiLinear"), true, out PFERegressorType regType)) + return $"Could not parse portfolio regressor type - {PortfolioRegressor}"; + + if (!Enum.TryParse(Metric.OptionalExcel("PV"), true, out BaseMetric metric)) + return $"Could not parse metric - {Metric}"; + + var fCurve = FundingCurve is ExcelMissing || !(FundingCurve is string fStr) ? + null : + ContainerStores.GetObjectCache().GetObjectOrThrow(fStr, $"Unable to find IrCurve {FundingCurve}"); + + var bCurve = BaseDiscountCurve is ExcelMissing || !(BaseDiscountCurve is string bStr) ? + null : + ContainerStores.GetObjectCache().GetObjectOrThrow(bStr, $"Unable to find IrCurve {BaseDiscountCurve}"); + + var cCurve = CreditCurve is ExcelMissing || !(CreditCurve is string cStr) ? + null : + ContainerStores.GetObjectCache().GetObjectOrThrow(cStr, $"Unable to find hazzard curve {CreditCurve}"); + + var cSettings = new CreditSettings + { + Metric = metric, + FundingCurve = fCurve?.Value, + CreditCurve = cCurve?.Value, + BaseDiscountCurve = bCurve?.Value, + ExposureDates = PFEDates is object[,] pd ? pd.ObjectRangeToVector().ToDateTimeArray(DateTime.MinValue.AddDays(1)) : + (PFEDates is double pdd ? new[] { DateTime.FromOADate(pdd) } : null), + PfeRegressorType = regType, + ConfidenceInterval = ConfidenceInterval, + LGD = LGD, + CounterpartyRiskWeighting = PartyRiskWeighting, + }; + return ExcelHelper.PushToCache(cSettings, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a monte-carlo model precursor object", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(CreateMcModel), IsThreadSafe = false)] + public static object CreateMcModel( + [ExcelArgument(Description = "Output object name")] string ObjectName, + [ExcelArgument(Description = "Asset-FX vanilla model")]string VanillaModel, + [ExcelArgument(Description = "MC settings")] string McSettings) + { + return ExcelHelper.Execute(_logger, () => + { + var vanillaModel = ContainerStores.GetObjectFromCache(VanillaModel); + var mcSettings = ContainerStores.GetObjectFromCache(McSettings); + + var mcModel = new AssetFXMCModelPercursor + { + AssetFxModel = vanillaModel, + CalendarProvider = ContainerStores.CalendarProvider, + CcyProvider = ContainerStores.CurrencyProvider, + FutProvider = ContainerStores.FuturesProvider, + McSettings = mcSettings + }; + + return ExcelHelper.PushToCache(mcModel, ObjectName); + }); + } + + + [ExcelFunction(Description = "Returns PV of a portfolio by monte-carlo given an AssetFx model and MC settings", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(McPortfolioPV), IsThreadSafe = false)] + public static object McPortfolioPV( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "MC settings name")] string SettingsName, + [ExcelArgument(Description = "Reporting currency (optional)")] object ReportingCcy) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var settings = ContainerStores.GetObjectCache() + .GetObjectOrThrow(SettingsName, $"Could not find MC settings with name {SettingsName}") + .Value.Clone(); + + settings.CreditSettings.Metric = BaseMetric.PV; + + Currency ccy = null; + if (!(ReportingCcy is ExcelMissing)) + ccy = ContainerStores.CurrencyProvider.GetCurrency(ReportingCcy as string); + + var mc = new AssetFxMCModel(model.Value.BuildDate, pfolio, model.Value, settings, ContainerStores.CurrencyProvider, ContainerStores.FuturesProvider, ContainerStores.CalendarProvider); + + var result = mc.PV(ccy); + return RiskFunctions.PushCubeToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Returns PFE of a portfolio by monte-carlo given an AssetFx model and MC settings", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(McPortfolioPFE), IsThreadSafe = false)] + public static object McPortfolioPFE( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "MC settings name")] string SettingsName, + [ExcelArgument(Description = "Confidence level, e.g. 0.95")] double ConfidenceLevel) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var settings = ContainerStores.GetObjectCache() + .GetObjectOrThrow(SettingsName, $"Could not find MC settings with name {SettingsName}"); + var sett = settings.Value.Clone(); + sett.CreditSettings.Metric = BaseMetric.PFE; + var mc = new AssetFxMCModel(model.Value.BuildDate, pfolio, model.Value, sett, ContainerStores.CurrencyProvider, ContainerStores.FuturesProvider, ContainerStores.CalendarProvider); + + var result = mc.PFE(ConfidenceLevel); + return RiskFunctions.PushCubeToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Returns credit metrics of a portfolio by monte-carlo given an AssetFx model and MC settings", Category = CategoryNames.Models, + Name = CategoryNames.Models + "_" + nameof(McPortfolioCreditPack), IsThreadSafe = false)] + public static object McPortfolioCreditPack( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "MC settings name")] string SettingsName, + [ExcelArgument(Description = "Confidence level, e.g. 0.95")] double ConfidenceLevel) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var settings = ContainerStores.GetObjectCache() + .GetObjectOrThrow(SettingsName, $"Could not find MC settings with name {SettingsName}"); + var sett = settings.Value.Clone(); + sett.CreditSettings.Metric = BaseMetric.PFE; + var mc = new AssetFxMCModel(model.Value.BuildDate, pfolio, model.Value, sett, ContainerStores.CurrencyProvider, ContainerStores.FuturesProvider, ContainerStores.CalendarProvider); + + var result = mc.FullPack(ConfidenceLevel); + return RiskFunctions.PushCubeToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Returns CVA of a portfolio by monte-carlo given an AssetFx model and MC settings", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(McPortfolioCVA), IsThreadSafe = false)] + public static object McPortfolioCVA( + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "MC settings name")] string SettingsName) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var settings = ContainerStores.GetObjectCache() + .GetObjectOrThrow(SettingsName, $"Could not find MC settings with name {SettingsName}"); + var sett = settings.Value.Clone(); + sett.CreditSettings.Metric = BaseMetric.CVA; + var mc = new AssetFxMCModel(model.Value.BuildDate, pfolio, model.Value, sett, ContainerStores.CurrencyProvider, ContainerStores.FuturesProvider, ContainerStores.CalendarProvider); + + var result = mc.CVA(); + return result; + }); + } + + [ExcelFunction(Description = "Returns FVA of a portfolio by monte-carlo given an AssetFx model and MC settings", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(McPortfolioFVA), IsThreadSafe = false)] + public static object McPortfolioFVA( + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "MC settings name")] string SettingsName) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var settings = ContainerStores.GetObjectCache() + .GetObjectOrThrow(SettingsName, $"Could not find MC settings with name {SettingsName}"); + var sett = settings.Value.Clone(); + sett.CreditSettings.Metric = BaseMetric.FVA; + var mc = new AssetFxMCModel(model.Value.BuildDate, pfolio, model.Value, sett, ContainerStores.CurrencyProvider, ContainerStores.FuturesProvider, ContainerStores.CalendarProvider); + + var (FBA, FCA) = mc.FVA(); + var o = new object[2, 2] + { + {"FCA",FCA }, + {"FBA",FBA }, + }; + return o; + }); + } + + [ExcelFunction(Description = "Returns expected SA-CCR EAD profile of a portfolio by monte-carlo given an AssetFx model and MC settings", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(McPortfolioExpectedEAD), IsThreadSafe = false)] + public static object McPortfolioExpectedEAD( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "MC settings name")] string SettingsName, + [ExcelArgument(Description = "Counterparty risk weight")] double CounterpartyRiskWeight, + [ExcelArgument(Description = "Map for assetIds to hedge sets")] object[,] AssetIdToHedgeSetMap) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var settings = ContainerStores.GetObjectCache() + .GetObjectOrThrow(SettingsName, $"Could not find MC settings with name {SettingsName}"); + var sett = settings.Value.Clone(); + sett.CreditSettings.Metric = BaseMetric.ExpectedCapital; + sett.CreditSettings.CounterpartyRiskWeighting = CounterpartyRiskWeight; + sett.CreditSettings.AssetIdToHedgeGroupMap = AssetIdToHedgeSetMap.RangeToDictionary(); + + var mc = new AssetFxMCModel(model.Value.BuildDate, pfolio, model.Value, sett, ContainerStores.CurrencyProvider, ContainerStores.FuturesProvider, ContainerStores.CalendarProvider); + + var result = mc.ExpectedCapital(); + return RiskFunctions.PushCubeToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Returns expected SA-CCR EAD profile of a portfolio given an EPE profile, AssetFx model and MC settings", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(PortfolioExpectedEAD), IsThreadSafe = false)] + public static object PortfolioExpectedEAD( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "EPE cube name")] string EPECube, + [ExcelArgument(Description = "Counterparty risk weight")] double CounterpartyRiskWeight, + [ExcelArgument(Description = "Map for assetIds to commodity types")] object[,] AssetIdToTypeMap, + [ExcelArgument(Description = "Map for types to commodity hedge sets")] object[,] TypeToHedgeSetMap, + [ExcelArgument(Description = "Reporting currency")] string ReportingCurrency) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var epeCube = ContainerStores.GetObjectCache() + .GetObjectOrThrow(EPECube, $"Could not find epe cube with name {EPECube}"); + + if (!ContainerStores.GlobalContainer.GetRequiredService().TryGetCurrency(ReportingCurrency.OptionalExcel("USD"), out var repCcy)) + return $"Could not find currency {ReportingCurrency} in cache"; + + var expDates = epeCube.Value.GetAllRows().Select(r => (DateTime)r.MetaData[0]).ToArray(); + var epeValues = epeCube.Value.GetAllRows().Select(r => r.Value).ToArray(); + var assetIdToTypeMap = AssetIdToTypeMap.RangeToDictionary(); + var typeToHedgeSetMap = TypeToHedgeSetMap.RangeToDictionary(); + var calc = new EADCalculator(pfolio, CounterpartyRiskWeight,assetIdToTypeMap,typeToHedgeSetMap, repCcy, model.Value, + expDates, epeValues, ContainerStores.CurrencyProvider); + calc.Process(); + var result = calc.ResultCube(); + return RiskFunctions.PushCubeToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Returns KVA of a portfolio by monte-carlo given an AssetFx model and MC settings", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(McPortfolioKVA), IsThreadSafe = false)] + public static object McPortfolioKVA( + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "MC settings name")] string SettingsName) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var settings = ContainerStores.GetObjectCache() + .GetObjectOrThrow(SettingsName, $"Could not find MC settings with name {SettingsName}"); + var sett = settings.Value.Clone(); + sett.CreditSettings.Metric = BaseMetric.KVA; + var mc = new AssetFxMCModel(model.Value.BuildDate, pfolio, model.Value, sett, ContainerStores.CurrencyProvider, ContainerStores.FuturesProvider, ContainerStores.CalendarProvider); + + var result = mc.KVA(); + return result; + }); + } + + [ExcelFunction(Description = "Returns PFE of a portfolio by monte-carlo given an AssetFx model and MC settings", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(McPortfolioEPE), IsThreadSafe = false)] + public static object McPortfolioEPE( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "MC settings name")] string SettingsName) + { + return ExcelHelper.Execute(_logger, () => + { + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var settings = ContainerStores.GetObjectCache() + .GetObjectOrThrow(SettingsName, $"Could not find MC settings with name {SettingsName}"); + var sett = settings.Value.Clone(); + sett.CreditSettings.Metric = BaseMetric.EPE; + var mc = new AssetFxMCModel(model.Value.BuildDate, pfolio, model.Value, sett, ContainerStores.CurrencyProvider, ContainerStores.FuturesProvider, ContainerStores.CalendarProvider); + + var result = mc.EPE(); + return RiskFunctions.PushCubeToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Returns PFE of a portfolio by monte-carlo given an AssetFx model and MC settings", Category = CategoryNames.Models, + Name = CategoryNames.Models + "_" + nameof(AnalyticPortfolioPFE), IsThreadSafe = false)] + public static object AnalyticPortfolioPFE( + [ExcelArgument(Description = "Result object name")] string ResultObjectName, + [ExcelArgument(Description = "Portolio object name")] string PortfolioName, + [ExcelArgument(Description = "Asset-FX model name")] string ModelName, + [ExcelArgument(Description = "Confidence level, e.g. 0.95")] double ConfidenceLevel, + [ExcelArgument(Description = "Reporting Currency")] string ReportingCurrency, + [ExcelArgument(Description = "Attempt to correct for correlation? (true)")] object AttemptCorrelCorrection) + { + return ExcelHelper.Execute(_logger, () => + { + var correlCorrect = AttemptCorrelCorrection.OptionalExcel(true); + var pfolio = InstrumentFunctions.GetPortfolioOrTradeFromCache(PortfolioName); + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + var ccy = ContainerStores.CurrencyProvider.GetCurrency(ReportingCurrency); + + var result = QuickPFECalculator.Calculate(model.Value, pfolio, ConfidenceLevel, ccy, + ContainerStores.CurrencyProvider, ContainerStores.CalendarProvider, correlationCorrection: correlCorrect); + return RiskFunctions.PushCubeToCache(result, ResultObjectName); + }); + } + + [ExcelFunction(Description = "Returns composite volatility from a model", Category = CategoryNames.Models, Name = CategoryNames.Models + "_" + nameof(GetCompoVol), IsThreadSafe = false)] + public static object GetCompoVol( + [ExcelArgument(Description = "Model object name")] string ModelName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Strike")] double Strike, + [ExcelArgument(Description = "Expiry")] DateTime Expiry) + { + return ExcelHelper.Execute(_logger, () => + { + var model = ContainerStores.GetObjectCache() + .GetObjectOrThrow(ModelName, $"Could not find model with name {ModelName}"); + + if (!ContainerStores.GlobalContainer.GetRequiredService().TryGetCurrency(Currency.OptionalExcel("USD"), out var ccy)) + return $"Could not find currency {Currency} in cache"; + + var vol = ((AssetFxModel)model.Value).GetCompositeVolForStrikeAndDate(AssetId, Expiry, Strike, ccy); + return vol; + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Options/AmericanFunctions.cs b/clients/Qwack.Excel.Next/Options/AmericanFunctions.cs new file mode 100644 index 00000000..31ab2548 --- /dev/null +++ b/clients/Qwack.Excel.Next/Options/AmericanFunctions.cs @@ -0,0 +1,77 @@ +using System; +using ExcelDna.Integration; +using Qwack.Options; +using Qwack.Excel.Services; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Transport.BasicTypes; + +namespace Qwack.Excel.Options +{ + public class AmericanFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Returns an american futures option PV using a grid", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(AmericanFutureOptionPV))] + public static object AmericanFutureOptionPV( + [ExcelArgument(Description = "Time-to-expiry")] double T, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP, + [ExcelArgument(Description = "Pricing method (Defult Trinomial)")] string Method) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + if (!Enum.TryParse(Method, out AmericanPricingType method)) + { + return $"Could not parse pricing type - {Method}"; + } + if (method == AmericanPricingType.Binomial) + { + return BinomialTree.AmericanFutureOptionPV(F, K, R, T, V, optType); + } + else + { + return TrinomialTree.AmericanFutureOptionPV(F, K, R, T, V, optType); + } + }); + } + + [ExcelFunction(Description = "Returns an implied volatility for an american futures option PV using a grid", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(AmericanFutureOptionImpliedVol))] + public static object AmericanFutureOptionImpliedVol( + [ExcelArgument(Description = "Time-to-expiry")] double T, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Option Premium")] double PV, + [ExcelArgument(Description = "Call or Put")] string CP, + [ExcelArgument(Description = "Pricing method (Defult Trinomial)")] string Method) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + if (!Enum.TryParse(Method, out AmericanPricingType method)) + { + return $"Could not parse pricing type - {Method}"; + } + if (method == AmericanPricingType.Binomial) + { + return BinomialTree.AmericanFuturesOptionImpliedVol(F, K, R, T, PV, optType); + } + else + { + return TrinomialTree.AmericanFuturesOptionImpliedVol(F, K, R, T, PV, optType); + } + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Options/AsianFunctions.cs b/clients/Qwack.Excel.Next/Options/AsianFunctions.cs new file mode 100644 index 00000000..5c3737a6 --- /dev/null +++ b/clients/Qwack.Excel.Next/Options/AsianFunctions.cs @@ -0,0 +1,225 @@ +using System; +using ExcelDna.Integration; +using Qwack.Excel.Services; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Dates; +using Qwack.Core.Basic; +using Qwack.Core.Curves; +using System.Linq; +using Qwack.Models.Models; +using Qwack.Transport.BasicTypes; + +namespace Qwack.Excel.Options +{ + public class AsianFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Returns asian option PV using the Turnbull-Wakeman formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(TurnbullWakemanPV))] + public static object TurnbullWakemanPV( + [ExcelArgument(Description = "Time-to-expiry")] double T, + [ExcelArgument(Description = "Time-to-average start")] double TavgStart, + [ExcelArgument(Description = "Average-to-date")] double KnownAverage, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.Asians.TurnbullWakeman.PV(F, KnownAverage, V, K, TavgStart, T, R, optType); + }); + } + + [ExcelFunction(Description = "Returns asian option PV using the Turnbull-Wakeman formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(TurnbullWakemanPV2))] + public static object TurnbullWakemanPV2( + [ExcelArgument(Description = "Evaluation Date")] DateTime EvalDate, + [ExcelArgument(Description = "Average Start Date")] DateTime AverageStartDate, + [ExcelArgument(Description = "Average End Date")] DateTime AverageEndDate, + [ExcelArgument(Description = "Average-to-date")] double KnownAverage, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.Asians.TurnbullWakeman.PV(F, KnownAverage, V, K, EvalDate, AverageStartDate, AverageEndDate, R, optType); + }); + } + + [ExcelFunction(Description = "Returns asian option PV using the Turnbull-Wakeman formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(TurnbullWakemanFuturesPV))] + public static object TurnbullWakemanFuturesPV( + [ExcelArgument(Description = "Fixing dates")] double[] FixingDates, + [ExcelArgument(Description = "Eval date")] DateTime EvalDate, + [ExcelArgument(Description = "Pay date")] DateTime PayDate, + [ExcelArgument(Description = "Forward curve")] string Curve, + [ExcelArgument(Description = "Fixings")] string FixingDictionary, + [ExcelArgument(Description = "Vol surface")] string Surface, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + var curve = ContainerStores.GetObjectCache().GetObjectOrThrow(Curve, $"Curve {Curve} not found"); + var surface = ContainerStores.GetObjectCache().GetObjectOrThrow(Surface, $"Surface {Surface} not found"); + var fd = new FixingDictionary(); + var dates = FixingDates.ToDateTimeArray(); + if (dates.First() < EvalDate) + fd = ContainerStores.GetObjectCache().GetObjectOrThrow(FixingDictionary, $"Fixing dictionary {FixingDictionary} not found").Value; + var fwds = dates.Select(d => d>EvalDate?curve.Value.GetPriceForDate(d): fd.GetFixing(d)).ToArray(); + var vols = dates.Select((d,ix) => surface.Value.GetVolForAbsoluteStrike(K,d,fwds[ix])).ToArray(); + return Qwack.Options.Asians.TurnbullWakeman.PV(fwds, dates, EvalDate, PayDate, vols, K, R, optType); + }); + } + + [ExcelFunction(Description = "Returns asian option delta using the Turnbull-Wakeman formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(TurnbullWakemanDelta))] + public static object TurnbullWakemanDelta( + [ExcelArgument(Description = "Evaluation Date")] DateTime EvalDate, + [ExcelArgument(Description = "Average Start Date")] DateTime AverageStartDate, + [ExcelArgument(Description = "Average End Date")] DateTime AverageEndDate, + [ExcelArgument(Description = "Average-to-date")] double KnownAverage, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.Asians.TurnbullWakeman.Delta(F, KnownAverage, V, K, EvalDate, AverageStartDate, AverageEndDate, R, optType); + }); + } + + [ExcelFunction(Description = "Returns strike for asian option with specified PV, using the Turnbull-Wakeman formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(TurnbullWakemanStrikeForPV))] + public static object TurnbullWakemanStrikeForPV( + [ExcelArgument(Description = "Evaluation Date")] DateTime EvalDate, + [ExcelArgument(Description = "Average Start Date")] DateTime AverageStartDate, + [ExcelArgument(Description = "Average End Date")] DateTime AverageEndDate, + [ExcelArgument(Description = "Average-to-date")] double KnownAverage, + [ExcelArgument(Description = "Target PV")] double PV, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility Surface")] string VolSurface, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger, () => + { + var surface = ContainerStores.GetObjectCache().GetObjectOrThrow(VolSurface, $"Could not parse find vol surface {VolSurface} in the cache"); + + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.Asians.TurnbullWakeman.StrikeForPV(PV, F, KnownAverage, surface.Value, EvalDate, AverageStartDate, AverageEndDate, R, optType); + }); + } + + [ExcelFunction(Description = "Returns strike for asian option with specified PV, using the Turnbull-Wakeman formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(TurnbullWakemanStrikeForPVFutures))] + public static object TurnbullWakemanStrikeForPVFutures( + [ExcelArgument(Description = "Evaluation Date")] DateTime EvalDate, + [ExcelArgument(Description = "Fixing dates")] double[] FixingDates, + [ExcelArgument(Description = "Settlement Date")] DateTime PayDate, + [ExcelArgument(Description = "Target PV")] double PV, + [ExcelArgument(Description = "Forward curve")] string FwdCurve, + [ExcelArgument(Description = "Fixing dictionary")] string FixingDictionary, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility Surface")] string VolSurface, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger, () => + { + var surface = ContainerStores.GetObjectCache().GetObjectOrThrow(VolSurface, $"Could not parse find vol surface {VolSurface} in the cache"); + var curve = ContainerStores.GetObjectCache().GetObjectOrThrow(FwdCurve, $"Fwd curve {FwdCurve} not found"); + + var fd = new FixingDictionary(); + var dates = FixingDates.ToDateTimeArray(); + if (dates.First() < EvalDate) + fd = ContainerStores.GetObjectCache().GetObjectOrThrow(FixingDictionary, $"Fixing dictionary {FixingDictionary} not found").Value; + var F = dates.Select(d => d > EvalDate ? curve.Value.GetPriceForDate(d) : fd.GetFixing(d)).ToArray(); + + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.Asians.TurnbullWakeman.StrikeForPV(PV, F, FixingDates.ToDateTimeArray(), surface.Value, EvalDate, PayDate, R, optType); + }); + } + + [ExcelFunction(Description = "Returns asian option PV using the Clewlow/LME formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(ClewlowPV))] + public static object ClewlowPV( + [ExcelArgument(Description = "Evaluation Date")] DateTime EvalDate, + [ExcelArgument(Description = "Average Start Date")] DateTime AverageStartDate, + [ExcelArgument(Description = "Average End Date")] DateTime AverageEndDate, + [ExcelArgument(Description = "Average-to-date")] double KnownAverage, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP, + [ExcelArgument(Description = "Fixing Calendar")] object FixingCalendar) + { + + return ExcelHelper.Execute(_logger, () => + { + var fixCal = FixingCalendar.OptionalExcel("Weekends"); + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixCal, out var cal)) + return $"Calendar {FixingCalendar} not found in cache"; + + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.Asians.LME_Clewlow.PV(F, KnownAverage, V, K, EvalDate, AverageStartDate, AverageEndDate, R, optType, cal); + }); + } + + [ExcelFunction(Description = "Returns asian option delta using the Clewlow/LME formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(ClewlowDelta))] + public static object ClewlowDelta( + [ExcelArgument(Description = "Evaluation Date")] DateTime EvalDate, + [ExcelArgument(Description = "Average Start Date")] DateTime AverageStartDate, + [ExcelArgument(Description = "Average End Date")] DateTime AverageEndDate, + [ExcelArgument(Description = "Average-to-date")] double KnownAverage, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP, + [ExcelArgument(Description = "Fixing Calendar")] object FixingCalendar) + { + + return ExcelHelper.Execute(_logger, () => + { + var fixCal = FixingCalendar.OptionalExcel("Weekends"); + if (!ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(fixCal, out var cal)) + return $"Calendar {FixingCalendar} not found in cache"; + + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.Asians.LME_Clewlow.Delta(F, KnownAverage, V, K, EvalDate, AverageStartDate, AverageEndDate, R, optType, cal); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Options/BlackFunctions.cs b/clients/Qwack.Excel.Next/Options/BlackFunctions.cs new file mode 100644 index 00000000..57ef1eca --- /dev/null +++ b/clients/Qwack.Excel.Next/Options/BlackFunctions.cs @@ -0,0 +1,113 @@ +using System; +using ExcelDna.Integration; +using Qwack.Excel.Services; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Transport.BasicTypes; + +namespace Qwack.Excel.Options +{ + public class BlackFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Returns option PV using the Black'76 formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(BlackPV))] + public static object BlackPV( + [ExcelArgument(Description = "Time-to-expiry")] double T, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger,() => + { + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.BlackFunctions.BlackPV(F, K, R, T, V, optType); + }); + } + + [ExcelFunction(Description = "Returns option delta using the Black'76 formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(BlackDelta))] + public static object BlackDelta( + [ExcelArgument(Description = "Time-to-expiry")] double T, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger,() => + { + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.BlackFunctions.BlackDelta(F, K, R, T, V, optType); + }); + } + + [ExcelFunction(Description = "Returns option gamma using the Black'76 formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(BlackGamma))] + public static object BlackGamma( + [ExcelArgument(Description = "Time-to-expiry")] double T, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V) + { + return ExcelHelper.Execute(_logger,() => + { + return Qwack.Options.BlackFunctions.BlackGamma(F, K, R, T, V); + }); + } + + [ExcelFunction(Description = "Returns option vega using the Black'76 formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(BlackVega))] + public static object BlackVega( + [ExcelArgument(Description = "Time-to-expiry")] double T, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V) + { + return ExcelHelper.Execute(_logger,() => + { + return Qwack.Options.BlackFunctions.BlackVega(F, K, R, T, V); + }); + } + + [ExcelFunction(Description = "Returns an implied volatility using the Black'76 formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(BlackImpliedVol))] + public static object BlackImpliedVol( + [ExcelArgument(Description = "Time-to-expiry")] double T, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Option Premium")] double PV, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger,() => + { + if (!Enum.TryParse(CP, out OptionType optType)) + { + return $"Could not parse call or put flag - {CP}"; + } + return Qwack.Options.BlackFunctions.BlackImpliedVol(F, K, R, T, PV, optType); + }); + } + + [ExcelFunction(Description = "Returns an absolute strike for a given delta and vol according to the Black'76 formula", Category = CategoryNames.Options, Name = CategoryNames.Options + "_" + nameof(AbsoluteStrikeFromDelta))] + public static object AbsoluteStrikeFromDelta( + [ExcelArgument(Description = "Time-to-expiry")] double T, + [ExcelArgument(Description = "Delta strike")] double DeltaK, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Volatility")] double Sigma, + [ExcelArgument(Description = "Discounting rate")] double R) + { + return ExcelHelper.Execute(_logger, () => + { + return Qwack.Options.BlackFunctions.AbsoluteStrikefromDeltaKAnalytic(F, DeltaK, R, T, Sigma); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Options/LMEFunctions.cs b/clients/Qwack.Excel.Next/Options/LMEFunctions.cs new file mode 100644 index 00000000..dc2cfd9a --- /dev/null +++ b/clients/Qwack.Excel.Next/Options/LMEFunctions.cs @@ -0,0 +1,116 @@ +using System; +using ExcelDna.Integration; +using Qwack.Excel.Services; +using Qwack.Dates; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Transport.BasicTypes; + +namespace Qwack.Excel.Options +{ + public class LMEFunctions + { + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Returns option PV using the LME-modified Black'76 formula", Category = "QOpt")] + public static object QOpt_LMEBlackPV( + [ExcelArgument(Description = "Today/Value date (origin)")] DateTime ValueDate, + [ExcelArgument(Description = "Expiry date (1st Wednesday)")] DateTime ExpiryDate, + [ExcelArgument(Description = "Delivery date (3rd Wednesday)")] DateTime DeliveryDate, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger,() => + { + if (!Enum.TryParse(CP, out OptionType optType)) + return $"Could not parse call or put flag - {CP}"; + + var tExpiry = DayCountBasis.Act_365F.CalculateYearFraction(ValueDate, ExpiryDate); + var tDelivery = DayCountBasis.Act_365F.CalculateYearFraction(ValueDate, DeliveryDate); + + return Qwack.Options.LMEFunctions.LMEBlackPV(F, K, R, tExpiry, tDelivery, V, optType); + }); + } + + [ExcelFunction(Description = "Returns option delta on forward basis using the LME-modified Black'76 formula", Category = "QOpt")] + public static object QOpt_LMEBlackDelta( + [ExcelArgument(Description = "Today/Value date (origin)")] DateTime ValueDate, + [ExcelArgument(Description = "Expiry date (1st Wednesday)")] DateTime ExpiryDate, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Volatility")] double V, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(CP, out OptionType optType)) + return $"Could not parse call or put flag - {CP}"; + + var tExpiry = DayCountBasis.Act_365F.CalculateYearFraction(ValueDate, ExpiryDate); + + return Qwack.Options.LMEFunctions.LMEBlackDelta(F, K, tExpiry, V, optType); + }); + } + + [ExcelFunction(Description = "Returns option gamma on forward basis using the LME-modified Black'76 formula", Category = "QOpt")] + public static object QOpt_LMEBlackGamma( + [ExcelArgument(Description = "Today/Value date (origin)")] DateTime ValueDate, + [ExcelArgument(Description = "Expiry date (1st Wednesday)")] DateTime ExpiryDate, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Volatility")] double V) + { + return ExcelHelper.Execute(_logger, () => + { + var tExpiry = DayCountBasis.Act_365F.CalculateYearFraction(ValueDate, ExpiryDate); + + return Qwack.Options.LMEFunctions.LMEBlackGamma(F, K, tExpiry, V); + }); + } + + [ExcelFunction(Description = "Returns option vega using the LME-modified Black'76 formula", Category = "QOpt")] + public static object QOpt_LMEBlackVega( + [ExcelArgument(Description = "Today/Value date (origin)")] DateTime ValueDate, + [ExcelArgument(Description = "Expiry date (1st Wednesday)")] DateTime ExpiryDate, + [ExcelArgument(Description = "Delivery date (3rd Wednesday)")] DateTime DeliveryDate, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Volatility")] double V) + { + return ExcelHelper.Execute(_logger, () => + { + var tExpiry = DayCountBasis.Act_365F.CalculateYearFraction(ValueDate, ExpiryDate); + var tDelivery = DayCountBasis.Act_365F.CalculateYearFraction(ValueDate, DeliveryDate); + + return Qwack.Options.LMEFunctions.LMEBlackVega(F, K, R, tExpiry, tDelivery, V); + }); + } + + [ExcelFunction(Description = "Returns an implied volatility using the LME-modified Black'76 formula", Category = "QOpt")] + public static object QOpt_LMEBlackImpliedVol( + [ExcelArgument(Description = "Today/Value date (origin)")] DateTime ValueDate, + [ExcelArgument(Description = "Expiry date (1st Wednesday)")] DateTime ExpiryDate, + [ExcelArgument(Description = "Delivery date (3rd Wednesday)")] DateTime DeliveryDate, + [ExcelArgument(Description = "Strike")] double K, + [ExcelArgument(Description = "Forward")] double F, + [ExcelArgument(Description = "Discounting rate")] double R, + [ExcelArgument(Description = "Option Premium")] double PV, + [ExcelArgument(Description = "Call or Put")] string CP) + { + return ExcelHelper.Execute(_logger, () => + { + if (!Enum.TryParse(CP, out var optType)) + return $"Could not parse call or put flag - {CP}"; + + var tExpiry = DayCountBasis.Act_365F.CalculateYearFraction(ValueDate, ExpiryDate); + var tDelivery = DayCountBasis.Act_365F.CalculateYearFraction(ValueDate, DeliveryDate); + + return Qwack.Options.LMEFunctions.LMEBlackImpliedVol(F, K, R, tExpiry, tDelivery, PV, optType); + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Options/VolSurfaceFunctions.cs b/clients/Qwack.Excel.Next/Options/VolSurfaceFunctions.cs new file mode 100644 index 00000000..68fb337d --- /dev/null +++ b/clients/Qwack.Excel.Next/Options/VolSurfaceFunctions.cs @@ -0,0 +1,569 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ExcelDna.Integration; +using Qwack.Options; +using Qwack.Excel.Services; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Qwack.Options.VolSurfaces; +using Qwack.Excel.Utils; +using Qwack.Core.Basic; +using Qwack.Math; +using Qwack.Math.Interpolation; +using Qwack.Core.Curves; +using Qwack.Dates; +using Qwack.Core.Models; +using Qwack.Excel.Curves; +using Qwack.Core.Cubes; +using Qwack.Transport.BasicTypes; +using Qwack.Transport.TransportObjects.MarketData.VolSurfaces; +using Newtonsoft.Json; + +namespace Qwack.Excel.Options +{ + public class VolSurfaceFunctions + { + private const bool Parallel = false; + private static readonly ILogger _logger = ContainerStores.GlobalContainer.GetService()?.CreateLogger(); + + [ExcelFunction(Description = "Creates a constant vol surface object", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(CreateConstantVolSurface), IsThreadSafe = Parallel)] + public static object CreateConstantVolSurface( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "Volatility")] double Volatility, + [ExcelArgument(Description = "Currency - default USD")] object Currency) + { + return ExcelHelper.Execute(_logger, () => + { + var ccyStr = Currency.OptionalExcel("USD"); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ccyStr, out var ccyCal); + + var surface = new ConstantVolSurface(OriginDate, Volatility) + { + Currency = ContainerStores.CurrencyProvider[ccyStr], + Name = AssetId ?? ObjectName, + AssetId = AssetId ?? ObjectName, + }; + return ExcelHelper.PushToCache(surface, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a grid vol surface object", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(CreateGridVolSurface), IsThreadSafe = Parallel)] + public static object CreateGridVolSurface( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "Strikes")] double[] Strikes, + [ExcelArgument(Description = "Expiries")] double[] Expiries, + [ExcelArgument(Description = "Volatilities")] double[,] Volatilities, + [ExcelArgument(Description = "Stike Type - default Absolute")] object StrikeType, + [ExcelArgument(Description = "Stike Interpolation - default Linear")] object StrikeInterpolation, + [ExcelArgument(Description = "Time Interpolation - default Linear")] object TimeInterpolation, + [ExcelArgument(Description = "Time basis - default ACT365F")] object TimeBasis, + [ExcelArgument(Description = "Pillar labels (optional)")] object PillarLabels, + [ExcelArgument(Description = "Currency - default USD")] object Currency, + [ExcelArgument(Description = "Override spot lag - default none")] object SpotLag) + { + return ExcelHelper.Execute(_logger, () => + { + var labels = (PillarLabels is ExcelMissing) ? null : ((object[,])PillarLabels).ObjectRangeToVector(); + + var ccyStr = Currency.OptionalExcel("USD"); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ccyStr, out var ccyCal); + + + var stikeType = StrikeType.OptionalExcel("Absolute"); + var strikeInterpType = StrikeInterpolation.OptionalExcel("Linear"); + var timeInterpType = TimeInterpolation.OptionalExcel("LinearInVariance"); + var timeBasis = TimeBasis.OptionalExcel("ACT365F"); + + var expiries = ExcelHelper.ToDateTimeArray(Expiries); + + if (!Enum.TryParse(stikeType, out StrikeType sType)) + return $"Could not parse strike type - {stikeType}"; + + if (!Enum.TryParse(strikeInterpType, out Interpolator1DType siType)) + return $"Could not parse strike interpolator type - {strikeInterpType}"; + + if (!Enum.TryParse(timeInterpType, out Interpolator1DType tiType)) + return $"Could not parse time interpolator type - {timeInterpType}"; + + if (!Enum.TryParse(timeBasis, out DayCountBasis basis)) + return $"Could not parse time basis type - {timeBasis}"; + + var surface = new GridVolSurface(OriginDate, Strikes, expiries, Volatilities.SquareToJagged(), sType, siType, tiType, basis, labels) + { + Currency = ContainerStores.CurrencyProvider[ccyStr], + Name = AssetId ?? ObjectName, + AssetId = AssetId ?? ObjectName, + }; + if (SpotLag != null && !(SpotLag is ExcelMissing)) + { + surface.OverrideSpotLag = new Frequency((string)SpotLag); + } + return ExcelHelper.PushToCache(surface, ObjectName); + }); + } + + + [ExcelFunction(Description = "Creates a grid vol surface object from RR/BF qoutes", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(CreateRiskyFlyVolSurface), IsThreadSafe = Parallel)] + public static object CreateRiskyFlyVolSurface( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "Wing deltas")] double[] WingDeltas, + [ExcelArgument(Description = "Expiries")] double[] Expiries, + [ExcelArgument(Description = "ATM Volatilities")] double[] ATMVols, + [ExcelArgument(Description = "Risk Reversal quotes")] double[,] Riskies, + [ExcelArgument(Description = "Butterfly quotes")] double[,] Flies, + [ExcelArgument(Description = "Forwards or price curve object")] object FwdsOrCurve, + [ExcelArgument(Description = "ATM vol type - default zero-delta straddle")] object ATMType, + [ExcelArgument(Description = "Wing quote type - Simple or Market")] object WingType, + [ExcelArgument(Description = "Stike Interpolation - default CubicSpline")] object StrikeInterpolation, + [ExcelArgument(Description = "Time Interpolation - default LinearInVariance")] object TimeInterpolation, + [ExcelArgument(Description = "Pillar labels (optional)")] object PillarLabels, + [ExcelArgument(Description = "Currency - default USD")] object Currency, + [ExcelArgument(Description = "Override spot lag - default none")] object SpotLag) + { + return ExcelHelper.Execute(_logger, () => + { + var labels = (PillarLabels is ExcelMissing) ? null : ((object[,])PillarLabels).ObjectRangeToVector(); + + var ccyStr = Currency.OptionalExcel("USD"); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ccyStr, out var ccyCal); + + var atmType = ATMType.OptionalExcel("ZeroDeltaStraddle"); + var wingType = WingType.OptionalExcel("Simple"); + var strikeInterpType = StrikeInterpolation.OptionalExcel("CubicSpline"); + var timeInterpType = TimeInterpolation.OptionalExcel("LinearInVariance"); + var expiries = ExcelHelper.ToDateTimeArray(Expiries); + var rr = Riskies.SquareToJagged(); + var bf = Flies.SquareToJagged(); + + if (!Enum.TryParse(wingType, out WingQuoteType wType)) + return $"Could not parse wing quote type - {wingType}"; + + if (!Enum.TryParse(atmType, out AtmVolType aType)) + return $"Could not parse atm quote type - {atmType}"; + + if (!Enum.TryParse(strikeInterpType, out Interpolator1DType siType)) + return $"Could not parse strike interpolator type - {strikeInterpType}"; + + if (!Enum.TryParse(timeInterpType, out Interpolator1DType tiType)) + return $"Could not parse time interpolator type - {timeInterpType}"; + + double[] fwds = null; + if(FwdsOrCurve is ExcelMissing) + { + fwds = expiries.Select(x => 100.0).ToArray(); + } + else if (FwdsOrCurve is double) + { + fwds = new double[] { (double)FwdsOrCurve }; + } + else if (FwdsOrCurve is string) + { + if (!ContainerStores.GetObjectCache().TryGetObject(FwdsOrCurve as string, out var curve)) + { + return $"Could not find fwd curve with name - {FwdsOrCurve as string}"; + } + fwds = expiries.Select(e => curve.Value.GetPriceForDate(e)).ToArray(); + } + else + { + fwds = ((object[,])FwdsOrCurve).ObjectRangeToVector(); + } + + var surface = new RiskyFlySurface(OriginDate, ATMVols, expiries, WingDeltas, rr, bf, fwds, wType, aType, siType, tiType, labels) + { + Currency = ContainerStores.CurrencyProvider[ccyStr], + Name = AssetId ?? ObjectName, + AssetId = AssetId ?? ObjectName, + }; + if(SpotLag!=null && !(SpotLag is ExcelMissing)) + { + surface.OverrideSpotLag = new Frequency((string)SpotLag); + } + return ExcelHelper.PushToCache(surface, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates a SABR vol surface object from RR/BF qoutes", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(CreateSABRVolSurfaceFromRiskyFly), IsThreadSafe = Parallel)] + public static object CreateSABRVolSurfaceFromRiskyFly( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Origin date")] DateTime OriginDate, + [ExcelArgument(Description = "Wing deltas")] double[] WingDeltas, + [ExcelArgument(Description = "Expiries")] double[] Expiries, + [ExcelArgument(Description = "ATM Volatilities")] double[] ATMVols, + [ExcelArgument(Description = "Risk Reversal quotes")] double[,] Riskies, + [ExcelArgument(Description = "Butterfly quotes")] double[,] Flies, + [ExcelArgument(Description = "Forwards or price curve object")] object FwdsOrCurve, + [ExcelArgument(Description = "ATM vol type - default zero-delta straddle")] object ATMType, + [ExcelArgument(Description = "Wing quote type - Simple or Market")] object WingType, + [ExcelArgument(Description = "Time Interpolation - default LinearInVariance")] object TimeInterpolation, + [ExcelArgument(Description = "Pillar labels (optional)")] object PillarLabels, + [ExcelArgument(Description = "Currency - default USD")] object Currency) + { + return ExcelHelper.Execute(_logger, () => + { + var labels = (PillarLabels is ExcelMissing) ? null : ((object[,])PillarLabels).ObjectRangeToVector(); + + var ccyStr = Currency.OptionalExcel("USD"); + ContainerStores.SessionContainer.GetService().Collection.TryGetCalendar(ccyStr, out var ccyCal); + + var atmType = ATMType.OptionalExcel("ZeroDeltaStraddle"); + var wingType = WingType.OptionalExcel("Simple"); + var timeInterpType = TimeInterpolation.OptionalExcel("LinearInVariance"); + var expiries = ExcelHelper.ToDateTimeArray(Expiries); + var rr = Riskies.SquareToJagged(); + var bf = Flies.SquareToJagged(); + + if (!Enum.TryParse(wingType, out WingQuoteType wType)) + return $"Could not parse wing quote type - {wingType}"; + + if (!Enum.TryParse(atmType, out AtmVolType aType)) + return $"Could not parse atm quote type - {atmType}"; + + if (!Enum.TryParse(timeInterpType, out Interpolator1DType tiType)) + return $"Could not parse time interpolator type - {timeInterpType}"; + + double[] fwds = null; + if (FwdsOrCurve is double) + { + fwds = new double[] { (double)FwdsOrCurve }; + } + else if (FwdsOrCurve is string) + { + if (!ContainerStores.GetObjectCache().TryGetObject(FwdsOrCurve as string, out var curve)) + { + return $"Could not find fwd curve with name - {FwdsOrCurve as string}"; + } + fwds = expiries.Select(e => curve.Value.GetPriceForDate(e)).ToArray(); + } + else + { + fwds = ((object[,])FwdsOrCurve).ObjectRangeToVector(); + } + + var surface = new SabrVolSurface(OriginDate, ATMVols, expiries, WingDeltas, rr, bf, fwds, wType, aType, tiType, labels) + { + Currency = ContainerStores.CurrencyProvider[ccyStr], + Name = AssetId ?? ObjectName, + AssetId = AssetId ?? ObjectName, + }; + return ExcelHelper.PushToCache(surface, ObjectName); + }); + } + + [ExcelFunction(Description = "Creates an inverse pair fx vol surface", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(CreateInvertedFxSurface), IsThreadSafe = Parallel)] + public static object CreateInvertedFxSurface( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Input surface name")] string InputSurface) + { + return ExcelHelper.Execute(_logger, () => + { + + if (ContainerStores.GetObjectCache().TryGetObject(InputSurface, out var volSurface) && volSurface.Value is IATMVolSurface atmSurface) + { + + return ExcelHelper.PushToCache(new InverseFxSurface(ObjectName, atmSurface, ContainerStores.CurrencyProvider), ObjectName); + } + + return $"Vol surface {InputSurface} not found in cache or could not be case to ATM Surface"; + }); + } + + [ExcelFunction(Description = "Gets a volatility for a delta strike from a vol surface object", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(GetVolForDeltaStrike), IsThreadSafe = Parallel)] + public static object GetVolForDeltaStrike( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Delta Strike")] double DeltaStrike, + [ExcelArgument(Description = "Expiry")] DateTime Expiry, + [ExcelArgument(Description = "Forward")] double Forward + ) + { + return ExcelHelper.Execute(_logger, () => + { + + if (ContainerStores.GetObjectCache().TryGetObject(ObjectName, out var volSurface)) + { + return volSurface.Value.GetVolForDeltaStrike(DeltaStrike, Expiry, Forward); + } + + return $"Vol surface {ObjectName} not found in cache"; + }); + } + + [ExcelFunction(Description = "Gets a volatility for an absolute strike from a vol surface object", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(GetVolForAbsoluteStrike), IsThreadSafe = Parallel)] + public static object GetVolForAbsoluteStrike( + [ExcelArgument(Description = "Object name")] string ObjectName, + [ExcelArgument(Description = "Absolute Strike")] double Strike, + [ExcelArgument(Description = "Expiry")] DateTime Expiry, + [ExcelArgument(Description = "Forward")] double Forward + ) + { + return ExcelHelper.Execute(_logger, () => + { + + if (ContainerStores.GetObjectCache().TryGetObject(ObjectName, out var volSurface)) + { + return volSurface.Value.GetVolForAbsoluteStrike(Strike, Expiry, Forward); + } + + return $"Vol surface {ObjectName} not found in cache"; + }); + } + + [ExcelFunction(Description = "Creates a CDF from a vol surface", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(GenerateCDF), IsThreadSafe = Parallel)] + public static object GenerateCDF( + [ExcelArgument(Description = "Output interpolator name")] string ObjectName, + [ExcelArgument(Description = "Volsurface name")] string VolSurface, + [ExcelArgument(Description = "Expiry date")] DateTime ExpiryDate, + [ExcelArgument(Description = "Forward")] double Forward, + [ExcelArgument(Description = "Number of samples")] int NumberOfSamples) + { + return ExcelHelper.Execute(_logger, () => + { + + if (ContainerStores.GetObjectCache().TryGetObject(VolSurface, out var volSurface)) + { + var interpolator = volSurface.Value.GenerateCDF(NumberOfSamples, ExpiryDate, Forward); + return ExcelHelper.PushToCache(interpolator, ObjectName); + } + + return $"Vol surface {VolSurface} not found in cache"; + }); + } + + [ExcelFunction(Description = "Creates a PDF from a vol surface", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(GeneratePDF), IsThreadSafe = Parallel)] + public static object GeneratePDF( + [ExcelArgument(Description = "Output interpolator name")] string ObjectName, + [ExcelArgument(Description = "Volsurface name")] string VolSurface, + [ExcelArgument(Description = "Expiry date")] DateTime ExpiryDate, + [ExcelArgument(Description = "Forward")] double Forward, + [ExcelArgument(Description = "Number of samples")] int NumberOfSamples) + { + return ExcelHelper.Execute(_logger, () => + { + + if (ContainerStores.GetObjectCache().TryGetObject(VolSurface, out var volSurface)) + { + var interpolator = volSurface.Value.GeneratePDF(NumberOfSamples, ExpiryDate, Forward); + return ExcelHelper.PushToCache(interpolator, ObjectName); + } + + return $"Vol surface {VolSurface} not found in cache"; + }); + } + + [ExcelFunction(Description = "Creates a PDF from a smile interpolator", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(GeneratePDFFromInterpolator), IsThreadSafe = Parallel)] + public static object GeneratePDFFromInterpolator( + [ExcelArgument(Description = "Output interpolator name")] string ObjectName, + [ExcelArgument(Description = "Input interpolator name")] string VolInterpolator, + [ExcelArgument(Description = "Expiry as year fraction")] double ExpiryYearFraction, + [ExcelArgument(Description = "Forward")] double Forward, + [ExcelArgument(Description = "Number of samples")] int NumberOfSamples) + { + return ExcelHelper.Execute(_logger, () => + { + + if (ContainerStores.GetObjectCache().TryGetObject(VolInterpolator, out var smile)) + { + var interpolator = smile.Value.GeneratePDF(NumberOfSamples, ExpiryYearFraction, Forward); + return ExcelHelper.PushToCache(interpolator, ObjectName); + } + + return $"Interpolator {VolInterpolator} not found in cache"; + }); + } + + [ExcelFunction(Description = "Creates a CDF from a smile interpolator", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(GenerateCDFFromInterpolator), IsThreadSafe = Parallel)] + public static object GenerateCDFFromInterpolator( + [ExcelArgument(Description = "Output interpolator name")] string ObjectName, + [ExcelArgument(Description = "Input interpolator name")] string VolInterpolator, + [ExcelArgument(Description = "Expiry as year fraction")] double ExpiryYearFraction, + [ExcelArgument(Description = "Forward")] double Forward, + [ExcelArgument(Description = "Number of samples")] int NumberOfSamples) + { + return ExcelHelper.Execute(_logger, () => + { + + if (ContainerStores.GetObjectCache().TryGetObject(VolInterpolator, out var smile)) + { + var interpolator = smile.Value.GenerateCDF(NumberOfSamples, ExpiryYearFraction, Forward); + return ExcelHelper.PushToCache(interpolator, ObjectName); + } + + return $"Interpolator {VolInterpolator} not found in cache"; + }); + } + + [ExcelFunction(Description = "Creates a composite smile from a vol surface and an fx vol surface", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(GenerateCompoSmile), IsThreadSafe = Parallel)] + public static object GenerateCompoSmile( + [ExcelArgument(Description = "Output interpolator name")] string ObjectName, + [ExcelArgument(Description = "Volsurface name")] string VolSurface, + [ExcelArgument(Description = "Fx Volsurface name")] string FxVolSurface, + [ExcelArgument(Description = "Expiry date")] DateTime ExpiryDate, + [ExcelArgument(Description = "Forward")] double Forward, + [ExcelArgument(Description = "Fx Forward")] double FxForward, + [ExcelArgument(Description = "Correlation")] double Correlation, + [ExcelArgument(Description = "Number of samples")] int NumberOfSamples) + { + return ExcelHelper.Execute(_logger, () => + { + + if (ContainerStores.GetObjectCache().TryGetObject(VolSurface, out var volSurface)) + { + if (ContainerStores.GetObjectCache().TryGetObject(FxVolSurface, out var volSurfaceFx)) + { + var interpolator = volSurface.Value.GenerateCompositeSmile(volSurfaceFx.Value, NumberOfSamples, ExpiryDate, Forward, FxForward, Correlation); + return ExcelHelper.PushToCache(interpolator, ObjectName); + } + else + return $"Fx vol surface {FxVolSurface} not found in cache"; + } + else + return $"Vol surface {VolSurface} not found in cache"; + }); + } + + [ExcelFunction(Description = "Creates a composite surface from a vol surface and an fx vol surface", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(GenerateCompoSurface), IsThreadSafe = Parallel)] + public static object GenerateCompoSurface( + [ExcelArgument(Description = "Output surface name")] string ObjectName, + [ExcelArgument(Description = "Asset-fx model name")] string AssetFxModel, + [ExcelArgument(Description = "AssetId")] string AssetId, + [ExcelArgument(Description = "FxPair")] string FxPair, + [ExcelArgument(Description = "Correlation")] double Correlation, + [ExcelArgument(Description = "Number of samples")] int NumberOfSamples) + { + return ExcelHelper.Execute(_logger, () => + { + + if (ContainerStores.GetObjectCache().TryGetObject(AssetFxModel, out var model)) + { + if (!model.Value.FundingModel.VolSurfaces.ContainsKey(FxPair)) + throw new Exception($"No vol surface found in model for fx pair {FxPair}"); + model.Value.GetVolSurface(AssetId); + + var surface = model.Value.GenerateCompositeSurface(AssetId, FxPair, NumberOfSamples, Correlation, true); + return ExcelHelper.PushToCache(surface, ObjectName); + } + else + return $"Model {AssetFxModel} not found in cache"; + }); + } + + [ExcelFunction(Description = "Turns a risky/fly surface into a cube of quotes", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(SurfaceToCube), IsThreadSafe = Parallel)] + public static object SurfaceToCube( + [ExcelArgument(Description = "Surface name")] string SurfaceName, + [ExcelArgument(Description = "Output cube name")] string CubeName) + { + return ExcelHelper.Execute(_logger, () => + { + var surface = ContainerStores.GetObjectCache().GetObjectOrThrow(SurfaceName, $"Vol surface {SurfaceName} not found"); + var rrbf = (RiskyFlySurface)surface.Value; + var cube = rrbf.ToCube(); + return RiskFunctions.PushCubeToCache(cube, CubeName); + }); + } + + [ExcelFunction(Description = "Reconstructs a risky/fly surface from a cube of quotes", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(SurfaceFromCube), IsThreadSafe = Parallel)] + public static object SurfaceFromCube( + [ExcelArgument(Description = "Output Surface name")] string SurfaceName, + [ExcelArgument(Description = "Cube name")] string CubeName, + [ExcelArgument(Description = "Build date")] DateTime BuildDate, + [ExcelArgument(Description = "Currency")] string Currency, + [ExcelArgument(Description = "Asset Id")] string AssetId, + [ExcelArgument(Description = "Stike Interpolation - default GaussianKernel")] object StrikeInterpolation, + [ExcelArgument(Description = "Time Interpolation - default LinearInVariance")] object TimeInterpolation) + { + return ExcelHelper.Execute(_logger, () => + { + var cube = ContainerStores.GetObjectCache().GetObjectOrThrow(CubeName, $"Cube {CubeName} not found"); + var strikeInterpType = StrikeInterpolation.OptionalExcel("GaussianKernel"); + var timeInterpType = TimeInterpolation.OptionalExcel("LinearInVariance"); + + if (!Enum.TryParse(strikeInterpType, out Interpolator1DType siType)) + return $"Could not parse strike interpolator type - {strikeInterpType}"; + if (!Enum.TryParse(timeInterpType, out Interpolator1DType tiType)) + return $"Could not parse time interpolator type - {timeInterpType}"; + + var rrbf = RiskyFlySurface.FromCube(cube.Value, BuildDate, siType, tiType); + rrbf.AssetId = AssetId; + rrbf.Name = AssetId; + if (!string.IsNullOrWhiteSpace(Currency)) + rrbf.Currency = ContainerStores.CurrencyProvider.GetCurrency(Currency); + + return ExcelHelper.PushToCache(rrbf, SurfaceName); + }); + } + + [ExcelFunction(Description = "Extracts quotes from a risky/fly surface", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(SurfaceToQuotes), IsThreadSafe = Parallel)] + public static object SurfaceToQuotes( + [ExcelArgument(Description = "Surface name")] string SurfaceName) + { + return ExcelHelper.Execute(_logger, () => + { + var surface = ContainerStores.GetObjectCache().GetObjectOrThrow(SurfaceName, $"Vol surface {SurfaceName} not found"); + var rrbf = (RiskyFlySurface)surface.Value; + return rrbf.DisplayQuotes(); + }); + } + + [ExcelFunction(Description = "Extracts TO from surface object", Category = CategoryNames.Volatility, + Name = CategoryNames.Volatility + "_" + nameof(SurfaceToTransportObject), IsThreadSafe = Parallel)] + public static object SurfaceToTransportObject( + [ExcelArgument(Description = "Surface name")] string SurfaceName, + [ExcelArgument(Description = "Transport Object filename")] string TOFileName) + { + return ExcelHelper.Execute(_logger, () => + { + var surface = ContainerStores.GetObjectCache().GetObjectOrThrow(SurfaceName, $"Vol surface {SurfaceName} not found"); + var jsonString = string.Empty; + + if(surface.Value is RiskyFlySurface rrbf) + { + var to = rrbf.GetTransportObject(); + jsonString = JsonConvert.SerializeObject(to); + } + else if (surface.Value is GridVolSurface gr) + { + var to = gr.GetTransportObject(); + jsonString = JsonConvert.SerializeObject(to); + } + else if (surface.Value is ConstantVolSurface cv) + { + var to = cv.GetTransportObject(); + jsonString = JsonConvert.SerializeObject(to); + } + + if(jsonString != string.Empty) + { + System.IO.File.WriteAllText(TOFileName, jsonString); + return $"Wrote {jsonString.Length} chars to {TOFileName}"; + } + + return "Unable to convert surface object"; + }); + } + } +} diff --git a/clients/Qwack.Excel.Next/Properties/launchSettings.json b/clients/Qwack.Excel.Next/Properties/launchSettings.json new file mode 100644 index 00000000..0f706442 --- /dev/null +++ b/clients/Qwack.Excel.Next/Properties/launchSettings.json @@ -0,0 +1,13 @@ +{ + "profiles": { + "Excel64": { + "executablePath": "C:\\Program Files\\Microsoft Office\\root\\Office16\\EXCEL.EXE", + "commandLineArgs": "QwackDna64.xll" + }, + "Excel": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Microsoft Office\\root\\Office16\\EXCEL.EXE", + "commandLineArgs": "QwackDna64.xll" + } + } +} \ No newline at end of file diff --git a/clients/Qwack.Excel.Next/Qwack.Excel.Next.csproj b/clients/Qwack.Excel.Next/Qwack.Excel.Next.csproj new file mode 100644 index 00000000..bb1fbc13 --- /dev/null +++ b/clients/Qwack.Excel.Next/Qwack.Excel.Next.csproj @@ -0,0 +1,49 @@ + + + + net6.0-windows + enable + enable + true + false + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/clients/Qwack.Excel.Next/QwackDna.dna b/clients/Qwack.Excel.Next/QwackDna.dna new file mode 100644 index 00000000..bc194803 --- /dev/null +++ b/clients/Qwack.Excel.Next/QwackDna.dna @@ -0,0 +1,20 @@ + + + + + + + + +