{
  "contractName": "Custodian",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_cecActor",
          "type": "address"
        },
        {
          "internalType": "contract ICECRegistry",
          "name": "_cecRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralizer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralAmount",
          "type": "uint256"
        }
      ],
      "name": "LockedCollateral",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralizer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "returnedAmount",
          "type": "uint256"
        }
      ],
      "name": "ReturnedCollateral",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "cecActor",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cecRegistry",
      "outputs": [
        {
          "internalType": "contract ICECRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "object",
          "type": "bytes32"
        }
      ],
      "name": "decodeCollateralObject",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "collateralAmount",
          "type": "uint256"
        }
      ],
      "name": "encodeCollateralAsObject",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "creatorObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creatorBeneficiary",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyBeneficiary",
              "type": "address"
            }
          ],
          "internalType": "struct AssetOwnership",
          "name": "ownership",
          "type": "tuple"
        }
      ],
      "name": "lockCollateral",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "returnCollateral",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_cecActor\",\"type\":\"address\"},{\"internalType\":\"contract ICECRegistry\",\"name\":\"_cecRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assetId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateralizer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"}],\"name\":\"LockedCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assetId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateralizer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"returnedAmount\",\"type\":\"uint256\"}],\"name\":\"ReturnedCollateral\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"cecActor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cecRegistry\",\"outputs\":[{\"internalType\":\"contract ICECRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"}],\"name\":\"decodeCollateralObject\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"}],\"name\":\"encodeCollateralAsObject\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assetId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CECTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"creatorObligor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creatorBeneficiary\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"counterpartyObligor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"counterpartyBeneficiary\",\"type\":\"address\"}],\"internalType\":\"struct AssetOwnership\",\"name\":\"ownership\",\"type\":\"tuple\"}],\"name\":\"lockCollateral\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assetId\",\"type\":\"bytes32\"}],\"name\":\"returnCollateral\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"lockCollateral(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(address,address,address,address))\":{\"details\":\"The collateralizer has to set allowance beforehand. The custodian increases allowance for the AssetActor by amount of collateral\",\"params\":{\"assetId\":\"id of the asset with collateral requirements\",\"ownership\":\"ownership of the asset\",\"terms\":\"terms of the asset containing the collateral requirements\"},\"returns\":{\"_0\":\"true if the collateral was locked by the Custodian\"}},\"returnCollateral(bytes32)\":{\"details\":\"resets allowance for the Asset Actor, reverts if state of the asset does not allow unlocking the collateral\",\"params\":{\"assetId\":\"id of the asset for which to return the collateral,\"},\"returns\":{\"_0\":\"true if the collateral was returned to the collateralizer\"}}},\"title\":\"Custodian\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"lockCollateral(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(address,address,address,address))\":{\"notice\":\"Locks the required collateral amount encoded in the second contract reference in the terms.\"},\"returnCollateral(bytes32)\":{\"notice\":\"Returns the entire collateral back to the collateralizer if collateral was not executed before the asset reached maturity or it returns the remaining collateral (not executed amount) after collateral was executed and settled\"}},\"notice\":\"Contract which holds the collateral of CEC (Credit Enhancement Collateral) assets.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Custodian/Custodian.sol\":\"Custodian\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/AccessControl/IAccessControl.sol\":{\"keccak256\":\"0xbbe1aada0583637e5ae8b0a09ae59d629c1da70bde5a3f291f5f0ed42440d091\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36ab01d00a9ebd59822247cdc7bee3c70af062e2c9408e8f80e1656fc9d2761c\",\"dweb:/ipfs/QmSQzma4M2TDZup2dERJi368F8z9UQQ1zyUsq8e41hgg2F\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/IAssetRegistry.sol\":{\"keccak256\":\"0xe5b75a0d1ff75775c43bdd46fb55d0f28800b311a48f7064acda7d35036bf738\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://652d2218a7190f85e00372a5ade97895fc303b909f3b63398dbcfabf634adda9\",\"dweb:/ipfs/QmVV4Su9V2K4mYbquft5rqv7SSyR95RcHgU4E2iAceKW1j\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/IBaseRegistry.sol\":{\"keccak256\":\"0x62682585e8feaa25478d9aebe2f43861e36d67604adfd2dc23da8260a2f5728f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ecdf3ac27c4425fee720cb2a744304678cac563d89cb21e43f8302a4864f013\",\"dweb:/ipfs/QmSL8qM6bytA7eN1cuBbBy3B5rNvmyALGExeGXUApTeA5N\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/Ownership/IOwnershipRegistry.sol\":{\"keccak256\":\"0x6e7d79031d9ab6d8366e767e96bbef6282cd9727956b0f6a70b70ba57799afc7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d2e1e72ffc43ce52bb06eb5c5fa61d9dc14d40c33ac3035e5d881e0365aa722\",\"dweb:/ipfs/QmaQ1SqtsZtPHjtdSbGTwSJvRPu36d7S4ijyfUMYcto5uJ\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/Schedule/IScheduleRegistry.sol\":{\"keccak256\":\"0xe7e24ae32f711c7b4b60d1160cb085b4ba047ff07ccea2df3b4bf120c2385ed6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ea4f8bbb0a60f0b9484307c3ce880005e1d4e39c42fd07ca16dc263001584cdb\",\"dweb:/ipfs/Qmdo1tuJ93asEMGq74g38vxfRMmoxXogZZczHjuef2Mx8R\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/State/IStateRegistry.sol\":{\"keccak256\":\"0x1008f735ba366f9a638199d8ec4fa31b192c8745491527278d97717426d6d609\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://decc19c372fbefee7c369678114861def1c748748154966e2ee5e11e690b9039\",\"dweb:/ipfs/QmXjZhoNak7uUmYZMj7sAdijzsqLpDoh6T2bYcRDVgX6z6\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/Terms/ITermsRegistry.sol\":{\"keccak256\":\"0x62947ddd2743f2852e53dc10c9ce4a326e764e0bbffd92df216fcb32a0b0e3cd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0b90268d7fb6e7d133b5e9d008be62fe55d19930088ac547b15d31dcb8ab9ecd\",\"dweb:/ipfs/QmZGE66r4ML3msBMCtDbhsdVN3RxmDvnCMDkTn9mMfouqN\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Conversions.sol\":{\"keccak256\":\"0x4482adab804008a2774b11036cc9ff6f42aa7f248d6b8ca922082bf090a736e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e774c979286649c16d92eb4672c30c06fcbe7ddc053eee70088c4b28fc27e48c\",\"dweb:/ipfs/QmXqfezUnKVaKzA7Qs9BFC9yRKFTMwwxa778ofikE2hC1H\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Custodian/Custodian.sol\":{\"keccak256\":\"0xf21ce7b2fe99163b6558f1d6fff470f78ff3552de2dfd5f496f0d711a02ca984\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8f0657126115e0748354b26d5fa87e6836d1c91d9b7c3e017317871fb244335b\",\"dweb:/ipfs/QmPWcEn5TPd4uvG5SdcKGnmQh9kyWuJvjzBxY3djnvXZpp\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Custodian/ICustodian.sol\":{\"keccak256\":\"0x82f2d39ff9cfeffbd348daa3737e3afb19726c56943fd513eeedd9589a1948c2\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1881c11d6501d1d10cf29977f03ab1c6f9f57bf48819c293c5f4b2640b2d0a22\",\"dweb:/ipfs/QmXRwstHsC5tjjbvHCi5WuPTe6piwvKMpLzHHVnPvKobSs\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/SharedTypes.sol\":{\"keccak256\":\"0x5a918fdefe9bd357255bffcf75d325f0d23ccf7074533f8d6a80a62bfd60893e\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5c5fc68f47deab5b0cc572a8a1f7dba997e5a8bb13292ce3e4ee29540a3b1fd7\",\"dweb:/ipfs/QmeqcqcDYsgvbBH8XrHzURMuz9jQLEf4F2i5M59wYMCxgt\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CEC/ICECRegistry.sol\":{\"keccak256\":\"0x6f7fe6894294f65e1b2f8b5cae6a42bd79e9f234701e5a6a10214ee736326e54\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://06dbbd913a2ab732974493bcae8d796587d39dba17c38409238d156c979525d0\",\"dweb:/ipfs/Qmei2UEueRKckgZG9F3tG4rkAe1KoCwJPKPD7Mgkey4n9u\"]},\"@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\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xaa0e11a791bc975d581a4f5b7a8d9c16a880a354c89312318ae072ae3e740409\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://982d8b344f76193834260436d74c81e5a8f9e89106bb4cd72bbaabda4f3f59c2\",\"dweb:/ipfs/QmSrvP5TkQRhKDVCTpsV3uaKLBhkt7PjUY89vdtM9o5ybK\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017\",\"dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5\"]},\"openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xcab30f879b71ad33a1dc40bf1f0a388dad63e057901d09f6f25ab5afc36f4e07\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://68b685f000752cf4553b155bc6a55006b03d981f300fd7d23ebc8a67dd8ba424\",\"dweb:/ipfs/QmWudHPsmKS2o4PRdnVgc7qsgD1xwyBgnkUZKiJRq15VVn\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506040516114d13803806114d183398101604081905261002f91610073565b60008054600160ff199091168117610100600160a81b0319166101006001600160a01b03958616021790915580546001600160a01b031916919092161790556100c4565b60008060408385031215610085578182fd5b8251610090816100ac565b60208401519092506100a1816100ac565b809150509250929050565b6001600160a01b03811681146100c157600080fd5b50565b6113fe806100d36000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806344c4ea9514610067578063645a26bd146100905780636778e0e9146100b1578063b5b904ab146100d1578063bceeadb9146100e6578063f1acef64146100ee575b600080fd5b61007a610075366004610ce8565b610101565b6040516100879190610fc5565b60405180910390f35b6100a361009e366004610ce8565b610671565b604051610087929190610fac565b6100c46100bf366004610c9d565b61068a565b6040516100879190610fd0565b6100d96106b5565b6040516100879190610f5a565b6100d96106c4565b61007a6100fc366004610d00565b6106d8565b60008181526002602052604081205460ff16151560011461013d5760405162461bcd60e51b8152600401610134906111df565b60405180910390fd5b60015460405163ecef557760e01b81526000916001600160a01b03169063ecef55779061016e908690600401610ffe565b60206040518083038186803b15801561018657600080fd5b505afa15801561019a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101be9190610f39565b60ff16600c8111156101cc57fe5b90506101d6610b8a565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d7690610206908790600401610fd9565b60806040518083038186803b15801561021e57600080fd5b505afa158015610232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102569190610dda565b9050610260610bb1565b6001546040516309648a9d60e01b81526001600160a01b03909116906309648a9d90610290908890600401610fd0565b6102806040518083038186803b1580156102a957600080fd5b505afa1580156102bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e19190610e24565b90506102eb610c4b565b60015460405163e50e0ef760e01b81526001600160a01b039091169063e50e0ef79061031b908990600401610fd0565b60806040518083038186803b15801561033357600080fd5b505afa158015610347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036b9190610d72565b90506000600685600c81111561037d57fe5b1461038c578160200151610392565b81606001515b90506000806103a48660000151610671565b915091506000808660800151146103f0576103e96000876101c0015112156103d557866101c00151600019026103dc565b866101c001515b839063ffffffff610af016565b9050610448565b6080860151158015610424575060048651600581111561040c57fe5b1480610424575060058651600581111561042257fe5b145b15610430575080610448565b60405162461bcd60e51b8152600401610134906112d4565b60008054604051636eb1769f60e11b81526001600160a01b038087169263dd62ed3e9261048092309261010090041690600401610f6e565b60206040518083038186803b15801561049857600080fd5b505afa1580156104ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190610f21565b6000549091506001600160a01b038086169163095ea7b391610100909104166104ff848663ffffffff610af016565b6040518363ffffffff1660e01b815260040161051c929190610fac565b602060405180830381600087803b15801561053657600080fd5b505af115801561054a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056e9190610cc8565b61058a5760405162461bcd60e51b81526004016101349061122f565b60405163a9059cbb60e01b81526001600160a01b0385169063a9059cbb906105b89088908690600401610fac565b602060405180830381600087803b1580156105d257600080fd5b505af11580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190610cc8565b6106265760405162461bcd60e51b81526004016101349061106f565b8a7f4131d43c7bc220691dd088c228cd19fcafb66a0d9abeab4d8893e3db4e480ca28684604051610658929190610fac565b60405180910390a25060019a9950505050505050505050565b606081901c6bffffffffffffffffffffffff8216915091565b6bffffffffffffffffffffffff19606083901b166bffffffffffffffffffffffff8216175b92915050565b6001546001600160a01b031681565b60005461010090046001600160a01b031681565b600060066106ec6060850160408601610d53565b600c8111156106f757fe5b148061071d575060076107106060850160408601610d53565b600c81111561071b57fe5b145b6107395760405162461bcd60e51b815260040161013490611285565b600661074b6060850160408601610d53565b600c81111561075657fe5b1461077857306107696020840184610c81565b6001600160a01b031614610794565b306107896060840160408501610c81565b6001600160a01b0316145b6107b05760405162461bcd60e51b815260040161013490611331565b600060066107c46060860160408701610d53565b600c8111156107cf57fe5b146107e9576107e46040840160208501610c81565b6107f9565b6107f96080840160608501610c81565b905060008061080c610220870135610671565b9150915080826001600160a01b031663dd62ed3e85306040518363ffffffff1660e01b815260040161083f929190610f6e565b60206040518083038186803b15801561085757600080fd5b505afa15801561086b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088f9190610f21565b10156108ad5760405162461bcd60e51b815260040161013490611146565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd906108dd90869030908690600401610f88565b602060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f9190610cc8565b61094b5760405162461bcd60e51b815260040161013490611196565b60008054604051636eb1769f60e11b81526001600160a01b038086169263dd62ed3e9261098392309261010090041690600401610f6e565b60206040518083038186803b15801561099b57600080fd5b505afa1580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d39190610f21565b6000549091506001600160a01b038085169163095ea7b39161010090910416610a02848663ffffffff610b3916565b6040518363ffffffff1660e01b8152600401610a1f929190610fac565b602060405180830381600087803b158015610a3957600080fd5b505af1158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190610cc8565b610a8d5760405162461bcd60e51b8152600401610134906110f1565b60008881526002602052604090819020805460ff191660011790555188907ffe470e985a95a6aaad262a20cf968addf9489c083d8659cde642f329d561a4e490610ada9087908690610fac565b60405180910390a2506001979650505050505050565b6000610b3283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b5e565b9392505050565b600082820183811015610b325760405162461bcd60e51b8152600401610134906110ba565b60008184841115610b825760405162461bcd60e51b8152600401610134919061101c565b505050900390565b60408051608081018252600080825260208201819052909182019081526020016000905290565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8051600681106106af57600080fd5b600060208284031215610c92578081fd5b8135610b32816113a3565b60008060408385031215610caf578081fd5b8235610cba816113a3565b946020939093013593505050565b600060208284031215610cd9578081fd5b81518015158114610b32578182fd5b600060208284031215610cf9578081fd5b5035919050565b6000806000838503610340811215610d16578182fd5b843593506102a0601f1982011215610d2c578182fd5b60208501925060806102bf1982011215610d44578182fd5b506102c0840190509250925092565b600060208284031215610d64578081fd5b8135600d8110610b32578182fd5b600060808284031215610d83578081fd5b610d8d608061137c565b8251610d98816113a3565b81526020830151610da8816113a3565b60208201526040830151610dbb816113a3565b60408201526060830151610dce816113a3565b60608201529392505050565b600060808284031215610deb578081fd5b610df5608061137c565b82518152602083015160208201526040830151610e11816113bb565b60408201526060830151610dce816113bb565b6000610280808385031215610e37578182fd5b610e408161137c565b610e4a8585610c72565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e08085015190820152610100808501519082015261012080850151908201526101408085015190820152610160808501519082015261018080850151908201526101a080850151908201526101c080850151908201526101e080850151908201526102008085015190820152610220808501519082015261024080850151908201526102609384015193810193909352509092915050565b600060208284031215610f32578081fd5b5051919050565b600060208284031215610f4a578081fd5b815160ff81168114610b32578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b9081527231b7b73a3930b1ba2932b332b932b731b2af9960691b602082015260400190565b9081526b636f6e7472616374526f6c6560a01b602082015260400190565b6000602080835283518082850152825b818110156110485785810183015185820160400152820161102c565b818111156110595783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602b908201527f437573746f6469616e2e72657475726e436f6c6c61746572616c3a205452414e60408201526a14d1915497d1905253115160aa1b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526035908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e4352454160408201527414d25391d7d0531313d5d05390d157d19052531151605a1b606082015260800190565b60208082526030908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e5355464660408201526f494349454e545f414c4c4f57414e434560801b606082015260800190565b60208082526029908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a205452414e5346604082015268115497d1905253115160ba1b606082015260800190565b60208082526030908201527f437573746f6469616e2e72657475726e436f6c6c61746572616c3a20454e545260408201526f1657d113d154d7d393d517d1561254d560821b606082015260800190565b60208082526036908201527f437573746f6469616e2e72657475726e436f6c6c61746572616c3a2044454352604082015275115054d25391d7d0531313d5d05390d157d19052531160521b606082015260800190565b6020808252602f908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e56414c4960408201526e445f434f4e54524143545f524f4c4560881b606082015260800190565b6020808252603a908201527f437573746f6469616e2e72657475726e436f6c6c61746572616c3a20434f4c4c60408201527f41544552414c5f43414e5f4e4f545f42455f52455455524e4544000000000000606082015260800190565b6020808252602b908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e56414c4960408201526a0445f4f574e4552534849560ac1b606082015260800190565b60405181810167ffffffffffffffff8111828210171561139b57600080fd5b604052919050565b6001600160a01b03811681146113b857600080fd5b50565b600581106113b857600080fdfea2646970667358221220b23725f570f17273927c4c790a965fa708e85550ab3e42dc6512fa72f7d39d5964736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806344c4ea9514610067578063645a26bd146100905780636778e0e9146100b1578063b5b904ab146100d1578063bceeadb9146100e6578063f1acef64146100ee575b600080fd5b61007a610075366004610ce8565b610101565b6040516100879190610fc5565b60405180910390f35b6100a361009e366004610ce8565b610671565b604051610087929190610fac565b6100c46100bf366004610c9d565b61068a565b6040516100879190610fd0565b6100d96106b5565b6040516100879190610f5a565b6100d96106c4565b61007a6100fc366004610d00565b6106d8565b60008181526002602052604081205460ff16151560011461013d5760405162461bcd60e51b8152600401610134906111df565b60405180910390fd5b60015460405163ecef557760e01b81526000916001600160a01b03169063ecef55779061016e908690600401610ffe565b60206040518083038186803b15801561018657600080fd5b505afa15801561019a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101be9190610f39565b60ff16600c8111156101cc57fe5b90506101d6610b8a565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d7690610206908790600401610fd9565b60806040518083038186803b15801561021e57600080fd5b505afa158015610232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102569190610dda565b9050610260610bb1565b6001546040516309648a9d60e01b81526001600160a01b03909116906309648a9d90610290908890600401610fd0565b6102806040518083038186803b1580156102a957600080fd5b505afa1580156102bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e19190610e24565b90506102eb610c4b565b60015460405163e50e0ef760e01b81526001600160a01b039091169063e50e0ef79061031b908990600401610fd0565b60806040518083038186803b15801561033357600080fd5b505afa158015610347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036b9190610d72565b90506000600685600c81111561037d57fe5b1461038c578160200151610392565b81606001515b90506000806103a48660000151610671565b915091506000808660800151146103f0576103e96000876101c0015112156103d557866101c00151600019026103dc565b866101c001515b839063ffffffff610af016565b9050610448565b6080860151158015610424575060048651600581111561040c57fe5b1480610424575060058651600581111561042257fe5b145b15610430575080610448565b60405162461bcd60e51b8152600401610134906112d4565b60008054604051636eb1769f60e11b81526001600160a01b038087169263dd62ed3e9261048092309261010090041690600401610f6e565b60206040518083038186803b15801561049857600080fd5b505afa1580156104ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190610f21565b6000549091506001600160a01b038086169163095ea7b391610100909104166104ff848663ffffffff610af016565b6040518363ffffffff1660e01b815260040161051c929190610fac565b602060405180830381600087803b15801561053657600080fd5b505af115801561054a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056e9190610cc8565b61058a5760405162461bcd60e51b81526004016101349061122f565b60405163a9059cbb60e01b81526001600160a01b0385169063a9059cbb906105b89088908690600401610fac565b602060405180830381600087803b1580156105d257600080fd5b505af11580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190610cc8565b6106265760405162461bcd60e51b81526004016101349061106f565b8a7f4131d43c7bc220691dd088c228cd19fcafb66a0d9abeab4d8893e3db4e480ca28684604051610658929190610fac565b60405180910390a25060019a9950505050505050505050565b606081901c6bffffffffffffffffffffffff8216915091565b6bffffffffffffffffffffffff19606083901b166bffffffffffffffffffffffff8216175b92915050565b6001546001600160a01b031681565b60005461010090046001600160a01b031681565b600060066106ec6060850160408601610d53565b600c8111156106f757fe5b148061071d575060076107106060850160408601610d53565b600c81111561071b57fe5b145b6107395760405162461bcd60e51b815260040161013490611285565b600661074b6060850160408601610d53565b600c81111561075657fe5b1461077857306107696020840184610c81565b6001600160a01b031614610794565b306107896060840160408501610c81565b6001600160a01b0316145b6107b05760405162461bcd60e51b815260040161013490611331565b600060066107c46060860160408701610d53565b600c8111156107cf57fe5b146107e9576107e46040840160208501610c81565b6107f9565b6107f96080840160608501610c81565b905060008061080c610220870135610671565b9150915080826001600160a01b031663dd62ed3e85306040518363ffffffff1660e01b815260040161083f929190610f6e565b60206040518083038186803b15801561085757600080fd5b505afa15801561086b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088f9190610f21565b10156108ad5760405162461bcd60e51b815260040161013490611146565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd906108dd90869030908690600401610f88565b602060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f9190610cc8565b61094b5760405162461bcd60e51b815260040161013490611196565b60008054604051636eb1769f60e11b81526001600160a01b038086169263dd62ed3e9261098392309261010090041690600401610f6e565b60206040518083038186803b15801561099b57600080fd5b505afa1580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d39190610f21565b6000549091506001600160a01b038085169163095ea7b39161010090910416610a02848663ffffffff610b3916565b6040518363ffffffff1660e01b8152600401610a1f929190610fac565b602060405180830381600087803b158015610a3957600080fd5b505af1158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190610cc8565b610a8d5760405162461bcd60e51b8152600401610134906110f1565b60008881526002602052604090819020805460ff191660011790555188907ffe470e985a95a6aaad262a20cf968addf9489c083d8659cde642f329d561a4e490610ada9087908690610fac565b60405180910390a2506001979650505050505050565b6000610b3283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b5e565b9392505050565b600082820183811015610b325760405162461bcd60e51b8152600401610134906110ba565b60008184841115610b825760405162461bcd60e51b8152600401610134919061101c565b505050900390565b60408051608081018252600080825260208201819052909182019081526020016000905290565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8051600681106106af57600080fd5b600060208284031215610c92578081fd5b8135610b32816113a3565b60008060408385031215610caf578081fd5b8235610cba816113a3565b946020939093013593505050565b600060208284031215610cd9578081fd5b81518015158114610b32578182fd5b600060208284031215610cf9578081fd5b5035919050565b6000806000838503610340811215610d16578182fd5b843593506102a0601f1982011215610d2c578182fd5b60208501925060806102bf1982011215610d44578182fd5b506102c0840190509250925092565b600060208284031215610d64578081fd5b8135600d8110610b32578182fd5b600060808284031215610d83578081fd5b610d8d608061137c565b8251610d98816113a3565b81526020830151610da8816113a3565b60208201526040830151610dbb816113a3565b60408201526060830151610dce816113a3565b60608201529392505050565b600060808284031215610deb578081fd5b610df5608061137c565b82518152602083015160208201526040830151610e11816113bb565b60408201526060830151610dce816113bb565b6000610280808385031215610e37578182fd5b610e408161137c565b610e4a8585610c72565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e08085015190820152610100808501519082015261012080850151908201526101408085015190820152610160808501519082015261018080850151908201526101a080850151908201526101c080850151908201526101e080850151908201526102008085015190820152610220808501519082015261024080850151908201526102609384015193810193909352509092915050565b600060208284031215610f32578081fd5b5051919050565b600060208284031215610f4a578081fd5b815160ff81168114610b32578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b9081527231b7b73a3930b1ba2932b332b932b731b2af9960691b602082015260400190565b9081526b636f6e7472616374526f6c6560a01b602082015260400190565b6000602080835283518082850152825b818110156110485785810183015185820160400152820161102c565b818111156110595783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602b908201527f437573746f6469616e2e72657475726e436f6c6c61746572616c3a205452414e60408201526a14d1915497d1905253115160aa1b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526035908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e4352454160408201527414d25391d7d0531313d5d05390d157d19052531151605a1b606082015260800190565b60208082526030908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e5355464660408201526f494349454e545f414c4c4f57414e434560801b606082015260800190565b60208082526029908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a205452414e5346604082015268115497d1905253115160ba1b606082015260800190565b60208082526030908201527f437573746f6469616e2e72657475726e436f6c6c61746572616c3a20454e545260408201526f1657d113d154d7d393d517d1561254d560821b606082015260800190565b60208082526036908201527f437573746f6469616e2e72657475726e436f6c6c61746572616c3a2044454352604082015275115054d25391d7d0531313d5d05390d157d19052531160521b606082015260800190565b6020808252602f908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e56414c4960408201526e445f434f4e54524143545f524f4c4560881b606082015260800190565b6020808252603a908201527f437573746f6469616e2e72657475726e436f6c6c61746572616c3a20434f4c4c60408201527f41544552414c5f43414e5f4e4f545f42455f52455455524e4544000000000000606082015260800190565b6020808252602b908201527f437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e56414c4960408201526a0445f4f574e4552534849560ac1b606082015260800190565b60405181810167ffffffffffffffff8111828210171561139b57600080fd5b604052919050565b6001600160a01b03811681146113b857600080fd5b50565b600581106113b857600080fdfea2646970667358221220b23725f570f17273927c4c790a965fa708e85550ab3e42dc6512fa72f7d39d5964736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "512:6207:23:-:0;;;940:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1317:11:123;:18;;1331:4;-1:-1:-1;;1317:18:123;;;;;-1:-1:-1;;;;;;1015:20:23;1317:18:123;-1:-1:-1;;;;;1015:20:23;;;;;;;;1045:26;;-1:-1:-1;;;;;;1045:26:23;;;;;;;;512:6207;;329:441:-1;;;482:2;470:9;461:7;457:23;453:32;450:2;;;-1:-1;;488:12;450:2;89:6;83:13;101:33;128:5;101:33;:::i;:::-;651:2;722:22;;245:13;540:74;;-1:-1;263:54;245:13;263:54;:::i;:::-;659:95;;;;444:326;;;;;:::o;1122:117::-;-1:-1;;;;;1056:54;;1181:35;;1171:2;;1230:1;;1220:12;1171:2;1165:74;:::o;:::-;512:6207:23;;;;;;",
  "deployedSourceMap": "512:6207:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4198:2519;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;425:248:22;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;159:260::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;851:31:23:-;;;:::i;:::-;;;;;;;:::i;822:23::-;;;:::i;1620:2028::-;;;;;;:::i;:::-;;:::i;4198:2519::-;4306:4;4347:19;;;:10;:19;;;;;;;;:27;;:19;:27;4326:122;;;;-1:-1:-1;;;4326:122:23;;;;;;;:::i;:::-;;;;;;;;;4500:11;;:66;;-1:-1:-1;;;4500:66:23;;4459:25;;-1:-1:-1;;;;;4500:11:23;;:41;;:66;;4542:7;;4500:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4487:80;;;;;;;;;;4459:108;;4577:44;;:::i;:::-;4624:11;;:86;;-1:-1:-1;;;4624:86:23;;-1:-1:-1;;;;;4624:11:23;;;;:54;;:86;;4679:7;;4624:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4577:133;;4720:18;;:::i;:::-;4741:11;;:29;;-1:-1:-1;;;4741:29:23;;-1:-1:-1;;;;;4741:11:23;;;;:20;;:29;;4762:7;;4741:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4720:50;;4780:31;;:::i;:::-;4814:11;;:33;;-1:-1:-1;;;4814:33:23;;-1:-1:-1;;;;;4814:11:23;;;;:24;;:33;;4839:7;;4814:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4780:67;-1:-1:-1;4902:22:23;4944:16;4928:12;:32;;;;;;;;;4927:125;;5024:9;:28;;;4927:125;;;4976:9;:33;;;4927:125;4902:150;;5121:23;5146:24;5174:50;5197:19;:26;;;5174:22;:50::i;:::-;5120:104;;;;5273:25;5372:1;5342:5;:18;;;:32;5338:726;;5410:148;5473:1;5449:5;:20;;;:25;;5448:96;;5523:5;:20;;;-1:-1:-1;;5518:25:23;5448:96;;;5486:5;:20;;;5448:96;5410:16;;:148;:20;:148;:::i;:::-;5390:168;;5338:726;;;5668:18;;;;:32;:156;;;;-1:-1:-1;5746:22:23;5717:25;;:51;;;;;;;;;:106;;;-1:-1:-1;5801:22:23;5772:25;;:51;;;;;;;;;5717:106;5651:413;;;-1:-1:-1;5869:16:23;5651:413;;;5985:68;;-1:-1:-1;;;5985:68:23;;;;;;;:::i;5651:413::-;6116:17;6185:8;;6136:58;;-1:-1:-1;;;6136:58:23;;-1:-1:-1;;;;;6136:33:23;;;;;;:58;;6178:4;;6185:8;;;;;6136:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6257:8;;6116:78;;-1:-1:-1;;;;;;6225:31:23;;;;;;6257:8;;;;;6267:32;6116:78;6281:17;6267:32;:13;:32;:::i;:::-;6225:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6204:176;;;;-1:-1:-1;;;6204:176:23;;;;;;;:::i;:::-;6474:67;;-1:-1:-1;;;6474:67:23;;-1:-1:-1;;;;;6474:32:23;;;;;:67;;6507:14;;6523:17;;6474:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6453:157;;;;-1:-1:-1;;;6453:157:23;;;;;;;:::i;:::-;6645:7;6626:62;6654:14;6670:17;6626:62;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6706:4:23;;4198:2519;-1:-1:-1;;;;;;;;;;4198:2519:23:o;425:248:22:-;605:2;595:12;;;624:32;;;425:248;;;:::o;159:260::-;-1:-1:-1;;365:2:22;319:48;;;;378:33;;;319:93;159:260;;;;;:::o;851:31:23:-;;;-1:-1:-1;;;;;851:31:23;;:::o;822:23::-;;;;;;-1:-1:-1;;;;;822:23:23;;:::o;1620:2028::-;1802:4;1865:16;1843:18;;;;;;;;:::i;:::-;:38;;;;;;;;;:80;;;-1:-1:-1;1907:16:23;1885:18;;;;;;;;:::i;:::-;:38;;;;;;;;;1843:80;1822:174;;;;-1:-1:-1;;;1822:174:23;;;;;;;:::i;:::-;2051:16;2029:18;;;;;;;;:::i;:::-;:38;;;;;;;;;2028:165;;2188:4;2152:24;;;;:9;:24;:::i;:::-;-1:-1:-1;;;;;2152:41:23;;2028:165;;;2128:4;2087:29;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2087:46:23;;2028:165;2007:255;;;;-1:-1:-1;;;2007:255:23;;;;;;;:::i;:::-;2317:22;2365:16;2343:18;;;;;;;;:::i;:::-;:38;;;;;;;;;2342:131;;2445:28;;;;;;;;:::i;:::-;2342:131;;;2397:33;;;;;;;;:::i;:::-;2317:156;-1:-1:-1;2542:23:23;;2595:56;2618:25;;;:32;2595:22;:56::i;:::-;2541:110;;;;2751:16;2690:15;-1:-1:-1;;;;;2683:33:23;;2717:14;2741:4;2683:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:84;;2662:179;;;;-1:-1:-1;;;2662:179:23;;;;;;;:::i;:::-;2949:85;;-1:-1:-1;;;2949:85:23;;-1:-1:-1;;;;;2949:36:23;;;;;:85;;2986:14;;3010:4;;3017:16;;2949:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2928:173;;;;-1:-1:-1;;;2928:173:23;;;;;;;:::i;:::-;3202:17;3271:8;;3222:58;;-1:-1:-1;;;3222:58:23;;-1:-1:-1;;;;;3222:33:23;;;;;;:58;;3264:4;;3271:8;;;;;3222:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3343:8;;3202:78;;-1:-1:-1;;;;;;3311:31:23;;;;;;3343:8;;;;;3353:31;3202:78;3367:16;3353:31;:13;:31;:::i;:::-;3311:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3290:174;;;;-1:-1:-1;;;3290:174:23;;;;;;;:::i;:::-;3518:19;;;;:10;:19;;;;;;;:26;;-1:-1:-1;;3518:26:23;3540:4;3518:26;;;3560:59;3529:7;;3560:59;;;;3586:14;;3602:16;;3560:59;:::i;:::-;;;;;;;;-1:-1:-1;3637:4:23;;1620:2028;-1:-1:-1;;;;;;;1620:2028:23:o;1307:134:117:-;1365:7;1391:43;1395:1;1398;1391:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1384:50;1307:134;-1:-1:-1;;;1307:134:117:o;867:176::-;925:7;956:5;;;979:6;;;;971:46;;;;-1:-1:-1;;;971:46:117;;;;;;;:::i;1725:187::-;1811:7;1846:12;1838:6;;;;1830:29;;;;-1:-1:-1;;;1830:29:117;;;;;;;;:::i;:::-;-1:-1:-1;;;1881:5:117;;;1725:187::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;696:184::-;799:13;;26575:1;26565:12;;26555:2;;26591:1;;26581:12;7841:241;;7945:2;7933:9;7924:7;7920:23;7916:32;7913:2;;;-1:-1;;7951:12;7913:2;85:6;72:20;97:33;124:5;97:33;:::i;8089:366::-;;;8210:2;8198:9;8189:7;8185:23;8181:32;8178:2;;;-1:-1;;8216:12;8178:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8268:63;8368:2;8407:22;;;;7493:20;;-1:-1;;;8172:283::o;8462:257::-;;8574:2;8562:9;8553:7;8549:23;8545:32;8542:2;;;-1:-1;;8580:12;8542:2;364:6;358:13;26320:5;24949:13;24942:21;26298:5;26295:32;26285:2;;-1:-1;;26331:12;8726:241;;8830:2;8818:9;8809:7;8805:23;8801:32;8798:2;;;-1:-1;;8836:12;8798:2;-1:-1;485:20;;8792:175;-1:-1;8792:175::o;8974:619::-;;;;9163:9;9154:7;9150:23;9175:3;9150:23;9146:33;9143:2;;;-1:-1;;9182:12;9143:2;485:20;;;-1:-1;2839:3;-1:-1;;2821:16;;2817:26;2814:2;;;-1:-1;;2846:12;2814:2;9334;9402:22;;;-1:-1;1737:3;-1:-1;;1719:16;;1715:26;1712:2;;;-1:-1;;1744:12;1712:2;;9471:3;9549:9;9545:22;9480:97;;9137:456;;;;;:::o;9600:277::-;;9722:2;9710:9;9701:7;9697:23;9693:32;9690:2;;;-1:-1;;9728:12;9690:2;1375:6;1362:20;26950:2;26943:5;26940:13;26930:2;;-1:-1;;26957:12;9884:328;;10031:3;10019:9;10010:7;10006:23;10002:33;9999:2;;;-1:-1;;10038:12;9999:2;1988:20;10031:3;1988:20;:::i;:::-;226:6;220:13;238:33;265:5;238:33;:::i;:::-;2075:86;;2236:2;2301:22;;220:13;238:33;220:13;238:33;:::i;:::-;2236:2;2251:16;;2244:86;2406:2;2471:22;;220:13;238:33;220:13;238:33;:::i;:::-;2406:2;2421:16;;2414:86;2580:2;2645:22;;220:13;238:33;220:13;238:33;:::i;:::-;2580:2;2595:16;;2588:86;2599:5;9993:219;-1:-1;;;9993:219::o;10219:336::-;;10370:3;10358:9;10349:7;10345:23;10341:33;10338:2;;;-1:-1;;10377:12;10338:2;3097:20;10370:3;3097:20;:::i;:::-;3233:22;633:13;3183:16;3176:86;3326:2;3395:9;3391:22;633:13;3326:2;3345:5;3341:16;3334:86;3482:2;3578:9;3574:22;992:13;1010:60;1064:5;1010:60;:::i;:::-;3482:2;3497:16;;3490:113;3664:2;3756:22;;992:13;1010:60;992:13;1010:60;:::i;10562:312::-;;10701:3;;10689:9;10680:7;10676:23;10672:33;10669:2;;;-1:-1;;10708:12;10669:2;3994:22;10701:3;3994:22;:::i;:::-;4113:85;4194:3;4170:22;4113:85;:::i;:::-;4088:111;;4266:2;4331:22;;;7641:13;4281:16;;;4274:86;4434:2;4499:22;;;7641:13;4449:16;;;4442:86;4597:2;4662:22;;;7641:13;4612:16;;;4605:86;4760:3;4826:22;;;7641:13;4776:16;;;4769:86;4927:3;4993:22;;;7641:13;4943:16;;;4936:86;5092:3;5158:22;;;7641:13;5108:16;;;5101:86;5261:3;5326:22;;;1527:13;5277:16;;;5270:85;5427:3;5494:22;;;1527:13;5443:18;;;5436:87;5590:3;5657:22;;;1527:13;5606:18;;;5599:87;5762:3;5829:22;;;1527:13;5778:18;;;5771:87;5940:3;6007:22;;;1527:13;5956:18;;;5949:87;6118:3;6185:22;;;1527:13;6134:18;;;6127:87;6301:3;6368:22;;;1527:13;6317:18;;;6310:87;6468:3;6535:22;;;1527:13;6484:18;;;6477:87;6637:3;6704:22;;;1527:13;6653:18;;;6646:87;6798:3;6865:22;;;1527:13;6814:18;;;6807:87;6968:3;7035:22;;;1527:13;6984:18;;;6977:87;7133:3;7200:22;;;1527:13;7149:18;;;7142:87;7302:3;7369:22;;;1527:13;7318:18;;;7311:87;;;;-1:-1;4095:16;;10663:211;-1:-1;;10663:211::o;10881:263::-;;10996:2;10984:9;10975:7;10971:23;10967:32;10964:2;;;-1:-1;;11002:12;10964:2;-1:-1;7641:13;;10958:186;-1:-1;10958:186::o;11151:259::-;;11264:2;11252:9;11243:7;11239:23;11235:32;11232:2;;;-1:-1;;11270:12;11232:2;7786:6;7780:13;25410:4;27312:5;25399:16;27289:5;27286:33;27276:2;;-1:-1;;27323:12;16665:222;-1:-1;;;;;25194:54;;;;11488:37;;16792:2;16777:18;;16763:124::o;16894:333::-;-1:-1;;;;;25194:54;;;11488:37;;25194:54;;17213:2;17198:18;;11488:37;17049:2;17034:18;;17020:207::o;17234:444::-;-1:-1;;;;;25194:54;;;11488:37;;25194:54;;;;17581:2;17566:18;;11488:37;17664:2;17649:18;;11719:37;;;;17417:2;17402:18;;17388:290::o;17685:333::-;-1:-1;;;;;25194:54;;;;11488:37;;18004:2;17989:18;;11719:37;17840:2;17825:18;;17811:207::o;18025:210::-;24949:13;;24942:21;11602:34;;18146:2;18131:18;;18117:118::o;18242:222::-;11719:37;;;18369:2;18354:18;;18340:124::o;18471:459::-;11719:37;;;-1:-1;;;18916:2;18901:18;;12434:34;18689:2;18674:18;;18660:270::o;18937:459::-;11719:37;;;-1:-1;;;19382:2;19367:18;;13008:27;19155:2;19140:18;;19126:270::o;19674:310::-;;19821:2;;19842:17;19835:47;12088:5;24572:12;24729:6;19821:2;19810:9;19806:18;24717:19;-1:-1;25806:101;25820:6;25817:1;25814:13;25806:101;;;25887:11;;;;;25881:18;25868:11;;;24757:14;25868:11;25861:39;25835:10;;25806:101;;;25922:6;25919:1;25916:13;25913:2;;;-1:-1;24757:14;25978:6;19810:9;25969:16;;25962:27;25913:2;-1:-1;2821:16;26078:14;-1:-1;;26074:28;12246:39;;;;24757:14;12246:39;;19792:192;-1:-1;;;19792:192::o;19991:416::-;20191:2;20205:47;;;12707:2;20176:18;;;24717:19;12743:34;24757:14;;;12723:55;-1:-1;;;12798:12;;;12791:35;12845:12;;;20162:245::o;20414:416::-;20614:2;20628:47;;;13274:2;20599:18;;;24717:19;13310:29;24757:14;;;13290:50;13359:12;;;20585:245::o;20837:416::-;21037:2;21051:47;;;13610:2;21022:18;;;24717:19;13646:34;24757:14;;;13626:55;-1:-1;;;13701:12;;;13694:45;13758:12;;;21008:245::o;21260:416::-;21460:2;21474:47;;;14009:2;21445:18;;;24717:19;14045:34;24757:14;;;14025:55;-1:-1;;;14100:12;;;14093:40;14152:12;;;21431:245::o;21683:416::-;21883:2;21897:47;;;14403:2;21868:18;;;24717:19;14439:34;24757:14;;;14419:55;-1:-1;;;14494:12;;;14487:33;14539:12;;;21854:245::o;22106:416::-;22306:2;22320:47;;;14790:2;22291:18;;;24717:19;14826:34;24757:14;;;14806:55;-1:-1;;;14881:12;;;14874:40;14933:12;;;22277:245::o;22529:416::-;22729:2;22743:47;;;15184:2;22714:18;;;24717:19;15220:34;24757:14;;;15200:55;-1:-1;;;15275:12;;;15268:46;15333:12;;;22700:245::o;22952:416::-;23152:2;23166:47;;;15584:2;23137:18;;;24717:19;15620:34;24757:14;;;15600:55;-1:-1;;;15675:12;;;15668:39;15726:12;;;23123:245::o;23375:416::-;23575:2;23589:47;;;15977:2;23560:18;;;24717:19;16013:34;24757:14;;;15993:55;16082:28;16068:12;;;16061:50;16130:12;;;23546:245::o;23798:416::-;23998:2;24012:47;;;16381:2;23983:18;;;24717:19;16417:34;24757:14;;;16397:55;-1:-1;;;16472:12;;;16465:35;16519:12;;;23969:245::o;24221:256::-;24283:2;24277:9;24309:17;;;24384:18;24369:34;;24405:22;;;24366:62;24363:2;;;24441:1;;24431:12;24363:2;24283;24450:22;24261:216;;-1:-1;24261:216::o;26115:117::-;-1:-1;;;;;25194:54;;26174:35;;26164:2;;26223:1;;26213:12;26164:2;26158:74;:::o;26607:121::-;26703:1;26696:5;26693:12;26683:2;;26719:1;;26709:12",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\";\nimport \"openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\nimport \"../Conversions.sol\";\nimport \"../../CEC/ICECRegistry.sol\";\nimport \"./ICustodian.sol\";\n\n\n/**\n * @title Custodian\n * @notice Contract which holds the collateral of CEC (Credit Enhancement Collateral) assets.\n */\ncontract Custodian is ICustodian, ReentrancyGuard, Conversions {\n\n    using SafeMath for uint256;\n\n    event LockedCollateral(bytes32 indexed assetId, address collateralizer, uint256 collateralAmount);\n    event ReturnedCollateral(bytes32 indexed assetId, address collateralizer, uint256 returnedAmount);\n\n    address public cecActor;\n    ICECRegistry public cecRegistry;\n    mapping(bytes32 => bool) internal collateral;\n\n\n    constructor(address _cecActor, ICECRegistry _cecRegistry) public {\n        cecActor = _cecActor;\n        cecRegistry = _cecRegistry;\n    }\n\n    /**\n     * @notice Locks the required collateral amount encoded in the second contract\n     * reference in the terms.\n     * @dev The collateralizer has to set allowance beforehand. The custodian increases\n     * allowance for the AssetActor by amount of collateral\n     * @param assetId id of the asset with collateral requirements\n     * @param terms terms of the asset containing the collateral requirements\n     * @param ownership ownership of the asset\n     * @return true if the collateral was locked by the Custodian\n     */\n    function lockCollateral(\n        bytes32 assetId,\n        CECTerms calldata terms,\n        AssetOwnership calldata ownership\n    )\n        external\n        override\n        returns (bool)\n    {\n        require(\n            terms.contractRole == ContractRole.BUY || terms.contractRole == ContractRole.SEL,\n            \"Custodian.lockCollateral: INVALID_CONTRACT_ROLE\"\n        );\n\n        require(\n            (terms.contractRole == ContractRole.BUY)\n                ? ownership.counterpartyObligor == address(this)\n                : ownership.creatorObligor == address(this),\n            \"Custodian.lockCollateral: INVALID_OWNERSHIP\"\n        );\n\n        // derive address of collateralizer\n        address collateralizer = (terms.contractRole == ContractRole.BUY)\n            ? ownership.counterpartyBeneficiary\n            : ownership.creatorBeneficiary;\n\n        // decode token address and amount of collateral\n        (address collateralToken, uint256 collateralAmount) = decodeCollateralObject(terms.contractReference_2.object);\n\n        require(\n            IERC20(collateralToken).allowance(collateralizer, address(this)) >= collateralAmount,\n            \"Custodian.lockCollateral: INSUFFICIENT_ALLOWANCE\"\n        );\n\n        // try transferring collateral from collateralizer to the custodian\n        require(\n            IERC20(collateralToken).transferFrom(collateralizer, address(this), collateralAmount),\n            \"Custodian.lockCollateral: TRANSFER_FAILED\"\n        );\n\n        // set allowance for AssetActor to later transfer collateral when XD is triggered\n        uint256 allowance = IERC20(collateralToken).allowance(address(this), cecActor);\n        require(\n            IERC20(collateralToken).approve(cecActor, allowance.add(collateralAmount)),\n            \"Custodian.lockCollateral: INCREASING_ALLOWANCE_FAILED\"\n        );\n\n        // register collateral for assetId\n        collateral[assetId] = true;\n\n        emit LockedCollateral(assetId, collateralizer, collateralAmount);\n\n        return true;\n    }\n\n    /**\n     * @notice Returns the entire collateral back to the collateralizer if collateral\n     * was not executed before the asset reached maturity or it returns the remaining\n     * collateral (not executed amount) after collateral was executed and settled\n     * @dev resets allowance for the Asset Actor,\n     * reverts if state of the asset does not allow unlocking the collateral\n     * @param assetId id of the asset for which to return the collateral,\n     * @return true if the collateral was returned to the collateralizer\n     */\n    function returnCollateral(\n        bytes32 assetId\n    )\n        external\n        override\n        returns (bool)\n    {\n        require(\n            collateral[assetId] == true,\n            \"Custodian.returnCollateral: ENTRY_DOES_NOT_EXIST\"\n        );\n\n        ContractRole contractRole = ContractRole(cecRegistry.getEnumValueForTermsAttribute(assetId, \"contractRole\"));\n        ContractReference memory contractReference_2 = cecRegistry.getContractReferenceValueForTermsAttribute(assetId, \"contractReference_2\");\n        State memory state = cecRegistry.getState(assetId);\n        AssetOwnership memory ownership = cecRegistry.getOwnership(assetId);\n\n        // derive address of collateralizer\n        address collateralizer = (contractRole == ContractRole.BUY)\n            ? ownership.counterpartyBeneficiary\n            : ownership.creatorBeneficiary;\n\n        // decode token address and amount of collateral\n        (address collateralToken, uint256 collateralAmount) = decodeCollateralObject(contractReference_2.object);\n\n        // calculate amount to return\n        uint256 notExecutedAmount;\n        // if XD was triggerd\n        if (state.exerciseDate != uint256(0)) {\n            notExecutedAmount = collateralAmount.sub(\n                (state.exerciseAmount >= 0) ? uint256(state.exerciseAmount) : uint256(-1 * state.exerciseAmount)\n            );\n        // if XD was not triggered and (reached maturity or was terminated)\n        } else if (\n            state.exerciseDate == uint256(0)\n            && (state.contractPerformance == ContractPerformance.MD || state.contractPerformance == ContractPerformance.TD)\n        ) {\n            notExecutedAmount = collateralAmount;\n        // throw if XD was not triggered and maturity is not reached\n        } else {\n            revert(\"Custodian.returnCollateral: COLLATERAL_CAN_NOT_BE_RETURNED\");\n        }\n\n        // reset allowance for AssetActor\n        uint256 allowance = IERC20(collateralToken).allowance(address(this), cecActor);\n        require(\n            IERC20(collateralToken).approve(cecActor, allowance.sub(notExecutedAmount)),\n            \"Custodian.returnCollateral: DECREASING_ALLOWANCE_FAILD\"\n        );\n\n        // try transferring amount back to the collateralizer\n        require(\n            IERC20(collateralToken).transfer(collateralizer, notExecutedAmount),\n            \"Custodian.returnCollateral: TRANSFER_FAILED\"\n        );\n\n        emit ReturnedCollateral(assetId, collateralizer, notExecutedAmount);\n\n        return true;\n    }\n}\n",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Custodian/Custodian.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Custodian/Custodian.sol",
    "exportedSymbols": {
      "Custodian": [
        7452
      ]
    },
    "id": 7453,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7057,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:23"
      },
      {
        "id": 7058,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:23"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
        "id": 7059,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 39446,
        "src": "101:64:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol",
        "file": "openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol",
        "id": 7060,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 39592,
        "src": "166:67:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 7061,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 38682,
        "src": "234:59:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Conversions.sol",
        "file": "../Conversions.sol",
        "id": 7062,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 7056,
        "src": "295:28:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CEC/ICECRegistry.sol",
        "file": "../../CEC/ICECRegistry.sol",
        "id": 7063,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 9479,
        "src": "324:36:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Custodian/ICustodian.sol",
        "file": "./ICustodian.sol",
        "id": 7064,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 7476,
        "src": "361:26:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7066,
              "name": "ICustodian",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7475,
              "src": "534:10:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICustodian_$7475",
                "typeString": "contract ICustodian"
              }
            },
            "id": 7067,
            "nodeType": "InheritanceSpecifier",
            "src": "534:10:23"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7068,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 39591,
              "src": "546:15:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$39591",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 7069,
            "nodeType": "InheritanceSpecifier",
            "src": "546:15:23"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7070,
              "name": "Conversions",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7055,
              "src": "563:11:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Conversions_$7055",
                "typeString": "contract Conversions"
              }
            },
            "id": 7071,
            "nodeType": "InheritanceSpecifier",
            "src": "563:11:23"
          }
        ],
        "contractDependencies": [
          7055,
          7475,
          39591
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 7065,
          "nodeType": "StructuredDocumentation",
          "src": "390:121:23",
          "text": " @title Custodian\n @notice Contract which holds the collateral of CEC (Credit Enhancement Collateral) assets."
        },
        "fullyImplemented": true,
        "id": 7452,
        "linearizedBaseContracts": [
          7452,
          7055,
          39591,
          7475
        ],
        "name": "Custodian",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7074,
            "libraryName": {
              "contractScope": null,
              "id": 7072,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 38681,
              "src": "588:8:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$38681",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "582:27:23",
            "typeName": {
              "id": 7073,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "601:7:23",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7082,
            "name": "LockedCollateral",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7076,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7082,
                  "src": "638:23:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7075,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "638:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7078,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateralizer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7082,
                  "src": "663:22:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7077,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "663:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7080,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateralAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7082,
                  "src": "687:24:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7079,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "687:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "637:75:23"
            },
            "src": "615:98:23"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7090,
            "name": "ReturnedCollateral",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7084,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7090,
                  "src": "743:23:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7083,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "743:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7086,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateralizer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7090,
                  "src": "768:22:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7085,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "768:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7088,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "returnedAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7090,
                  "src": "792:22:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7087,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "792:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "742:73:23"
            },
            "src": "718:98:23"
          },
          {
            "constant": false,
            "functionSelector": "bceeadb9",
            "id": 7092,
            "mutability": "mutable",
            "name": "cecActor",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7452,
            "src": "822:23:23",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7091,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "822:7:23",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "b5b904ab",
            "id": 7094,
            "mutability": "mutable",
            "name": "cecRegistry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7452,
            "src": "851:31:23",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ICECRegistry_$9478",
              "typeString": "contract ICECRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 7093,
              "name": "ICECRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9478,
              "src": "851:12:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                "typeString": "contract ICECRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7098,
            "mutability": "mutable",
            "name": "collateral",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7452,
            "src": "888:44:23",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
              "typeString": "mapping(bytes32 => bool)"
            },
            "typeName": {
              "id": 7097,
              "keyType": {
                "id": 7095,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "896:7:23",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "888:24:23",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                "typeString": "mapping(bytes32 => bool)"
              },
              "valueType": {
                "id": 7096,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "907:4:23",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7113,
              "nodeType": "Block",
              "src": "1005:73:23",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7105,
                      "name": "cecActor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7092,
                      "src": "1015:8:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7106,
                      "name": "_cecActor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7100,
                      "src": "1026:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1015:20:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7108,
                  "nodeType": "ExpressionStatement",
                  "src": "1015:20:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7109,
                      "name": "cecRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7094,
                      "src": "1045:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                        "typeString": "contract ICECRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7110,
                      "name": "_cecRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7102,
                      "src": "1059:12:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                        "typeString": "contract ICECRegistry"
                      }
                    },
                    "src": "1045:26:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                      "typeString": "contract ICECRegistry"
                    }
                  },
                  "id": 7112,
                  "nodeType": "ExpressionStatement",
                  "src": "1045:26:23"
                }
              ]
            },
            "documentation": null,
            "id": 7114,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7103,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7100,
                  "mutability": "mutable",
                  "name": "_cecActor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7114,
                  "src": "952:17:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7099,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "952:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7102,
                  "mutability": "mutable",
                  "name": "_cecRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7114,
                  "src": "971:25:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                    "typeString": "contract ICECRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7101,
                    "name": "ICECRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9478,
                    "src": "971:12:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                      "typeString": "contract ICECRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "951:46:23"
            },
            "returnParameters": {
              "id": 7104,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1005:0:23"
            },
            "scope": 7452,
            "src": "940:138:23",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              7467
            ],
            "body": {
              "id": 7263,
              "nodeType": "Block",
              "src": "1812:1836:23",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 7138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractRole_$22539",
                            "typeString": "enum ContractRole"
                          },
                          "id": 7132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7128,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7119,
                              "src": "1843:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                "typeString": "struct CECTerms calldata"
                              }
                            },
                            "id": 7129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22774,
                            "src": "1843:18:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7130,
                              "name": "ContractRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22539,
                              "src": "1865:12:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                "typeString": "type(enum ContractRole)"
                              }
                            },
                            "id": 7131,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "BUY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1865:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "src": "1843:38:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractRole_$22539",
                            "typeString": "enum ContractRole"
                          },
                          "id": 7137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7133,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7119,
                              "src": "1885:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                "typeString": "struct CECTerms calldata"
                              }
                            },
                            "id": 7134,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22774,
                            "src": "1885:18:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7135,
                              "name": "ContractRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22539,
                              "src": "1907:12:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                "typeString": "type(enum ContractRole)"
                              }
                            },
                            "id": 7136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "SEL",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1907:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "src": "1885:38:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1843:80:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e56414c49445f434f4e54524143545f524f4c45",
                        "id": 7139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1937:49:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a40f46fab5b2f65edfec7a45bfac4c0d207cd70932b4415ee3dfb8dbfc72f3e8",
                          "typeString": "literal_string \"Custodian.lockCollateral: INVALID_CONTRACT_ROLE\""
                        },
                        "value": "Custodian.lockCollateral: INVALID_CONTRACT_ROLE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a40f46fab5b2f65edfec7a45bfac4c0d207cd70932b4415ee3dfb8dbfc72f3e8",
                          "typeString": "literal_string \"Custodian.lockCollateral: INVALID_CONTRACT_ROLE\""
                        }
                      ],
                      "id": 7127,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1822:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1822:174:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7141,
                  "nodeType": "ExpressionStatement",
                  "src": "1822:174:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_ContractRole_$22539",
                                "typeString": "enum ContractRole"
                              },
                              "id": 7147,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7143,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7119,
                                  "src": "2029:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                    "typeString": "struct CECTerms calldata"
                                  }
                                },
                                "id": 7144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "contractRole",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22774,
                                "src": "2029:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractRole_$22539",
                                  "typeString": "enum ContractRole"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7145,
                                  "name": "ContractRole",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22539,
                                  "src": "2051:12:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                    "typeString": "type(enum ContractRole)"
                                  }
                                },
                                "id": 7146,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "BUY",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2051:16:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractRole_$22539",
                                  "typeString": "enum ContractRole"
                                }
                              },
                              "src": "2029:38:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 7148,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2028:40:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7156,
                              "name": "ownership",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7121,
                              "src": "2152:9:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                                "typeString": "struct AssetOwnership calldata"
                              }
                            },
                            "id": 7157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "creatorObligor",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7842,
                            "src": "2152:24:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7160,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "2188:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              ],
                              "id": 7159,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2180:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 7158,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2180:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 7161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2180:13:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2152:41:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "2028:165:23",
                        "trueExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7155,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7149,
                              "name": "ownership",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7121,
                              "src": "2087:9:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                                "typeString": "struct AssetOwnership calldata"
                              }
                            },
                            "id": 7150,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "counterpartyObligor",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7846,
                            "src": "2087:29:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7153,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "2128:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              ],
                              "id": 7152,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2120:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 7151,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2120:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 7154,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2120:13:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2087:46:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e56414c49445f4f574e455253484950",
                        "id": 7164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2207:45:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cd4dd2255641c151efec3a748e5674a85e94aa030470a51589c1849d2ade20f8",
                          "typeString": "literal_string \"Custodian.lockCollateral: INVALID_OWNERSHIP\""
                        },
                        "value": "Custodian.lockCollateral: INVALID_OWNERSHIP"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cd4dd2255641c151efec3a748e5674a85e94aa030470a51589c1849d2ade20f8",
                          "typeString": "literal_string \"Custodian.lockCollateral: INVALID_OWNERSHIP\""
                        }
                      ],
                      "id": 7142,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2007:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2007:255:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7166,
                  "nodeType": "ExpressionStatement",
                  "src": "2007:255:23"
                },
                {
                  "assignments": [
                    7168
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7168,
                      "mutability": "mutable",
                      "name": "collateralizer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7263,
                      "src": "2317:22:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7167,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2317:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7180,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractRole_$22539",
                            "typeString": "enum ContractRole"
                          },
                          "id": 7173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7169,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7119,
                              "src": "2343:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                "typeString": "struct CECTerms calldata"
                              }
                            },
                            "id": 7170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22774,
                            "src": "2343:18:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7171,
                              "name": "ContractRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22539,
                              "src": "2365:12:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                "typeString": "type(enum ContractRole)"
                              }
                            },
                            "id": 7172,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "BUY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2365:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "src": "2343:38:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 7174,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2342:40:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7177,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7121,
                        "src": "2445:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                          "typeString": "struct AssetOwnership calldata"
                        }
                      },
                      "id": 7178,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "creatorBeneficiary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7844,
                      "src": "2445:28:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "2342:131:23",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7175,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7121,
                        "src": "2397:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                          "typeString": "struct AssetOwnership calldata"
                        }
                      },
                      "id": 7176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "counterpartyBeneficiary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7848,
                      "src": "2397:33:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2317:156:23"
                },
                {
                  "assignments": [
                    7182,
                    7184
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7182,
                      "mutability": "mutable",
                      "name": "collateralToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7263,
                      "src": "2542:23:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7181,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2542:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7184,
                      "mutability": "mutable",
                      "name": "collateralAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7263,
                      "src": "2567:24:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7183,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2567:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7190,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7186,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7119,
                            "src": "2618:5:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                              "typeString": "struct CECTerms calldata"
                            }
                          },
                          "id": 7187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "contractReference_2",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22798,
                          "src": "2618:25:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractReference_$22632_calldata_ptr",
                            "typeString": "struct ContractReference calldata"
                          }
                        },
                        "id": 7188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "object",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22625,
                        "src": "2618:32:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 7185,
                      "name": "decodeCollateralObject",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7054,
                      "src": "2595:22:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (address,uint256)"
                      }
                    },
                    "id": 7189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2595:56:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                      "typeString": "tuple(address,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2541:110:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7196,
                              "name": "collateralizer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7168,
                              "src": "2717:14:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7199,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "2741:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Custodian_$7452",
                                    "typeString": "contract Custodian"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Custodian_$7452",
                                    "typeString": "contract Custodian"
                                  }
                                ],
                                "id": 7198,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2733:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7197,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2733:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 7200,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2733:13:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7193,
                                  "name": "collateralToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7182,
                                  "src": "2690:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7192,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 39445,
                                "src": "2683:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 7194,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2683:23:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$39445",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7195,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 39404,
                            "src": "2683:33:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 7201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2683:64:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7202,
                          "name": "collateralAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7184,
                          "src": "2751:16:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2683:84:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e53554646494349454e545f414c4c4f57414e4345",
                        "id": 7204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2781:50:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_53ed1a8cca2b6d8ecf9487728c095b75981c1b87205264242f53dc5d6e55ac26",
                          "typeString": "literal_string \"Custodian.lockCollateral: INSUFFICIENT_ALLOWANCE\""
                        },
                        "value": "Custodian.lockCollateral: INSUFFICIENT_ALLOWANCE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_53ed1a8cca2b6d8ecf9487728c095b75981c1b87205264242f53dc5d6e55ac26",
                          "typeString": "literal_string \"Custodian.lockCollateral: INSUFFICIENT_ALLOWANCE\""
                        }
                      ],
                      "id": 7191,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2662:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2662:179:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7206,
                  "nodeType": "ExpressionStatement",
                  "src": "2662:179:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7212,
                            "name": "collateralizer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7168,
                            "src": "2986:14:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7215,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "3010:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              ],
                              "id": 7214,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3002:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 7213,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3002:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 7216,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3002:13:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7217,
                            "name": "collateralAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7184,
                            "src": "3017:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7209,
                                "name": "collateralToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7182,
                                "src": "2956:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7208,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39445,
                              "src": "2949:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 7210,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2949:23:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$39445",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 39426,
                          "src": "2949:36:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7218,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2949:85:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a205452414e534645525f4641494c4544",
                        "id": 7219,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3048:43:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c711bfecf37e3e1a71790bbc4c235a88ce0779f2066c3db618ab6eae108869f",
                          "typeString": "literal_string \"Custodian.lockCollateral: TRANSFER_FAILED\""
                        },
                        "value": "Custodian.lockCollateral: TRANSFER_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c711bfecf37e3e1a71790bbc4c235a88ce0779f2066c3db618ab6eae108869f",
                          "typeString": "literal_string \"Custodian.lockCollateral: TRANSFER_FAILED\""
                        }
                      ],
                      "id": 7207,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2928:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2928:173:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7221,
                  "nodeType": "ExpressionStatement",
                  "src": "2928:173:23"
                },
                {
                  "assignments": [
                    7223
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7223,
                      "mutability": "mutable",
                      "name": "allowance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7263,
                      "src": "3202:17:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7222,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3202:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7234,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7230,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "3264:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Custodian_$7452",
                              "typeString": "contract Custodian"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Custodian_$7452",
                              "typeString": "contract Custodian"
                            }
                          ],
                          "id": 7229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3256:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7228,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3256:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3256:13:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7232,
                        "name": "cecActor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7092,
                        "src": "3271:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7225,
                            "name": "collateralToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7182,
                            "src": "3229:15:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7224,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 39445,
                          "src": "3222:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 7226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3222:23:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$39445",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 7227,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 39404,
                      "src": "3222:33:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 7233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3222:58:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3202:78:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7240,
                            "name": "cecActor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7092,
                            "src": "3343:8:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7243,
                                "name": "collateralAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7184,
                                "src": "3367:16:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7241,
                                "name": "allowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7223,
                                "src": "3353:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7242,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 38514,
                              "src": "3353:13:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3353:31:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7237,
                                "name": "collateralToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7182,
                                "src": "3318:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7236,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39445,
                              "src": "3311:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 7238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3311:23:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$39445",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 39414,
                          "src": "3311:31:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7245,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3311:74:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e4352454153494e475f414c4c4f57414e43455f4641494c4544",
                        "id": 7246,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3399:55:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_46982ec4c2fd6b0dabf52666b6ee0e033c461f68bfcb3fe04252c1ef14af8800",
                          "typeString": "literal_string \"Custodian.lockCollateral: INCREASING_ALLOWANCE_FAILED\""
                        },
                        "value": "Custodian.lockCollateral: INCREASING_ALLOWANCE_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_46982ec4c2fd6b0dabf52666b6ee0e033c461f68bfcb3fe04252c1ef14af8800",
                          "typeString": "literal_string \"Custodian.lockCollateral: INCREASING_ALLOWANCE_FAILED\""
                        }
                      ],
                      "id": 7235,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3290:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3290:174:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7248,
                  "nodeType": "ExpressionStatement",
                  "src": "3290:174:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7249,
                        "name": "collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7098,
                        "src": "3518:10:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 7251,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 7250,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7117,
                        "src": "3529:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3518:19:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 7252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3540:4:23",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "3518:26:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7254,
                  "nodeType": "ExpressionStatement",
                  "src": "3518:26:23"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7256,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7117,
                        "src": "3577:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7257,
                        "name": "collateralizer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7168,
                        "src": "3586:14:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7258,
                        "name": "collateralAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7184,
                        "src": "3602:16:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7255,
                      "name": "LockedCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7082,
                      "src": "3560:16:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,address,uint256)"
                      }
                    },
                    "id": 7259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3560:59:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7260,
                  "nodeType": "EmitStatement",
                  "src": "3555:64:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3637:4:23",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7126,
                  "id": 7262,
                  "nodeType": "Return",
                  "src": "3630:11:23"
                }
              ]
            },
            "documentation": {
              "id": 7115,
              "nodeType": "StructuredDocumentation",
              "src": "1084:531:23",
              "text": " @notice Locks the required collateral amount encoded in the second contract\n reference in the terms.\n @dev The collateralizer has to set allowance beforehand. The custodian increases\n allowance for the AssetActor by amount of collateral\n @param assetId id of the asset with collateral requirements\n @param terms terms of the asset containing the collateral requirements\n @param ownership ownership of the asset\n @return true if the collateral was locked by the Custodian"
            },
            "functionSelector": "f1acef64",
            "id": 7264,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lockCollateral",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7123,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1776:8:23"
            },
            "parameters": {
              "id": 7122,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7117,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7264,
                  "src": "1653:15:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7116,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1653:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7119,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7264,
                  "src": "1678:23:23",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7118,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "1678:8:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7121,
                  "mutability": "mutable",
                  "name": "ownership",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7264,
                  "src": "1711:33:23",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                    "typeString": "struct AssetOwnership"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7120,
                    "name": "AssetOwnership",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7849,
                    "src": "1711:14:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AssetOwnership_$7849_storage_ptr",
                      "typeString": "struct AssetOwnership"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1643:107:23"
            },
            "returnParameters": {
              "id": 7126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7125,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7264,
                  "src": "1802:4:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7124,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1802:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1801:6:23"
            },
            "scope": 7452,
            "src": "1620:2028:23",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              7474
            ],
            "body": {
              "id": 7450,
              "nodeType": "Block",
              "src": "4316:2401:23",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 7278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7274,
                            "name": "collateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7098,
                            "src": "4347:10:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                              "typeString": "mapping(bytes32 => bool)"
                            }
                          },
                          "id": 7276,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7275,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7267,
                            "src": "4358:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4347:19:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 7277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4370:4:23",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "4347:27:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e72657475726e436f6c6c61746572616c3a20454e5452595f444f45535f4e4f545f4558495354",
                        "id": 7279,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4388:50:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7a158750cc8d340c5c70039bead6206f8a9cc4e3c57d090022485bdd42dbbb99",
                          "typeString": "literal_string \"Custodian.returnCollateral: ENTRY_DOES_NOT_EXIST\""
                        },
                        "value": "Custodian.returnCollateral: ENTRY_DOES_NOT_EXIST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7a158750cc8d340c5c70039bead6206f8a9cc4e3c57d090022485bdd42dbbb99",
                          "typeString": "literal_string \"Custodian.returnCollateral: ENTRY_DOES_NOT_EXIST\""
                        }
                      ],
                      "id": 7273,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4326:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4326:122:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7281,
                  "nodeType": "ExpressionStatement",
                  "src": "4326:122:23"
                },
                {
                  "assignments": [
                    7283
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7283,
                      "mutability": "mutable",
                      "name": "contractRole",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4459:25:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractRole_$22539",
                        "typeString": "enum ContractRole"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7282,
                        "name": "ContractRole",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22539,
                        "src": "4459:12:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ContractRole_$22539",
                          "typeString": "enum ContractRole"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7291,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7287,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7267,
                            "src": "4542:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "636f6e7472616374526f6c65",
                            "id": 7288,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4551:14:23",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_25827de09a431c20bbdc36b82f2598bebb6f799c13d479cbb6f07f3bb9ca40e8",
                              "typeString": "literal_string \"contractRole\""
                            },
                            "value": "contractRole"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_25827de09a431c20bbdc36b82f2598bebb6f799c13d479cbb6f07f3bb9ca40e8",
                              "typeString": "literal_string \"contractRole\""
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7285,
                            "name": "cecRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7094,
                            "src": "4500:11:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                              "typeString": "contract ICECRegistry"
                            }
                          },
                          "id": 7286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getEnumValueForTermsAttribute",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6830,
                          "src": "4500:41:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes32_$returns$_t_uint8_$",
                            "typeString": "function (bytes32,bytes32) view external returns (uint8)"
                          }
                        },
                        "id": 7289,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4500:66:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 7284,
                      "name": "ContractRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22539,
                      "src": "4487:12:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                        "typeString": "type(enum ContractRole)"
                      }
                    },
                    "id": 7290,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4487:80:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractRole_$22539",
                      "typeString": "enum ContractRole"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4459:108:23"
                },
                {
                  "assignments": [
                    7293
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7293,
                      "mutability": "mutable",
                      "name": "contractReference_2",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4577:44:23",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ContractReference_$22632_memory_ptr",
                        "typeString": "struct ContractReference"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7292,
                        "name": "ContractReference",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22632,
                        "src": "4577:17:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ContractReference_$22632_storage_ptr",
                          "typeString": "struct ContractReference"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7299,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7296,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7267,
                        "src": "4679:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "636f6e74726163745265666572656e63655f32",
                        "id": 7297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4688:21:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_01acef38074a0e0d5976473f7e34539badf35a9665d3e6a9e9fe377f17f1ea4f",
                          "typeString": "literal_string \"contractReference_2\""
                        },
                        "value": "contractReference_2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_01acef38074a0e0d5976473f7e34539badf35a9665d3e6a9e9fe377f17f1ea4f",
                          "typeString": "literal_string \"contractReference_2\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7294,
                        "name": "cecRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "4624:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                          "typeString": "contract ICECRegistry"
                        }
                      },
                      "id": 7295,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getContractReferenceValueForTermsAttribute",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6893,
                      "src": "4624:54:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes32_$returns$_t_struct$_ContractReference_$22632_memory_ptr_$",
                        "typeString": "function (bytes32,bytes32) view external returns (struct ContractReference memory)"
                      }
                    },
                    "id": 7298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4624:86:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ContractReference_$22632_memory_ptr",
                      "typeString": "struct ContractReference memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4577:133:23"
                },
                {
                  "assignments": [
                    7301
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7301,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4720:18:23",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7300,
                        "name": "State",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22673,
                        "src": "4720:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                          "typeString": "struct State"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7306,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7304,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7267,
                        "src": "4762:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7302,
                        "name": "cecRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "4741:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                          "typeString": "contract ICECRegistry"
                        }
                      },
                      "id": 7303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getState",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5727,
                      "src": "4741:20:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                        "typeString": "function (bytes32) view external returns (struct State memory)"
                      }
                    },
                    "id": 7305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4741:29:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4720:50:23"
                },
                {
                  "assignments": [
                    7308
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7308,
                      "mutability": "mutable",
                      "name": "ownership",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4780:31:23",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AssetOwnership_$7849_memory_ptr",
                        "typeString": "struct AssetOwnership"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7307,
                        "name": "AssetOwnership",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7849,
                        "src": "4780:14:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_storage_ptr",
                          "typeString": "struct AssetOwnership"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7313,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7311,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7267,
                        "src": "4839:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7309,
                        "name": "cecRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "4814:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                          "typeString": "contract ICECRegistry"
                        }
                      },
                      "id": 7310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4578,
                      "src": "4814:24:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_AssetOwnership_$7849_memory_ptr_$",
                        "typeString": "function (bytes32) view external returns (struct AssetOwnership memory)"
                      }
                    },
                    "id": 7312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4814:33:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AssetOwnership_$7849_memory_ptr",
                      "typeString": "struct AssetOwnership memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4780:67:23"
                },
                {
                  "assignments": [
                    7315
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7315,
                      "mutability": "mutable",
                      "name": "collateralizer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4902:22:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7314,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4902:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7326,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractRole_$22539",
                            "typeString": "enum ContractRole"
                          },
                          "id": 7319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7316,
                            "name": "contractRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7283,
                            "src": "4928:12:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7317,
                              "name": "ContractRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22539,
                              "src": "4944:12:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                "typeString": "type(enum ContractRole)"
                              }
                            },
                            "id": 7318,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "BUY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4944:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "src": "4928:32:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 7320,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "4927:34:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7323,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7308,
                        "src": "5024:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_memory_ptr",
                          "typeString": "struct AssetOwnership memory"
                        }
                      },
                      "id": 7324,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "creatorBeneficiary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7844,
                      "src": "5024:28:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "4927:125:23",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7321,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7308,
                        "src": "4976:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_memory_ptr",
                          "typeString": "struct AssetOwnership memory"
                        }
                      },
                      "id": 7322,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "counterpartyBeneficiary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7848,
                      "src": "4976:33:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4902:150:23"
                },
                {
                  "assignments": [
                    7328,
                    7330
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7328,
                      "mutability": "mutable",
                      "name": "collateralToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "5121:23:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7327,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5121:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7330,
                      "mutability": "mutable",
                      "name": "collateralAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "5146:24:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7329,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5146:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7335,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7332,
                          "name": "contractReference_2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7293,
                          "src": "5197:19:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractReference_$22632_memory_ptr",
                            "typeString": "struct ContractReference memory"
                          }
                        },
                        "id": 7333,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "object",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22625,
                        "src": "5197:26:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 7331,
                      "name": "decodeCollateralObject",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7054,
                      "src": "5174:22:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (address,uint256)"
                      }
                    },
                    "id": 7334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5174:50:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                      "typeString": "tuple(address,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5120:104:23"
                },
                {
                  "assignments": [
                    7337
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7337,
                      "mutability": "mutable",
                      "name": "notExecutedAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "5273:25:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7336,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5273:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7338,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5273:25:23"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7339,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7301,
                        "src": "5342:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 7340,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exerciseDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22642,
                      "src": "5342:18:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5372:1:23",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 7342,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5364:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 7341,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5364:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 7344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5364:10:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5342:32:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 7391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7372,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7301,
                            "src": "5668:5:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                              "typeString": "struct State memory"
                            }
                          },
                          "id": 7373,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exerciseDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22642,
                          "src": "5668:18:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7376,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5698:1:23",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7375,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5690:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 7374,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5690:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 7377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5690:10:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5668:32:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 7389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                "typeString": "enum ContractPerformance"
                              },
                              "id": 7383,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7379,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7301,
                                  "src": "5717:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                    "typeString": "struct State memory"
                                  }
                                },
                                "id": 7380,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "contractPerformance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22634,
                                "src": "5717:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7381,
                                  "name": "ContractPerformance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22513,
                                  "src": "5746:19:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                    "typeString": "type(enum ContractPerformance)"
                                  }
                                },
                                "id": 7382,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "MD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "5746:22:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "src": "5717:51:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                "typeString": "enum ContractPerformance"
                              },
                              "id": 7388,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7384,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7301,
                                  "src": "5772:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                    "typeString": "struct State memory"
                                  }
                                },
                                "id": 7385,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "contractPerformance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22634,
                                "src": "5772:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7386,
                                  "name": "ContractPerformance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22513,
                                  "src": "5801:19:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                    "typeString": "type(enum ContractPerformance)"
                                  }
                                },
                                "id": 7387,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "TD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "5801:22:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "src": "5772:51:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "5717:106:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 7390,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5716:108:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "5668:156:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 7401,
                      "nodeType": "Block",
                      "src": "5971:93:23",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "437573746f6469616e2e72657475726e436f6c6c61746572616c3a20434f4c4c41544552414c5f43414e5f4e4f545f42455f52455455524e4544",
                                "id": 7398,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5992:60:23",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_c750c28c7d403762724f5dd3debce3ffca29469599c1f38ea18a24cbd6380efb",
                                  "typeString": "literal_string \"Custodian.returnCollateral: COLLATERAL_CAN_NOT_BE_RETURNED\""
                                },
                                "value": "Custodian.returnCollateral: COLLATERAL_CAN_NOT_BE_RETURNED"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c750c28c7d403762724f5dd3debce3ffca29469599c1f38ea18a24cbd6380efb",
                                  "typeString": "literal_string \"Custodian.returnCollateral: COLLATERAL_CAN_NOT_BE_RETURNED\""
                                }
                              ],
                              "id": 7397,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -19,
                                -19
                              ],
                              "referencedDeclaration": -19,
                              "src": "5985:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (string memory) pure"
                              }
                            },
                            "id": 7399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5985:68:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7400,
                          "nodeType": "ExpressionStatement",
                          "src": "5985:68:23"
                        }
                      ]
                    },
                    "id": 7402,
                    "nodeType": "IfStatement",
                    "src": "5651:413:23",
                    "trueBody": {
                      "id": 7396,
                      "nodeType": "Block",
                      "src": "5835:130:23",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 7392,
                              "name": "notExecutedAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7337,
                              "src": "5849:17:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "id": 7393,
                              "name": "collateralAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7330,
                              "src": "5869:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5849:36:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7395,
                          "nodeType": "ExpressionStatement",
                          "src": "5849:36:23"
                        }
                      ]
                    }
                  },
                  "id": 7403,
                  "nodeType": "IfStatement",
                  "src": "5338:726:23",
                  "trueBody": {
                    "id": 7371,
                    "nodeType": "Block",
                    "src": "5376:269:23",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7346,
                            "name": "notExecutedAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7337,
                            "src": "5390:17:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 7352,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 7349,
                                          "name": "state",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7301,
                                          "src": "5449:5:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                            "typeString": "struct State memory"
                                          }
                                        },
                                        "id": 7350,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "exerciseAmount",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22662,
                                        "src": "5449:20:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 7351,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5473:1:23",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "5449:25:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "id": 7353,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "5448:27:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 7365,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 7362,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "5518:2:23",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 7361,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5519:1:23",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_minus_1_by_1",
                                          "typeString": "int_const -1"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 7363,
                                          "name": "state",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7301,
                                          "src": "5523:5:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                            "typeString": "struct State memory"
                                          }
                                        },
                                        "id": 7364,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "exerciseAmount",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22662,
                                        "src": "5523:20:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "5518:25:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 7360,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5510:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 7359,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5510:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 7366,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5510:34:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "5448:96:23",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7356,
                                        "name": "state",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7301,
                                        "src": "5486:5:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                          "typeString": "struct State memory"
                                        }
                                      },
                                      "id": 7357,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "exerciseAmount",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22662,
                                      "src": "5486:20:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 7355,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5478:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 7354,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5478:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 7358,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5478:29:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7347,
                                "name": "collateralAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7330,
                                "src": "5410:16:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7348,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 38531,
                              "src": "5410:20:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7368,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5410:148:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5390:168:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7370,
                        "nodeType": "ExpressionStatement",
                        "src": "5390:168:23"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    7405
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7405,
                      "mutability": "mutable",
                      "name": "allowance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "6116:17:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7404,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6116:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7416,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7412,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "6178:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Custodian_$7452",
                              "typeString": "contract Custodian"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Custodian_$7452",
                              "typeString": "contract Custodian"
                            }
                          ],
                          "id": 7411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6170:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7410,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6170:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6170:13:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7414,
                        "name": "cecActor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7092,
                        "src": "6185:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7407,
                            "name": "collateralToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7328,
                            "src": "6143:15:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7406,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 39445,
                          "src": "6136:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 7408,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6136:23:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$39445",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 7409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 39404,
                      "src": "6136:33:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 7415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6136:58:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6116:78:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7422,
                            "name": "cecActor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7092,
                            "src": "6257:8:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7425,
                                "name": "notExecutedAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7337,
                                "src": "6281:17:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7423,
                                "name": "allowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7405,
                                "src": "6267:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7424,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 38531,
                              "src": "6267:13:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6267:32:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7419,
                                "name": "collateralToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7328,
                                "src": "6232:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7418,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39445,
                              "src": "6225:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 7420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6225:23:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$39445",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 39414,
                          "src": "6225:31:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7427,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6225:75:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e72657475726e436f6c6c61746572616c3a2044454352454153494e475f414c4c4f57414e43455f4641494c44",
                        "id": 7428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6314:56:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9be65a01d1b00012e94a7400b7fad752e8ee46d162be90b61301384db7553a5a",
                          "typeString": "literal_string \"Custodian.returnCollateral: DECREASING_ALLOWANCE_FAILD\""
                        },
                        "value": "Custodian.returnCollateral: DECREASING_ALLOWANCE_FAILD"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9be65a01d1b00012e94a7400b7fad752e8ee46d162be90b61301384db7553a5a",
                          "typeString": "literal_string \"Custodian.returnCollateral: DECREASING_ALLOWANCE_FAILD\""
                        }
                      ],
                      "id": 7417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6204:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6204:176:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7430,
                  "nodeType": "ExpressionStatement",
                  "src": "6204:176:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7436,
                            "name": "collateralizer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "6507:14:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7437,
                            "name": "notExecutedAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7337,
                            "src": "6523:17:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7433,
                                "name": "collateralToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7328,
                                "src": "6481:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7432,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39445,
                              "src": "6474:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 7434,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6474:23:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$39445",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 39394,
                          "src": "6474:32:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6474:67:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e72657475726e436f6c6c61746572616c3a205452414e534645525f4641494c4544",
                        "id": 7439,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6555:45:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_12444819030d2c1a5e06af50c2b241ae56292449142ae93a4b3890db50763976",
                          "typeString": "literal_string \"Custodian.returnCollateral: TRANSFER_FAILED\""
                        },
                        "value": "Custodian.returnCollateral: TRANSFER_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_12444819030d2c1a5e06af50c2b241ae56292449142ae93a4b3890db50763976",
                          "typeString": "literal_string \"Custodian.returnCollateral: TRANSFER_FAILED\""
                        }
                      ],
                      "id": 7431,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6453:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6453:157:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7441,
                  "nodeType": "ExpressionStatement",
                  "src": "6453:157:23"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7443,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7267,
                        "src": "6645:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7444,
                        "name": "collateralizer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7315,
                        "src": "6654:14:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7445,
                        "name": "notExecutedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7337,
                        "src": "6670:17:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7442,
                      "name": "ReturnedCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7090,
                      "src": "6626:18:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,address,uint256)"
                      }
                    },
                    "id": 7446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6626:62:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7447,
                  "nodeType": "EmitStatement",
                  "src": "6621:67:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6706:4:23",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7272,
                  "id": 7449,
                  "nodeType": "Return",
                  "src": "6699:11:23"
                }
              ]
            },
            "documentation": {
              "id": 7265,
              "nodeType": "StructuredDocumentation",
              "src": "3654:539:23",
              "text": " @notice Returns the entire collateral back to the collateralizer if collateral\n was not executed before the asset reached maturity or it returns the remaining\n collateral (not executed amount) after collateral was executed and settled\n @dev resets allowance for the Asset Actor,\n reverts if state of the asset does not allow unlocking the collateral\n @param assetId id of the asset for which to return the collateral,\n @return true if the collateral was returned to the collateralizer"
            },
            "functionSelector": "44c4ea95",
            "id": 7451,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "returnCollateral",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7269,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4280:8:23"
            },
            "parameters": {
              "id": 7268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7267,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7451,
                  "src": "4233:15:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7266,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4233:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4223:31:23"
            },
            "returnParameters": {
              "id": 7272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7271,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7451,
                  "src": "4306:4:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7270,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4306:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4305:6:23"
            },
            "scope": 7452,
            "src": "4198:2519:23",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 7453,
        "src": "512:6207:23"
      }
    ],
    "src": "41:6679:23"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Custodian/Custodian.sol",
    "exportedSymbols": {
      "Custodian": [
        7452
      ]
    },
    "id": 7453,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7057,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:23"
      },
      {
        "id": 7058,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:23"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
        "id": 7059,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 39446,
        "src": "101:64:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol",
        "file": "openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol",
        "id": 7060,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 39592,
        "src": "166:67:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 7061,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 38682,
        "src": "234:59:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Conversions.sol",
        "file": "../Conversions.sol",
        "id": 7062,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 7056,
        "src": "295:28:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CEC/ICECRegistry.sol",
        "file": "../../CEC/ICECRegistry.sol",
        "id": 7063,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 9479,
        "src": "324:36:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Custodian/ICustodian.sol",
        "file": "./ICustodian.sol",
        "id": 7064,
        "nodeType": "ImportDirective",
        "scope": 7453,
        "sourceUnit": 7476,
        "src": "361:26:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7066,
              "name": "ICustodian",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7475,
              "src": "534:10:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICustodian_$7475",
                "typeString": "contract ICustodian"
              }
            },
            "id": 7067,
            "nodeType": "InheritanceSpecifier",
            "src": "534:10:23"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7068,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 39591,
              "src": "546:15:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$39591",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 7069,
            "nodeType": "InheritanceSpecifier",
            "src": "546:15:23"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 7070,
              "name": "Conversions",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7055,
              "src": "563:11:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Conversions_$7055",
                "typeString": "contract Conversions"
              }
            },
            "id": 7071,
            "nodeType": "InheritanceSpecifier",
            "src": "563:11:23"
          }
        ],
        "contractDependencies": [
          7055,
          7475,
          39591
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 7065,
          "nodeType": "StructuredDocumentation",
          "src": "390:121:23",
          "text": " @title Custodian\n @notice Contract which holds the collateral of CEC (Credit Enhancement Collateral) assets."
        },
        "fullyImplemented": true,
        "id": 7452,
        "linearizedBaseContracts": [
          7452,
          7055,
          39591,
          7475
        ],
        "name": "Custodian",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7074,
            "libraryName": {
              "contractScope": null,
              "id": 7072,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 38681,
              "src": "588:8:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$38681",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "582:27:23",
            "typeName": {
              "id": 7073,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "601:7:23",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7082,
            "name": "LockedCollateral",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7076,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7082,
                  "src": "638:23:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7075,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "638:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7078,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateralizer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7082,
                  "src": "663:22:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7077,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "663:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7080,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateralAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7082,
                  "src": "687:24:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7079,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "687:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "637:75:23"
            },
            "src": "615:98:23"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7090,
            "name": "ReturnedCollateral",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7084,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7090,
                  "src": "743:23:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7083,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "743:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7086,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateralizer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7090,
                  "src": "768:22:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7085,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "768:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7088,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "returnedAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7090,
                  "src": "792:22:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7087,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "792:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "742:73:23"
            },
            "src": "718:98:23"
          },
          {
            "constant": false,
            "functionSelector": "bceeadb9",
            "id": 7092,
            "mutability": "mutable",
            "name": "cecActor",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7452,
            "src": "822:23:23",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7091,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "822:7:23",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "b5b904ab",
            "id": 7094,
            "mutability": "mutable",
            "name": "cecRegistry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7452,
            "src": "851:31:23",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ICECRegistry_$9478",
              "typeString": "contract ICECRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 7093,
              "name": "ICECRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9478,
              "src": "851:12:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                "typeString": "contract ICECRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7098,
            "mutability": "mutable",
            "name": "collateral",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 7452,
            "src": "888:44:23",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
              "typeString": "mapping(bytes32 => bool)"
            },
            "typeName": {
              "id": 7097,
              "keyType": {
                "id": 7095,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "896:7:23",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "888:24:23",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                "typeString": "mapping(bytes32 => bool)"
              },
              "valueType": {
                "id": 7096,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "907:4:23",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7113,
              "nodeType": "Block",
              "src": "1005:73:23",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7105,
                      "name": "cecActor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7092,
                      "src": "1015:8:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7106,
                      "name": "_cecActor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7100,
                      "src": "1026:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1015:20:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7108,
                  "nodeType": "ExpressionStatement",
                  "src": "1015:20:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7109,
                      "name": "cecRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7094,
                      "src": "1045:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                        "typeString": "contract ICECRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7110,
                      "name": "_cecRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7102,
                      "src": "1059:12:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                        "typeString": "contract ICECRegistry"
                      }
                    },
                    "src": "1045:26:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                      "typeString": "contract ICECRegistry"
                    }
                  },
                  "id": 7112,
                  "nodeType": "ExpressionStatement",
                  "src": "1045:26:23"
                }
              ]
            },
            "documentation": null,
            "id": 7114,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7103,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7100,
                  "mutability": "mutable",
                  "name": "_cecActor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7114,
                  "src": "952:17:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7099,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "952:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7102,
                  "mutability": "mutable",
                  "name": "_cecRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7114,
                  "src": "971:25:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                    "typeString": "contract ICECRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7101,
                    "name": "ICECRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9478,
                    "src": "971:12:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                      "typeString": "contract ICECRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "951:46:23"
            },
            "returnParameters": {
              "id": 7104,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1005:0:23"
            },
            "scope": 7452,
            "src": "940:138:23",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              7467
            ],
            "body": {
              "id": 7263,
              "nodeType": "Block",
              "src": "1812:1836:23",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 7138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractRole_$22539",
                            "typeString": "enum ContractRole"
                          },
                          "id": 7132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7128,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7119,
                              "src": "1843:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                "typeString": "struct CECTerms calldata"
                              }
                            },
                            "id": 7129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22774,
                            "src": "1843:18:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7130,
                              "name": "ContractRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22539,
                              "src": "1865:12:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                "typeString": "type(enum ContractRole)"
                              }
                            },
                            "id": 7131,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "BUY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1865:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "src": "1843:38:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractRole_$22539",
                            "typeString": "enum ContractRole"
                          },
                          "id": 7137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7133,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7119,
                              "src": "1885:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                "typeString": "struct CECTerms calldata"
                              }
                            },
                            "id": 7134,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22774,
                            "src": "1885:18:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7135,
                              "name": "ContractRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22539,
                              "src": "1907:12:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                "typeString": "type(enum ContractRole)"
                              }
                            },
                            "id": 7136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "SEL",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1907:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "src": "1885:38:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1843:80:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e56414c49445f434f4e54524143545f524f4c45",
                        "id": 7139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1937:49:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a40f46fab5b2f65edfec7a45bfac4c0d207cd70932b4415ee3dfb8dbfc72f3e8",
                          "typeString": "literal_string \"Custodian.lockCollateral: INVALID_CONTRACT_ROLE\""
                        },
                        "value": "Custodian.lockCollateral: INVALID_CONTRACT_ROLE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a40f46fab5b2f65edfec7a45bfac4c0d207cd70932b4415ee3dfb8dbfc72f3e8",
                          "typeString": "literal_string \"Custodian.lockCollateral: INVALID_CONTRACT_ROLE\""
                        }
                      ],
                      "id": 7127,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1822:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1822:174:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7141,
                  "nodeType": "ExpressionStatement",
                  "src": "1822:174:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_ContractRole_$22539",
                                "typeString": "enum ContractRole"
                              },
                              "id": 7147,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7143,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7119,
                                  "src": "2029:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                    "typeString": "struct CECTerms calldata"
                                  }
                                },
                                "id": 7144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "contractRole",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22774,
                                "src": "2029:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractRole_$22539",
                                  "typeString": "enum ContractRole"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7145,
                                  "name": "ContractRole",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22539,
                                  "src": "2051:12:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                    "typeString": "type(enum ContractRole)"
                                  }
                                },
                                "id": 7146,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "BUY",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2051:16:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractRole_$22539",
                                  "typeString": "enum ContractRole"
                                }
                              },
                              "src": "2029:38:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 7148,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2028:40:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7156,
                              "name": "ownership",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7121,
                              "src": "2152:9:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                                "typeString": "struct AssetOwnership calldata"
                              }
                            },
                            "id": 7157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "creatorObligor",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7842,
                            "src": "2152:24:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7160,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "2188:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              ],
                              "id": 7159,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2180:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 7158,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2180:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 7161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2180:13:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2152:41:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "2028:165:23",
                        "trueExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7155,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7149,
                              "name": "ownership",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7121,
                              "src": "2087:9:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                                "typeString": "struct AssetOwnership calldata"
                              }
                            },
                            "id": 7150,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "counterpartyObligor",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7846,
                            "src": "2087:29:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7153,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "2128:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              ],
                              "id": 7152,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2120:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 7151,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2120:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 7154,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2120:13:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2087:46:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e56414c49445f4f574e455253484950",
                        "id": 7164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2207:45:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cd4dd2255641c151efec3a748e5674a85e94aa030470a51589c1849d2ade20f8",
                          "typeString": "literal_string \"Custodian.lockCollateral: INVALID_OWNERSHIP\""
                        },
                        "value": "Custodian.lockCollateral: INVALID_OWNERSHIP"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cd4dd2255641c151efec3a748e5674a85e94aa030470a51589c1849d2ade20f8",
                          "typeString": "literal_string \"Custodian.lockCollateral: INVALID_OWNERSHIP\""
                        }
                      ],
                      "id": 7142,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2007:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2007:255:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7166,
                  "nodeType": "ExpressionStatement",
                  "src": "2007:255:23"
                },
                {
                  "assignments": [
                    7168
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7168,
                      "mutability": "mutable",
                      "name": "collateralizer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7263,
                      "src": "2317:22:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7167,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2317:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7180,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractRole_$22539",
                            "typeString": "enum ContractRole"
                          },
                          "id": 7173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7169,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7119,
                              "src": "2343:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                "typeString": "struct CECTerms calldata"
                              }
                            },
                            "id": 7170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22774,
                            "src": "2343:18:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7171,
                              "name": "ContractRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22539,
                              "src": "2365:12:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                "typeString": "type(enum ContractRole)"
                              }
                            },
                            "id": 7172,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "BUY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2365:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "src": "2343:38:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 7174,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2342:40:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7177,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7121,
                        "src": "2445:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                          "typeString": "struct AssetOwnership calldata"
                        }
                      },
                      "id": 7178,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "creatorBeneficiary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7844,
                      "src": "2445:28:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "2342:131:23",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7175,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7121,
                        "src": "2397:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                          "typeString": "struct AssetOwnership calldata"
                        }
                      },
                      "id": 7176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "counterpartyBeneficiary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7848,
                      "src": "2397:33:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2317:156:23"
                },
                {
                  "assignments": [
                    7182,
                    7184
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7182,
                      "mutability": "mutable",
                      "name": "collateralToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7263,
                      "src": "2542:23:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7181,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2542:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7184,
                      "mutability": "mutable",
                      "name": "collateralAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7263,
                      "src": "2567:24:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7183,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2567:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7190,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7186,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7119,
                            "src": "2618:5:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                              "typeString": "struct CECTerms calldata"
                            }
                          },
                          "id": 7187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "contractReference_2",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22798,
                          "src": "2618:25:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractReference_$22632_calldata_ptr",
                            "typeString": "struct ContractReference calldata"
                          }
                        },
                        "id": 7188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "object",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22625,
                        "src": "2618:32:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 7185,
                      "name": "decodeCollateralObject",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7054,
                      "src": "2595:22:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (address,uint256)"
                      }
                    },
                    "id": 7189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2595:56:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                      "typeString": "tuple(address,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2541:110:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7196,
                              "name": "collateralizer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7168,
                              "src": "2717:14:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7199,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "2741:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Custodian_$7452",
                                    "typeString": "contract Custodian"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Custodian_$7452",
                                    "typeString": "contract Custodian"
                                  }
                                ],
                                "id": 7198,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2733:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7197,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2733:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 7200,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2733:13:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7193,
                                  "name": "collateralToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7182,
                                  "src": "2690:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7192,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 39445,
                                "src": "2683:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 7194,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2683:23:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$39445",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7195,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 39404,
                            "src": "2683:33:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 7201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2683:64:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7202,
                          "name": "collateralAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7184,
                          "src": "2751:16:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2683:84:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e53554646494349454e545f414c4c4f57414e4345",
                        "id": 7204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2781:50:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_53ed1a8cca2b6d8ecf9487728c095b75981c1b87205264242f53dc5d6e55ac26",
                          "typeString": "literal_string \"Custodian.lockCollateral: INSUFFICIENT_ALLOWANCE\""
                        },
                        "value": "Custodian.lockCollateral: INSUFFICIENT_ALLOWANCE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_53ed1a8cca2b6d8ecf9487728c095b75981c1b87205264242f53dc5d6e55ac26",
                          "typeString": "literal_string \"Custodian.lockCollateral: INSUFFICIENT_ALLOWANCE\""
                        }
                      ],
                      "id": 7191,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2662:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2662:179:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7206,
                  "nodeType": "ExpressionStatement",
                  "src": "2662:179:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7212,
                            "name": "collateralizer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7168,
                            "src": "2986:14:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7215,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "3010:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Custodian_$7452",
                                  "typeString": "contract Custodian"
                                }
                              ],
                              "id": 7214,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3002:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 7213,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3002:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 7216,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3002:13:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7217,
                            "name": "collateralAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7184,
                            "src": "3017:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7209,
                                "name": "collateralToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7182,
                                "src": "2956:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7208,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39445,
                              "src": "2949:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 7210,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2949:23:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$39445",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 39426,
                          "src": "2949:36:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7218,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2949:85:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a205452414e534645525f4641494c4544",
                        "id": 7219,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3048:43:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c711bfecf37e3e1a71790bbc4c235a88ce0779f2066c3db618ab6eae108869f",
                          "typeString": "literal_string \"Custodian.lockCollateral: TRANSFER_FAILED\""
                        },
                        "value": "Custodian.lockCollateral: TRANSFER_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c711bfecf37e3e1a71790bbc4c235a88ce0779f2066c3db618ab6eae108869f",
                          "typeString": "literal_string \"Custodian.lockCollateral: TRANSFER_FAILED\""
                        }
                      ],
                      "id": 7207,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2928:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2928:173:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7221,
                  "nodeType": "ExpressionStatement",
                  "src": "2928:173:23"
                },
                {
                  "assignments": [
                    7223
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7223,
                      "mutability": "mutable",
                      "name": "allowance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7263,
                      "src": "3202:17:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7222,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3202:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7234,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7230,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "3264:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Custodian_$7452",
                              "typeString": "contract Custodian"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Custodian_$7452",
                              "typeString": "contract Custodian"
                            }
                          ],
                          "id": 7229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3256:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7228,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3256:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3256:13:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7232,
                        "name": "cecActor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7092,
                        "src": "3271:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7225,
                            "name": "collateralToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7182,
                            "src": "3229:15:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7224,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 39445,
                          "src": "3222:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 7226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3222:23:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$39445",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 7227,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 39404,
                      "src": "3222:33:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 7233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3222:58:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3202:78:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7240,
                            "name": "cecActor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7092,
                            "src": "3343:8:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7243,
                                "name": "collateralAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7184,
                                "src": "3367:16:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7241,
                                "name": "allowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7223,
                                "src": "3353:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7242,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 38514,
                              "src": "3353:13:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3353:31:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7237,
                                "name": "collateralToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7182,
                                "src": "3318:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7236,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39445,
                              "src": "3311:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 7238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3311:23:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$39445",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 39414,
                          "src": "3311:31:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7245,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3311:74:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e6c6f636b436f6c6c61746572616c3a20494e4352454153494e475f414c4c4f57414e43455f4641494c4544",
                        "id": 7246,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3399:55:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_46982ec4c2fd6b0dabf52666b6ee0e033c461f68bfcb3fe04252c1ef14af8800",
                          "typeString": "literal_string \"Custodian.lockCollateral: INCREASING_ALLOWANCE_FAILED\""
                        },
                        "value": "Custodian.lockCollateral: INCREASING_ALLOWANCE_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_46982ec4c2fd6b0dabf52666b6ee0e033c461f68bfcb3fe04252c1ef14af8800",
                          "typeString": "literal_string \"Custodian.lockCollateral: INCREASING_ALLOWANCE_FAILED\""
                        }
                      ],
                      "id": 7235,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3290:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3290:174:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7248,
                  "nodeType": "ExpressionStatement",
                  "src": "3290:174:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 7249,
                        "name": "collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7098,
                        "src": "3518:10:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 7251,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 7250,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7117,
                        "src": "3529:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3518:19:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 7252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3540:4:23",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "3518:26:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7254,
                  "nodeType": "ExpressionStatement",
                  "src": "3518:26:23"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7256,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7117,
                        "src": "3577:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7257,
                        "name": "collateralizer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7168,
                        "src": "3586:14:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7258,
                        "name": "collateralAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7184,
                        "src": "3602:16:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7255,
                      "name": "LockedCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7082,
                      "src": "3560:16:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,address,uint256)"
                      }
                    },
                    "id": 7259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3560:59:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7260,
                  "nodeType": "EmitStatement",
                  "src": "3555:64:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3637:4:23",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7126,
                  "id": 7262,
                  "nodeType": "Return",
                  "src": "3630:11:23"
                }
              ]
            },
            "documentation": {
              "id": 7115,
              "nodeType": "StructuredDocumentation",
              "src": "1084:531:23",
              "text": " @notice Locks the required collateral amount encoded in the second contract\n reference in the terms.\n @dev The collateralizer has to set allowance beforehand. The custodian increases\n allowance for the AssetActor by amount of collateral\n @param assetId id of the asset with collateral requirements\n @param terms terms of the asset containing the collateral requirements\n @param ownership ownership of the asset\n @return true if the collateral was locked by the Custodian"
            },
            "functionSelector": "f1acef64",
            "id": 7264,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lockCollateral",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7123,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1776:8:23"
            },
            "parameters": {
              "id": 7122,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7117,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7264,
                  "src": "1653:15:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7116,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1653:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7119,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7264,
                  "src": "1678:23:23",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7118,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "1678:8:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7121,
                  "mutability": "mutable",
                  "name": "ownership",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7264,
                  "src": "1711:33:23",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                    "typeString": "struct AssetOwnership"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7120,
                    "name": "AssetOwnership",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7849,
                    "src": "1711:14:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AssetOwnership_$7849_storage_ptr",
                      "typeString": "struct AssetOwnership"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1643:107:23"
            },
            "returnParameters": {
              "id": 7126,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7125,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7264,
                  "src": "1802:4:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7124,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1802:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1801:6:23"
            },
            "scope": 7452,
            "src": "1620:2028:23",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              7474
            ],
            "body": {
              "id": 7450,
              "nodeType": "Block",
              "src": "4316:2401:23",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 7278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7274,
                            "name": "collateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7098,
                            "src": "4347:10:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                              "typeString": "mapping(bytes32 => bool)"
                            }
                          },
                          "id": 7276,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7275,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7267,
                            "src": "4358:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4347:19:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 7277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4370:4:23",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "4347:27:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e72657475726e436f6c6c61746572616c3a20454e5452595f444f45535f4e4f545f4558495354",
                        "id": 7279,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4388:50:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7a158750cc8d340c5c70039bead6206f8a9cc4e3c57d090022485bdd42dbbb99",
                          "typeString": "literal_string \"Custodian.returnCollateral: ENTRY_DOES_NOT_EXIST\""
                        },
                        "value": "Custodian.returnCollateral: ENTRY_DOES_NOT_EXIST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7a158750cc8d340c5c70039bead6206f8a9cc4e3c57d090022485bdd42dbbb99",
                          "typeString": "literal_string \"Custodian.returnCollateral: ENTRY_DOES_NOT_EXIST\""
                        }
                      ],
                      "id": 7273,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4326:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4326:122:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7281,
                  "nodeType": "ExpressionStatement",
                  "src": "4326:122:23"
                },
                {
                  "assignments": [
                    7283
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7283,
                      "mutability": "mutable",
                      "name": "contractRole",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4459:25:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractRole_$22539",
                        "typeString": "enum ContractRole"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7282,
                        "name": "ContractRole",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22539,
                        "src": "4459:12:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ContractRole_$22539",
                          "typeString": "enum ContractRole"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7291,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7287,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7267,
                            "src": "4542:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "636f6e7472616374526f6c65",
                            "id": 7288,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4551:14:23",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_25827de09a431c20bbdc36b82f2598bebb6f799c13d479cbb6f07f3bb9ca40e8",
                              "typeString": "literal_string \"contractRole\""
                            },
                            "value": "contractRole"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_25827de09a431c20bbdc36b82f2598bebb6f799c13d479cbb6f07f3bb9ca40e8",
                              "typeString": "literal_string \"contractRole\""
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7285,
                            "name": "cecRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7094,
                            "src": "4500:11:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                              "typeString": "contract ICECRegistry"
                            }
                          },
                          "id": 7286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getEnumValueForTermsAttribute",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6830,
                          "src": "4500:41:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes32_$returns$_t_uint8_$",
                            "typeString": "function (bytes32,bytes32) view external returns (uint8)"
                          }
                        },
                        "id": 7289,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4500:66:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 7284,
                      "name": "ContractRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22539,
                      "src": "4487:12:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                        "typeString": "type(enum ContractRole)"
                      }
                    },
                    "id": 7290,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4487:80:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractRole_$22539",
                      "typeString": "enum ContractRole"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4459:108:23"
                },
                {
                  "assignments": [
                    7293
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7293,
                      "mutability": "mutable",
                      "name": "contractReference_2",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4577:44:23",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ContractReference_$22632_memory_ptr",
                        "typeString": "struct ContractReference"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7292,
                        "name": "ContractReference",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22632,
                        "src": "4577:17:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ContractReference_$22632_storage_ptr",
                          "typeString": "struct ContractReference"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7299,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7296,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7267,
                        "src": "4679:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "636f6e74726163745265666572656e63655f32",
                        "id": 7297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4688:21:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_01acef38074a0e0d5976473f7e34539badf35a9665d3e6a9e9fe377f17f1ea4f",
                          "typeString": "literal_string \"contractReference_2\""
                        },
                        "value": "contractReference_2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_01acef38074a0e0d5976473f7e34539badf35a9665d3e6a9e9fe377f17f1ea4f",
                          "typeString": "literal_string \"contractReference_2\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7294,
                        "name": "cecRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "4624:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                          "typeString": "contract ICECRegistry"
                        }
                      },
                      "id": 7295,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getContractReferenceValueForTermsAttribute",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6893,
                      "src": "4624:54:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes32_$returns$_t_struct$_ContractReference_$22632_memory_ptr_$",
                        "typeString": "function (bytes32,bytes32) view external returns (struct ContractReference memory)"
                      }
                    },
                    "id": 7298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4624:86:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ContractReference_$22632_memory_ptr",
                      "typeString": "struct ContractReference memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4577:133:23"
                },
                {
                  "assignments": [
                    7301
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7301,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4720:18:23",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7300,
                        "name": "State",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22673,
                        "src": "4720:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                          "typeString": "struct State"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7306,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7304,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7267,
                        "src": "4762:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7302,
                        "name": "cecRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "4741:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                          "typeString": "contract ICECRegistry"
                        }
                      },
                      "id": 7303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getState",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5727,
                      "src": "4741:20:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                        "typeString": "function (bytes32) view external returns (struct State memory)"
                      }
                    },
                    "id": 7305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4741:29:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4720:50:23"
                },
                {
                  "assignments": [
                    7308
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7308,
                      "mutability": "mutable",
                      "name": "ownership",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4780:31:23",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AssetOwnership_$7849_memory_ptr",
                        "typeString": "struct AssetOwnership"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7307,
                        "name": "AssetOwnership",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 7849,
                        "src": "4780:14:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_storage_ptr",
                          "typeString": "struct AssetOwnership"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7313,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7311,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7267,
                        "src": "4839:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7309,
                        "name": "cecRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7094,
                        "src": "4814:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICECRegistry_$9478",
                          "typeString": "contract ICECRegistry"
                        }
                      },
                      "id": 7310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4578,
                      "src": "4814:24:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_AssetOwnership_$7849_memory_ptr_$",
                        "typeString": "function (bytes32) view external returns (struct AssetOwnership memory)"
                      }
                    },
                    "id": 7312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4814:33:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AssetOwnership_$7849_memory_ptr",
                      "typeString": "struct AssetOwnership memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4780:67:23"
                },
                {
                  "assignments": [
                    7315
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7315,
                      "mutability": "mutable",
                      "name": "collateralizer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "4902:22:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7314,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4902:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7326,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractRole_$22539",
                            "typeString": "enum ContractRole"
                          },
                          "id": 7319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7316,
                            "name": "contractRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7283,
                            "src": "4928:12:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7317,
                              "name": "ContractRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22539,
                              "src": "4944:12:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractRole_$22539_$",
                                "typeString": "type(enum ContractRole)"
                              }
                            },
                            "id": 7318,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "BUY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4944:16:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          },
                          "src": "4928:32:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 7320,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "4927:34:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7323,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7308,
                        "src": "5024:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_memory_ptr",
                          "typeString": "struct AssetOwnership memory"
                        }
                      },
                      "id": 7324,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "creatorBeneficiary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7844,
                      "src": "5024:28:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "4927:125:23",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7321,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7308,
                        "src": "4976:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_memory_ptr",
                          "typeString": "struct AssetOwnership memory"
                        }
                      },
                      "id": 7322,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "counterpartyBeneficiary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7848,
                      "src": "4976:33:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4902:150:23"
                },
                {
                  "assignments": [
                    7328,
                    7330
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7328,
                      "mutability": "mutable",
                      "name": "collateralToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "5121:23:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7327,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5121:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7330,
                      "mutability": "mutable",
                      "name": "collateralAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "5146:24:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7329,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5146:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7335,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7332,
                          "name": "contractReference_2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7293,
                          "src": "5197:19:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractReference_$22632_memory_ptr",
                            "typeString": "struct ContractReference memory"
                          }
                        },
                        "id": 7333,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "object",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22625,
                        "src": "5197:26:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 7331,
                      "name": "decodeCollateralObject",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7054,
                      "src": "5174:22:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (address,uint256)"
                      }
                    },
                    "id": 7334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5174:50:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                      "typeString": "tuple(address,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5120:104:23"
                },
                {
                  "assignments": [
                    7337
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7337,
                      "mutability": "mutable",
                      "name": "notExecutedAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "5273:25:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7336,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5273:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7338,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5273:25:23"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7339,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7301,
                        "src": "5342:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 7340,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exerciseDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22642,
                      "src": "5342:18:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5372:1:23",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 7342,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5364:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 7341,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5364:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 7344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5364:10:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5342:32:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 7391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7372,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7301,
                            "src": "5668:5:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                              "typeString": "struct State memory"
                            }
                          },
                          "id": 7373,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exerciseDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22642,
                          "src": "5668:18:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7376,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5698:1:23",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7375,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5690:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 7374,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5690:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 7377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5690:10:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5668:32:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 7389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                "typeString": "enum ContractPerformance"
                              },
                              "id": 7383,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7379,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7301,
                                  "src": "5717:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                    "typeString": "struct State memory"
                                  }
                                },
                                "id": 7380,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "contractPerformance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22634,
                                "src": "5717:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7381,
                                  "name": "ContractPerformance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22513,
                                  "src": "5746:19:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                    "typeString": "type(enum ContractPerformance)"
                                  }
                                },
                                "id": 7382,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "MD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "5746:22:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "src": "5717:51:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                "typeString": "enum ContractPerformance"
                              },
                              "id": 7388,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7384,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7301,
                                  "src": "5772:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                    "typeString": "struct State memory"
                                  }
                                },
                                "id": 7385,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "contractPerformance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22634,
                                "src": "5772:25:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7386,
                                  "name": "ContractPerformance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22513,
                                  "src": "5801:19:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                                    "typeString": "type(enum ContractPerformance)"
                                  }
                                },
                                "id": 7387,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "TD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "5801:22:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                                  "typeString": "enum ContractPerformance"
                                }
                              },
                              "src": "5772:51:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "5717:106:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 7390,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5716:108:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "5668:156:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 7401,
                      "nodeType": "Block",
                      "src": "5971:93:23",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "437573746f6469616e2e72657475726e436f6c6c61746572616c3a20434f4c4c41544552414c5f43414e5f4e4f545f42455f52455455524e4544",
                                "id": 7398,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5992:60:23",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_c750c28c7d403762724f5dd3debce3ffca29469599c1f38ea18a24cbd6380efb",
                                  "typeString": "literal_string \"Custodian.returnCollateral: COLLATERAL_CAN_NOT_BE_RETURNED\""
                                },
                                "value": "Custodian.returnCollateral: COLLATERAL_CAN_NOT_BE_RETURNED"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c750c28c7d403762724f5dd3debce3ffca29469599c1f38ea18a24cbd6380efb",
                                  "typeString": "literal_string \"Custodian.returnCollateral: COLLATERAL_CAN_NOT_BE_RETURNED\""
                                }
                              ],
                              "id": 7397,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -19,
                                -19
                              ],
                              "referencedDeclaration": -19,
                              "src": "5985:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (string memory) pure"
                              }
                            },
                            "id": 7399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5985:68:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7400,
                          "nodeType": "ExpressionStatement",
                          "src": "5985:68:23"
                        }
                      ]
                    },
                    "id": 7402,
                    "nodeType": "IfStatement",
                    "src": "5651:413:23",
                    "trueBody": {
                      "id": 7396,
                      "nodeType": "Block",
                      "src": "5835:130:23",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 7392,
                              "name": "notExecutedAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7337,
                              "src": "5849:17:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "id": 7393,
                              "name": "collateralAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7330,
                              "src": "5869:16:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5849:36:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7395,
                          "nodeType": "ExpressionStatement",
                          "src": "5849:36:23"
                        }
                      ]
                    }
                  },
                  "id": 7403,
                  "nodeType": "IfStatement",
                  "src": "5338:726:23",
                  "trueBody": {
                    "id": 7371,
                    "nodeType": "Block",
                    "src": "5376:269:23",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7346,
                            "name": "notExecutedAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7337,
                            "src": "5390:17:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 7352,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 7349,
                                          "name": "state",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7301,
                                          "src": "5449:5:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                            "typeString": "struct State memory"
                                          }
                                        },
                                        "id": 7350,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "exerciseAmount",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22662,
                                        "src": "5449:20:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 7351,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5473:1:23",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "5449:25:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "id": 7353,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "5448:27:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 7365,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 7362,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "5518:2:23",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 7361,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5519:1:23",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_minus_1_by_1",
                                          "typeString": "int_const -1"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 7363,
                                          "name": "state",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7301,
                                          "src": "5523:5:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                            "typeString": "struct State memory"
                                          }
                                        },
                                        "id": 7364,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "exerciseAmount",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22662,
                                        "src": "5523:20:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "5518:25:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 7360,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5510:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 7359,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5510:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 7366,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5510:34:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "5448:96:23",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7356,
                                        "name": "state",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7301,
                                        "src": "5486:5:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                                          "typeString": "struct State memory"
                                        }
                                      },
                                      "id": 7357,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "exerciseAmount",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22662,
                                      "src": "5486:20:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 7355,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5478:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 7354,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5478:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 7358,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5478:29:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7347,
                                "name": "collateralAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7330,
                                "src": "5410:16:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7348,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 38531,
                              "src": "5410:20:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7368,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5410:148:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5390:168:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7370,
                        "nodeType": "ExpressionStatement",
                        "src": "5390:168:23"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    7405
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7405,
                      "mutability": "mutable",
                      "name": "allowance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7450,
                      "src": "6116:17:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7404,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6116:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7416,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7412,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "6178:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Custodian_$7452",
                              "typeString": "contract Custodian"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Custodian_$7452",
                              "typeString": "contract Custodian"
                            }
                          ],
                          "id": 7411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6170:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7410,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6170:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6170:13:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7414,
                        "name": "cecActor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7092,
                        "src": "6185:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7407,
                            "name": "collateralToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7328,
                            "src": "6143:15:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7406,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 39445,
                          "src": "6136:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 7408,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6136:23:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$39445",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 7409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 39404,
                      "src": "6136:33:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 7415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6136:58:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6116:78:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7422,
                            "name": "cecActor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7092,
                            "src": "6257:8:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7425,
                                "name": "notExecutedAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7337,
                                "src": "6281:17:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7423,
                                "name": "allowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7405,
                                "src": "6267:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7424,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 38531,
                              "src": "6267:13:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6267:32:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7419,
                                "name": "collateralToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7328,
                                "src": "6232:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7418,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39445,
                              "src": "6225:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 7420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6225:23:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$39445",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 39414,
                          "src": "6225:31:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7427,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6225:75:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e72657475726e436f6c6c61746572616c3a2044454352454153494e475f414c4c4f57414e43455f4641494c44",
                        "id": 7428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6314:56:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9be65a01d1b00012e94a7400b7fad752e8ee46d162be90b61301384db7553a5a",
                          "typeString": "literal_string \"Custodian.returnCollateral: DECREASING_ALLOWANCE_FAILD\""
                        },
                        "value": "Custodian.returnCollateral: DECREASING_ALLOWANCE_FAILD"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9be65a01d1b00012e94a7400b7fad752e8ee46d162be90b61301384db7553a5a",
                          "typeString": "literal_string \"Custodian.returnCollateral: DECREASING_ALLOWANCE_FAILD\""
                        }
                      ],
                      "id": 7417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6204:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6204:176:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7430,
                  "nodeType": "ExpressionStatement",
                  "src": "6204:176:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7436,
                            "name": "collateralizer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "6507:14:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7437,
                            "name": "notExecutedAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7337,
                            "src": "6523:17:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7433,
                                "name": "collateralToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7328,
                                "src": "6481:15:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7432,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 39445,
                              "src": "6474:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$39445_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 7434,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6474:23:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$39445",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 39394,
                          "src": "6474:32:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6474:67:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "437573746f6469616e2e72657475726e436f6c6c61746572616c3a205452414e534645525f4641494c4544",
                        "id": 7439,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6555:45:23",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_12444819030d2c1a5e06af50c2b241ae56292449142ae93a4b3890db50763976",
                          "typeString": "literal_string \"Custodian.returnCollateral: TRANSFER_FAILED\""
                        },
                        "value": "Custodian.returnCollateral: TRANSFER_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_12444819030d2c1a5e06af50c2b241ae56292449142ae93a4b3890db50763976",
                          "typeString": "literal_string \"Custodian.returnCollateral: TRANSFER_FAILED\""
                        }
                      ],
                      "id": 7431,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6453:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6453:157:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7441,
                  "nodeType": "ExpressionStatement",
                  "src": "6453:157:23"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7443,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7267,
                        "src": "6645:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7444,
                        "name": "collateralizer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7315,
                        "src": "6654:14:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7445,
                        "name": "notExecutedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7337,
                        "src": "6670:17:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7442,
                      "name": "ReturnedCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7090,
                      "src": "6626:18:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,address,uint256)"
                      }
                    },
                    "id": 7446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6626:62:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7447,
                  "nodeType": "EmitStatement",
                  "src": "6621:67:23"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6706:4:23",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7272,
                  "id": 7449,
                  "nodeType": "Return",
                  "src": "6699:11:23"
                }
              ]
            },
            "documentation": {
              "id": 7265,
              "nodeType": "StructuredDocumentation",
              "src": "3654:539:23",
              "text": " @notice Returns the entire collateral back to the collateralizer if collateral\n was not executed before the asset reached maturity or it returns the remaining\n collateral (not executed amount) after collateral was executed and settled\n @dev resets allowance for the Asset Actor,\n reverts if state of the asset does not allow unlocking the collateral\n @param assetId id of the asset for which to return the collateral,\n @return true if the collateral was returned to the collateralizer"
            },
            "functionSelector": "44c4ea95",
            "id": 7451,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "returnCollateral",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7269,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4280:8:23"
            },
            "parameters": {
              "id": 7268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7267,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7451,
                  "src": "4233:15:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7266,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4233:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4223:31:23"
            },
            "returnParameters": {
              "id": 7272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7271,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7451,
                  "src": "4306:4:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7270,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4306:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4305:6:23"
            },
            "scope": 7452,
            "src": "4198:2519:23",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 7453,
        "src": "512:6207:23"
      }
    ],
    "src": "41:6679:23"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {
    "4": {
      "events": {
        "0xfe470e985a95a6aaad262a20cf968addf9489c083d8659cde642f329d561a4e4": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "collateralizer",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "collateralAmount",
              "type": "uint256"
            }
          ],
          "name": "LockedCollateral",
          "type": "event"
        },
        "0x4131d43c7bc220691dd088c228cd19fcafb66a0d9abeab4d8893e3db4e480ca2": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "collateralizer",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "returnedAmount",
              "type": "uint256"
            }
          ],
          "name": "ReturnedCollateral",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x964F519D8e23B278F72CB9DB2efcE2770009fbBD",
      "transactionHash": "0x580ec2d562e63de99375a89b02bbe50a9078e7f294a86dec8d2a83c01d8ac01c"
    },
    "5": {
      "events": {
        "0xfe470e985a95a6aaad262a20cf968addf9489c083d8659cde642f329d561a4e4": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "collateralizer",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "collateralAmount",
              "type": "uint256"
            }
          ],
          "name": "LockedCollateral",
          "type": "event"
        },
        "0x4131d43c7bc220691dd088c228cd19fcafb66a0d9abeab4d8893e3db4e480ca2": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "collateralizer",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "returnedAmount",
              "type": "uint256"
            }
          ],
          "name": "ReturnedCollateral",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xABA72379b1eaFD92b8Dde186E84Cb48530052cc1",
      "transactionHash": "0xa56f487adfa83d4e30e793eaeeab090aab929168f5c2dafba98e90f92b0b7da8"
    },
    "1994": {
      "events": {
        "0xfe470e985a95a6aaad262a20cf968addf9489c083d8659cde642f329d561a4e4": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "collateralizer",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "collateralAmount",
              "type": "uint256"
            }
          ],
          "name": "LockedCollateral",
          "type": "event"
        },
        "0x4131d43c7bc220691dd088c228cd19fcafb66a0d9abeab4d8893e3db4e480ca2": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "collateralizer",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "returnedAmount",
              "type": "uint256"
            }
          ],
          "name": "ReturnedCollateral",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x7Ad8F74b3079530e614D43cB27DCC1eAb8976576",
      "transactionHash": "0x0d1b8104a965a95a76444576b0dfcd422fbc376ccc548a625cadf7602690ce3c"
    }
  },
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:17.745Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "lockCollateral(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(address,address,address,address))": {
        "details": "The collateralizer has to set allowance beforehand. The custodian increases allowance for the AssetActor by amount of collateral",
        "params": {
          "assetId": "id of the asset with collateral requirements",
          "ownership": "ownership of the asset",
          "terms": "terms of the asset containing the collateral requirements"
        },
        "returns": {
          "_0": "true if the collateral was locked by the Custodian"
        }
      },
      "returnCollateral(bytes32)": {
        "details": "resets allowance for the Asset Actor, reverts if state of the asset does not allow unlocking the collateral",
        "params": {
          "assetId": "id of the asset for which to return the collateral,"
        },
        "returns": {
          "_0": "true if the collateral was returned to the collateralizer"
        }
      }
    },
    "title": "Custodian",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "lockCollateral(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(address,address,address,address))": {
        "notice": "Locks the required collateral amount encoded in the second contract reference in the terms."
      },
      "returnCollateral(bytes32)": {
        "notice": "Returns the entire collateral back to the collateralizer if collateral was not executed before the asset reached maturity or it returns the remaining collateral (not executed amount) after collateral was executed and settled"
      }
    },
    "notice": "Contract which holds the collateral of CEC (Credit Enhancement Collateral) assets.",
    "version": 1
  }
}