Rohtak.java

package org.drip.sample.securitysuite;

import org.drip.analytics.cashflow.CompositePeriod;
import org.drip.analytics.date.*;
import org.drip.numerical.common.FormatUtil;
import org.drip.numerical.linearalgebra.Matrix;
import org.drip.product.creator.BondBuilder;
import org.drip.product.credit.BondComponent;
import org.drip.service.env.EnvManager;
import org.drip.service.scenario.*;

/*
 * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 */

/*!
 * Copyright (C) 2018 Lakshmi Krishnamurthy
 * Copyright (C) 2017 Lakshmi Krishnamurthy
 * 
 *  This file is part of DRIP, a free-software/open-source library for buy/side financial/trading model
 *  	libraries targeting analysts and developers
 *  	https://lakshmidrip.github.io/DRIP/
 *  
 *  DRIP is composed of four main libraries:
 *  
 *  - DRIP Fixed Income - https://lakshmidrip.github.io/DRIP-Fixed-Income/
 *  - DRIP Asset Allocation - https://lakshmidrip.github.io/DRIP-Asset-Allocation/
 *  - DRIP Numerical Optimizer - https://lakshmidrip.github.io/DRIP-Numerical-Optimizer/
 *  - DRIP Statistical Learning - https://lakshmidrip.github.io/DRIP-Statistical-Learning/
 * 
 *  - DRIP Fixed Income: Library for Instrument/Trading Conventions, Treasury Futures/Options,
 *  	Funding/Forward/Overnight Curves, Multi-Curve Construction/Valuation, Collateral Valuation and XVA
 *  	Metric Generation, Calibration and Hedge Attributions, Statistical Curve Construction, Bond RV
 *  	Metrics, Stochastic Evolution and Option Pricing, Interest Rate Dynamics and Option Pricing, LMM
 *  	Extensions/Calibrations/Greeks, Algorithmic Differentiation, and Asset Backed Models and Analytics.
 * 
 *  - DRIP Asset Allocation: Library for model libraries for MPT framework, Black Litterman Strategy
 *  	Incorporator, Holdings Constraint, and Transaction Costs.
 * 
 *  - DRIP Numerical Optimizer: Library for Numerical Optimization and Spline Functionality.
 * 
 *  - DRIP Statistical Learning: Library for Statistical Evaluation and Machine Learning.
 * 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *   	you may not use this file except in compliance with the License.
 *   
 *  You may obtain a copy of the License at
 *  	http://www.apache.org/licenses/LICENSE-2.0
 *  
 *  Unless required by applicable law or agreed to in writing, software
 *  	distributed under the License is distributed on an "AS IS" BASIS,
 *  	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  
 *  See the License for the specific language governing permissions and
 *  	limitations under the License.
 */

/**
 * Rohtak generates the Full Suite of Replication Metrics for Bond Rohtak.
 * 
 * @author Lakshmi Krishnamurthy
 */

public class Rohtak {

