{
  "contractName": "ANNEngine",
  "abi": [
    {
      "inputs": [],
      "name": "MAX_CYCLE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_EVENT_SCHEDULE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ONE_POINT_ZERO",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PRECISION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "eomc",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "enum S",
              "name": "s",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IPS",
          "name": "cycle",
          "type": "tuple"
        }
      ],
      "name": "adjustEndOfMonthConvention",
      "outputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "segmentStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "segmentEnd",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "computeCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "bdc",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "computeEventTimeForEvent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "name": "terms",
          "type": "tuple"
        }
      ],
      "name": "computeInitialState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "lastScheduleTime",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "computeNextCyclicEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "segmentStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "segmentEnd",
          "type": "uint256"
        }
      ],
      "name": "computeNonCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computePayoffForEvent",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computeStateForEvent",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractType",
      "outputs": [
        {
          "internalType": "enum ContractType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "decodeEvent",
      "outputs": [
        {
          "internalType": "enum EventType",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "scheduleTime",
          "type": "uint256"
        }
      ],
      "name": "encodeEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "getEpochOffset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "name": "isEventScheduled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftCalcTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftEventTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061415d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063aaf5eb68116100ad578063cb2ef6f711610071578063cb2ef6f714610267578063e05a66e01461027c578063e726d6801461028f578063edc0465f1461024c578063f5586e05146102a257610121565b8063aaf5eb6814610211578063acaed9d514610219578063bd6b30821461022c578063c40c5a981461024c578063c8352b791461025457610121565b806330b126d7116100f457806330b126d7146101a25780636f37e55b146101c257806372540003146101ca578063811322fb146101eb5780639485ba4e146101fe57610121565b80630ecadea214610126578063179331f31461014f5780631a2e165d1461016f5780632249a3611461018f575b600080fd5b6101396101343660046134fc565b6102b5565b6040516101469190613933565b60405180910390f35b61016261015d366004613398565b61073f565b604051610146919061399f565b61018261017d3660046132b5565b61080f565b6040516101469190613982565b61018261019d366004613483565b610834565b6101b56101b0366004613420565b610a49565b6040516101469190613fe3565b610182610b1c565b6101dd6101d836600461329d565b610b28565b6040516101469291906139ad565b6101826101f93660046133d6565b610b51565b61018261020c36600461343c565b610b65565b610182610c3a565b6101b561022736600461343c565b610c3f565b61023f61023a3660046132fb565b610c6f565b6040516101469190613977565b610182610c7a565b6101396102623660046134c6565b610c7f565b61026f610de9565b604051610146919061398b565b61018261028a3660046133f5565b610dee565b61018261029d366004613910565b610e0c565b6101826102b0366004613910565b610f58565b60606102bf613060565b6000600984601c8111156102cf57fe5b14156103dd57610240870135156103dd576102e8613060565b6103236102408901356101e08a013561030a368c90038c016105c08d016137f8565b61031a60c08d0160a08e0161337c565b60018c8c610fc3565b905060005b60788160ff1610156103da57818160ff166078811061034357fe5b6020020151610351576103da565b886102200135828260ff166078811061036657fe5b602002015111610375576103d2565b610393828260ff166078811061038757fe5b602002015189896111ad565b61039c576103d2565b6103ba6009838360ff16607881106103b057fe5b6020020151610dee565b8484607881106103c657fe5b60200201526001909201915b600101610328565b50505b600a84601c8111156103eb57fe5b14156105055761024087013515801590610409575061022087013515155b801561041e5750866102c00135876102200135105b156105055761042b61307f565b61043e3689900389016105c08a016137f8565b60016040820152905061044f613060565b6104786102408a01356102208b01358461046f60c08e0160a08f0161337c565b60018d8d610fc3565b905060005b60788160ff16101561050157818160ff166078811061049857fe5b60200201516104a657610501565b6104c4828260ff16607881106104b857fe5b60200201518a8a6111ad565b6104cd576104f9565b6104e1600a838360ff16607881106103b057fe5b8585607881106104ed57fe5b60200201526001909301925b60010161047d565b5050505b600384601c81111561051357fe5b14156105ce576102a0870135156105ce5761052c613060565b61054e6102a08901356101e08a013561030a368c90038c016107408d016137f8565b905060005b60788160ff1610156105cb57818160ff166078811061056e57fe5b602002015161057c576105cb565b61058e828260ff166078811061038757fe5b610597576105c3565b6105ab6003838360ff16607881106103b057fe5b8484607881106105b757fe5b60200201526001909201915b600101610553565b50505b600484601c8111156105dc57fe5b14156106b0576102c0870135156106b0576105f5613060565b6106306102c08901356101e08a0135610617368c90038c016107c08d016137f8565b61062760c08d0160a08e0161337c565b60008c8c610fc3565b905060005b60788160ff1610156106ad57818160ff166078811061065057fe5b602002015161065e576106ad565b610670828260ff166078811061038757fe5b610679576106a5565b61068d6004838360ff16607881106103b057fe5b84846078811061069957fe5b60200201526001909201915b600101610635565b50505b60608167ffffffffffffffff811180156106c957600080fd5b506040519080825280602002602001820160405280156106f3578160200160208202803683370190505b50905060005b828110156107315783816078811061070d57fe5b602002015182828151811061071e57fe5b60209081029190910101526001016106f9565b50925050505b949350505050565b6000600184600181111561074f57fe5b14156107cb5761075e836111dc565b610767846111fe565b1480156107b6575060028260200151600581111561078157fe5b148061079c575060038260200151600581111561079a57fe5b145b806107b657506004826020015160058111156107b457fe5b145b156107c357506001610808565b506000610808565b60008460018111156107d957fe5b14156107e757506000610808565b60405162461bcd60e51b81526004016107ff90613e9a565b60405180910390fd5b9392505050565b60008061081b86610b28565b91505061082a81868686610e0c565b9695505050505050565b6000600982601c81111561084457fe5b14156108c357610240840135156108c357600061088961086d3687900387016105c088016137f8565b61087d60c0880160a0890161337c565b8761024001358761120d565b90508061089a575060009050610808565b84610220013581116108b0575060009050610808565b6108bb600982610dee565b915050610808565b600a82601c8111156108d157fe5b141561096157610240840135158015906108ef575061022084013515155b15610961576108fc61307f565b61090f3686900386016105c087016137f8565b600160408201529050600061093a8261092e60c0890160a08a0161337c565b8861024001358861120d565b90508061094d5750600091506108089050565b610958600a82610dee565b92505050610808565b600382601c81111561096f57fe5b14156109d0576102a0840135156109d05760006109b461099836879003870161074088016137f8565b6109a860c0880160a0890161337c565b876102a001358761120d565b9050806109c5575060009050610808565b6108bb600382610dee565b600482601c8111156109de57fe5b1415610a3f576102c084013515610a3f576000610a23610a073687900387016107c088016137f8565b610a1760c0880160a0890161337c565b876102c001358761120d565b905080610a34575060009050610808565b6108bb600482610dee565b5060009392505050565b610a516130a8565b610a596130a8565b60008152670de0b6b3a764000061018082018190526101608201526101a083013560208201526101e08301356060808301919091526102e084013590610aad90610aa890860160408701613361565b611268565b60000b0260e0820152610300830135610140820152610320830135610adb610aa86060860160408701613361565b60000b026101008201526103c0830135610120820152610460830135610b0a610aa86060860160408701613361565b60000b026101a082015290505b919050565b670de0b6b3a764000081565b6000808060f884901c601c811115610b3c57fe5b92505067ffffffffffffffff83169050915091565b600081601c811115610b5f57fe5b92915050565b600080610b7a61016087016101408801613282565b6001600160a01b031614158015610bc55750610b9e61016086016101408701613282565b6001600160a01b0316610bb961014087016101208801613282565b6001600160a01b031614155b15610c0957610c0282610bf6610be036899003890189613548565b610bef36899003890189613813565b878761132c565b9063ffffffff61151a16565b9050610737565b610c31610c1b36879003870187613548565b610c2a36879003870187613813565b858561132c565b95945050505050565b601281565b610c476130a8565b610c31610c5936879003870187613548565b610c6836879003870187613813565b85856115b8565b600195945050505050565b607881565b6060610c89613060565b6000610c9b866101c0013586866111ad565b15610cc957610cb06002876101c00135610dee565b828261ffff1660788110610cc057fe5b60200201526001015b61020086013515610d1257610ce486610200013586866111ad565b15610d1257610cf9600f876102000135610dee565b828261ffff1660788110610d0957fe5b60200201526001015b610d22866101e0013586866111ad565b151560011415610d5557610d3c6014876101e00135610dee565b828261ffff1660788110610d4c57fe5b60200201526001015b60608161ffff1667ffffffffffffffff81118015610d7257600080fd5b50604051908082528060200260200182016040528015610d9c578160200160208202803683370190505b50905060005b8261ffff16811015610dde57838160788110610dba57fe5b6020020151828281518110610dcb57fe5b6020908102919091010152600101610da2565b509695505050505050565b600190565b60008160f884601c811115610dff57fe5b60ff16901b179392505050565b600081851415610e1d575083610737565b6001846008811115610e2b57fe5b1480610e4257506003846008811115610e4057fe5b145b15610e5157610c0285846117a9565b6002846008811115610e5f57fe5b1480610e7657506004846008811115610e7457fe5b145b15610eba576000610e8786856117a9565b9050610e9286611805565b610e9b82611805565b1415610ea8579050610737565b610eb2868561181c565b915050610737565b6005846008811115610ec857fe5b1480610edf57506007846008811115610edd57fe5b145b15610eee57610c02858461181c565b6006846008811115610efc57fe5b1480610f1357506008846008811115610f1157fe5b145b15610f4f576000610f24868561181c565b9050610f2f86611805565b610f3882611805565b1415610f45579050610737565b610eb286856117a9565b50929392505050565b60006003846008811115610f6857fe5b1480610f7f57506004846008811115610f7d57fe5b145b80610f9557506007846008811115610f9357fe5b145b80610fab57506008846008811115610fa957fe5b145b15610fb7575083610737565b610c3185858585610e0c565b610fcb613060565b610fd3613060565b606087015160009061103b57610fea8a86866111ad565b156110055789828260788110610ffc57fe5b60200201526001015b6110108986866111ad565b156110335760018615151415611033578882826078811061102d57fe5b60200201525b5090506111a2565b8960008061104a8a848d61073f565b90505b8b8310156110df576110608389896111ad565b1561109e57607684106110855760405162461bcd60e51b81526004016107ff90613a18565b8285856078811061109257fe5b60200201526001909301925b6001918201918160018111156110b057fe5b146110c5576110c08b8e8461186a565b6110d8565b6110d86110d38c8f8561186a565b61199b565b925061104d565b6001891515141561110d576110f58c89896111ad565b1561110d578b85856078811061110757fe5b60200201525b60008411801561112a575061112a85600186036078811061038757fe5b1561119a5760008b60400151600181111561114157fe5b14801561114e5750600184115b801561115a5750828c14155b1561119a5784846078811061116b57fe5b602002015185600186036078811061117f57fe5b602002015284846078811061119057fe5b6020020160008152505b509293505050505b979650505050505050565b6000818311156111bf57506000610808565b8383111580156111cf5750818411155b15610a3f57506001610808565b600080806111ef62015180855b046119ca565b50915091506107378282611a60565b600061073762015180836111e9565b6060840151600090158061121f575081155b1561122b575081610737565b600161123885858861073f565b600181111561124357fe5b14611259576112548583600161186a565b610c31565b610c316110d38684600161186a565b60008082600c81111561127757fe5b141561128557506001610b17565b600182600c81111561129357fe5b14156112a25750600019610b17565b600682600c8111156112b057fe5b14156112be57506001610b17565b600782600c8111156112cc57fe5b14156112db5750600019610b17565b600282600c8111156112e957fe5b14156112f757506001610b17565b600382600c81111561130557fe5b14156113145750600019610b17565b60405162461bcd60e51b81526004016107ff90613c20565b600080600061133a85610b28565b9092509050601c82601c81111561134d57fe5b141561135e57600092505050610737565b600a82601c81111561136c57fe5b141561137d57600092505050610737565b600c82601c81111561138b57fe5b141561139c57600092505050610737565b600d82601c8111156113aa57fe5b14156113bb57600092505050610737565b601282601c8111156113c957fe5b14156113da57600092505050610737565b600b82601c8111156113e857fe5b14156113f957600092505050610737565b600382601c81111561140757fe5b14156114225761141987878387611ae6565b92505050610737565b600282601c81111561143057fe5b14156114425761141987878387611ba0565b600982601c81111561145057fe5b14156114625761141987878387611bde565b600882601c81111561147057fe5b14156114825761141987878387611c4d565b600482601c81111561149057fe5b14156114a25761141987878387611c6e565b601482601c8111156114b057fe5b14156114c25761141987878387611d1f565b600782601c8111156114d057fe5b14156114e25761141987878387611d3d565b601182601c8111156114f057fe5b14156115025761141987878387611df4565b60405162461bcd60e51b81526004016107ff90613ab4565b6000821580611527575081155b1561153457506000610b5f565b826000191480156115485750600160ff1b82145b156115655760405162461bcd60e51b81526004016107ff90613c74565b8282028284828161157257fe5b05146115905760405162461bcd60e51b81526004016107ff90613c74565b670de0b6b3a76400008105806107375760405162461bcd60e51b81526004016107ff90613b8d565b6115c06130a8565b6000806115cc85610b28565b9092509050601c82601c8111156115df57fe5b14156115f15761141987878387611e7e565b600382601c8111156115ff57fe5b14156116115761141987878387611f1d565b600282601c81111561161f57fe5b14156116315761141987878387611f87565b600a82601c81111561163f57fe5b14156116515761141987878387611fce565b600982601c81111561165f57fe5b1415611671576114198787838761204e565b600882601c81111561167f57fe5b14156116915761141987878387611e7e565b600482601c81111561169f57fe5b14156116b157611419878783876120a7565b601482601c8111156116bf57fe5b14156116d1576114198787838761218d565b600782601c8111156116df57fe5b14156116f15761141987878387611e7e565b600c82601c8111156116ff57fe5b14156117115761141987878387612225565b600d82601c81111561171f57fe5b141561173157611419878783876122c1565b601282601c81111561173f57fe5b14156117515761141987878387612447565b601182601c81111561175f57fe5b1415611771576114198787838761254a565b600b82601c81111561177f57fe5b14156117915761141987878387612581565b60405162461bcd60e51b81526004016107ff90613f05565b600060018260018111156117b957fe5b14156117fe576117c88361266c565b600614156117e2576117db83600261267f565b9050610b5f565b6117eb8361266c565b600714156117fe576117db83600161267f565b5090919050565b600061181462015180836111e9565b509392505050565b6000600182600181111561182c57fe5b14156117fe5761183b8361266c565b6006141561184e576117db836001612694565b6118578361266c565b600714156117fe576117db836002612694565b600080808560200151600581111561187e57fe5b1415611899578451610c02908590850263ffffffff61267f16565b6001856020015160058111156118ab57fe5b14156118c9578451610c02908590850260070263ffffffff61267f16565b6002856020015160058111156118db57fe5b14156118f6578451610c02908590850263ffffffff6126a916565b60038560200151600581111561190857fe5b1415611926578451610c02908590850260030263ffffffff6126a916565b60048560200151600581111561193857fe5b1415611956578451610c02908590850260060263ffffffff6126a916565b60058560200151600581111561196857fe5b1415611983578451610c02908590850263ffffffff61272316565b60405162461bcd60e51b81526004016107ff90613a66565b6000806000806119aa8561274a565b9194509250905060006119bd8484611a60565b905061082a848483612768565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281611a2157fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480611a715750816003145b80611a7c5750816005145b80611a875750816007145b80611a925750816008145b80611a9d575081600a145b80611aa8575081600c145b15611ab55750601f610b5f565b81600214611ac55750601e610b5f565b611ace83612782565b611ad957601c611adc565b601d5b60ff169392505050565b6000808561010001516001811115611afa57fe5b1415611b1e57846103a00151611b138660400151611268565b60000b029050610737565b6000611b69611b408660200151886080015189602001518a6101e00151610f58565b611b598689608001518a602001518b6101e00151610f58565b8860600151896101e001516127a7565b905061082a611b8e8660e00151610bf6896103a001518561151a90919063ffffffff16565b6101208701519063ffffffff6128a416565b6000611bbf856104200151866102e001516128a490919063ffffffff16565b611bcc8660400151611268565b6000190260000b029050949350505050565b600080611c01611b408660200151886080015189602001518a6101e00151610f58565b905061082a611c3b611c298760e00151610bf68961014001518661151a90919063ffffffff16565b6101008801519063ffffffff6128a416565b6101608701519063ffffffff61151a16565b60008360e00151611c618660400151611268565b60000b0295945050505050565b600080611c91611b408660200151886080015189602001518a6101e00151610f58565b905061082a611cfa611cb98760e00151610bf68961014001518661151a90919063ffffffff16565b876101000151886101a001510303611cd48960400151611268565b60000b028760e00151611cea8a60400151611268565b60000b029063ffffffff6128ea16565b611d078860400151611268565b60000b8761018001510261151a90919063ffffffff16565b6000610c318460e0015185610180015161151a90919063ffffffff16565b600080611d60611b408660200151886080015189602001518a6101e00151610f58565b905060018660e001516003811115611d7457fe5b1415611d9957856103e00151611d8d8760400151611268565b60000b02915050610737565b60028660e001516003811115611dab57fe5b1415611dde57611dd18560e00151610bf6886103e001518461151a90919063ffffffff16565b611d8d8760400151611268565b60e0850151611dd190829063ffffffff61151a16565b600080611e17611b408660200151886080015189602001518a6101e00151610f58565b9050611e63611e3c8660e00151610bf68861014001518561151a90919063ffffffff16565b610100870151610440890151611e579163ffffffff6128a416565b9063ffffffff6128a416565b611e708760400151611268565b60000b029695505050505050565b611e866130a8565b6000611ea8611b408660200151886080015189602001518a6101e00151610f58565b9050611edf611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b6101008701519063ffffffff6128a416565b61010086015260e08501516103a0870151611f0a91611b8e918491610bf6919063ffffffff61151a16565b6101208601525050506020820152919050565b611f256130a8565b6000611f47611b408660200151886080015189602001518a6101e00151610f58565b9050611f6c611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015250506000610120840152506020820152919050565b611f8f6130a8565b846102e00151611fa28660400151611268565b60000b0260e0850152505061030083015161014083015260208201526103209091015161010082015290565b611fd66130a8565b6000611ff8611b408660200151886080015189602001518a6101e00151610f58565b9050612020611ecd611c2983610bf68960e001518a610140015161151a90919063ffffffff16565b50600061010086015260e08501516103a0870151611f0a91611b8e918491610bf6919063ffffffff61151a16565b6120566130a8565b6000612078611b408660200151886080015189602001518a6101e00151610f58565b600061010087015260e08601516103a0880151919250611f0a91611b8e918491610bf69163ffffffff61151a16565b6120af6130a8565b60006120d1611b408660200151886080015189602001518a6101e00151610f58565b90506120f6611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015260e08501516103a087015161212191611b8e918491610bf6919063ffffffff61151a16565b6101208601526101008501516101a086015161217b916121579161214a9163ffffffff6128fa16565b611cd48960400151611268565b6121648860400151611268565b60000b028660e001516128fa90919063ffffffff16565b60e08601525050506020820152919050565b6121956130a8565b60006121b7611b408660200151886080015189602001518a6101e00151610f58565b90506121dc611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015260e08501516103a087015161220791611b8e918491610bf6919063ffffffff61151a16565b6101208601525050600060e084015250600482526020820152919050565b61222d6130a8565b600061224f611b408660200151886080015189602001518a6101e00151610f58565b9050612274611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015260e08501516103a087015161229f91611b8e918491610bf6919063ffffffff61151a16565b6101208601525050506103809290920151610140820152602081019190915290565b6122c96130a8565b610360850151610340860151610140860151908402909101906000906122f690839063ffffffff6128fa16565b9050808761048001511280156123195750866104e0015160001902876104800151125b1561232a5750610480860151612346565b866104e001516000190281121561234657506104e08601516000035b61014086015161235c908263ffffffff6128a416565b91508187610480015112801561237b5750866104a00151876104800151125b1561238d5786610480015191506123a3565b866104a001518212156123a357866104a0015191505b60006123ee6123c588602001518a608001518b602001518c6101e00151610f58565b6123de888b608001518c602001518d6101e00151610f58565b8a606001518b6101e001516127a7565b905061242561241382610bf68a60e001518b610140015161151a90919063ffffffff16565b6101008901519063ffffffff6128a416565b6101008801525050610140850152505060006101a08301526020820152919050565b61244f6130a8565b6000612471611b408660200151886080015189602001518a6101e00151610f58565b9050612496611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015260e08501516103a08701516124c191611b8e918491610bf6919063ffffffff61151a16565b61012086015260018660c0015160038111156124d957fe5b14806124f4575060038660c0015160038111156124f257fe5b145b156125025760006101608601525b60028660c00151600381111561251457fe5b148061252f575060038660c00151600381111561252d57fe5b145b1561253d5760006101808601525b5050506020820152919050565b6125526130a8565b5050600060e0830181905261014083018190526101008301819052610120830152600582526020820152919050565b6125896130a8565b600084604001516000146125a15784604001516125ba565b6125ba8487608001518860200151896101e00151610e0c565b610500870151604001519091508390600090156125f55760006125e289610500015185612940565b90508083116125f357600180895291505b505b876105200151604001518015612609575080155b1561263857600061261f89610520015185612940565b90508083116126315760028852612636565b600388525b505b60408701516126605761265a8689608001518a602001518b6101e00151610e0c565b60408801525b50949695505050505050565b6007620151809091046003010660010190565b620151808102820182811015610b5f57600080fd5b620151808102820382811115610b5f57600080fd5b60008080806126bb62015180876111e9565b600c9188016000198101838104949094019650945092509006600101915060006126e58484611a60565b9050808211156126f3578091505b62015180870662015180612708868686612a6c565b020194508685101561271957600080fd5b5050505092915050565b600080808061273562015180876111e9565b91870194509250905060006126e58484611a60565b6000808061275b62015180856111e9565b9196909550909350915050565b600062015180612779858585612a6c565b02949350505050565b60006004820615801561279757506064820615155b80610b5f57505061019090061590565b6000848410156127c95760405162461bcd60e51b81526004016107ff90613d69565b60008360058111156127d757fe5b14156127e757610c028585612ae8565b60018360058111156127f557fe5b141561280557610c028585612bfc565b600283600581111561281357fe5b141561282357610c028585612c27565b600483600581111561283157fe5b141561284157610c028585612c46565b600383600581111561284f57fe5b141561286057610c02858584612d07565b600583600581111561286e57fe5b141561288c5760405162461bcd60e51b81526004016107ff90613cbb565b60405162461bcd60e51b81526004016107ff90613b01565b60008282018183128015906128b95750838112155b806128ce57506000831280156128ce57508381125b6108085760405162461bcd60e51b81526004016107ff90613bdf565b6000818313156117fe5750919050565b600081830381831280159061290f5750838113155b80612924575060008312801561292457508381135b6108085760405162461bcd60e51b81526004016107ff90613f5b565b600080808460200151600581111561295457fe5b141561297457835161296d90849063ffffffff61267f16565b9050610808565b60018460200151600581111561298657fe5b14156129a257835161296d90849060070263ffffffff61267f16565b6002846020015160058111156129b457fe5b14156129cd57835161296d90849063ffffffff6126a916565b6003846020015160058111156129df57fe5b14156129fb57835161296d90849060030263ffffffff6126a916565b600484602001516005811115612a0d57fe5b1415612a2957835161296d90849060060263ffffffff6126a916565b600584602001516005811115612a3b57fe5b1415612a5457835161296d90849063ffffffff61272316565b60405162461bcd60e51b81526004016107ff90613e3d565b60006107b2841015612a7d57600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281612ab957fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b600080612af484612ddd565b90506000612b0184612ddd565b90506000612b0e86612df5565b612b1a5761016d612b1e565b61016e5b61ffff16905081831415612b5057612b4681612b3a8888612e12565b9063ffffffff612e2d16565b9350505050610b5f565b6000612b5b86612df5565b612b675761016d612b6b565b61016e5b61ffff1690506000612b9c83612b3a8a612b97612b8f8a600163ffffffff612ee916565b600180612768565b612e12565b90506000612bb983612b3a612bb388600180612768565b8b612e12565b9050612bef612bdf6001612bd3888a63ffffffff612f0e16565b9063ffffffff612f0e16565b611e57848463ffffffff6128a416565b9998505050505050505050565b6000610808610168612b3a62015180612c1b868863ffffffff612f0e16565b9063ffffffff612f5016565b600061080861016d612b3a62015180612c1b868863ffffffff612f0e16565b6000806000806000806000612c5a8961274a565b975095509350612c698861274a565b945092509050601f861415612c7d57601e95505b82601f1415612c8b57601e92505b6000612c9d848863ffffffff6128fa16565b90506000612cb1848863ffffffff6128fa16565b90506000612cc5848863ffffffff6128fa16565b9050612cf7610168612b3a85611e57612ce587601e63ffffffff612f9216565b611e578761016863ffffffff612f9216565b9c9b505050505050505050505050565b6000806000806000806000612d1b8a61274a565b975095509350612d2a8961274a565b945092509050612d398a6111dc565b861415612d4557601e95505b8789148015612d545750816002145b158015612d685750612d65896111dc565b83145b15612d7257601e92505b6000612d84848863ffffffff6128fa16565b90506000612d98848863ffffffff6128fa16565b90506000612dac848863ffffffff6128fa16565b9050612dcc610168612b3a85611e57612ce587601e63ffffffff612f9216565b9d9c50505050505050505050505050565b6000612dec62015180836111e9565b50909392505050565b600080612e0562015180846111e9565b5050905061080881612782565b600081831115612e2157600080fd5b50620151809190030490565b600081612e4c5760405162461bcd60e51b81526004016107ff90613f9f565b82612e5957506000610b5f565b670de0b6b3a764000083810290848281612e6f57fe5b0514612e8d5760405162461bcd60e51b81526004016107ff90613df7565b82600019148015612ea15750600160ff1b84145b15612ebe5760405162461bcd60e51b81526004016107ff90613df7565b6000838281612ec957fe5b059050806107375760405162461bcd60e51b81526004016107ff90613d18565b6000828201838110156108085760405162461bcd60e51b81526004016107ff90613b56565b600061080883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ffd565b600061080883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613029565b600082612fa157506000610b5f565b82600019148015612fb55750600160ff1b82145b15612fd25760405162461bcd60e51b81526004016107ff90613db0565b82820282848281612fdf57fe5b05146108085760405162461bcd60e51b81526004016107ff90613db0565b600081848411156130215760405162461bcd60e51b81526004016107ff91906139c5565b505050900390565b6000818361304a5760405162461bcd60e51b81526004016107ff91906139c5565b50600083858161305657fe5b0495945050505050565b60405180610f0001604052806078906020820280368337509192915050565b604080516080810190915260008082526020820190815260200160008152600060209091015290565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b0381168114610b5f57600080fd5b803560098110610b5f57600080fd5b8035610b5f81614100565b8035610b5f8161410d565b8035600d8110610b5f57600080fd5b803560138110610b5f57600080fd5b803560048110610b5f57600080fd5b600061084082840312156131bd578081fd5b50919050565b6000608082840312156131d4578081fd5b6131de60806140c8565b90508135815260208201356131f28161410d565b6020820152604082013561320581614100565b60408201526060820135613218816140ef565b606082015292915050565b600060608284031215613234578081fd5b61323e60606140c8565b90508135815260208201356132528161410d565b60208201526040820135613265816140ef565b604082015292915050565b600061028082840312156131bd578081fd5b600060208284031215613293578081fd5b6108088383613142565b6000602082840312156132ae578081fd5b5035919050565b600080600080608085870312156132ca578283fd5b843593506132db8660208701613159565b925060408501356132eb81614100565b9396929550929360600135925050565b6000806000806000610d808688031215613313578283fd5b8535945061332487602088016131ab565b9350613334876108608801613270565b9250610ae0860135613345816140ef565b915061335587610b008801613270565b90509295509295909350565b600060208284031215613372578081fd5b610808838361317e565b60006020828403121561338d578081fd5b813561080881614100565b600080600060c084860312156133ac578081fd5b83356133b781614100565b9250602084013591506133cd85604086016131c3565b90509250925092565b6000602082840312156133e7578081fd5b8135601d8110610808578182fd5b60008060408385031215613407578182fd5b82356134128161411a565b946020939093013593505050565b60006108408284031215613432578081fd5b61080883836131ab565b600080600080610b008587031215613452578182fd5b61345c86866131ab565b935061346c866108408701613270565b9396939550505050610ac082013591610ae0013590565b60008060006108808486031215613498578081fd5b6134a285856131ab565b925061084084013591506108608401356134bb8161411a565b809150509250925092565b600080600061088084860312156134db578081fd5b6134e585856131ab565b956108408501359550610860909401359392505050565b6000806000806108a08587031215613512578182fd5b61351c86866131ab565b93506108408501359250610860850135915061088085013561353d8161411a565b939692955090935050565b6000610840828403121561355a578081fd5b6135656105e06140c8565b61356f848461318d565b815261357e8460208501613168565b6020820152613590846040850161317e565b60408201526135a28460608501613173565b60608201526135b48460808501613159565b60808201526135c68460a08501613168565b60a08201526135d88460c0850161319c565b60c08201526135ea8460e0850161319c565b60e08201526101006135fe85828601613168565b9082015261012061361185858301613142565b9082015261014061362485858301613142565b90820152610160838101359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013590820152610260808401359082015261028080840135908201526102a080840135908201526102c080840135908201526102e08084013590820152610300808401359082015261032080840135908201526103408084013590820152610360808401359082015261038080840135908201526103a080840135908201526103c080840135908201526103e08084013590820152610400808401359082015261042080840135908201526104408084013590820152610460808401359082015261048080840135908201526104a080840135908201526104c080840135908201526104e0808401359082015261050061377685828601613223565b9082015261056061378985858301613223565b6105208301526105c061379e868287016131c3565b6105408401526137b28661064087016131c3565b828401526137c4866106c087016131c3565b6105808401526137d88661074087016131c3565b6105a08401526137ec866107c087016131c3565b90830152509392505050565b600060808284031215613809578081fd5b61080883836131c3565b6000610280808385031215613826578182fd5b61382f816140c8565b6138398585613173565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b600080600080608085870312156132ca578182fd5b6006811061392f57fe5b9052565b6020808252825182820181905260009190848201906040850190845b8181101561396b5783518352928401929184019160010161394f565b50909695505050505050565b901515815260200190565b90815260200190565b602081016013831061399957fe5b91905290565b602081016002831061399957fe5b60408101601d84106139bb57fe5b9281526020015290565b6000602080835283518082850152825b818110156139f1578581018301518582016040015282016139d5565b81811115613a025783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b6020808252602d908201527f414e4e456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526036908201527f414e4e456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b600061028082019050613ff7828451613925565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff811182821017156140e757600080fd5b604052919050565b80151581146140fd57600080fd5b50565b600281106140fd57600080fd5b600681106140fd57600080fd5b601d81106140fd57600080fdfea2646970667358221220ce35e31203c8582c2be7a88ba589e6130dc609a274a5b8f4b9137736f240807264736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063aaf5eb68116100ad578063cb2ef6f711610071578063cb2ef6f714610267578063e05a66e01461027c578063e726d6801461028f578063edc0465f1461024c578063f5586e05146102a257610121565b8063aaf5eb6814610211578063acaed9d514610219578063bd6b30821461022c578063c40c5a981461024c578063c8352b791461025457610121565b806330b126d7116100f457806330b126d7146101a25780636f37e55b146101c257806372540003146101ca578063811322fb146101eb5780639485ba4e146101fe57610121565b80630ecadea214610126578063179331f31461014f5780631a2e165d1461016f5780632249a3611461018f575b600080fd5b6101396101343660046134fc565b6102b5565b6040516101469190613933565b60405180910390f35b61016261015d366004613398565b61073f565b604051610146919061399f565b61018261017d3660046132b5565b61080f565b6040516101469190613982565b61018261019d366004613483565b610834565b6101b56101b0366004613420565b610a49565b6040516101469190613fe3565b610182610b1c565b6101dd6101d836600461329d565b610b28565b6040516101469291906139ad565b6101826101f93660046133d6565b610b51565b61018261020c36600461343c565b610b65565b610182610c3a565b6101b561022736600461343c565b610c3f565b61023f61023a3660046132fb565b610c6f565b6040516101469190613977565b610182610c7a565b6101396102623660046134c6565b610c7f565b61026f610de9565b604051610146919061398b565b61018261028a3660046133f5565b610dee565b61018261029d366004613910565b610e0c565b6101826102b0366004613910565b610f58565b60606102bf613060565b6000600984601c8111156102cf57fe5b14156103dd57610240870135156103dd576102e8613060565b6103236102408901356101e08a013561030a368c90038c016105c08d016137f8565b61031a60c08d0160a08e0161337c565b60018c8c610fc3565b905060005b60788160ff1610156103da57818160ff166078811061034357fe5b6020020151610351576103da565b886102200135828260ff166078811061036657fe5b602002015111610375576103d2565b610393828260ff166078811061038757fe5b602002015189896111ad565b61039c576103d2565b6103ba6009838360ff16607881106103b057fe5b6020020151610dee565b8484607881106103c657fe5b60200201526001909201915b600101610328565b50505b600a84601c8111156103eb57fe5b14156105055761024087013515801590610409575061022087013515155b801561041e5750866102c00135876102200135105b156105055761042b61307f565b61043e3689900389016105c08a016137f8565b60016040820152905061044f613060565b6104786102408a01356102208b01358461046f60c08e0160a08f0161337c565b60018d8d610fc3565b905060005b60788160ff16101561050157818160ff166078811061049857fe5b60200201516104a657610501565b6104c4828260ff16607881106104b857fe5b60200201518a8a6111ad565b6104cd576104f9565b6104e1600a838360ff16607881106103b057fe5b8585607881106104ed57fe5b60200201526001909301925b60010161047d565b5050505b600384601c81111561051357fe5b14156105ce576102a0870135156105ce5761052c613060565b61054e6102a08901356101e08a013561030a368c90038c016107408d016137f8565b905060005b60788160ff1610156105cb57818160ff166078811061056e57fe5b602002015161057c576105cb565b61058e828260ff166078811061038757fe5b610597576105c3565b6105ab6003838360ff16607881106103b057fe5b8484607881106105b757fe5b60200201526001909201915b600101610553565b50505b600484601c8111156105dc57fe5b14156106b0576102c0870135156106b0576105f5613060565b6106306102c08901356101e08a0135610617368c90038c016107c08d016137f8565b61062760c08d0160a08e0161337c565b60008c8c610fc3565b905060005b60788160ff1610156106ad57818160ff166078811061065057fe5b602002015161065e576106ad565b610670828260ff166078811061038757fe5b610679576106a5565b61068d6004838360ff16607881106103b057fe5b84846078811061069957fe5b60200201526001909201915b600101610635565b50505b60608167ffffffffffffffff811180156106c957600080fd5b506040519080825280602002602001820160405280156106f3578160200160208202803683370190505b50905060005b828110156107315783816078811061070d57fe5b602002015182828151811061071e57fe5b60209081029190910101526001016106f9565b50925050505b949350505050565b6000600184600181111561074f57fe5b14156107cb5761075e836111dc565b610767846111fe565b1480156107b6575060028260200151600581111561078157fe5b148061079c575060038260200151600581111561079a57fe5b145b806107b657506004826020015160058111156107b457fe5b145b156107c357506001610808565b506000610808565b60008460018111156107d957fe5b14156107e757506000610808565b60405162461bcd60e51b81526004016107ff90613e9a565b60405180910390fd5b9392505050565b60008061081b86610b28565b91505061082a81868686610e0c565b9695505050505050565b6000600982601c81111561084457fe5b14156108c357610240840135156108c357600061088961086d3687900387016105c088016137f8565b61087d60c0880160a0890161337c565b8761024001358761120d565b90508061089a575060009050610808565b84610220013581116108b0575060009050610808565b6108bb600982610dee565b915050610808565b600a82601c8111156108d157fe5b141561096157610240840135158015906108ef575061022084013515155b15610961576108fc61307f565b61090f3686900386016105c087016137f8565b600160408201529050600061093a8261092e60c0890160a08a0161337c565b8861024001358861120d565b90508061094d5750600091506108089050565b610958600a82610dee565b92505050610808565b600382601c81111561096f57fe5b14156109d0576102a0840135156109d05760006109b461099836879003870161074088016137f8565b6109a860c0880160a0890161337c565b876102a001358761120d565b9050806109c5575060009050610808565b6108bb600382610dee565b600482601c8111156109de57fe5b1415610a3f576102c084013515610a3f576000610a23610a073687900387016107c088016137f8565b610a1760c0880160a0890161337c565b876102c001358761120d565b905080610a34575060009050610808565b6108bb600482610dee565b5060009392505050565b610a516130a8565b610a596130a8565b60008152670de0b6b3a764000061018082018190526101608201526101a083013560208201526101e08301356060808301919091526102e084013590610aad90610aa890860160408701613361565b611268565b60000b0260e0820152610300830135610140820152610320830135610adb610aa86060860160408701613361565b60000b026101008201526103c0830135610120820152610460830135610b0a610aa86060860160408701613361565b60000b026101a082015290505b919050565b670de0b6b3a764000081565b6000808060f884901c601c811115610b3c57fe5b92505067ffffffffffffffff83169050915091565b600081601c811115610b5f57fe5b92915050565b600080610b7a61016087016101408801613282565b6001600160a01b031614158015610bc55750610b9e61016086016101408701613282565b6001600160a01b0316610bb961014087016101208801613282565b6001600160a01b031614155b15610c0957610c0282610bf6610be036899003890189613548565b610bef36899003890189613813565b878761132c565b9063ffffffff61151a16565b9050610737565b610c31610c1b36879003870187613548565b610c2a36879003870187613813565b858561132c565b95945050505050565b601281565b610c476130a8565b610c31610c5936879003870187613548565b610c6836879003870187613813565b85856115b8565b600195945050505050565b607881565b6060610c89613060565b6000610c9b866101c0013586866111ad565b15610cc957610cb06002876101c00135610dee565b828261ffff1660788110610cc057fe5b60200201526001015b61020086013515610d1257610ce486610200013586866111ad565b15610d1257610cf9600f876102000135610dee565b828261ffff1660788110610d0957fe5b60200201526001015b610d22866101e0013586866111ad565b151560011415610d5557610d3c6014876101e00135610dee565b828261ffff1660788110610d4c57fe5b60200201526001015b60608161ffff1667ffffffffffffffff81118015610d7257600080fd5b50604051908082528060200260200182016040528015610d9c578160200160208202803683370190505b50905060005b8261ffff16811015610dde57838160788110610dba57fe5b6020020151828281518110610dcb57fe5b6020908102919091010152600101610da2565b509695505050505050565b600190565b60008160f884601c811115610dff57fe5b60ff16901b179392505050565b600081851415610e1d575083610737565b6001846008811115610e2b57fe5b1480610e4257506003846008811115610e4057fe5b145b15610e5157610c0285846117a9565b6002846008811115610e5f57fe5b1480610e7657506004846008811115610e7457fe5b145b15610eba576000610e8786856117a9565b9050610e9286611805565b610e9b82611805565b1415610ea8579050610737565b610eb2868561181c565b915050610737565b6005846008811115610ec857fe5b1480610edf57506007846008811115610edd57fe5b145b15610eee57610c02858461181c565b6006846008811115610efc57fe5b1480610f1357506008846008811115610f1157fe5b145b15610f4f576000610f24868561181c565b9050610f2f86611805565b610f3882611805565b1415610f45579050610737565b610eb286856117a9565b50929392505050565b60006003846008811115610f6857fe5b1480610f7f57506004846008811115610f7d57fe5b145b80610f9557506007846008811115610f9357fe5b145b80610fab57506008846008811115610fa957fe5b145b15610fb7575083610737565b610c3185858585610e0c565b610fcb613060565b610fd3613060565b606087015160009061103b57610fea8a86866111ad565b156110055789828260788110610ffc57fe5b60200201526001015b6110108986866111ad565b156110335760018615151415611033578882826078811061102d57fe5b60200201525b5090506111a2565b8960008061104a8a848d61073f565b90505b8b8310156110df576110608389896111ad565b1561109e57607684106110855760405162461bcd60e51b81526004016107ff90613a18565b8285856078811061109257fe5b60200201526001909301925b6001918201918160018111156110b057fe5b146110c5576110c08b8e8461186a565b6110d8565b6110d86110d38c8f8561186a565b61199b565b925061104d565b6001891515141561110d576110f58c89896111ad565b1561110d578b85856078811061110757fe5b60200201525b60008411801561112a575061112a85600186036078811061038757fe5b1561119a5760008b60400151600181111561114157fe5b14801561114e5750600184115b801561115a5750828c14155b1561119a5784846078811061116b57fe5b602002015185600186036078811061117f57fe5b602002015284846078811061119057fe5b6020020160008152505b509293505050505b979650505050505050565b6000818311156111bf57506000610808565b8383111580156111cf5750818411155b15610a3f57506001610808565b600080806111ef62015180855b046119ca565b50915091506107378282611a60565b600061073762015180836111e9565b6060840151600090158061121f575081155b1561122b575081610737565b600161123885858861073f565b600181111561124357fe5b14611259576112548583600161186a565b610c31565b610c316110d38684600161186a565b60008082600c81111561127757fe5b141561128557506001610b17565b600182600c81111561129357fe5b14156112a25750600019610b17565b600682600c8111156112b057fe5b14156112be57506001610b17565b600782600c8111156112cc57fe5b14156112db5750600019610b17565b600282600c8111156112e957fe5b14156112f757506001610b17565b600382600c81111561130557fe5b14156113145750600019610b17565b60405162461bcd60e51b81526004016107ff90613c20565b600080600061133a85610b28565b9092509050601c82601c81111561134d57fe5b141561135e57600092505050610737565b600a82601c81111561136c57fe5b141561137d57600092505050610737565b600c82601c81111561138b57fe5b141561139c57600092505050610737565b600d82601c8111156113aa57fe5b14156113bb57600092505050610737565b601282601c8111156113c957fe5b14156113da57600092505050610737565b600b82601c8111156113e857fe5b14156113f957600092505050610737565b600382601c81111561140757fe5b14156114225761141987878387611ae6565b92505050610737565b600282601c81111561143057fe5b14156114425761141987878387611ba0565b600982601c81111561145057fe5b14156114625761141987878387611bde565b600882601c81111561147057fe5b14156114825761141987878387611c4d565b600482601c81111561149057fe5b14156114a25761141987878387611c6e565b601482601c8111156114b057fe5b14156114c25761141987878387611d1f565b600782601c8111156114d057fe5b14156114e25761141987878387611d3d565b601182601c8111156114f057fe5b14156115025761141987878387611df4565b60405162461bcd60e51b81526004016107ff90613ab4565b6000821580611527575081155b1561153457506000610b5f565b826000191480156115485750600160ff1b82145b156115655760405162461bcd60e51b81526004016107ff90613c74565b8282028284828161157257fe5b05146115905760405162461bcd60e51b81526004016107ff90613c74565b670de0b6b3a76400008105806107375760405162461bcd60e51b81526004016107ff90613b8d565b6115c06130a8565b6000806115cc85610b28565b9092509050601c82601c8111156115df57fe5b14156115f15761141987878387611e7e565b600382601c8111156115ff57fe5b14156116115761141987878387611f1d565b600282601c81111561161f57fe5b14156116315761141987878387611f87565b600a82601c81111561163f57fe5b14156116515761141987878387611fce565b600982601c81111561165f57fe5b1415611671576114198787838761204e565b600882601c81111561167f57fe5b14156116915761141987878387611e7e565b600482601c81111561169f57fe5b14156116b157611419878783876120a7565b601482601c8111156116bf57fe5b14156116d1576114198787838761218d565b600782601c8111156116df57fe5b14156116f15761141987878387611e7e565b600c82601c8111156116ff57fe5b14156117115761141987878387612225565b600d82601c81111561171f57fe5b141561173157611419878783876122c1565b601282601c81111561173f57fe5b14156117515761141987878387612447565b601182601c81111561175f57fe5b1415611771576114198787838761254a565b600b82601c81111561177f57fe5b14156117915761141987878387612581565b60405162461bcd60e51b81526004016107ff90613f05565b600060018260018111156117b957fe5b14156117fe576117c88361266c565b600614156117e2576117db83600261267f565b9050610b5f565b6117eb8361266c565b600714156117fe576117db83600161267f565b5090919050565b600061181462015180836111e9565b509392505050565b6000600182600181111561182c57fe5b14156117fe5761183b8361266c565b6006141561184e576117db836001612694565b6118578361266c565b600714156117fe576117db836002612694565b600080808560200151600581111561187e57fe5b1415611899578451610c02908590850263ffffffff61267f16565b6001856020015160058111156118ab57fe5b14156118c9578451610c02908590850260070263ffffffff61267f16565b6002856020015160058111156118db57fe5b14156118f6578451610c02908590850263ffffffff6126a916565b60038560200151600581111561190857fe5b1415611926578451610c02908590850260030263ffffffff6126a916565b60048560200151600581111561193857fe5b1415611956578451610c02908590850260060263ffffffff6126a916565b60058560200151600581111561196857fe5b1415611983578451610c02908590850263ffffffff61272316565b60405162461bcd60e51b81526004016107ff90613a66565b6000806000806119aa8561274a565b9194509250905060006119bd8484611a60565b905061082a848483612768565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281611a2157fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480611a715750816003145b80611a7c5750816005145b80611a875750816007145b80611a925750816008145b80611a9d575081600a145b80611aa8575081600c145b15611ab55750601f610b5f565b81600214611ac55750601e610b5f565b611ace83612782565b611ad957601c611adc565b601d5b60ff169392505050565b6000808561010001516001811115611afa57fe5b1415611b1e57846103a00151611b138660400151611268565b60000b029050610737565b6000611b69611b408660200151886080015189602001518a6101e00151610f58565b611b598689608001518a602001518b6101e00151610f58565b8860600151896101e001516127a7565b905061082a611b8e8660e00151610bf6896103a001518561151a90919063ffffffff16565b6101208701519063ffffffff6128a416565b6000611bbf856104200151866102e001516128a490919063ffffffff16565b611bcc8660400151611268565b6000190260000b029050949350505050565b600080611c01611b408660200151886080015189602001518a6101e00151610f58565b905061082a611c3b611c298760e00151610bf68961014001518661151a90919063ffffffff16565b6101008801519063ffffffff6128a416565b6101608701519063ffffffff61151a16565b60008360e00151611c618660400151611268565b60000b0295945050505050565b600080611c91611b408660200151886080015189602001518a6101e00151610f58565b905061082a611cfa611cb98760e00151610bf68961014001518661151a90919063ffffffff16565b876101000151886101a001510303611cd48960400151611268565b60000b028760e00151611cea8a60400151611268565b60000b029063ffffffff6128ea16565b611d078860400151611268565b60000b8761018001510261151a90919063ffffffff16565b6000610c318460e0015185610180015161151a90919063ffffffff16565b600080611d60611b408660200151886080015189602001518a6101e00151610f58565b905060018660e001516003811115611d7457fe5b1415611d9957856103e00151611d8d8760400151611268565b60000b02915050610737565b60028660e001516003811115611dab57fe5b1415611dde57611dd18560e00151610bf6886103e001518461151a90919063ffffffff16565b611d8d8760400151611268565b60e0850151611dd190829063ffffffff61151a16565b600080611e17611b408660200151886080015189602001518a6101e00151610f58565b9050611e63611e3c8660e00151610bf68861014001518561151a90919063ffffffff16565b610100870151610440890151611e579163ffffffff6128a416565b9063ffffffff6128a416565b611e708760400151611268565b60000b029695505050505050565b611e866130a8565b6000611ea8611b408660200151886080015189602001518a6101e00151610f58565b9050611edf611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b6101008701519063ffffffff6128a416565b61010086015260e08501516103a0870151611f0a91611b8e918491610bf6919063ffffffff61151a16565b6101208601525050506020820152919050565b611f256130a8565b6000611f47611b408660200151886080015189602001518a6101e00151610f58565b9050611f6c611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015250506000610120840152506020820152919050565b611f8f6130a8565b846102e00151611fa28660400151611268565b60000b0260e0850152505061030083015161014083015260208201526103209091015161010082015290565b611fd66130a8565b6000611ff8611b408660200151886080015189602001518a6101e00151610f58565b9050612020611ecd611c2983610bf68960e001518a610140015161151a90919063ffffffff16565b50600061010086015260e08501516103a0870151611f0a91611b8e918491610bf6919063ffffffff61151a16565b6120566130a8565b6000612078611b408660200151886080015189602001518a6101e00151610f58565b600061010087015260e08601516103a0880151919250611f0a91611b8e918491610bf69163ffffffff61151a16565b6120af6130a8565b60006120d1611b408660200151886080015189602001518a6101e00151610f58565b90506120f6611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015260e08501516103a087015161212191611b8e918491610bf6919063ffffffff61151a16565b6101208601526101008501516101a086015161217b916121579161214a9163ffffffff6128fa16565b611cd48960400151611268565b6121648860400151611268565b60000b028660e001516128fa90919063ffffffff16565b60e08601525050506020820152919050565b6121956130a8565b60006121b7611b408660200151886080015189602001518a6101e00151610f58565b90506121dc611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015260e08501516103a087015161220791611b8e918491610bf6919063ffffffff61151a16565b6101208601525050600060e084015250600482526020820152919050565b61222d6130a8565b600061224f611b408660200151886080015189602001518a6101e00151610f58565b9050612274611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015260e08501516103a087015161229f91611b8e918491610bf6919063ffffffff61151a16565b6101208601525050506103809290920151610140820152602081019190915290565b6122c96130a8565b610360850151610340860151610140860151908402909101906000906122f690839063ffffffff6128fa16565b9050808761048001511280156123195750866104e0015160001902876104800151125b1561232a5750610480860151612346565b866104e001516000190281121561234657506104e08601516000035b61014086015161235c908263ffffffff6128a416565b91508187610480015112801561237b5750866104a00151876104800151125b1561238d5786610480015191506123a3565b866104a001518212156123a357866104a0015191505b60006123ee6123c588602001518a608001518b602001518c6101e00151610f58565b6123de888b608001518c602001518d6101e00151610f58565b8a606001518b6101e001516127a7565b905061242561241382610bf68a60e001518b610140015161151a90919063ffffffff16565b6101008901519063ffffffff6128a416565b6101008801525050610140850152505060006101a08301526020820152919050565b61244f6130a8565b6000612471611b408660200151886080015189602001518a6101e00151610f58565b9050612496611ecd82610bf68860e0015189610140015161151a90919063ffffffff16565b61010086015260e08501516103a08701516124c191611b8e918491610bf6919063ffffffff61151a16565b61012086015260018660c0015160038111156124d957fe5b14806124f4575060038660c0015160038111156124f257fe5b145b156125025760006101608601525b60028660c00151600381111561251457fe5b148061252f575060038660c00151600381111561252d57fe5b145b1561253d5760006101808601525b5050506020820152919050565b6125526130a8565b5050600060e0830181905261014083018190526101008301819052610120830152600582526020820152919050565b6125896130a8565b600084604001516000146125a15784604001516125ba565b6125ba8487608001518860200151896101e00151610e0c565b610500870151604001519091508390600090156125f55760006125e289610500015185612940565b90508083116125f357600180895291505b505b876105200151604001518015612609575080155b1561263857600061261f89610520015185612940565b90508083116126315760028852612636565b600388525b505b60408701516126605761265a8689608001518a602001518b6101e00151610e0c565b60408801525b50949695505050505050565b6007620151809091046003010660010190565b620151808102820182811015610b5f57600080fd5b620151808102820382811115610b5f57600080fd5b60008080806126bb62015180876111e9565b600c9188016000198101838104949094019650945092509006600101915060006126e58484611a60565b9050808211156126f3578091505b62015180870662015180612708868686612a6c565b020194508685101561271957600080fd5b5050505092915050565b600080808061273562015180876111e9565b91870194509250905060006126e58484611a60565b6000808061275b62015180856111e9565b9196909550909350915050565b600062015180612779858585612a6c565b02949350505050565b60006004820615801561279757506064820615155b80610b5f57505061019090061590565b6000848410156127c95760405162461bcd60e51b81526004016107ff90613d69565b60008360058111156127d757fe5b14156127e757610c028585612ae8565b60018360058111156127f557fe5b141561280557610c028585612bfc565b600283600581111561281357fe5b141561282357610c028585612c27565b600483600581111561283157fe5b141561284157610c028585612c46565b600383600581111561284f57fe5b141561286057610c02858584612d07565b600583600581111561286e57fe5b141561288c5760405162461bcd60e51b81526004016107ff90613cbb565b60405162461bcd60e51b81526004016107ff90613b01565b60008282018183128015906128b95750838112155b806128ce57506000831280156128ce57508381125b6108085760405162461bcd60e51b81526004016107ff90613bdf565b6000818313156117fe5750919050565b600081830381831280159061290f5750838113155b80612924575060008312801561292457508381135b6108085760405162461bcd60e51b81526004016107ff90613f5b565b600080808460200151600581111561295457fe5b141561297457835161296d90849063ffffffff61267f16565b9050610808565b60018460200151600581111561298657fe5b14156129a257835161296d90849060070263ffffffff61267f16565b6002846020015160058111156129b457fe5b14156129cd57835161296d90849063ffffffff6126a916565b6003846020015160058111156129df57fe5b14156129fb57835161296d90849060030263ffffffff6126a916565b600484602001516005811115612a0d57fe5b1415612a2957835161296d90849060060263ffffffff6126a916565b600584602001516005811115612a3b57fe5b1415612a5457835161296d90849063ffffffff61272316565b60405162461bcd60e51b81526004016107ff90613e3d565b60006107b2841015612a7d57600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281612ab957fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b600080612af484612ddd565b90506000612b0184612ddd565b90506000612b0e86612df5565b612b1a5761016d612b1e565b61016e5b61ffff16905081831415612b5057612b4681612b3a8888612e12565b9063ffffffff612e2d16565b9350505050610b5f565b6000612b5b86612df5565b612b675761016d612b6b565b61016e5b61ffff1690506000612b9c83612b3a8a612b97612b8f8a600163ffffffff612ee916565b600180612768565b612e12565b90506000612bb983612b3a612bb388600180612768565b8b612e12565b9050612bef612bdf6001612bd3888a63ffffffff612f0e16565b9063ffffffff612f0e16565b611e57848463ffffffff6128a416565b9998505050505050505050565b6000610808610168612b3a62015180612c1b868863ffffffff612f0e16565b9063ffffffff612f5016565b600061080861016d612b3a62015180612c1b868863ffffffff612f0e16565b6000806000806000806000612c5a8961274a565b975095509350612c698861274a565b945092509050601f861415612c7d57601e95505b82601f1415612c8b57601e92505b6000612c9d848863ffffffff6128fa16565b90506000612cb1848863ffffffff6128fa16565b90506000612cc5848863ffffffff6128fa16565b9050612cf7610168612b3a85611e57612ce587601e63ffffffff612f9216565b611e578761016863ffffffff612f9216565b9c9b505050505050505050505050565b6000806000806000806000612d1b8a61274a565b975095509350612d2a8961274a565b945092509050612d398a6111dc565b861415612d4557601e95505b8789148015612d545750816002145b158015612d685750612d65896111dc565b83145b15612d7257601e92505b6000612d84848863ffffffff6128fa16565b90506000612d98848863ffffffff6128fa16565b90506000612dac848863ffffffff6128fa16565b9050612dcc610168612b3a85611e57612ce587601e63ffffffff612f9216565b9d9c50505050505050505050505050565b6000612dec62015180836111e9565b50909392505050565b600080612e0562015180846111e9565b5050905061080881612782565b600081831115612e2157600080fd5b50620151809190030490565b600081612e4c5760405162461bcd60e51b81526004016107ff90613f9f565b82612e5957506000610b5f565b670de0b6b3a764000083810290848281612e6f57fe5b0514612e8d5760405162461bcd60e51b81526004016107ff90613df7565b82600019148015612ea15750600160ff1b84145b15612ebe5760405162461bcd60e51b81526004016107ff90613df7565b6000838281612ec957fe5b059050806107375760405162461bcd60e51b81526004016107ff90613d18565b6000828201838110156108085760405162461bcd60e51b81526004016107ff90613b56565b600061080883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ffd565b600061080883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613029565b600082612fa157506000610b5f565b82600019148015612fb55750600160ff1b82145b15612fd25760405162461bcd60e51b81526004016107ff90613db0565b82820282848281612fdf57fe5b05146108085760405162461bcd60e51b81526004016107ff90613db0565b600081848411156130215760405162461bcd60e51b81526004016107ff91906139c5565b505050900390565b6000818361304a5760405162461bcd60e51b81526004016107ff91906139c5565b50600083858161305657fe5b0495945050505050565b60405180610f0001604052806078906020820280368337509192915050565b604080516080810190915260008082526020820190815260200160008152600060209091015290565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b0381168114610b5f57600080fd5b803560098110610b5f57600080fd5b8035610b5f81614100565b8035610b5f8161410d565b8035600d8110610b5f57600080fd5b803560138110610b5f57600080fd5b803560048110610b5f57600080fd5b600061084082840312156131bd578081fd5b50919050565b6000608082840312156131d4578081fd5b6131de60806140c8565b90508135815260208201356131f28161410d565b6020820152604082013561320581614100565b60408201526060820135613218816140ef565b606082015292915050565b600060608284031215613234578081fd5b61323e60606140c8565b90508135815260208201356132528161410d565b60208201526040820135613265816140ef565b604082015292915050565b600061028082840312156131bd578081fd5b600060208284031215613293578081fd5b6108088383613142565b6000602082840312156132ae578081fd5b5035919050565b600080600080608085870312156132ca578283fd5b843593506132db8660208701613159565b925060408501356132eb81614100565b9396929550929360600135925050565b6000806000806000610d808688031215613313578283fd5b8535945061332487602088016131ab565b9350613334876108608801613270565b9250610ae0860135613345816140ef565b915061335587610b008801613270565b90509295509295909350565b600060208284031215613372578081fd5b610808838361317e565b60006020828403121561338d578081fd5b813561080881614100565b600080600060c084860312156133ac578081fd5b83356133b781614100565b9250602084013591506133cd85604086016131c3565b90509250925092565b6000602082840312156133e7578081fd5b8135601d8110610808578182fd5b60008060408385031215613407578182fd5b82356134128161411a565b946020939093013593505050565b60006108408284031215613432578081fd5b61080883836131ab565b600080600080610b008587031215613452578182fd5b61345c86866131ab565b935061346c866108408701613270565b9396939550505050610ac082013591610ae0013590565b60008060006108808486031215613498578081fd5b6134a285856131ab565b925061084084013591506108608401356134bb8161411a565b809150509250925092565b600080600061088084860312156134db578081fd5b6134e585856131ab565b956108408501359550610860909401359392505050565b6000806000806108a08587031215613512578182fd5b61351c86866131ab565b93506108408501359250610860850135915061088085013561353d8161411a565b939692955090935050565b6000610840828403121561355a578081fd5b6135656105e06140c8565b61356f848461318d565b815261357e8460208501613168565b6020820152613590846040850161317e565b60408201526135a28460608501613173565b60608201526135b48460808501613159565b60808201526135c68460a08501613168565b60a08201526135d88460c0850161319c565b60c08201526135ea8460e0850161319c565b60e08201526101006135fe85828601613168565b9082015261012061361185858301613142565b9082015261014061362485858301613142565b90820152610160838101359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013590820152610260808401359082015261028080840135908201526102a080840135908201526102c080840135908201526102e08084013590820152610300808401359082015261032080840135908201526103408084013590820152610360808401359082015261038080840135908201526103a080840135908201526103c080840135908201526103e08084013590820152610400808401359082015261042080840135908201526104408084013590820152610460808401359082015261048080840135908201526104a080840135908201526104c080840135908201526104e0808401359082015261050061377685828601613223565b9082015261056061378985858301613223565b6105208301526105c061379e868287016131c3565b6105408401526137b28661064087016131c3565b828401526137c4866106c087016131c3565b6105808401526137d88661074087016131c3565b6105a08401526137ec866107c087016131c3565b90830152509392505050565b600060808284031215613809578081fd5b61080883836131c3565b6000610280808385031215613826578182fd5b61382f816140c8565b6138398585613173565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b600080600080608085870312156132ca578182fd5b6006811061392f57fe5b9052565b6020808252825182820181905260009190848201906040850190845b8181101561396b5783518352928401929184019160010161394f565b50909695505050505050565b901515815260200190565b90815260200190565b602081016013831061399957fe5b91905290565b602081016002831061399957fe5b60408101601d84106139bb57fe5b9281526020015290565b6000602080835283518082850152825b818110156139f1578581018301518582016040015282016139d5565b81811115613a025783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b6020808252602d908201527f414e4e456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526036908201527f414e4e456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b600061028082019050613ff7828451613925565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff811182821017156140e757600080fd5b604052919050565b80151581146140fd57600080fd5b50565b600281106140fd57600080fd5b600681106140fd57600080fd5b601d81106140fd57600080fdfea2646970667358221220ce35e31203c8582c2be7a88ba589e6130dc609a274a5b8f4b9137736f240807264736f6c634300060b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
