{
  "contractName": "CERTFSTF",
  "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": [
        {
          "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": [
        {
          "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": "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"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"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\":[{\"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\":[{\"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\":\"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\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"details\":\"The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \\\"M\\\" period unit or multiple thereof\",\"params\":{\"cycle\":\"the cycle struct\",\"eomc\":\"the end of month convention to adjust\",\"startTime\":\"timestamp of the cycle start\"},\"returns\":{\"_0\":\"the adjusted end of month convention\"}},\"computeEventTimeForEvent(bytes32,uint8,uint8,uint256)\":{\"details\":\"For optimization reasons not located in EventUtil by applying the BDC specified in the terms\"}},\"title\":\"STF\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"notice\":\"This function makes an adjustment on the end of month convention.\"},\"computeEventTimeForEvent(bytes32,uint8,uint8,uint256)\":{\"notice\":\"Returns the event time for a given schedule time\"},\"getEpochOffset(uint8)\":{\"notice\":\"Returns the epoch offset for a given event type to determine the correct order of events if multiple events have the same timestamp\"},\"shiftCalcTime(uint256,uint8,uint8,uint256)\":{\"notice\":\"Used in POFs and STFs for DCFs. No shifting is applied if a Calc/Shift instead of Shift/Calc BDC is provided.\"}},\"notice\":\"Contains all state transition functions (STFs) for CERTF contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@atpar/actus-solidity/contracts/Engines/CERTF/CERTFSTF.sol\":\"CERTFSTF\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@atpar/actus-solidity/contracts/Core/ACTUSConstants.sol\":{\"keccak256\":\"0xd7588866afdab6298dd5b64c5fe0ca63230236538d711932e7a5a17928d1226b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2a0678d5f895239119f463a3ae8a58c5c27b872c91db1cd4253ce5866481c6cd\",\"dweb:/ipfs/QmPXsMXFf1Qar8JCnKTL6Nizf63sZEQQt7XosrdeEnG2CE\"]},\"@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol\":{\"keccak256\":\"0x4374a4c79ef02bb008994431870badedd532d09639fef8d7378039faee88d4dd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c0d32929c237f8d04ff4117611292f874bb1dd785b8ec94c04389d608c11481c\",\"dweb:/ipfs/QmVu3awVGWDvqMCjPhmzcCQCRg4VNr5XxcDRWDECTr17TV\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/BusinessDayConventions.sol\":{\"keccak256\":\"0xb67309595d06a957324467896ed9ece5db6c064a40733528d2405593d083f358\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a77e96b548901c4ee87943de5a7093d178bffe1daa72b6e303ddc1fac93f5173\",\"dweb:/ipfs/QmctKP5Hp7B4YtzzC5q3cRJJiiPS4a5US6vpHDb94paaFT\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/ContractRoleConventions.sol\":{\"keccak256\":\"0x0e86e103607557626fc092ae2c9e2ea643115640a0b212ec34ef074edb3cc048\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://91386c9f6d3f83f6712eb0cb6378cfb7de4ef9745280e4ac7e12bad1dd97c4b3\",\"dweb:/ipfs/QmSJ9EoPorkSrhKSNhM9WBYMTtYuLqjHCpPThf8KHWRp7r\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/DayCountConventions.sol\":{\"keccak256\":\"0x7147f1662bbd8abd04dffe454db3743828bae4476621ff158c94dd967b8573e1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d3be9ed484ad75d87b485d7c779d72b980c711735ed7e2ebc9622949a51857a0\",\"dweb:/ipfs/QmVdyMD4PW8wMdhbxoQBqAVNNN7fRwvpTVpCWKBLbLoqmh\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol\":{\"keccak256\":\"0xe004912bd32ef22ac6ee91f35a3855b06492d8a89f585f1a508c1c26349fd880\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e70d558bee746b797cdcadf84d5c9cd1b77fc6e99a089524ecaeb91201c71dcd\",\"dweb:/ipfs/QmcxpSKn5ZG4DPrSkm1Pxd21So6NKcHdiX5zfpExD5eLpv\"]},\"@atpar/actus-solidity/contracts/Core/Core.sol\":{\"keccak256\":\"0x0863cccef5f0e90e295c9b913a7d18b7e029cbd33179d4d23b2e5c8479b2077b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d7a9fb13a29e64eaad1e97129952d23c6be6e2c5224dfdd0b62766330b05efd1\",\"dweb:/ipfs/QmUyTmuSfv3kDw4wGrP7ZemJJcxWRNRPYvwNc3WEC1YWoR\"]},\"@atpar/actus-solidity/contracts/Core/SignedMath.sol\":{\"keccak256\":\"0x179745be164f4540d848a50eeb8aea4ec3a0ddabc50f4c122c41ec0463e849c7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e1088b178902de60c611c2dffd2c8943cc7b68988c9083936b760864775db7da\",\"dweb:/ipfs/QmV9XYTU6a8nPzoJv9FjRV4Z2rfbymGGARmzka57ydD1FG\"]},\"@atpar/actus-solidity/contracts/Core/Utils/CycleUtils.sol\":{\"keccak256\":\"0x230700c45141dbc7973f813d1eae8ea2fe3a804489b7f29f46d44ac5d5f12048\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a2bebe3ddd62e9c2ede6a298ef956b8315198da601223a3900d07490dab3b7f1\",\"dweb:/ipfs/QmWyQxUsCjGMRKmxseE61qaipeqHVcZ6tLhVXvLfKnFkxo\"]},\"@atpar/actus-solidity/contracts/Core/Utils/EventUtils.sol\":{\"keccak256\":\"0x9995f89d4c5981ed389e941f578414eb901a4fde0b2eb5d815a43d86a9f53d98\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bc3b3a4f33554f80e19328158ff913d700ff8133d08f434b33a846852cb927dd\",\"dweb:/ipfs/QmawYPv9PguBqrFN5YquvUvbYC2MdtTC4Zkyj3uGxiieHW\"]},\"@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol\":{\"keccak256\":\"0xb549e34dc631989f8aae1b8a397bf77598b8c018860645a627d2929229543a79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8a0ef5e2ad69ef87b9fc2beeed66336b3857c576efb9833b40a1be2ee35786fc\",\"dweb:/ipfs/QmT33MWqdjecGoPj8Js6a5fgESTcGW5vbQqYamKRDJZnhS\"]},\"@atpar/actus-solidity/contracts/Core/Utils/Utils.sol\":{\"keccak256\":\"0xeb3b016061350187b61618b1f0fed88e3dcc6feb8098a873ac55ae861a61a280\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://eff5591bd3ea0d66b85c0d0ed9d92388946f6ee67e8079656a828cc7a94d6bf1\",\"dweb:/ipfs/QmZPfJpENC62LEZWqWDnu8LmTrrv6CDtJkbTdQtdNpuDds\"]},\"@atpar/actus-solidity/contracts/Engines/CERTF/CERTFSTF.sol\":{\"keccak256\":\"0xd3bfa863da28b95bd3dfee36090dfbea1544c324fcc5f6464f8b909fcbb3e2b1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b3411e7468000110f78ed58878543a4206ebe31a34301ccc58570fe3dca01c5e\",\"dweb:/ipfs/QmNiNfEbNHsUFZZmAi8kCPYY9ECe7arXNxkL6HN6X3fk4P\"]},\"@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\":{\"keccak256\":\"0x679533db9ba3257086015c0435c7d0de7a0a2f352a9de725db294e3f42c17391\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c586a5d8d9a654840c3655ccd4e47458d1e781c7542ec6fd2c29638b0dee57d\",\"dweb:/ipfs/QmeoQpnTMU4pa4iwKJcKmbNm7P54UCxux2G9rJyTCyq8GZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xaa0e11a791bc975d581a4f5b7a8d9c16a880a354c89312318ae072ae3e740409\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://982d8b344f76193834260436d74c81e5a8f9e89106bb4cd72bbaabda4f3f59c2\",\"dweb:/ipfs/QmSrvP5TkQRhKDVCTpsV3uaKLBhkt7PjUY89vdtM9o5ybK\"]},\"openzeppelin-solidity/contracts/math/SignedSafeMath.sol\":{\"keccak256\":\"0xb2db870ccd849f107e3196d346fc4983eb9a041d117b9ff3a53950df606658b7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0add6dbdceb130d5cd140b8106e7884606dce98e817b3547e0967b76921bd473\",\"dweb:/ipfs/QmRUhmQKxoVFhHaQKHPNUYeSty1rw9TDcDPB5PdDUkqvbg\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610990806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063aaf5eb6811610071578063aaf5eb6814610133578063c40c5a981461013b578063e05a66e014610143578063e726d68014610156578063edc0465f1461013b578063f5586e0514610169576100a9565b8063179331f3146100ae5780631a2e165d146100d75780636f37e55b146100f757806372540003146100ff578063811322fb14610120575b600080fd5b6100c16100bc36600461077d565b61017c565b6040516100ce919061088b565b60405180910390f35b6100ea6100e5366004610733565b61024c565b6040516100ce9190610882565b6100ea610273565b61011261010d36600461071b565b61027f565b6040516100ce92919061089f565b6100ea61012e366004610826565b6102a8565b6100ea6102bc565b6100ea6102c1565b6100ea610151366004610842565b6102c6565b6100ea61016436600461086d565b6102e4565b6100ea61017736600461086d565b610437565b6000600184600181111561018c57fe5b14156102085761019b836104ab565b6101a4846104cd565b1480156101f357506002826020015160058111156101be57fe5b14806101d957506003826020015160058111156101d757fe5b145b806101f357506004826020015160058111156101f157fe5b145b1561020057506001610245565b506000610245565b600084600181111561021657fe5b141561022457506000610245565b60405162461bcd60e51b815260040161023c906108b7565b60405180910390fd5b9392505050565b6000806102588661027f565b915050610267818686866102e4565b9150505b949350505050565b670de0b6b3a764000081565b6000808060f884901c601c81111561029357fe5b92505067ffffffffffffffff83169050915091565b600081601c8111156102b657fe5b92915050565b601281565b607881565b60008160f884601c8111156102d757fe5b60ff16901b179392505050565b6000818514156102f557508361026b565b600184600881111561030357fe5b148061031a5750600384600881111561031857fe5b145b156103305761032985846104dc565b905061026b565b600284600881111561033e57fe5b14806103555750600484600881111561035357fe5b145b1561039957600061036686856104dc565b905061037186610538565b61037a82610538565b141561038757905061026b565b610391868561054f565b91505061026b565b60058460088111156103a757fe5b14806103be575060078460088111156103bc57fe5b145b156103cd57610329858461054f565b60068460088111156103db57fe5b14806103f2575060088460088111156103f057fe5b145b1561042e576000610403868561054f565b905061040e86610538565b61041782610538565b141561042457905061026b565b61039186856104dc565b50929392505050565b6000600384600881111561044757fe5b148061045e5750600484600881111561045c57fe5b145b806104745750600784600881111561047257fe5b145b8061048a5750600884600881111561048857fe5b145b1561049657508361026b565b6104a2858585856102e4565b95945050505050565b600080806104be62015180855b0461059d565b509150915061026b8282610633565b600061026b62015180836104b8565b600060018260018111156104ec57fe5b1415610531576104fb836106b9565b600614156105155761050e8360026106cc565b90506102b6565b61051e836106b9565b600714156105315761050e8360016106cc565b5090919050565b600061054762015180836104b8565b509392505050565b6000600182600181111561055f57fe5b14156105315761056e836106b9565b600614156105815761050e8360016106e1565b61058a836106b9565b600714156105315761050e8360026106e1565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816105f457fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806106445750816003145b8061064f5750816005145b8061065a5750816007145b806106655750816008145b80610670575081600a145b8061067b575081600c145b156106885750601f6102b6565b816002146106985750601e6102b6565b6106a1836106f6565b6106ac57601c6106af565b601d5b60ff169392505050565b6007620151809091046003010660010190565b6201518081028201828110156102b657600080fd5b6201518081028203828111156102b657600080fd5b60006004820615801561070b57506064820615155b806102b657505061019090061590565b60006020828403121561072c578081fd5b5035919050565b60008060008060808587031215610748578283fd5b8435935060208501356009811061075d578384fd5b9250604085013561076d81610933565b9396929550929360600135925050565b600080600083850360c0811215610792578384fd5b843561079d81610933565b9350602085013592506080603f19820112156107b7578182fd5b506040516080810181811067ffffffffffffffff821117156107d7578283fd5b6040908152850135815260608501356107ef8161094d565b6020820152608085013561080281610933565b604082015260a085013561081581610922565b606082015292959194509192509050565b600060208284031215610837578081fd5b813561024581610940565b60008060408385031215610854578182fd5b823561085f81610940565b946020939093013593505050565b60008060008060808587031215610748578384fd5b90815260200190565b602081016002831061089957fe5b91905290565b60408101601d84106108ad57fe5b9281526020015290565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b801515811461093057600080fd5b50565b6002811061093057600080fd5b601d811061093057600080fd5b6006811061093057600080fdfea264697066735822122026e32e15850db3a2f447d64af6755d6f0aad9f152fc9cd9377a6f49a9fadb58264736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063aaf5eb6811610071578063aaf5eb6814610133578063c40c5a981461013b578063e05a66e014610143578063e726d68014610156578063edc0465f1461013b578063f5586e0514610169576100a9565b8063179331f3146100ae5780631a2e165d146100d75780636f37e55b146100f757806372540003146100ff578063811322fb14610120575b600080fd5b6100c16100bc36600461077d565b61017c565b6040516100ce919061088b565b60405180910390f35b6100ea6100e5366004610733565b61024c565b6040516100ce9190610882565b6100ea610273565b61011261010d36600461071b565b61027f565b6040516100ce92919061089f565b6100ea61012e366004610826565b6102a8565b6100ea6102bc565b6100ea6102c1565b6100ea610151366004610842565b6102c6565b6100ea61016436600461086d565b6102e4565b6100ea61017736600461086d565b610437565b6000600184600181111561018c57fe5b14156102085761019b836104ab565b6101a4846104cd565b1480156101f357506002826020015160058111156101be57fe5b14806101d957506003826020015160058111156101d757fe5b145b806101f357506004826020015160058111156101f157fe5b145b1561020057506001610245565b506000610245565b600084600181111561021657fe5b141561022457506000610245565b60405162461bcd60e51b815260040161023c906108b7565b60405180910390fd5b9392505050565b6000806102588661027f565b915050610267818686866102e4565b9150505b949350505050565b670de0b6b3a764000081565b6000808060f884901c601c81111561029357fe5b92505067ffffffffffffffff83169050915091565b600081601c8111156102b657fe5b92915050565b601281565b607881565b60008160f884601c8111156102d757fe5b60ff16901b179392505050565b6000818514156102f557508361026b565b600184600881111561030357fe5b148061031a5750600384600881111561031857fe5b145b156103305761032985846104dc565b905061026b565b600284600881111561033e57fe5b14806103555750600484600881111561035357fe5b145b1561039957600061036686856104dc565b905061037186610538565b61037a82610538565b141561038757905061026b565b610391868561054f565b91505061026b565b60058460088111156103a757fe5b14806103be575060078460088111156103bc57fe5b145b156103cd57610329858461054f565b60068460088111156103db57fe5b14806103f2575060088460088111156103f057fe5b145b1561042e576000610403868561054f565b905061040e86610538565b61041782610538565b141561042457905061026b565b61039186856104dc565b50929392505050565b6000600384600881111561044757fe5b148061045e5750600484600881111561045c57fe5b145b806104745750600784600881111561047257fe5b145b8061048a5750600884600881111561048857fe5b145b1561049657508361026b565b6104a2858585856102e4565b95945050505050565b600080806104be62015180855b0461059d565b509150915061026b8282610633565b600061026b62015180836104b8565b600060018260018111156104ec57fe5b1415610531576104fb836106b9565b600614156105155761050e8360026106cc565b90506102b6565b61051e836106b9565b600714156105315761050e8360016106cc565b5090919050565b600061054762015180836104b8565b509392505050565b6000600182600181111561055f57fe5b14156105315761056e836106b9565b600614156105815761050e8360016106e1565b61058a836106b9565b600714156105315761050e8360026106e1565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816105f457fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806106445750816003145b8061064f5750816005145b8061065a5750816007145b806106655750816008145b80610670575081600a145b8061067b575081600c145b156106885750601f6102b6565b816002146106985750601e6102b6565b6106a1836106f6565b6106ac57601c6106af565b601d5b60ff169392505050565b6007620151809091046003010660010190565b6201518081028201828110156102b657600080fd5b6201518081028203828111156102b657600080fd5b60006004820615801561070b57506064820615155b806102b657505061019090061590565b60006020828403121561072c578081fd5b5035919050565b60008060008060808587031215610748578283fd5b8435935060208501356009811061075d578384fd5b9250604085013561076d81610933565b9396929550929360600135925050565b600080600083850360c0811215610792578384fd5b843561079d81610933565b9350602085013592506080603f19820112156107b7578182fd5b506040516080810181811067ffffffffffffffff821117156107d7578283fd5b6040908152850135815260608501356107ef8161094d565b6020820152608085013561080281610933565b604082015260a085013561081581610922565b606082015292959194509192509050565b600060208284031215610837578081fd5b813561024581610940565b60008060408385031215610854578182fd5b823561085f81610940565b946020939093013593505050565b60008060008060808587031215610748578384fd5b90815260200190565b602081016002831061089957fe5b91905290565b60408101601d84106108ad57fe5b9281526020015290565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b801515811461093057600080fd5b50565b6002811061093057600080fd5b601d811061093057600080fd5b6006811061093057600080fdfea264697066735822122026e32e15850db3a2f447d64af6755d6f0aad9f152fc9cd9377a6f49a9fadb58264736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "233:7086:99:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "233:7086:99:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1010:924:78;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;631:346:84;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;298:52:73:-;;;:::i;487:293:82:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;956:145::-;;;;;;:::i;:::-;;:::i;254:38:73:-;;;:::i;356:44::-;;;:::i;234:247:82:-;;;;;;:::i;:::-;;:::i;1599:2214:75:-;;;;;;:::i;:::-;;:::i;648:583::-;;;;;;:::i;:::-;;:::i;1010:924:78:-;1185:20;1233:24;1225:4;:32;;;;;;;;;1221:618;;;1483:53;1526:9;1483:42;:53::i;:::-;1434:45;1469:9;1434:34;:45::i;:::-;:102;:174;;;;-1:-1:-1;1568:3:78;1557:5;:7;;;:14;;;;;;;;;:32;;;-1:-1:-1;1586:3:78;1575:5;:7;;;:14;;;;;;;;;1557:32;:50;;;-1:-1:-1;1604:3:78;1593:5;:7;;;:14;;;;;;;;;1557:50;1413:274;;;-1:-1:-1;1648:24:78;1641:31;;1413:274;-1:-1:-1;1707:23:78;1700:30;;1221:618;1759:23;1751:4;:31;;;;;;;;;1747:92;;;-1:-1:-1;1805:23:78;1798:30;;1747:92;1848:79;;-1:-1:-1;;;1848:79:78;;;;;;;:::i;:::-;;;;;;;;1010:924;;;;;;:::o;631:346:84:-;794:7;820:20;844:19;856:6;844:11;:19::i;:::-;817:46;;;913:57;928:12;942:3;947:8;957:12;913:14;:57::i;:::-;906:64;;;631:346;;;;;;;:::o;298:52:73:-;338:12;298:52;:::o;487:293:82:-;569:9;;;659:3;649:13;;;625:40;;;;;;;;603:62;-1:-1:-1;;698:32:82;;;;-1:-1:-1;487:293:82;;;:::o;956:145::-;1046:7;1084:9;1076:18;;;;;;;;1069:25;956:145;-1:-1:-1;;956:145:82:o;254:38:73:-;290:2;254:38;:::o;356:44::-;397:3;356:44;:::o;234:247:82:-;343:7;451:12;425:3;409:9;403:16;;;;;;;;395:25;;387:41;;:77;;234:247;-1:-1:-1;;;234:247:82:o;1599:2214:75:-;1800:7;1890:12;1877:9;:25;1873:47;;;-1:-1:-1;1911:9:75;1904:16;;1873:47;2003:25;1989:10;:39;;;;;;;;;:82;;;-1:-1:-1;2046:25:75;2032:10;:39;;;;;;;;;1989:82;1985:1795;;;2094:60;2134:9;2145:8;2094:39;:60::i;:::-;2087:67;;;;1985:1795;2372:26;2358:10;:40;;;;;;;;;:84;;;-1:-1:-1;2416:26:75;2402:10;:40;;;;;;;;;2358:84;2354:1426;;;2458:34;2495:60;2535:9;2546:8;2495:39;:60::i;:::-;2458:97;;2641:47;2678:9;2641:36;:47::i;:::-;2573:64;2610:26;2573:36;:64::i;:::-;:115;2569:187;;;2715:26;-1:-1:-1;2708:33:75;;2569:187;2776:61;2817:9;2828:8;2776:40;:61::i;:::-;2769:68;;;;;2354:1426;2928:25;2914:10;:39;;;;;;;;;:82;;;-1:-1:-1;2971:25:75;2957:10;:39;;;;;;;;;2914:82;2910:870;;;3019:61;3060:9;3071:8;3019:40;:61::i;2910:870::-;3301:26;3287:10;:40;;;;;;;;;:84;;;-1:-1:-1;3345:26:75;3331:10;:40;;;;;;;;;3287:84;3283:497;;;3387:35;3425:61;3466:9;3477:8;3425:40;:61::i;:::-;3387:99;;3573:47;3610:9;3573:36;:47::i;:::-;3504:65;3541:27;3504:36;:65::i;:::-;:116;3500:189;;;3647:27;-1:-1:-1;3640:34:75;;3500:189;3709:60;3749:9;3760:8;3709:39;:60::i;3283:497::-;-1:-1:-1;3797:9:75;;1599:2214;-1:-1:-1;;;1599:2214:75:o;648:583::-;848:7;902:25;888:10;:39;;;;;;;;;:95;;;-1:-1:-1;957:26:75;943:10;:40;;;;;;;;;888:95;:150;;;-1:-1:-1;1013:25:75;999:10;:39;;;;;;;;;888:150;:206;;;-1:-1:-1;1068:26:75;1054:10;:40;;;;;;;;;888:206;871:275;;;-1:-1:-1;1126:9:75;1119:16;;871:275;1163:61;1178:9;1189:10;1201:8;1211:12;1163:14;:61::i;:::-;1156:68;648:583;-1:-1:-1;;;;;648:583:75:o;6258:217:106:-;6321:16;;;6376:40;1020:12;6388:9;:27;;6376:11;:40::i;:::-;6349:67;;;;;6440:28;6456:4;6462:5;6440:15;:28::i;7362:132::-;7417:8;7447:40;1020:12;7459:9;:27;;3980:550:75;4114:7;4153:11;4141:8;:23;;;;;;;;;4137:361;;;4184:51;4225:9;4184:40;:51::i;:::-;4239:1;4184:56;4180:308;;;4267:49;4303:9;4314:1;4267:35;:49::i;:::-;4260:56;;;;4180:308;4341:51;4382:9;4341:40;:51::i;:::-;4396:1;4341:56;4337:151;;;4424:49;4460:9;4471:1;4424:35;:49::i;4337:151::-;-1:-1:-1;4514:9:75;;3980:550;-1:-1:-1;3980:550:75:o;7219:138:106:-;7276:10;7310:40;1020:12;7322:9;:27;;7310:40;-1:-1:-1;7298:52:106;7219:138;-1:-1:-1;;;7219:138:106:o;4694:551:75:-;4829:7;4868:11;4856:8;:23;;;;;;;;;4852:361;;;4899:51;4940:9;4899:40;:51::i;:::-;4954:1;4899:56;4895:308;;;4982:49;5018:9;5029:1;4982:35;:49::i;4895:308::-;5056:51;5097:9;5056:40;:51::i;:::-;5111:1;5056:56;5052:151;;;5139:49;5175:9;5186:1;5139:35;:49::i;3309:605:106:-;3365:9;;;3425:5;3450:31;;;3365:9;3507:6;3499:1;:5;;:14;;-1:-1:-1;3550:1:106;3545;3532:6;:10;;:14;3531:20;3527:24;;;;3561:9;3590:7;3573:4;3585:1;3581:5;;3573:14;:24;;-1:-1:-1;3630:1:106;3615:4;:12;;:16;3611:1;:20;3634:2;3611:25;3607:29;;3646:10;3668:4;3664:1;3659:2;:6;:13;;;;;;;-1:-1:-1;3682:8:106;3713:2;3697:4;:13;;:18;3693:22;;;-1:-1:-1;3738:2:106;3729:6;:11;-1:-1:-1;;3803:6:106;;;;3796:3;:14;:22;;;;:26;;;3768:1;3772:2;:6;;;3759:19;;;;;;;;-1:-1:-1;3729:11:106;-1:-1:-1;3796:26:106;-1:-1:-1;;;;3309:605:106:o;6480:383::-;6551:16;6583:5;6592:1;6583:10;:24;;;;6597:5;6606:1;6597:10;6583:24;:38;;;;6611:5;6620:1;6611:10;6583:38;:52;;;;6625:5;6634:1;6625:10;6583:52;:66;;;;6639:5;6648:1;6639:10;6583:66;:81;;;;6653:5;6662:2;6653:11;6583:81;:96;;;;6668:5;6677:2;6668:11;6583:96;6579:278;;;-1:-1:-1;6709:2:106;6579:278;;;6732:5;6741:1;6732:10;6728:129;;-1:-1:-1;6772:2:106;6728:129;;;6819:17;6831:4;6819:11;:17::i;:::-;:27;;6844:2;6819:27;;;6839:2;6819:27;6805:41;;;6480:383;-1:-1:-1;;;6480:383:106:o;6898:175::-;7061:1;1020:12;6998:27;;;7056:1;7048:9;7047:15;7065:1;7047:19;;6898:175::o;9033:198::-;1020:12;9157:23;;9145:35;;9198:25;;;;9190:34;;;;;10938:198;1020:12;11062:23;;11050:35;;11103:25;;;;11095:34;;;;;5820:157;5875:13;5920:1;5913:4;:8;:13;5912:36;;;;-1:-1:-1;5939:3:106;5932:4;:10;:15;;5912:36;5911:59;;;-1:-1:-1;;5961:3:106;5954:10;;:15;;5820:157::o;2203:241:-1:-;;2307:2;2295:9;2286:7;2282:23;2278:32;2275:2;;;-1:-1;;2313:12;2275:2;-1:-1;203:20;;2269:175;-1:-1;2269:175::o;2451:699::-;;;;;2647:3;2635:9;2626:7;2622:23;2618:33;2615:2;;;-1:-1;;2654:12;2615:2;216:6;203:20;2706:63;;2806:2;2876:9;2872:22;367:20;9992:1;9985:5;9982:12;9972:2;;-1:-1;;9998:12;9972:2;2814:90;-1:-1;2941:2;2994:22;;545:20;570:47;545:20;570:47;:::i;:::-;2609:541;;;;-1:-1;2949:77;;3063:2;3102:22;2133:20;;-1:-1;;2609:541::o;3157:588::-;;;;3331:9;3322:7;3318:23;3343:3;3318:23;3314:33;3311:2;;;-1:-1;;3350:12;3311:2;558:6;545:20;570:47;611:5;570:47;:::i;:::-;3402:89;-1:-1;3528:2;3567:22;;2133:20;;-1:-1;1415:4;-1:-1;;1394:19;;1390:30;1387:2;;;-1:-1;;1423:12;1387:2;;3636;8093:9;1415:4;8129:6;8125:17;8236:6;8224:10;8221:22;8200:18;8188:10;8185:34;8182:62;8179:2;;;-1:-1;;8247:12;8179:2;3636;8266:22;;;3697;;2133:20;1525:75;;1719:22;;;1059:20;1084:40;1059:20;1084:40;:::i;:::-;3528:2;1673:16;;1666:82;1415:4;1867:22;;545:20;570:47;545:20;570:47;:::i;:::-;3636:2;1821:16;;1814:82;2009:22;;;69:20;94:30;69:20;94:30;:::i;:::-;1719:22;1973:16;;1966:72;3305:440;;;;-1:-1;1977:5;;-1:-1;3305:440;-1:-1;3305:440::o;3752:271::-;;3871:2;3859:9;3850:7;3846:23;3842:32;3839:2;;;-1:-1;;3877:12;3839:2;913:6;900:20;925:48;967:5;925:48;:::i;4030:396::-;;;4166:2;4154:9;4145:7;4141:23;4137:32;4134:2;;;-1:-1;;4172:12;4134:2;913:6;900:20;925:48;967:5;925:48;:::i;:::-;4224:78;4339:2;4378:22;;;;2133:20;;-1:-1;;;4128:298::o;4433:699::-;;;;;4629:3;4617:9;4608:7;4604:23;4600:33;4597:2;;;-1:-1;;4636:12;6288:222;5210:37;;;6415:2;6400:18;;6386:124::o;6517:270::-;6668:2;6653:18;;9511:1;9501:12;;9491:2;;9517:9;9491:2;5354:74;;;6639:148;:::o;6794:359::-;6962:2;6947:18;;9624:2;9614:13;;9604:2;;9631:9;9604:2;5524:63;;;7139:2;7124:18;5210:37;6933:220;:::o;7385:416::-;7585:2;7599:47;;;5941:2;7570:18;;;8404:19;5977:34;8444:14;;;5957:55;6046:34;6032:12;;;6025:56;-1:-1;;;6101:12;;;6094:29;6142:12;;;7556:245::o;9654:111::-;9735:5;8538:13;8531:21;9713:5;9710:32;9700:2;;9756:1;;9746:12;9700:2;9694:71;:::o;10024:108::-;10107:1;10100:5;10097:12;10087:2;;10123:1;;10113:12;10266:110;10350:2;10343:5;10340:13;10330:2;;10367:1;;10357:12;10383:101;10459:1;10452:5;10449:12;10439:2;;10475:1;;10465:12",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"../../Core/Core.sol\";\n\n\n/**\n * @title STF\n * @notice Contains all state transition functions (STFs) for CERTF contracts\n */\ncontract CERTFSTF is Core {\n\n    /**\n     * State transition for CERTF issue day events\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_ID (\n        CERTFTerms memory terms,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 /* externalData */\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        state.quantity = terms.quantity;\n        state.statusDate = scheduleTime;\n\n        return state;\n    }\n\n    /**\n     * State transition for CERTF initial exchange\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_IED (\n        CERTFTerms memory /* terms */,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 /* externalData */\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        state.statusDate = scheduleTime;\n        return state;\n    }\n\n    /**\n     * State transition for CERTF coupon fixing day\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_CFD (\n        CERTFTerms memory terms,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 /* externalData */\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        if (terms.couponType == CouponType.FIX) {\n            state.couponAmountFixed = yearFraction(\n                shiftCalcTime(state.lastCouponDay, terms.businessDayConvention, terms.calendar, terms.maturityDate),\n                shiftCalcTime(scheduleTime, terms.businessDayConvention, terms.calendar, terms.maturityDate),\n                terms.dayCountConvention,\n                terms.maturityDate\n            ).floatMult(terms.nominalPrice).floatMult(terms.couponRate);\n        }\n\n        state.lastCouponDay = scheduleTime;\n        state.statusDate = scheduleTime;\n        \n        return state;\n    }\n\n\n    /**\n     * State transition for CERTF coupon payment day\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_CPD (\n        CERTFTerms memory /* terms */,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 /* externalData */\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        state.couponAmountFixed = 0;\n        state.statusDate = scheduleTime;\n        return state;\n    }\n\n\n    /**\n     * State transition for CERTF redemption fixing day\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_RFD (\n        CERTFTerms memory terms,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 externalData\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        state.exerciseAmount = int256(externalData)\n        .floatMult(terms.nominalPrice)\n        .floatMult(state.marginFactor)\n        .floatMult(state.adjustmentFactor);\n\n        state.statusDate = scheduleTime;\n\n        return state;\n    }\n\n    /**\n     * State transition for CERTF exercise day\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_XD (\n        CERTFTerms memory /* terms */,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 externalData\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        state.exerciseQuantity = int256(externalData);\n        state.statusDate = scheduleTime;\n\n        return state;\n    }\n\n    /**\n     * State transition for CERTF Redemption Payment Day\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_RPD (\n        CERTFTerms memory /* terms */,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 /* externalData */\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        state.quantity = state.quantity.sub(state.exerciseQuantity);\n        state.exerciseQuantity = 0;\n        state.exerciseAmount = 0;\n        state.statusDate = scheduleTime;\n        \n        if (scheduleTime == state.maturityDate) {\n            state.contractPerformance = ContractPerformance.MD;\n        } else if (scheduleTime == state.terminationDate) {\n            state.contractPerformance = ContractPerformance.TD;\n        }\n\n        return state;\n    }\n\n    /**\n     * State transition for CERTF termination events\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_TD (\n        CERTFTerms memory /* terms */,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 /* externalData */\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        state.quantity = 0;\n        state.terminationDate = scheduleTime;\n        state.statusDate = scheduleTime;\n\n        return state;\n    }\n\n    /**\n     * State transition for CERTF maturity\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_MD (\n        CERTFTerms memory /* terms */,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 /* externalData */\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        state.maturityDate = scheduleTime;\n        state.statusDate = scheduleTime;\n\n        return state;\n    }\n\n    /**\n     * State transition for CERTF settlement\n     * @param state the old state\n     * @return the new state\n     */\n    function STF_CERTF_CE (\n        CERTFTerms memory terms,\n        State memory state,\n        uint256 scheduleTime,\n        bytes32 externalData\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        // handle maturity date\n        uint256 nonPerformingDate = (state.nonPerformingDate == 0)\n            ? shiftEventTime(\n                scheduleTime,\n                terms.businessDayConvention,\n                terms.calendar,\n                terms.maturityDate\n            ) : state.nonPerformingDate;\n\n        uint256 currentTimestamp = uint256(externalData);\n\n        bool isInGracePeriod = false;\n        if (terms.gracePeriod.isSet) {\n            uint256 graceDate = getTimestampPlusPeriod(terms.gracePeriod, nonPerformingDate);\n            if (currentTimestamp <= graceDate) {\n                state.contractPerformance = ContractPerformance.DL;\n                isInGracePeriod = true;\n            }\n        }\n\n        if (terms.delinquencyPeriod.isSet && !isInGracePeriod) {\n            uint256 delinquencyDate = getTimestampPlusPeriod(terms.delinquencyPeriod, nonPerformingDate);\n            if (currentTimestamp <= delinquencyDate) {\n                state.contractPerformance = ContractPerformance.DQ;\n            } else {\n                state.contractPerformance = ContractPerformance.DF;\n            }\n        }\n\n        if (state.nonPerformingDate == 0) {\n            // handle maturity date\n            state.nonPerformingDate = shiftEventTime(\n                scheduleTime,\n                terms.businessDayConvention,\n                terms.calendar,\n                terms.maturityDate\n            );\n        }\n\n        return state;\n    }\n}\n",
  "sourcePath": "@atpar/actus-solidity/contracts/Engines/CERTF/CERTFSTF.sol",
  "ast": {
    "absolutePath": "@atpar/actus-solidity/contracts/Engines/CERTF/CERTFSTF.sol",
    "exportedSymbols": {
      "CERTFSTF": [
        32322
      ]
    },
    "id": 32323,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 31815,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:99"
      },
      {
        "id": 31816,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:99"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Core.sol",
        "file": "../../Core/Core.sol",
        "id": 31817,
        "nodeType": "ImportDirective",
        "scope": 32323,
        "sourceUnit": 24036,
        "src": "101:29:99",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 31819,
              "name": "Core",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24035,
              "src": "254:4:99",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Core_$24035",
                "typeString": "contract Core"
              }
            },
            "id": 31820,
            "nodeType": "InheritanceSpecifier",
            "src": "254:4:99"
          }
        ],
        "contractDependencies": [
          22465,
          23277,
          23340,
          23895,
          24013,
          24035,
          24668,
          24758,
          24885,
          24931
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 31818,
          "nodeType": "StructuredDocumentation",
          "src": "133:99:99",
          "text": " @title STF\n @notice Contains all state transition functions (STFs) for CERTF contracts"
        },
        "fullyImplemented": true,
        "id": 32322,
        "linearizedBaseContracts": [
          32322,
          24035,
          24931,
          24668,
          24885,
          24013,
          23895,
          23340,
          22465,
          24758,
          23277
        ],
        "name": "CERTFSTF",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 31849,
              "nodeType": "Block",
              "src": "617:112:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31834,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31825,
                        "src": "627:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31836,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "quantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22666,
                      "src": "627:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31837,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31823,
                        "src": "644:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        }
                      },
                      "id": 31838,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "quantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22892,
                      "src": "644:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "627:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 31840,
                  "nodeType": "ExpressionStatement",
                  "src": "627:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31841,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31825,
                        "src": "668:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31843,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "668:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31844,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31827,
                      "src": "687:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "668:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31846,
                  "nodeType": "ExpressionStatement",
                  "src": "668:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31847,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31825,
                    "src": "717:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31833,
                  "id": 31848,
                  "nodeType": "Return",
                  "src": "710:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31821,
              "nodeType": "StructuredDocumentation",
              "src": "266:125:99",
              "text": " State transition for CERTF issue day events\n @param state the old state\n @return the new state"
            },
            "id": 31850,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_ID",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31823,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "428:23:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31822,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "428:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31825,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "461:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31824,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "461:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31827,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "489:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31826,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "489:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31829,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "519:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31828,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "519:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "418:133:99"
            },
            "returnParameters": {
              "id": 31833,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31832,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "599:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31831,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "599:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "598:14:99"
            },
            "scope": 32322,
            "src": "396:333:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 31872,
              "nodeType": "Block",
              "src": "1093:70:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31864,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31855,
                        "src": "1103:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31866,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "1103:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31867,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31857,
                      "src": "1122:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1103:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31869,
                  "nodeType": "ExpressionStatement",
                  "src": "1103:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31870,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31855,
                    "src": "1151:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31863,
                  "id": 31871,
                  "nodeType": "Return",
                  "src": "1144:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31851,
              "nodeType": "StructuredDocumentation",
              "src": "735:125:99",
              "text": " State transition for CERTF initial exchange\n @param state the old state\n @return the new state"
            },
            "id": 31873,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_IED",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31860,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31853,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "898:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31852,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "898:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31855,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "937:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31854,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "937:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31857,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "965:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31856,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "965:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31859,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "995:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31858,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "995:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "888:139:99"
            },
            "returnParameters": {
              "id": 31863,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31862,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "1075:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31861,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1075:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1074:14:99"
            },
            "scope": 32322,
            "src": "865:298:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 31946,
              "nodeType": "Block",
              "src": "1522:613:99",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_CouponType_$22564",
                      "typeString": "enum CouponType"
                    },
                    "id": 31891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31887,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31876,
                        "src": "1536:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        }
                      },
                      "id": 31888,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "couponType",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22866,
                      "src": "1536:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CouponType_$22564",
                        "typeString": "enum CouponType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31889,
                        "name": "CouponType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22564,
                        "src": "1556:10:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_CouponType_$22564_$",
                          "typeString": "type(enum CouponType)"
                        }
                      },
                      "id": 31890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FIX",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1556:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CouponType_$22564",
                        "typeString": "enum CouponType"
                      }
                    },
                    "src": "1536:34:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 31931,
                  "nodeType": "IfStatement",
                  "src": "1532:480:99",
                  "trueBody": {
                    "id": 31930,
                    "nodeType": "Block",
                    "src": "1572:440:99",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 31928,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 31892,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31878,
                              "src": "1586:5:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                "typeString": "struct State memory"
                              }
                            },
                            "id": 31894,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "couponAmountFixed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22668,
                            "src": "1586:23:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 31925,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 31876,
                                  "src": "1984:5:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 31926,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "couponRate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22896,
                                "src": "1984:16:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 31921,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 31876,
                                      "src": "1954:5:99",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                        "typeString": "struct CERTFTerms memory"
                                      }
                                    },
                                    "id": 31922,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "nominalPrice",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22888,
                                    "src": "1954:18:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31897,
                                              "name": "state",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31878,
                                              "src": "1656:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                                "typeString": "struct State memory"
                                              }
                                            },
                                            "id": 31898,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "lastCouponDay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22646,
                                            "src": "1656:19:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31899,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1677:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31900,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "businessDayConvention",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22862,
                                            "src": "1677:27:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                              "typeString": "enum BusinessDayConvention"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31901,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1706:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31902,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "calendar",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22856,
                                            "src": "1706:14:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_Calendar_$22506",
                                              "typeString": "enum Calendar"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31903,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1722:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31904,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "maturityDate",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22878,
                                            "src": "1722:18:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                              "typeString": "enum BusinessDayConvention"
                                            },
                                            {
                                              "typeIdentifier": "t_enum$_Calendar_$22506",
                                              "typeString": "enum Calendar"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 31896,
                                          "name": "shiftCalcTime",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 23056,
                                          "src": "1642:13:99",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 31905,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1642:99:99",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 31907,
                                            "name": "scheduleTime",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 31880,
                                            "src": "1773:12:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31908,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1787:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31909,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "businessDayConvention",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22862,
                                            "src": "1787:27:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                              "typeString": "enum BusinessDayConvention"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31910,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1816:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31911,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "calendar",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22856,
                                            "src": "1816:14:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_Calendar_$22506",
                                              "typeString": "enum Calendar"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31912,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1832:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31913,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "maturityDate",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22878,
                                            "src": "1832:18:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                              "typeString": "enum BusinessDayConvention"
                                            },
                                            {
                                              "typeIdentifier": "t_enum$_Calendar_$22506",
                                              "typeString": "enum Calendar"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 31906,
                                          "name": "shiftCalcTime",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 23056,
                                          "src": "1759:13:99",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 31914,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1759:92:99",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 31915,
                                          "name": "terms",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 31876,
                                          "src": "1869:5:99",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                            "typeString": "struct CERTFTerms memory"
                                          }
                                        },
                                        "id": 31916,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "dayCountConvention",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22860,
                                        "src": "1869:24:99",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_enum$_DayCountConvention_$22577",
                                          "typeString": "enum DayCountConvention"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 31917,
                                          "name": "terms",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 31876,
                                          "src": "1911:5:99",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                            "typeString": "struct CERTFTerms memory"
                                          }
                                        },
                                        "id": 31918,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "maturityDate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22878,
                                        "src": "1911:18:99",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_enum$_DayCountConvention_$22577",
                                          "typeString": "enum DayCountConvention"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 31895,
                                      "name": "yearFraction",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 23450,
                                      "src": "1612:12:99",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_enum$_DayCountConvention_$22577_$_t_uint256_$returns$_t_int256_$",
                                        "typeString": "function (uint256,uint256,enum DayCountConvention,uint256) pure returns (int256)"
                                      }
                                    },
                                    "id": 31919,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1612:331:99",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "id": 31920,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "floatMult",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 24120,
                                  "src": "1612:341:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                    "typeString": "function (int256,int256) pure returns (int256)"
                                  }
                                },
                                "id": 31923,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1612:361:99",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 31924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "floatMult",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24120,
                              "src": "1612:371:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                "typeString": "function (int256,int256) pure returns (int256)"
                              }
                            },
                            "id": 31927,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1612:389:99",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "1586:415:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 31929,
                        "nodeType": "ExpressionStatement",
                        "src": "1586:415:99"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31932,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31878,
                        "src": "2022:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31934,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastCouponDay",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22646,
                      "src": "2022:19:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31935,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31880,
                      "src": "2044:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2022:34:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31937,
                  "nodeType": "ExpressionStatement",
                  "src": "2022:34:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31938,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31878,
                        "src": "2066:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31940,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "2066:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31941,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31880,
                      "src": "2085:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2066:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31943,
                  "nodeType": "ExpressionStatement",
                  "src": "2066:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31944,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31878,
                    "src": "2123:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31886,
                  "id": 31945,
                  "nodeType": "Return",
                  "src": "2116:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31874,
              "nodeType": "StructuredDocumentation",
              "src": "1169:126:99",
              "text": " State transition for CERTF coupon fixing day\n @param state the old state\n @return the new state"
            },
            "id": 31947,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_CFD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31876,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1333:23:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31875,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "1333:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31878,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1366:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31877,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1366:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31880,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1394:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31879,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1394:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31882,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1424:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31881,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1424:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1323:133:99"
            },
            "returnParameters": {
              "id": 31886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31885,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1504:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31884,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1504:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1503:14:99"
            },
            "scope": 32322,
            "src": "1300:835:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 31975,
              "nodeType": "Block",
              "src": "2502:107:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31961,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31952,
                        "src": "2512:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31963,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "couponAmountFixed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22668,
                      "src": "2512:23:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 31964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2538:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2512:27:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 31966,
                  "nodeType": "ExpressionStatement",
                  "src": "2512:27:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31967,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31952,
                        "src": "2549:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31969,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "2549:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31970,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31954,
                      "src": "2568:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2549:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31972,
                  "nodeType": "ExpressionStatement",
                  "src": "2549:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31973,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31952,
                    "src": "2597:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31960,
                  "id": 31974,
                  "nodeType": "Return",
                  "src": "2590:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31948,
              "nodeType": "StructuredDocumentation",
              "src": "2142:127:99",
              "text": " State transition for CERTF coupon payment day\n @param state the old state\n @return the new state"
            },
            "id": 31976,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_CPD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31950,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2307:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31949,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "2307:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31952,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2346:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31951,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2346:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31954,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2374:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2374:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31956,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2404:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31955,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2404:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2297:139:99"
            },
            "returnParameters": {
              "id": 31960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31959,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2484:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31958,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2484:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2483:14:99"
            },
            "scope": 32322,
            "src": "2274:335:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32019,
              "nodeType": "Block",
              "src": "2967:246:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31990,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31981,
                        "src": "2977:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31992,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exerciseAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22662,
                      "src": "2977:20:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32006,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31981,
                            "src": "3118:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                              "typeString": "struct State memory"
                            }
                          },
                          "id": 32007,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "adjustmentFactor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22672,
                          "src": "3118:22:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32002,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 31981,
                                "src": "3079:5:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                  "typeString": "struct State memory"
                                }
                              },
                              "id": 32003,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "marginFactor",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22670,
                              "src": "3079:18:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 31998,
                                    "name": "terms",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 31979,
                                    "src": "3040:5:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                      "typeString": "struct CERTFTerms memory"
                                    }
                                  },
                                  "id": 31999,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nominalPrice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22888,
                                  "src": "3040:18:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 31995,
                                      "name": "externalData",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 31985,
                                      "src": "3007:12:99",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 31994,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3000:6:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 31993,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3000:6:99",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 31996,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3000:20:99",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 31997,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "floatMult",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 24120,
                                "src": "3000:39:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                  "typeString": "function (int256,int256) pure returns (int256)"
                                }
                              },
                              "id": 32000,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3000:59:99",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 32001,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "floatMult",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24120,
                            "src": "3000:78:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 32004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3000:98:99",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 32005,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "floatMult",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24120,
                        "src": "3000:117:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                          "typeString": "function (int256,int256) pure returns (int256)"
                        }
                      },
                      "id": 32008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3000:141:99",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "2977:164:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32010,
                  "nodeType": "ExpressionStatement",
                  "src": "2977:164:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32011,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31981,
                        "src": "3152:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32013,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "3152:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32014,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31983,
                      "src": "3171:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3152:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32016,
                  "nodeType": "ExpressionStatement",
                  "src": "3152:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32017,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31981,
                    "src": "3201:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31989,
                  "id": 32018,
                  "nodeType": "Return",
                  "src": "3194:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31977,
              "nodeType": "StructuredDocumentation",
              "src": "2616:130:99",
              "text": " State transition for CERTF redemption fixing day\n @param state the old state\n @return the new state"
            },
            "id": 32020,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_RFD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31979,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2784:23:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31978,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "2784:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31981,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2817:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31980,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2817:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31983,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2845:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31982,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2845:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31985,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2875:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31984,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2875:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2774:127:99"
            },
            "returnParameters": {
              "id": 31989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31988,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2949:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31987,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2949:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2948:14:99"
            },
            "scope": 32322,
            "src": "2751:462:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32051,
              "nodeType": "Block",
              "src": "3566:126:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32034,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32025,
                        "src": "3576:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32036,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exerciseQuantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22664,
                      "src": "3576:22:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 32039,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32029,
                          "src": "3608:12:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 32038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3601:6:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 32037,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3601:6:99",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 32040,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3601:20:99",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "3576:45:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32042,
                  "nodeType": "ExpressionStatement",
                  "src": "3576:45:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32043,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32025,
                        "src": "3631:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32045,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "3631:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32046,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32027,
                      "src": "3650:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3631:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32048,
                  "nodeType": "ExpressionStatement",
                  "src": "3631:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32049,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32025,
                    "src": "3680:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32033,
                  "id": 32050,
                  "nodeType": "Return",
                  "src": "3673:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32021,
              "nodeType": "StructuredDocumentation",
              "src": "3219:121:99",
              "text": " State transition for CERTF exercise day\n @param state the old state\n @return the new state"
            },
            "id": 32052,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_XD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32023,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3377:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32022,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "3377:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32025,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3416:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32024,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "3416:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32027,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3444:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3444:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32029,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3474:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32028,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3474:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3367:133:99"
            },
            "returnParameters": {
              "id": 32033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32032,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3548:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32031,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "3548:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3547:14:99"
            },
            "scope": 32322,
            "src": "3345:347:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32123,
              "nodeType": "Block",
              "src": "4062:467:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32066,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4072:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32068,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "quantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22666,
                      "src": "4072:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32072,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32057,
                            "src": "4108:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                              "typeString": "struct State memory"
                            }
                          },
                          "id": 32073,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exerciseQuantity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22664,
                          "src": "4108:22:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32069,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32057,
                            "src": "4089:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                              "typeString": "struct State memory"
                            }
                          },
                          "id": 32070,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "quantity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22666,
                          "src": "4089:14:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 32071,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 38819,
                        "src": "4089:18:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                          "typeString": "function (int256,int256) pure returns (int256)"
                        }
                      },
                      "id": 32074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4089:42:99",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "4072:59:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32076,
                  "nodeType": "ExpressionStatement",
                  "src": "4072:59:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32077,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4141:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32079,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exerciseQuantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22664,
                      "src": "4141:22:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 32080,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4166:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4141:26:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32082,
                  "nodeType": "ExpressionStatement",
                  "src": "4141:26:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32083,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4177:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32085,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exerciseAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22662,
                      "src": "4177:20:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 32086,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4200:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4177:24:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32088,
                  "nodeType": "ExpressionStatement",
                  "src": "4177:24:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32089,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4211:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32091,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "4211:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32092,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32059,
                      "src": "4230:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4211:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32094,
                  "nodeType": "ExpressionStatement",
                  "src": "4211:31:99"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 32098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 32095,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32059,
                      "src": "4265:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32096,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4281:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32097,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22640,
                      "src": "4281:18:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4265:34:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 32110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 32107,
                        "name": "scheduleTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32059,
                        "src": "4386:12:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32108,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32057,
                          "src": "4402:5:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        "id": 32109,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "terminationDate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22644,
                        "src": "4402:21:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4386:37:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 32119,
                    "nodeType": "IfStatement",
                    "src": "4382:118:99",
                    "trueBody": {
                      "id": 32118,
                      "nodeType": "Block",
                      "src": "4425:75:99",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 32116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32111,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32057,
                                "src": "4439:5:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                  "typeString": "struct State memory"
                                }
                              },
                              "id": 32113,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "contractPerformance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22634,
                              "src": "4439:25:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                "typeString": "enum ContractPerformance"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32114,
                                "name": "ContractPerformance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22513,
                                "src": "4467:19:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                  "typeString": "type(enum ContractPerformance)"
                                }
                              },
                              "id": 32115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TD",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4467:22:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                "typeString": "enum ContractPerformance"
                              }
                            },
                            "src": "4439:50:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                              "typeString": "enum ContractPerformance"
                            }
                          },
                          "id": 32117,
                          "nodeType": "ExpressionStatement",
                          "src": "4439:50:99"
                        }
                      ]
                    }
                  },
                  "id": 32120,
                  "nodeType": "IfStatement",
                  "src": "4261:239:99",
                  "trueBody": {
                    "id": 32106,
                    "nodeType": "Block",
                    "src": "4301:75:99",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 32104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 32099,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32057,
                              "src": "4315:5:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                "typeString": "struct State memory"
                              }
                            },
                            "id": 32101,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "contractPerformance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22634,
                            "src": "4315:25:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                              "typeString": "enum ContractPerformance"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 32102,
                              "name": "ContractPerformance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22513,
                              "src": "4343:19:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                "typeString": "type(enum ContractPerformance)"
                              }
                            },
                            "id": 32103,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "MD",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4343:22:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                              "typeString": "enum ContractPerformance"
                            }
                          },
                          "src": "4315:50:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                            "typeString": "enum ContractPerformance"
                          }
                        },
                        "id": 32105,
                        "nodeType": "ExpressionStatement",
                        "src": "4315:50:99"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32121,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32057,
                    "src": "4517:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32065,
                  "id": 32122,
                  "nodeType": "Return",
                  "src": "4510:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32053,
              "nodeType": "StructuredDocumentation",
              "src": "3698:131:99",
              "text": " State transition for CERTF Redemption Payment Day\n @param state the old state\n @return the new state"
            },
            "id": 32124,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_RPD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32062,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32055,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "3867:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32054,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "3867:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32057,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "3906:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32056,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "3906:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32059,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "3934:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32058,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3934:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32061,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "3964:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32060,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3964:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3857:139:99"
            },
            "returnParameters": {
              "id": 32065,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32064,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "4044:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32063,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "4044:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4043:14:99"
            },
            "scope": 32322,
            "src": "3834:695:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32158,
              "nodeType": "Block",
              "src": "4894:145:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32138,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32129,
                        "src": "4904:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32140,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "quantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22666,
                      "src": "4904:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 32141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4921:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4904:18:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32143,
                  "nodeType": "ExpressionStatement",
                  "src": "4904:18:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32144,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32129,
                        "src": "4932:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32146,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "terminationDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22644,
                      "src": "4932:21:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32147,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32131,
                      "src": "4956:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4932:36:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32149,
                  "nodeType": "ExpressionStatement",
                  "src": "4932:36:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32150,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32129,
                        "src": "4978:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32152,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "4978:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32153,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32131,
                      "src": "4997:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4978:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32155,
                  "nodeType": "ExpressionStatement",
                  "src": "4978:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32156,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32129,
                    "src": "5027:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32137,
                  "id": 32157,
                  "nodeType": "Return",
                  "src": "5020:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32125,
              "nodeType": "StructuredDocumentation",
              "src": "4535:127:99",
              "text": " State transition for CERTF termination events\n @param state the old state\n @return the new state"
            },
            "id": 32159,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_TD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32127,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4699:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32126,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "4699:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32129,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4738:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32128,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "4738:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32131,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4766:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32130,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4766:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32133,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4796:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32132,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4796:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4689:139:99"
            },
            "returnParameters": {
              "id": 32137,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32136,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4876:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32135,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "4876:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4875:14:99"
            },
            "scope": 32322,
            "src": "4667:372:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32187,
              "nodeType": "Block",
              "src": "5394:114:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32173,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32164,
                        "src": "5404:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32175,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22640,
                      "src": "5404:18:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32176,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32166,
                      "src": "5425:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5404:33:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32178,
                  "nodeType": "ExpressionStatement",
                  "src": "5404:33:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32179,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32164,
                        "src": "5447:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32181,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "5447:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32182,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32166,
                      "src": "5466:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5447:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32184,
                  "nodeType": "ExpressionStatement",
                  "src": "5447:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32185,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32164,
                    "src": "5496:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32172,
                  "id": 32186,
                  "nodeType": "Return",
                  "src": "5489:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32160,
              "nodeType": "StructuredDocumentation",
              "src": "5045:117:99",
              "text": " State transition for CERTF maturity\n @param state the old state\n @return the new state"
            },
            "id": 32188,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_MD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32162,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5199:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32161,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "5199:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32164,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5238:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32163,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "5238:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32166,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5266:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32165,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5266:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32168,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5296:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32167,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5296:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5189:139:99"
            },
            "returnParameters": {
              "id": 32172,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32171,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5376:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32170,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "5376:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5375:14:99"
            },
            "scope": 32322,
            "src": "5167:341:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32320,
              "nodeType": "Block",
              "src": "5853:1464:99",
              "statements": [
                {
                  "assignments": [
                    32203
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32203,
                      "mutability": "mutable",
                      "name": "nonPerformingDate",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 32320,
                      "src": "5895:25:99",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32202,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5895:7:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32221,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 32207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 32204,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32193,
                              "src": "5924:5:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                "typeString": "struct State memory"
                              }
                            },
                            "id": 32205,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "nonPerformingDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22638,
                            "src": "5924:23:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 32206,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5951:1:99",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5924:28:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 32208,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5923:30:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32218,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32193,
                        "src": "6142:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32219,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nonPerformingDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22638,
                      "src": "6142:23:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 32220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5923:242:99",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 32210,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32195,
                          "src": "6000:12:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32211,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32191,
                            "src": "6030:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                              "typeString": "struct CERTFTerms memory"
                            }
                          },
                          "id": 32212,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "businessDayConvention",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22862,
                          "src": "6030:27:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                            "typeString": "enum BusinessDayConvention"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32213,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32191,
                            "src": "6075:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                              "typeString": "struct CERTFTerms memory"
                            }
                          },
                          "id": 32214,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "calendar",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22856,
                          "src": "6075:14:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Calendar_$22506",
                            "typeString": "enum Calendar"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32215,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32191,
                            "src": "6107:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                              "typeString": "struct CERTFTerms memory"
                            }
                          },
                          "id": 32216,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "maturityDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22878,
                          "src": "6107:18:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                            "typeString": "enum BusinessDayConvention"
                          },
                          {
                            "typeIdentifier": "t_enum$_Calendar_$22506",
                            "typeString": "enum Calendar"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 32209,
                        "name": "shiftEventTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23182,
                        "src": "5968:14:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 32217,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5968:171:99",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5895:270:99"
                },
                {
                  "assignments": [
                    32223
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32223,
                      "mutability": "mutable",
                      "name": "currentTimestamp",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 32320,
                      "src": "6176:24:99",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32222,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6176:7:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32228,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 32226,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32197,
                        "src": "6211:12:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 32225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6203:7:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 32224,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6203:7:99",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 32227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6203:21:99",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6176:48:99"
                },
                {
                  "assignments": [
                    32230
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32230,
                      "mutability": "mutable",
                      "name": "isInGracePeriod",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 32320,
                      "src": "6235:20:99",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 32229,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6235:4:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32232,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 32231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6258:5:99",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6235:28:99"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32233,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32191,
                        "src": "6277:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        }
                      },
                      "id": 32234,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "gracePeriod",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22898,
                      "src": "6277:17:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                        "typeString": "struct IP memory"
                      }
                    },
                    "id": 32235,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isSet",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 22492,
                    "src": "6277:23:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 32261,
                  "nodeType": "IfStatement",
                  "src": "6273:305:99",
                  "trueBody": {
                    "id": 32260,
                    "nodeType": "Block",
                    "src": "6302:276:99",
                    "statements": [
                      {
                        "assignments": [
                          32237
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 32237,
                            "mutability": "mutable",
                            "name": "graceDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 32260,
                            "src": "6316:17:99",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 32236,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6316:7:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 32243,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32239,
                                "name": "terms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32191,
                                "src": "6359:5:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                  "typeString": "struct CERTFTerms memory"
                                }
                              },
                              "id": 32240,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "gracePeriod",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22898,
                              "src": "6359:17:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 32241,
                              "name": "nonPerformingDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32203,
                              "src": "6378:17:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 32238,
                            "name": "getTimestampPlusPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24884,
                            "src": "6336:22:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_IP_$22493_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct IP memory,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 32242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6336:60:99",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6316:80:99"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 32246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 32244,
                            "name": "currentTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32223,
                            "src": "6414:16:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 32245,
                            "name": "graceDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32237,
                            "src": "6434:9:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6414:29:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 32259,
                        "nodeType": "IfStatement",
                        "src": "6410:158:99",
                        "trueBody": {
                          "id": 32258,
                          "nodeType": "Block",
                          "src": "6445:123:99",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 32252,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32247,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 32193,
                                    "src": "6463:5:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                      "typeString": "struct State memory"
                                    }
                                  },
                                  "id": 32249,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "contractPerformance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22634,
                                  "src": "6463:25:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32250,
                                    "name": "ContractPerformance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22513,
                                    "src": "6491:19:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                      "typeString": "type(enum ContractPerformance)"
                                    }
                                  },
                                  "id": 32251,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "DL",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6491:22:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "src": "6463:50:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "id": 32253,
                              "nodeType": "ExpressionStatement",
                              "src": "6463:50:99"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 32256,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 32254,
                                  "name": "isInGracePeriod",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32230,
                                  "src": "6531:15:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 32255,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6549:4:99",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "6531:22:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 32257,
                              "nodeType": "ExpressionStatement",
                              "src": "6531:22:99"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 32267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32262,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32191,
                          "src": "6592:5:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                            "typeString": "struct CERTFTerms memory"
                          }
                        },
                        "id": 32263,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "delinquencyPeriod",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22900,
                        "src": "6592:23:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                          "typeString": "struct IP memory"
                        }
                      },
                      "id": 32264,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isSet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22492,
                      "src": "6592:29:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 32266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "6625:16:99",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 32265,
                        "name": "isInGracePeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32230,
                        "src": "6626:15:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6592:49:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 32297,
                  "nodeType": "IfStatement",
                  "src": "6588:398:99",
                  "trueBody": {
                    "id": 32296,
                    "nodeType": "Block",
                    "src": "6643:343:99",
                    "statements": [
                      {
                        "assignments": [
                          32269
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 32269,
                            "mutability": "mutable",
                            "name": "delinquencyDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 32296,
                            "src": "6657:23:99",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 32268,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6657:7:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 32275,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32271,
                                "name": "terms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32191,
                                "src": "6706:5:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                  "typeString": "struct CERTFTerms memory"
                                }
                              },
                              "id": 32272,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "delinquencyPeriod",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22900,
                              "src": "6706:23:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 32273,
                              "name": "nonPerformingDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32203,
                              "src": "6731:17:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 32270,
                            "name": "getTimestampPlusPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24884,
                            "src": "6683:22:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_IP_$22493_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct IP memory,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 32274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6683:66:99",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6657:92:99"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 32278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 32276,
                            "name": "currentTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32223,
                            "src": "6767:16:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 32277,
                            "name": "delinquencyDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32269,
                            "src": "6787:15:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6767:35:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 32294,
                          "nodeType": "Block",
                          "src": "6893:83:99",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 32292,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32287,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 32193,
                                    "src": "6911:5:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                      "typeString": "struct State memory"
                                    }
                                  },
                                  "id": 32289,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "contractPerformance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22634,
                                  "src": "6911:25:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32290,
                                    "name": "ContractPerformance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22513,
                                    "src": "6939:19:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                      "typeString": "type(enum ContractPerformance)"
                                    }
                                  },
                                  "id": 32291,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "DF",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6939:22:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "src": "6911:50:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "id": 32293,
                              "nodeType": "ExpressionStatement",
                              "src": "6911:50:99"
                            }
                          ]
                        },
                        "id": 32295,
                        "nodeType": "IfStatement",
                        "src": "6763:213:99",
                        "trueBody": {
                          "id": 32286,
                          "nodeType": "Block",
                          "src": "6804:83:99",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 32284,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32279,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 32193,
                                    "src": "6822:5:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                      "typeString": "struct State memory"
                                    }
                                  },
                                  "id": 32281,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "contractPerformance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22634,
                                  "src": "6822:25:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32282,
                                    "name": "ContractPerformance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22513,
                                    "src": "6850:19:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                      "typeString": "type(enum ContractPerformance)"
                                    }
                                  },
                                  "id": 32283,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "DQ",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6850:22:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "src": "6822:50:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "id": 32285,
                              "nodeType": "ExpressionStatement",
                              "src": "6822:50:99"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 32301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32298,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32193,
                        "src": "7000:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32299,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nonPerformingDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22638,
                      "src": "7000:23:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 32300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7027:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7000:28:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 32317,
                  "nodeType": "IfStatement",
                  "src": "6996:292:99",
                  "trueBody": {
                    "id": 32316,
                    "nodeType": "Block",
                    "src": "7030:258:99",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 32314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 32302,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32193,
                              "src": "7080:5:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                "typeString": "struct State memory"
                              }
                            },
                            "id": 32304,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "nonPerformingDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22638,
                            "src": "7080:23:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 32306,
                                "name": "scheduleTime",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32195,
                                "src": "7138:12:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 32307,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32191,
                                  "src": "7168:5:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 32308,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "businessDayConvention",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22862,
                                "src": "7168:27:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                  "typeString": "enum BusinessDayConvention"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 32309,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32191,
                                  "src": "7213:5:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 32310,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "calendar",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22856,
                                "src": "7213:14:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Calendar_$22506",
                                  "typeString": "enum Calendar"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 32311,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32191,
                                  "src": "7245:5:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 32312,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "maturityDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22878,
                                "src": "7245:18:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                  "typeString": "enum BusinessDayConvention"
                                },
                                {
                                  "typeIdentifier": "t_enum$_Calendar_$22506",
                                  "typeString": "enum Calendar"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 32305,
                              "name": "shiftEventTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23182,
                              "src": "7106:14:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 32313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7106:171:99",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7080:197:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 32315,
                        "nodeType": "ExpressionStatement",
                        "src": "7080:197:99"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32318,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32193,
                    "src": "7305:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32201,
                  "id": 32319,
                  "nodeType": "Return",
                  "src": "7298:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32189,
              "nodeType": "StructuredDocumentation",
              "src": "5514:119:99",
              "text": " State transition for CERTF settlement\n @param state the old state\n @return the new state"
            },
            "id": 32321,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_CE",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32191,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5670:23:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32190,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "5670:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32193,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5703:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32192,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "5703:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32195,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5731:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32194,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5731:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32197,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5761:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32196,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5761:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5660:127:99"
            },
            "returnParameters": {
              "id": 32201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32200,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5835:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32199,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "5835:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5834:14:99"
            },
            "scope": 32322,
            "src": "5638:1679:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 32323,
        "src": "233:7086:99"
      }
    ],
    "src": "41:7279:99"
  },
  "legacyAST": {
    "absolutePath": "@atpar/actus-solidity/contracts/Engines/CERTF/CERTFSTF.sol",
    "exportedSymbols": {
      "CERTFSTF": [
        32322
      ]
    },
    "id": 32323,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 31815,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:99"
      },
      {
        "id": 31816,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:99"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Core.sol",
        "file": "../../Core/Core.sol",
        "id": 31817,
        "nodeType": "ImportDirective",
        "scope": 32323,
        "sourceUnit": 24036,
        "src": "101:29:99",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 31819,
              "name": "Core",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24035,
              "src": "254:4:99",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Core_$24035",
                "typeString": "contract Core"
              }
            },
            "id": 31820,
            "nodeType": "InheritanceSpecifier",
            "src": "254:4:99"
          }
        ],
        "contractDependencies": [
          22465,
          23277,
          23340,
          23895,
          24013,
          24035,
          24668,
          24758,
          24885,
          24931
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 31818,
          "nodeType": "StructuredDocumentation",
          "src": "133:99:99",
          "text": " @title STF\n @notice Contains all state transition functions (STFs) for CERTF contracts"
        },
        "fullyImplemented": true,
        "id": 32322,
        "linearizedBaseContracts": [
          32322,
          24035,
          24931,
          24668,
          24885,
          24013,
          23895,
          23340,
          22465,
          24758,
          23277
        ],
        "name": "CERTFSTF",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 31849,
              "nodeType": "Block",
              "src": "617:112:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31834,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31825,
                        "src": "627:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31836,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "quantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22666,
                      "src": "627:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31837,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31823,
                        "src": "644:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        }
                      },
                      "id": 31838,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "quantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22892,
                      "src": "644:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "627:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 31840,
                  "nodeType": "ExpressionStatement",
                  "src": "627:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31841,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31825,
                        "src": "668:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31843,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "668:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31844,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31827,
                      "src": "687:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "668:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31846,
                  "nodeType": "ExpressionStatement",
                  "src": "668:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31847,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31825,
                    "src": "717:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31833,
                  "id": 31848,
                  "nodeType": "Return",
                  "src": "710:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31821,
              "nodeType": "StructuredDocumentation",
              "src": "266:125:99",
              "text": " State transition for CERTF issue day events\n @param state the old state\n @return the new state"
            },
            "id": 31850,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_ID",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31823,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "428:23:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31822,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "428:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31825,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "461:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31824,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "461:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31827,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "489:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31826,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "489:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31829,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "519:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31828,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "519:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "418:133:99"
            },
            "returnParameters": {
              "id": 31833,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31832,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31850,
                  "src": "599:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31831,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "599:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "598:14:99"
            },
            "scope": 32322,
            "src": "396:333:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 31872,
              "nodeType": "Block",
              "src": "1093:70:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31864,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31855,
                        "src": "1103:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31866,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "1103:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31867,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31857,
                      "src": "1122:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1103:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31869,
                  "nodeType": "ExpressionStatement",
                  "src": "1103:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31870,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31855,
                    "src": "1151:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31863,
                  "id": 31871,
                  "nodeType": "Return",
                  "src": "1144:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31851,
              "nodeType": "StructuredDocumentation",
              "src": "735:125:99",
              "text": " State transition for CERTF initial exchange\n @param state the old state\n @return the new state"
            },
            "id": 31873,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_IED",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31860,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31853,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "898:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31852,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "898:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31855,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "937:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31854,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "937:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31857,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "965:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31856,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "965:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31859,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "995:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31858,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "995:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "888:139:99"
            },
            "returnParameters": {
              "id": 31863,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31862,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31873,
                  "src": "1075:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31861,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1075:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1074:14:99"
            },
            "scope": 32322,
            "src": "865:298:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 31946,
              "nodeType": "Block",
              "src": "1522:613:99",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_CouponType_$22564",
                      "typeString": "enum CouponType"
                    },
                    "id": 31891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31887,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31876,
                        "src": "1536:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        }
                      },
                      "id": 31888,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "couponType",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22866,
                      "src": "1536:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CouponType_$22564",
                        "typeString": "enum CouponType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31889,
                        "name": "CouponType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22564,
                        "src": "1556:10:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_CouponType_$22564_$",
                          "typeString": "type(enum CouponType)"
                        }
                      },
                      "id": 31890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FIX",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1556:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_CouponType_$22564",
                        "typeString": "enum CouponType"
                      }
                    },
                    "src": "1536:34:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 31931,
                  "nodeType": "IfStatement",
                  "src": "1532:480:99",
                  "trueBody": {
                    "id": 31930,
                    "nodeType": "Block",
                    "src": "1572:440:99",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 31928,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 31892,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31878,
                              "src": "1586:5:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                "typeString": "struct State memory"
                              }
                            },
                            "id": 31894,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "couponAmountFixed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22668,
                            "src": "1586:23:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 31925,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 31876,
                                  "src": "1984:5:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 31926,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "couponRate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22896,
                                "src": "1984:16:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 31921,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 31876,
                                      "src": "1954:5:99",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                        "typeString": "struct CERTFTerms memory"
                                      }
                                    },
                                    "id": 31922,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "nominalPrice",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22888,
                                    "src": "1954:18:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31897,
                                              "name": "state",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31878,
                                              "src": "1656:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                                "typeString": "struct State memory"
                                              }
                                            },
                                            "id": 31898,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "lastCouponDay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22646,
                                            "src": "1656:19:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31899,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1677:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31900,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "businessDayConvention",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22862,
                                            "src": "1677:27:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                              "typeString": "enum BusinessDayConvention"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31901,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1706:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31902,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "calendar",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22856,
                                            "src": "1706:14:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_Calendar_$22506",
                                              "typeString": "enum Calendar"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31903,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1722:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31904,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "maturityDate",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22878,
                                            "src": "1722:18:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                              "typeString": "enum BusinessDayConvention"
                                            },
                                            {
                                              "typeIdentifier": "t_enum$_Calendar_$22506",
                                              "typeString": "enum Calendar"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 31896,
                                          "name": "shiftCalcTime",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 23056,
                                          "src": "1642:13:99",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 31905,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1642:99:99",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 31907,
                                            "name": "scheduleTime",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 31880,
                                            "src": "1773:12:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31908,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1787:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31909,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "businessDayConvention",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22862,
                                            "src": "1787:27:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                              "typeString": "enum BusinessDayConvention"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31910,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1816:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31911,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "calendar",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22856,
                                            "src": "1816:14:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_Calendar_$22506",
                                              "typeString": "enum Calendar"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 31912,
                                              "name": "terms",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 31876,
                                              "src": "1832:5:99",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                                "typeString": "struct CERTFTerms memory"
                                              }
                                            },
                                            "id": 31913,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "maturityDate",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22878,
                                            "src": "1832:18:99",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                              "typeString": "enum BusinessDayConvention"
                                            },
                                            {
                                              "typeIdentifier": "t_enum$_Calendar_$22506",
                                              "typeString": "enum Calendar"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 31906,
                                          "name": "shiftCalcTime",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 23056,
                                          "src": "1759:13:99",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 31914,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1759:92:99",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 31915,
                                          "name": "terms",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 31876,
                                          "src": "1869:5:99",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                            "typeString": "struct CERTFTerms memory"
                                          }
                                        },
                                        "id": 31916,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "dayCountConvention",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22860,
                                        "src": "1869:24:99",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_enum$_DayCountConvention_$22577",
                                          "typeString": "enum DayCountConvention"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 31917,
                                          "name": "terms",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 31876,
                                          "src": "1911:5:99",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                            "typeString": "struct CERTFTerms memory"
                                          }
                                        },
                                        "id": 31918,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "maturityDate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22878,
                                        "src": "1911:18:99",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_enum$_DayCountConvention_$22577",
                                          "typeString": "enum DayCountConvention"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 31895,
                                      "name": "yearFraction",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 23450,
                                      "src": "1612:12:99",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_enum$_DayCountConvention_$22577_$_t_uint256_$returns$_t_int256_$",
                                        "typeString": "function (uint256,uint256,enum DayCountConvention,uint256) pure returns (int256)"
                                      }
                                    },
                                    "id": 31919,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1612:331:99",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "id": 31920,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "floatMult",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 24120,
                                  "src": "1612:341:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                    "typeString": "function (int256,int256) pure returns (int256)"
                                  }
                                },
                                "id": 31923,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1612:361:99",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 31924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "floatMult",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24120,
                              "src": "1612:371:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                "typeString": "function (int256,int256) pure returns (int256)"
                              }
                            },
                            "id": 31927,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1612:389:99",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "1586:415:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 31929,
                        "nodeType": "ExpressionStatement",
                        "src": "1586:415:99"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31932,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31878,
                        "src": "2022:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31934,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastCouponDay",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22646,
                      "src": "2022:19:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31935,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31880,
                      "src": "2044:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2022:34:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31937,
                  "nodeType": "ExpressionStatement",
                  "src": "2022:34:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31938,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31878,
                        "src": "2066:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31940,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "2066:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31941,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31880,
                      "src": "2085:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2066:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31943,
                  "nodeType": "ExpressionStatement",
                  "src": "2066:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31944,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31878,
                    "src": "2123:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31886,
                  "id": 31945,
                  "nodeType": "Return",
                  "src": "2116:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31874,
              "nodeType": "StructuredDocumentation",
              "src": "1169:126:99",
              "text": " State transition for CERTF coupon fixing day\n @param state the old state\n @return the new state"
            },
            "id": 31947,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_CFD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31876,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1333:23:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31875,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "1333:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31878,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1366:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31877,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1366:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31880,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1394:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31879,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1394:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31882,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1424:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31881,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1424:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1323:133:99"
            },
            "returnParameters": {
              "id": 31886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31885,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31947,
                  "src": "1504:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31884,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1504:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1503:14:99"
            },
            "scope": 32322,
            "src": "1300:835:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 31975,
              "nodeType": "Block",
              "src": "2502:107:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31961,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31952,
                        "src": "2512:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31963,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "couponAmountFixed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22668,
                      "src": "2512:23:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 31964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2538:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2512:27:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 31966,
                  "nodeType": "ExpressionStatement",
                  "src": "2512:27:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31967,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31952,
                        "src": "2549:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31969,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "2549:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 31970,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31954,
                      "src": "2568:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2549:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31972,
                  "nodeType": "ExpressionStatement",
                  "src": "2549:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 31973,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31952,
                    "src": "2597:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31960,
                  "id": 31974,
                  "nodeType": "Return",
                  "src": "2590:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31948,
              "nodeType": "StructuredDocumentation",
              "src": "2142:127:99",
              "text": " State transition for CERTF coupon payment day\n @param state the old state\n @return the new state"
            },
            "id": 31976,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_CPD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31950,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2307:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31949,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "2307:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31952,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2346:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31951,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2346:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31954,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2374:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2374:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31956,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2404:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31955,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2404:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2297:139:99"
            },
            "returnParameters": {
              "id": 31960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31959,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 31976,
                  "src": "2484:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31958,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2484:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2483:14:99"
            },
            "scope": 32322,
            "src": "2274:335:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32019,
              "nodeType": "Block",
              "src": "2967:246:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 31990,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31981,
                        "src": "2977:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 31992,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exerciseAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22662,
                      "src": "2977:20:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32006,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31981,
                            "src": "3118:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                              "typeString": "struct State memory"
                            }
                          },
                          "id": 32007,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "adjustmentFactor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22672,
                          "src": "3118:22:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32002,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 31981,
                                "src": "3079:5:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                  "typeString": "struct State memory"
                                }
                              },
                              "id": 32003,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "marginFactor",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22670,
                              "src": "3079:18:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 31998,
                                    "name": "terms",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 31979,
                                    "src": "3040:5:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                      "typeString": "struct CERTFTerms memory"
                                    }
                                  },
                                  "id": 31999,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nominalPrice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22888,
                                  "src": "3040:18:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 31995,
                                      "name": "externalData",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 31985,
                                      "src": "3007:12:99",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 31994,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3000:6:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 31993,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3000:6:99",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 31996,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3000:20:99",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 31997,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "floatMult",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 24120,
                                "src": "3000:39:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                  "typeString": "function (int256,int256) pure returns (int256)"
                                }
                              },
                              "id": 32000,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3000:59:99",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 32001,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "floatMult",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24120,
                            "src": "3000:78:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 32004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3000:98:99",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 32005,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "floatMult",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24120,
                        "src": "3000:117:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                          "typeString": "function (int256,int256) pure returns (int256)"
                        }
                      },
                      "id": 32008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3000:141:99",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "2977:164:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32010,
                  "nodeType": "ExpressionStatement",
                  "src": "2977:164:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32011,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31981,
                        "src": "3152:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32013,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "3152:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32014,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31983,
                      "src": "3171:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3152:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32016,
                  "nodeType": "ExpressionStatement",
                  "src": "3152:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32017,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 31981,
                    "src": "3201:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 31989,
                  "id": 32018,
                  "nodeType": "Return",
                  "src": "3194:12:99"
                }
              ]
            },
            "documentation": {
              "id": 31977,
              "nodeType": "StructuredDocumentation",
              "src": "2616:130:99",
              "text": " State transition for CERTF redemption fixing day\n @param state the old state\n @return the new state"
            },
            "id": 32020,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_RFD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 31986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31979,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2784:23:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31978,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "2784:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31981,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2817:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31980,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2817:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31983,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2845:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31982,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2845:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31985,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2875:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31984,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2875:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2774:127:99"
            },
            "returnParameters": {
              "id": 31989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31988,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32020,
                  "src": "2949:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 31987,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2949:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2948:14:99"
            },
            "scope": 32322,
            "src": "2751:462:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32051,
              "nodeType": "Block",
              "src": "3566:126:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32034,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32025,
                        "src": "3576:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32036,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exerciseQuantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22664,
                      "src": "3576:22:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 32039,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32029,
                          "src": "3608:12:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 32038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3601:6:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 32037,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3601:6:99",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 32040,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3601:20:99",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "3576:45:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32042,
                  "nodeType": "ExpressionStatement",
                  "src": "3576:45:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32043,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32025,
                        "src": "3631:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32045,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "3631:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32046,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32027,
                      "src": "3650:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3631:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32048,
                  "nodeType": "ExpressionStatement",
                  "src": "3631:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32049,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32025,
                    "src": "3680:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32033,
                  "id": 32050,
                  "nodeType": "Return",
                  "src": "3673:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32021,
              "nodeType": "StructuredDocumentation",
              "src": "3219:121:99",
              "text": " State transition for CERTF exercise day\n @param state the old state\n @return the new state"
            },
            "id": 32052,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_XD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32023,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3377:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32022,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "3377:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32025,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3416:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32024,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "3416:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32027,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3444:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3444:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32029,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3474:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32028,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3474:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3367:133:99"
            },
            "returnParameters": {
              "id": 32033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32032,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32052,
                  "src": "3548:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32031,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "3548:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3547:14:99"
            },
            "scope": 32322,
            "src": "3345:347:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32123,
              "nodeType": "Block",
              "src": "4062:467:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32066,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4072:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32068,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "quantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22666,
                      "src": "4072:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32072,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32057,
                            "src": "4108:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                              "typeString": "struct State memory"
                            }
                          },
                          "id": 32073,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exerciseQuantity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22664,
                          "src": "4108:22:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32069,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32057,
                            "src": "4089:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                              "typeString": "struct State memory"
                            }
                          },
                          "id": 32070,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "quantity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22666,
                          "src": "4089:14:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 32071,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 38819,
                        "src": "4089:18:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                          "typeString": "function (int256,int256) pure returns (int256)"
                        }
                      },
                      "id": 32074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4089:42:99",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "4072:59:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32076,
                  "nodeType": "ExpressionStatement",
                  "src": "4072:59:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32077,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4141:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32079,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exerciseQuantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22664,
                      "src": "4141:22:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 32080,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4166:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4141:26:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32082,
                  "nodeType": "ExpressionStatement",
                  "src": "4141:26:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32083,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4177:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32085,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "exerciseAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22662,
                      "src": "4177:20:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 32086,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4200:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4177:24:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32088,
                  "nodeType": "ExpressionStatement",
                  "src": "4177:24:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32089,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4211:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32091,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "4211:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32092,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32059,
                      "src": "4230:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4211:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32094,
                  "nodeType": "ExpressionStatement",
                  "src": "4211:31:99"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 32098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 32095,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32059,
                      "src": "4265:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32096,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32057,
                        "src": "4281:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32097,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22640,
                      "src": "4281:18:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4265:34:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 32110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 32107,
                        "name": "scheduleTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32059,
                        "src": "4386:12:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32108,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32057,
                          "src": "4402:5:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        "id": 32109,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "terminationDate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22644,
                        "src": "4402:21:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4386:37:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 32119,
                    "nodeType": "IfStatement",
                    "src": "4382:118:99",
                    "trueBody": {
                      "id": 32118,
                      "nodeType": "Block",
                      "src": "4425:75:99",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 32116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32111,
                                "name": "state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32057,
                                "src": "4439:5:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                  "typeString": "struct State memory"
                                }
                              },
                              "id": 32113,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "contractPerformance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22634,
                              "src": "4439:25:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                "typeString": "enum ContractPerformance"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32114,
                                "name": "ContractPerformance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22513,
                                "src": "4467:19:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                  "typeString": "type(enum ContractPerformance)"
                                }
                              },
                              "id": 32115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TD",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4467:22:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                "typeString": "enum ContractPerformance"
                              }
                            },
                            "src": "4439:50:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                              "typeString": "enum ContractPerformance"
                            }
                          },
                          "id": 32117,
                          "nodeType": "ExpressionStatement",
                          "src": "4439:50:99"
                        }
                      ]
                    }
                  },
                  "id": 32120,
                  "nodeType": "IfStatement",
                  "src": "4261:239:99",
                  "trueBody": {
                    "id": 32106,
                    "nodeType": "Block",
                    "src": "4301:75:99",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 32104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 32099,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32057,
                              "src": "4315:5:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                "typeString": "struct State memory"
                              }
                            },
                            "id": 32101,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "contractPerformance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22634,
                            "src": "4315:25:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                              "typeString": "enum ContractPerformance"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 32102,
                              "name": "ContractPerformance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22513,
                              "src": "4343:19:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                "typeString": "type(enum ContractPerformance)"
                              }
                            },
                            "id": 32103,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "MD",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4343:22:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                              "typeString": "enum ContractPerformance"
                            }
                          },
                          "src": "4315:50:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                            "typeString": "enum ContractPerformance"
                          }
                        },
                        "id": 32105,
                        "nodeType": "ExpressionStatement",
                        "src": "4315:50:99"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32121,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32057,
                    "src": "4517:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32065,
                  "id": 32122,
                  "nodeType": "Return",
                  "src": "4510:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32053,
              "nodeType": "StructuredDocumentation",
              "src": "3698:131:99",
              "text": " State transition for CERTF Redemption Payment Day\n @param state the old state\n @return the new state"
            },
            "id": 32124,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_RPD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32062,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32055,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "3867:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32054,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "3867:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32057,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "3906:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32056,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "3906:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32059,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "3934:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32058,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3934:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32061,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "3964:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32060,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3964:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3857:139:99"
            },
            "returnParameters": {
              "id": 32065,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32064,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32124,
                  "src": "4044:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32063,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "4044:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4043:14:99"
            },
            "scope": 32322,
            "src": "3834:695:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32158,
              "nodeType": "Block",
              "src": "4894:145:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32138,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32129,
                        "src": "4904:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32140,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "quantity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22666,
                      "src": "4904:14:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 32141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4921:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4904:18:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 32143,
                  "nodeType": "ExpressionStatement",
                  "src": "4904:18:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32144,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32129,
                        "src": "4932:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32146,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "terminationDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22644,
                      "src": "4932:21:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32147,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32131,
                      "src": "4956:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4932:36:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32149,
                  "nodeType": "ExpressionStatement",
                  "src": "4932:36:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32150,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32129,
                        "src": "4978:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32152,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "4978:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32153,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32131,
                      "src": "4997:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4978:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32155,
                  "nodeType": "ExpressionStatement",
                  "src": "4978:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32156,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32129,
                    "src": "5027:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32137,
                  "id": 32157,
                  "nodeType": "Return",
                  "src": "5020:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32125,
              "nodeType": "StructuredDocumentation",
              "src": "4535:127:99",
              "text": " State transition for CERTF termination events\n @param state the old state\n @return the new state"
            },
            "id": 32159,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_TD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32127,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4699:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32126,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "4699:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32129,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4738:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32128,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "4738:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32131,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4766:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32130,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4766:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32133,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4796:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32132,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4796:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4689:139:99"
            },
            "returnParameters": {
              "id": 32137,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32136,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32159,
                  "src": "4876:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32135,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "4876:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4875:14:99"
            },
            "scope": 32322,
            "src": "4667:372:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32187,
              "nodeType": "Block",
              "src": "5394:114:99",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32173,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32164,
                        "src": "5404:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32175,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22640,
                      "src": "5404:18:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32176,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32166,
                      "src": "5425:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5404:33:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32178,
                  "nodeType": "ExpressionStatement",
                  "src": "5404:33:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32179,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32164,
                        "src": "5447:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32181,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "5447:16:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32182,
                      "name": "scheduleTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32166,
                      "src": "5466:12:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5447:31:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32184,
                  "nodeType": "ExpressionStatement",
                  "src": "5447:31:99"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32185,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32164,
                    "src": "5496:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32172,
                  "id": 32186,
                  "nodeType": "Return",
                  "src": "5489:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32160,
              "nodeType": "StructuredDocumentation",
              "src": "5045:117:99",
              "text": " State transition for CERTF maturity\n @param state the old state\n @return the new state"
            },
            "id": 32188,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_MD",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32162,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5199:17:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32161,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "5199:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32164,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5238:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32163,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "5238:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32166,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5266:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32165,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5266:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32168,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5296:7:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32167,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5296:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5189:139:99"
            },
            "returnParameters": {
              "id": 32172,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32171,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32188,
                  "src": "5376:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32170,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "5376:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5375:14:99"
            },
            "scope": 32322,
            "src": "5167:341:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 32320,
              "nodeType": "Block",
              "src": "5853:1464:99",
              "statements": [
                {
                  "assignments": [
                    32203
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32203,
                      "mutability": "mutable",
                      "name": "nonPerformingDate",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 32320,
                      "src": "5895:25:99",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32202,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5895:7:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32221,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 32207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 32204,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32193,
                              "src": "5924:5:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                "typeString": "struct State memory"
                              }
                            },
                            "id": 32205,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "nonPerformingDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22638,
                            "src": "5924:23:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 32206,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5951:1:99",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5924:28:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 32208,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5923:30:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32218,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32193,
                        "src": "6142:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32219,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nonPerformingDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22638,
                      "src": "6142:23:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 32220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5923:242:99",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 32210,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32195,
                          "src": "6000:12:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32211,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32191,
                            "src": "6030:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                              "typeString": "struct CERTFTerms memory"
                            }
                          },
                          "id": 32212,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "businessDayConvention",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22862,
                          "src": "6030:27:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                            "typeString": "enum BusinessDayConvention"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32213,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32191,
                            "src": "6075:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                              "typeString": "struct CERTFTerms memory"
                            }
                          },
                          "id": 32214,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "calendar",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22856,
                          "src": "6075:14:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Calendar_$22506",
                            "typeString": "enum Calendar"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32215,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32191,
                            "src": "6107:5:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                              "typeString": "struct CERTFTerms memory"
                            }
                          },
                          "id": 32216,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "maturityDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22878,
                          "src": "6107:18:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                            "typeString": "enum BusinessDayConvention"
                          },
                          {
                            "typeIdentifier": "t_enum$_Calendar_$22506",
                            "typeString": "enum Calendar"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 32209,
                        "name": "shiftEventTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23182,
                        "src": "5968:14:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 32217,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5968:171:99",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5895:270:99"
                },
                {
                  "assignments": [
                    32223
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32223,
                      "mutability": "mutable",
                      "name": "currentTimestamp",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 32320,
                      "src": "6176:24:99",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32222,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6176:7:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32228,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 32226,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32197,
                        "src": "6211:12:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 32225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6203:7:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 32224,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6203:7:99",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 32227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6203:21:99",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6176:48:99"
                },
                {
                  "assignments": [
                    32230
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32230,
                      "mutability": "mutable",
                      "name": "isInGracePeriod",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 32320,
                      "src": "6235:20:99",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 32229,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6235:4:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32232,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 32231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6258:5:99",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6235:28:99"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32233,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32191,
                        "src": "6277:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        }
                      },
                      "id": 32234,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "gracePeriod",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22898,
                      "src": "6277:17:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                        "typeString": "struct IP memory"
                      }
                    },
                    "id": 32235,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isSet",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 22492,
                    "src": "6277:23:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 32261,
                  "nodeType": "IfStatement",
                  "src": "6273:305:99",
                  "trueBody": {
                    "id": 32260,
                    "nodeType": "Block",
                    "src": "6302:276:99",
                    "statements": [
                      {
                        "assignments": [
                          32237
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 32237,
                            "mutability": "mutable",
                            "name": "graceDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 32260,
                            "src": "6316:17:99",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 32236,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6316:7:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 32243,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32239,
                                "name": "terms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32191,
                                "src": "6359:5:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                  "typeString": "struct CERTFTerms memory"
                                }
                              },
                              "id": 32240,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "gracePeriod",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22898,
                              "src": "6359:17:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 32241,
                              "name": "nonPerformingDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32203,
                              "src": "6378:17:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 32238,
                            "name": "getTimestampPlusPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24884,
                            "src": "6336:22:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_IP_$22493_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct IP memory,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 32242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6336:60:99",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6316:80:99"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 32246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 32244,
                            "name": "currentTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32223,
                            "src": "6414:16:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 32245,
                            "name": "graceDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32237,
                            "src": "6434:9:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6414:29:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 32259,
                        "nodeType": "IfStatement",
                        "src": "6410:158:99",
                        "trueBody": {
                          "id": 32258,
                          "nodeType": "Block",
                          "src": "6445:123:99",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 32252,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32247,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 32193,
                                    "src": "6463:5:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                      "typeString": "struct State memory"
                                    }
                                  },
                                  "id": 32249,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "contractPerformance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22634,
                                  "src": "6463:25:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32250,
                                    "name": "ContractPerformance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22513,
                                    "src": "6491:19:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                      "typeString": "type(enum ContractPerformance)"
                                    }
                                  },
                                  "id": 32251,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "DL",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6491:22:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "src": "6463:50:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "id": 32253,
                              "nodeType": "ExpressionStatement",
                              "src": "6463:50:99"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 32256,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 32254,
                                  "name": "isInGracePeriod",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32230,
                                  "src": "6531:15:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 32255,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6549:4:99",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "6531:22:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 32257,
                              "nodeType": "ExpressionStatement",
                              "src": "6531:22:99"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 32267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32262,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32191,
                          "src": "6592:5:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                            "typeString": "struct CERTFTerms memory"
                          }
                        },
                        "id": 32263,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "delinquencyPeriod",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22900,
                        "src": "6592:23:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                          "typeString": "struct IP memory"
                        }
                      },
                      "id": 32264,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isSet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22492,
                      "src": "6592:29:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 32266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "6625:16:99",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 32265,
                        "name": "isInGracePeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32230,
                        "src": "6626:15:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6592:49:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 32297,
                  "nodeType": "IfStatement",
                  "src": "6588:398:99",
                  "trueBody": {
                    "id": 32296,
                    "nodeType": "Block",
                    "src": "6643:343:99",
                    "statements": [
                      {
                        "assignments": [
                          32269
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 32269,
                            "mutability": "mutable",
                            "name": "delinquencyDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 32296,
                            "src": "6657:23:99",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 32268,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6657:7:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 32275,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 32271,
                                "name": "terms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32191,
                                "src": "6706:5:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                  "typeString": "struct CERTFTerms memory"
                                }
                              },
                              "id": 32272,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "delinquencyPeriod",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22900,
                              "src": "6706:23:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 32273,
                              "name": "nonPerformingDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32203,
                              "src": "6731:17:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 32270,
                            "name": "getTimestampPlusPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24884,
                            "src": "6683:22:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_IP_$22493_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct IP memory,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 32274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6683:66:99",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6657:92:99"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 32278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 32276,
                            "name": "currentTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32223,
                            "src": "6767:16:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 32277,
                            "name": "delinquencyDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32269,
                            "src": "6787:15:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6767:35:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 32294,
                          "nodeType": "Block",
                          "src": "6893:83:99",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 32292,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32287,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 32193,
                                    "src": "6911:5:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                      "typeString": "struct State memory"
                                    }
                                  },
                                  "id": 32289,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "contractPerformance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22634,
                                  "src": "6911:25:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32290,
                                    "name": "ContractPerformance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22513,
                                    "src": "6939:19:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                      "typeString": "type(enum ContractPerformance)"
                                    }
                                  },
                                  "id": 32291,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "DF",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6939:22:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "src": "6911:50:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "id": 32293,
                              "nodeType": "ExpressionStatement",
                              "src": "6911:50:99"
                            }
                          ]
                        },
                        "id": 32295,
                        "nodeType": "IfStatement",
                        "src": "6763:213:99",
                        "trueBody": {
                          "id": 32286,
                          "nodeType": "Block",
                          "src": "6804:83:99",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 32284,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32279,
                                    "name": "state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 32193,
                                    "src": "6822:5:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                      "typeString": "struct State memory"
                                    }
                                  },
                                  "id": 32281,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "contractPerformance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22634,
                                  "src": "6822:25:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 32282,
                                    "name": "ContractPerformance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22513,
                                    "src": "6850:19:99",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                      "typeString": "type(enum ContractPerformance)"
                                    }
                                  },
                                  "id": 32283,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "DQ",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6850:22:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                    "typeString": "enum ContractPerformance"
                                  }
                                },
                                "src": "6822:50:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "id": 32285,
                              "nodeType": "ExpressionStatement",
                              "src": "6822:50:99"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 32301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 32298,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32193,
                        "src": "7000:5:99",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 32299,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nonPerformingDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22638,
                      "src": "7000:23:99",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 32300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7027:1:99",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7000:28:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 32317,
                  "nodeType": "IfStatement",
                  "src": "6996:292:99",
                  "trueBody": {
                    "id": 32316,
                    "nodeType": "Block",
                    "src": "7030:258:99",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 32314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 32302,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32193,
                              "src": "7080:5:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                "typeString": "struct State memory"
                              }
                            },
                            "id": 32304,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "nonPerformingDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22638,
                            "src": "7080:23:99",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 32306,
                                "name": "scheduleTime",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32195,
                                "src": "7138:12:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 32307,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32191,
                                  "src": "7168:5:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 32308,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "businessDayConvention",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22862,
                                "src": "7168:27:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                  "typeString": "enum BusinessDayConvention"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 32309,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32191,
                                  "src": "7213:5:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 32310,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "calendar",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22856,
                                "src": "7213:14:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Calendar_$22506",
                                  "typeString": "enum Calendar"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 32311,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32191,
                                  "src": "7245:5:99",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 32312,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "maturityDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22878,
                                "src": "7245:18:99",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                  "typeString": "enum BusinessDayConvention"
                                },
                                {
                                  "typeIdentifier": "t_enum$_Calendar_$22506",
                                  "typeString": "enum Calendar"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 32305,
                              "name": "shiftEventTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23182,
                              "src": "7106:14:99",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 32313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7106:171:99",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7080:197:99",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 32315,
                        "nodeType": "ExpressionStatement",
                        "src": "7080:197:99"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32318,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32193,
                    "src": "7305:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 32201,
                  "id": 32319,
                  "nodeType": "Return",
                  "src": "7298:12:99"
                }
              ]
            },
            "documentation": {
              "id": 32189,
              "nodeType": "StructuredDocumentation",
              "src": "5514:119:99",
              "text": " State transition for CERTF settlement\n @param state the old state\n @return the new state"
            },
            "id": 32321,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "STF_CERTF_CE",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 32198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32191,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5670:23:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32190,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "5670:10:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32193,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5703:18:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32192,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "5703:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32195,
                  "mutability": "mutable",
                  "name": "scheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5731:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32194,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5731:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32197,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5761:20:99",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32196,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5761:7:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5660:127:99"
            },
            "returnParameters": {
              "id": 32201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32200,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 32321,
                  "src": "5835:12:99",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32199,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "5835:5:99",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5834:14:99"
            },
            "scope": 32322,
            "src": "5638:1679:99",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 32323,
        "src": "233:7086:99"
      }
    ],
    "src": "41:7279:99"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.429Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "details": "The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \"M\" period unit or multiple thereof",
        "params": {
          "cycle": "the cycle struct",
          "eomc": "the end of month convention to adjust",
          "startTime": "timestamp of the cycle start"
        },
        "returns": {
          "_0": "the adjusted end of month convention"
        }
      },
      "computeEventTimeForEvent(bytes32,uint8,uint8,uint256)": {
        "details": "For optimization reasons not located in EventUtil by applying the BDC specified in the terms"
      }
    },
    "title": "STF",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "notice": "This function makes an adjustment on the end of month convention."
      },
      "computeEventTimeForEvent(bytes32,uint8,uint8,uint256)": {
        "notice": "Returns the event time for a given schedule time"
      },
      "getEpochOffset(uint8)": {
        "notice": "Returns the epoch offset for a given event type to determine the correct order of events if multiple events have the same timestamp"
      },
      "shiftCalcTime(uint256,uint8,uint8,uint256)": {
        "notice": "Used in POFs and STFs for DCFs. No shifting is applied if a Calc/Shift instead of Shift/Calc BDC is provided."
      }
    },
    "notice": "Contains all state transition functions (STFs) for CERTF contracts",
    "version": 1
  }
}