	public static final void main (
		final String[] astArgs)
		throws Exception
	{
		EnvManager.InitEnv ("");

		JulianDate dtSpot = DateUtil.CreateFromYMD (
			2017,
			DateUtil.OCTOBER,
			5
		);

		String[] astrDepositTenor = new String[] {
			"2D"
		};

		double[] adblDepositQuote = new double[] {
			0.0130411 // 2D
		};

		double[] adblFuturesQuote = new double[] {
			0.01345,	// 98.655
			0.01470,	// 98.530
			0.01575,	// 98.425
			0.01660,	// 98.340
			0.01745,    // 98.255
			0.01845     // 98.155
		};

		String[] astrFixFloatTenor = new String[] {
			"02Y",
			"03Y",
			"04Y",
			"05Y",
			"06Y",
			"07Y",
			"08Y",
			"09Y",
			"10Y",
			"11Y",
			"12Y",
			"15Y",
			"20Y",
			"25Y",
			"30Y",
			"40Y",
			"50Y"
		};

		String[] astrGovvieTenor = new String[] {
			"1Y",
			"2Y",
			"3Y",
			"5Y",
			"7Y",
			"10Y",
			"20Y",
			"30Y"
		};

		double[] adblFixFloatQuote = new double[] {
			0.016410, //  2Y
			0.017863, //  3Y
			0.019030, //  4Y
			0.020035, //  5Y
			0.020902, //  6Y
			0.021660, //  7Y
			0.022307, //  8Y
			0.022879, //  9Y
			0.023363, // 10Y
			0.023820, // 11Y
			0.024172, // 12Y
			0.024934, // 15Y
			0.025581, // 20Y
			0.025906, // 25Y
			0.025973, // 30Y
			0.025838, // 40Y
			0.025560  // 50Y
		};

		double[] adblGovvieYield = new double[] {
			0.01219, //  1Y
			0.01391, //  2Y
			0.01590, //  3Y
			0.01937, //  5Y
			0.02200, //  7Y
			0.02378, // 10Y
			0.02677, // 20Y
			0.02927  // 30Y
		};

		String[] astrCreditTenor = new String[] {
			"06M",
			"01Y",
			"02Y",
			"03Y",
			"04Y",
			"05Y",
			"07Y",
			"10Y"
		};

		double[] adblCreditQuote = new double[] {
			 60.,	//  6M
			 68.,	//  1Y
			 88.,	//  2Y
			102.,	//  3Y
			121.,	//  4Y
			138.,	//  5Y
			168.,	//  7Y
			188.	// 10Y
		};

		double dblFX = 1.;
		int iSettleLag = 3;
		int iCouponFreq = 12;
		String strName = "Rohtak";
		double dblCleanPrice = 0.95;
		double dblIssuePrice = 1.;
		String strCurrency = "USD";
		double dblSpreadBump = 20.;
		double dblCouponRate = 0.03; 
		String strTreasuryCode = "UST";
		String strCouponDayCount = "30/360";
		double dblSpreadDurationMultiplier = 5.;

		org.drip.analytics.date.JulianDate[] adtPeriodEnd = new org.drip.analytics.date.JulianDate[] {
			DateUtil.CreateFromYMD (2017, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2017, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2017, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2018, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2019, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2020, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2021, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2022, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2023, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2024, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2025, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2026, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2027, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2028, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2029, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2030, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2031, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2032, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2033, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2034, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2035, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2036, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2037, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2038, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2039, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2040, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2041, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2042, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2043, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2044, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2045, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2046, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2047, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2048, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2049, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2050, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2051, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2052, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2053, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2054, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2055, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2056, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.NOVEMBER , 25),
		};

		double[] adblPrincipalPayDown = new double[] {
			130411.55,
			122346.11,
			121579.99,
			117575.45,
			107315.52,
			108813.62,
			104230.30,
			102245.99,
			98857.56,
			96999.28,
			91933.96,
			95184.27,
			92372.68,
			88418.96,
			88710.38,
			87784.78,
			84946.10,
			87232.08,
			83206.60,
			79412.82,
			83715.52,
			80807.88,
			78279.06,
			79486.27,
			77842.52,
			76486.32,
			76115.52,
			74706.19,
			77226.03,
			77509.13,
			73034.84,
			76467.06,
			75353.36,
			72857.79,
			75605.48,
			73084.96,
			72556.97,
			73603.29,
			69820.19,
			73960.65,
			70710.70,
			72559.73,
			68778.99,
			70625.39,
			68349.45,
			67321.10,
			67270.43,
			64072.74,
			67370.20,
			62081.57,
			62004.95,
			62855.15,
			59203.99,
			60997.02,
			57061.28,
			57057.51,
			52628.47,
			56255.69,
			52461.59,
			50436.91,
			51792.68,
			49442.95,
			47524.48,
			49390.16,
			44864.91,
			48248.13,
			46629.38,
			44795.46,
			42090.65,
			44008.71,
			41777.21,
			41080.47,
			41039.85,
			37778.75,
			40337.50,
			38822.78,
			36255.38,
			39036.16,
			35859.53,
			33322.52,
			36938.08,
			34428.59,
			32145.91,
			33247.54,
			32813.47,
			31392.73,
			30820.02,
			29202.45,
			31156.00,
			31419.94,
			28373.74,
			26798.66,
			28761.38,
			27388.34,
			26040.55,
			25332.19,
			24002.35,
			25957.06,
			23799.16,
			23306.72,
			23460.28,
			24605.90,
			20041.59,
			22825.96,
			21536.18,
			19445.50,
			21263.23,
			19174.31,
			18731.94,
			19088.98,
			16208.27,
			19810.31,
			16958.29,
			18943.89,
			15142.71,
			17135.74,
			15104.48,
			14699.57,
			15090.12,
			12273.32,
			15880.82,
			12269.89,
			12684.23,
			13888.98,
			11897.21,
			11507.22,
			12599.25,
			11423.22,
			9453.62,
			11484.94,
			9524.27,
			9158.39,
			9592.68,
			6847.96,
			9671.66,
			8525.08,
			6587.88,
			9415.97,
			7487.79,
			7147.51,
			6028.72,
			6485.87,
			3778.28,
			6614.97,
			5498.98,
			3593.00,
			4854.29,
			4536.92,
			3342.10,
			5404.86,
			2730.30,
			845.60,
			4493.89,
			2617.77,
			882.82,
			2166.63,
			1885.00,
			804.22,
			514.67,
			0.00,
			959.61,
			2031.31,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			16368032.97,
		};

		double[] adblCouponAmount = new double[] {
			30408.13,
			33261.02,
			29074.45,
			29917.75,
			38614.58,
			33628.17,
			35856.81,
			35690.73,
			36712.08,
			35370.31,
			38737.33,
			33900.30,
			34917.61,
			37088.46,
			34629.55,
			34488.21,
			35493.28,
			31932.12,
			35209.80,
			37335.57,
			31560.57,
			33681.51,
			35789.60,
			33428.03,
			33301.38,
			34283.26,
			34157.33,
			35129.82,
			31721.33,
			31602.39,
			35825.49,
			31370.52,
			32330.42,
			34357.72,
			31024.46,
			33039.60,
			32919.27,
			31741.75,
			34786.92,
			29412.35,
			32441.90,
			29197.21,
			33244.92,
			30022.27,
			31976.49,
			31863.96,
			30728.82,
			33683.80,
			28484.91,
			32439.69,
			31323.73,
			29207.35,
			31118.16,
			28018.68,
			30920.25,
			29831.91,
			32715.10,
			27680.00,
			30553.09,
			31449.51,
			28423.44,
			30298.40,
			31191.74,
			28194.31,
			31996.62,
			27081.93,
			27974.83,
			28865.18,
			30713.39,
			27769.18,
			29611.84,
			29543.06,
			28524.60,
			31305.13,
			27452.38,
			28334.75,
			30157.75,
			26334.11,
			29091.35,
			30905.37,
			26173.18,
			27983.84,
			29790.91,
			27877.76,
			27824.79,
			28698.26,
			28646.57,
			29518.27,
			26705.96,
			25738.73,
			28444.72,
			29314.07,
			26524.60,
			27393.41,
			28261.43,
			28218.56,
			29085.78,
			26322.02,
			28094.60,
			28055.41,
			27113.26,
			25270.82,
			29740.34,
			26104.59,
			26968.37,
			28729.66,
			26006.31,
			27764.84,
			27733.27,
			26808.80,
			29456.22,
			24969.06,
			27611.70,
			24914.38,
			28441.38,
			25751.68,
			27499.44,
			27474.57,
			26564.87,
			29194.91,
			24753.19,
			28262.37,
			27358.97,
			25574.34,
			27315.22,
			27295.63,
			25516.90,
			26376.72,
			28115.75,
			25465.34,
			27202.66,
			27186.98,
			26295.38,
			28908.11,
			25393.55,
			26253.78,
			27989.54,
			24481.05,
			26214.70,
			26202.77,
			27064.42,
			26181.77,
			28788.58,
			25293.24,
			26154.88,
			27889.19,
			26140.39,
			26132.66,
			26996.27,
			24378.76,
			26981.87,
			28717.85,
			24365.41,
			26098.63,
			27834.09,
			26093.06,
			26089.60,
			26956.15,
			26954.83,
			27204.55,
			25834.88,
			24344.10,
			26274.06,
			25969.74,
			25669.24,
			25371.01,
			25076.52,
			24784.44,
			24495.93,
			24209.80,
			23927.18,
			23646.36,
			23369.54,
			23095.02,
			22823.88,
			22555.02,
			22289.48,
			22026.20,
			21766.17,
			21508.40,
			21253.35,
			21001.09,
			20752.16,
			20488.62,
			20235.04,
			19993.55,
			19754.72,
			19518.85,
			19255.13,
			19010.17,
			18782.10,
			18556.09,
			18332.49,
			18111.40,
			17893.13,
			17676.92,
			17463.51,
			17251.74,
			17043.24,
			16836.94,
			16631.83,
			16394.69,
			16195.65,
			15999.16,
			15805.44,
			15613.92,
			15424.86,
			15238.61,
			15055.54,
			14862.08,
			14643.44,
			14467.52,
			14296.65,
			14129.28,
			13966.55,
			13808.96,
			13646.11,
			13507.21,
			13257.20,
			12765.88,
			48404.49,
			6942.94,
			6852.42,
			6777.23,
			6702.80,
			6629.10,
			6556.14,
			6483.91,
			6412.39,
			6341.59,
			6271.50,
			6202.10,
			6133.40,
			6065.39,
			5998.06,
			5931.40,
			5865.41,
			5800.09,
			5735.42,
			5671.40,
			5608.03,
			5545.29,
			5483.19,
			5421.71,
			5360.86,
			5300.63,
			5241.00,
			5181.98,
			5123.57,
			5065.75,
			5008.53,
			4951.89,
			4895.85,
			4840.39,
			4785.51,
			4731.23,
			4677.56,
			4624.53,
			4572.29,
			4499.06,
			4436.96,
			4386.37,
			4336.41,
			4279.42,
			4219.93,
			4171.58,
			4123.77,
			4075.90,
			4025.52,
			3974.03,
			3928.46,
			3883.72,
			3807.92,
			3763.91,
			3720.37,
			3677.30,
			3634.72,
			3590.74,
			3544.99,
			3503.80,
			3463.10,
			3430.31,
			3364.47,
			3321.38,
			3282.68,
			3242.08,
			3236.32,
			3123.38,
			3053.11,
			3017.36,
			2976.70,
			2920.07,
			2885.53,
			2851.37,
			2817.59,
			4189.76,
			2718.77,
			2686.62,
			2655.12,
			2598.22,
			2567.22,
			2536.55,
			2506.22,
			2476.22,
			2446.56,
			2417.25,
			2388.30,
			2359.73,
			2331.62,
			2299.39,
			2242.46,
			2215.53,
			2181.13,
			2152.83,
			2126.77,
			2101.00,
			2075.56,
			2049.46,
			2021.60,
			1995.18,
			1960.45,
			1936.55,
			1912.95,
			1889.63,
			2445.69,
			1821.52,
			1795.44,
			1771.50,
			1750.02,
			1728.92,
			1702.47,
			1675.31,
			1655.18,
			1635.44,
			1616.14,
			1597.41,
			1574.98,
			1549.41,
			1533.03,
			1319.83,
			1161.03,
			603.53,
			596.43,
			589.42,
			582.47,
			575.61,
			568.83,
			562.12,
			555.50,
			547.38,
			540.97,
			532.85,
			520.66,
			514.48,
			508.38,
			502.36,
			496.41,
			489.90,
			482.62,
			477.03,
			466.83,
			447.41,
			442.05,
			436.75,
			431.51,
			426.32,
			421.19,
			416.11,
			411.09,
			406.12,
			401.21,
			396.35,
			391.54,
			386.78,
			382.08,
			377.43,
			372.83,
			368.28,
			363.79,
			359.34,
			354.96,
			350.63,
			346.37,
			341.66,
			334.48,
			328.24,
			323.13,
			319.14,
			315.21,
			311.33,
			307.50,
			303.75,
			297.39,
			291.45,
			286.55,
			281.14,
			276.53,
			273.06,
			269.63,
			266.24,
			262.89,
			259.58,
			256.31,
			253.09,
			249.91,
			246.77,
			243.69,
			240.68,
			235.73,
			229.22,
			226.36,
			223.28,
			217.19,
			214.35,
			207.45,
			204.83,
			202.26,
			199.74,
			196.60,
			188.96,
			182.79,
			172.15,
			167.73,
			162.18,
			159.26,
			157.03,
			155.09,
			151.96,
			142.45,
			139.52,
			137.72,
			135.95,
			134.21,
			132.51,
			130.89,
			124.42,
			122.88,
			115.70,
			114.22,
			112.76,
			111.34,
			109.96,
			108.64,
			107.42,
			106.40,
			92.34,
			79.33,
			76.93,
			73.11,
			65.12,
			64.31,
			59.80,
			126.66,
			52.11,
			50.01,
			49.44,
			46.57,
			46.05,
			43.57,
			42.03,
			41.61,
			40.24,
			31.79,
			30.00,
			29.69,
			29.41,
			34.21,
			19.51,
			16.71,
			3.21,
		};

		double dblIssueAmount = Matrix.Sum (adblPrincipalPayDown);

		JulianDate dtEffective = DateUtil.CreateFromYMD (
			2017,
			DateUtil.SEPTEMBER,
			25
		);

		BondComponent bond = BondBuilder.CreateBondFromCF (
			strName,
			dtEffective,
			strCurrency,
			strName,
			strCouponDayCount,
			dblIssueAmount,
			dblCouponRate,
			iCouponFreq,
			adtPeriodEnd,
			adblCouponAmount,
			adblPrincipalPayDown,
			true
		);

		BondReplicator abr = BondReplicator.CorporateSenior (
			dblCleanPrice,
			dblIssuePrice,
			dblIssueAmount,
			dtSpot,
			astrDepositTenor,
			adblDepositQuote,
			adblFuturesQuote,
			astrFixFloatTenor,
			adblFixFloatQuote,
			dblSpreadBump,
			dblSpreadDurationMultiplier,
			strTreasuryCode,
			astrGovvieTenor,
			adblGovvieYield,
			astrCreditTenor,
			adblCreditQuote,
			dblFX,
			Double.NaN,
			iSettleLag,
			bond
		);

		BondReplicationRun abrr = abr.generateRun();

		System.out.println (abrr.display());

		double dblBalance = 1.;

		for (CompositePeriod p : bond.couponPeriods()) {
			int iEndDate = p.endDate();

			int iStartDate = p.startDate();

			double dblPrincipalPayDown = bond.notional (iStartDate) - bond.notional (iEndDate);

			double dblInterest = dblCouponRate * p.couponDCF() * bond.notional (iStartDate) * bond.couponFactor (iEndDate);

			dblBalance -= dblPrincipalPayDown;

			System.out.println (
				"\t" + new JulianDate (iEndDate) + " => " +
				FormatUtil.FormatDouble (dblPrincipalPayDown, 8, 2, dblIssueAmount) + " | " +
				FormatUtil.FormatDouble (dblInterest, 6, 2, dblIssueAmount) + " | " +
				FormatUtil.FormatDouble (dblPrincipalPayDown + dblInterest, 8, 2, dblIssueAmount) + " | " +
				FormatUtil.FormatDouble (dblBalance, 8, 2, dblIssueAmount) + " ||"
			);
		}
	}
}