{
  "contractName": "Package",
  "abi": [
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "indexed": false,
          "name": "contractAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "name": "VersionAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        }
      ],
      "name": "getVersion",
      "outputs": [
        {
          "name": "contractAddress",
          "type": "address"
        },
        {
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        }
      ],
      "name": "getContract",
      "outputs": [
        {
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "name": "contractAddress",
          "type": "address"
        },
        {
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "name": "addVersion",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        }
      ],
      "name": "hasVersion",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLatest",
      "outputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "name": "contractAddress",
          "type": "address"
        },
        {
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "major",
          "type": "uint64"
        }
      ],
      "name": "getLatestByMajor",
      "outputs": [
        {
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "name": "contractAddress",
          "type": "address"
        },
        {
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061167f806100536000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631df40eaa1461009e57806335ce401614610130578063715018a61461019a5780638da5cb5b146101b1578063c356d5b014610208578063c36af4601461031a578063d6ef25d51461040c578063e30329e9146104c4578063f2fde38b146105c2575b600080fd5b3480156100aa57600080fd5b506100ee6004803603810190808060600190600380602002604051908101604052809291908260036020028082843782019150505050509192919290505050610605565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013c57600080fd5b50610180600480360381019080806060019060038060200260405190810160405280929190826003602002808284378201915050505050919291929050505061065a565b604051808215151515815260200191505060405180910390f35b3480156101a657600080fd5b506101af6106df565b005b3480156101bd57600080fd5b506101c66107e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561021457600080fd5b5061023d600480360381019080803567ffffffffffffffff169060200190929190505050610806565b6040518084600360200280838360005b8381101561026857808201518184015260208101905061024d565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156102dd5780820151818401526020810190506102c2565b50505050905090810190601f16801561030a5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34801561032657600080fd5b5061032f6109a2565b6040518084600360200280838360005b8381101561035a57808201518184015260208101905061033f565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103cf5780820151818401526020810190506103b4565b50505050905090810190601f1680156103fc5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34801561041857600080fd5b506104c26004803603810190808060600190600380602002604051908101604052809291908260036020028082843782019150505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506109d8565b005b3480156104d057600080fd5b50610514600480360381019080806060019060038060200260405190810160405280929190826003602002808284378201915050505050919291929050505061106f565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561058657808201518184015260208101905061056b565b50505050905090810190601f1680156105b35780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156105ce57600080fd5b50610603600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611169565b005b60008060016000610615856111d0565b6000191660001916815260200190815260200160002090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000806001600061066a856111d0565b600019166000191681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561073a57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61080e6114a6565b60006060600060016000600260008867ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054600019166000191681526020019081526020016000209050806000018160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600201826003806020026040519081016040528092919082600380156108f1576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116108ac5790505b50505050509250808054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561098d5780601f106109625761010080835404028352916020019161098d565b820191906000526020600020905b81548152906001019060200180831161097057829003601f168201915b50505050509050935093509350509193909250565b6109aa6114a6565b600060606109cd600360009054906101000a900467ffffffffffffffff16610806565b925092509250909192565b60008060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a3b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614151515610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6e747261637420616464726573732069732072657175697265640000000081525060200191505060405180910390fd5b610ae98861065a565b151515610b84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f476976656e2076657273696f6e20697320616c7265616479207265676973746581526020017f72656420696e207061636b61676500000000000000000000000000000000000081525060400191505060405180910390fd5b610b8d88611331565b151515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f56657273696f6e206d757374206265206e6f6e207a65726f000000000000000081525060200191505060405180910390fd5b610c0b886111d0565b94506060604051908101604052808981526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187815250600160008760001916600019168152602001908152602001600020600082015181600001906003610c719291906114c9565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610cd5929190611577565b50905050876000600381101515610ce857fe5b60200201519350600360009054906101000a900467ffffffffffffffff1667ffffffffffffffff168467ffffffffffffffff161115610d5e57876000600381101515610d3057fe5b6020020151600360006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b876001600381101515610d6d57fe5b60200201519250876002600381101515610d8357fe5b6020020151915060016000600260008767ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054600019166000191681526020019081526020016000206000019050610e4a81600380602002604051908101604052809291908260038015610e40576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610dfb5790505b5050505050611331565b80610e965750806001600381101515610e5f57fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16115b80610f2f5750806001600381101515610eab57fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16148015610f2e5750806002600381101515610ef757fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff16115b5b15610f655784600260008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002081600019169055505b7fc5b9b96b4952fc60f5a916010c882de0324dd4fdfaa999f9ad6947f55d8427628888886040518084600360200280838360005b83811015610fb4578082015181840152602081019050610f99565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561102957808201518184015260208101905061100e565b50505050905090810190601f1680156110565780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050505050505050565b60006060600060016000611082866111d0565b6000191660001916815260200190815260200160002090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600201808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111585780601f1061112d57610100808354040283529160200191611158565b820191906000526020600020905b81548152906001019060200180831161113b57829003601f168201915b505050505090509250925050915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111c457600080fd5b6111cd816113ac565b50565b60008160006003811015156111e157fe5b60200201518260016003811015156111f557fe5b602002015183600260038110151561120957fe5b6020020151604051602001808467ffffffffffffffff1667ffffffffffffffff1678010000000000000000000000000000000000000000000000000281526008018367ffffffffffffffff1667ffffffffffffffff1678010000000000000000000000000000000000000000000000000281526008018267ffffffffffffffff1667ffffffffffffffff16780100000000000000000000000000000000000000000000000002815260080193505050506040516020818303038152906040526040518082805190602001908083835b6020831015156112fd57805182526020820191506020810190506020830392506112d8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b60008082600060038110151561134357fe5b602002015167ffffffffffffffff1614801561137c5750600082600160038110151561136b57fe5b602002015167ffffffffffffffff16145b80156113a55750600082600260038110151561139457fe5b602002015167ffffffffffffffff16145b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156113e857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060405190810160405280600390602082028038833980820191505090505090565b82600380016004900481019282156115665791602002820160005b8382111561153057835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026114e4565b80156115645782816101000a81549067ffffffffffffffff0219169055600801602081600701049283019260010302611530565b505b50905061157391906115f7565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106115b857805160ff19168380011785556115e6565b828001600101855582156115e6579182015b828111156115e55782518255916020019190600101906115ca565b5b5090506115f3919061162e565b5090565b61162b91905b8082111561162757600081816101000a81549067ffffffffffffffff0219169055506001016115fd565b5090565b90565b61165091905b8082111561164c576000816000905550600101611634565b5090565b905600a165627a7a72305820a32a835ea694ca14a0e6e69eba8516da5a0665d544b623a90352437114c10ebf0029",
  "deployedBytecode": "0x608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631df40eaa1461009e57806335ce401614610130578063715018a61461019a5780638da5cb5b146101b1578063c356d5b014610208578063c36af4601461031a578063d6ef25d51461040c578063e30329e9146104c4578063f2fde38b146105c2575b600080fd5b3480156100aa57600080fd5b506100ee6004803603810190808060600190600380602002604051908101604052809291908260036020028082843782019150505050509192919290505050610605565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013c57600080fd5b50610180600480360381019080806060019060038060200260405190810160405280929190826003602002808284378201915050505050919291929050505061065a565b604051808215151515815260200191505060405180910390f35b3480156101a657600080fd5b506101af6106df565b005b3480156101bd57600080fd5b506101c66107e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561021457600080fd5b5061023d600480360381019080803567ffffffffffffffff169060200190929190505050610806565b6040518084600360200280838360005b8381101561026857808201518184015260208101905061024d565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156102dd5780820151818401526020810190506102c2565b50505050905090810190601f16801561030a5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34801561032657600080fd5b5061032f6109a2565b6040518084600360200280838360005b8381101561035a57808201518184015260208101905061033f565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103cf5780820151818401526020810190506103b4565b50505050905090810190601f1680156103fc5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34801561041857600080fd5b506104c26004803603810190808060600190600380602002604051908101604052809291908260036020028082843782019150505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506109d8565b005b3480156104d057600080fd5b50610514600480360381019080806060019060038060200260405190810160405280929190826003602002808284378201915050505050919291929050505061106f565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561058657808201518184015260208101905061056b565b50505050905090810190601f1680156105b35780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156105ce57600080fd5b50610603600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611169565b005b60008060016000610615856111d0565b6000191660001916815260200190815260200160002090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000806001600061066a856111d0565b600019166000191681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561073a57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61080e6114a6565b60006060600060016000600260008867ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054600019166000191681526020019081526020016000209050806000018160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600201826003806020026040519081016040528092919082600380156108f1576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116108ac5790505b50505050509250808054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561098d5780601f106109625761010080835404028352916020019161098d565b820191906000526020600020905b81548152906001019060200180831161097057829003601f168201915b50505050509050935093509350509193909250565b6109aa6114a6565b600060606109cd600360009054906101000a900467ffffffffffffffff16610806565b925092509250909192565b60008060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a3b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614151515610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6e747261637420616464726573732069732072657175697265640000000081525060200191505060405180910390fd5b610ae98861065a565b151515610b84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f476976656e2076657273696f6e20697320616c7265616479207265676973746581526020017f72656420696e207061636b61676500000000000000000000000000000000000081525060400191505060405180910390fd5b610b8d88611331565b151515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f56657273696f6e206d757374206265206e6f6e207a65726f000000000000000081525060200191505060405180910390fd5b610c0b886111d0565b94506060604051908101604052808981526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187815250600160008760001916600019168152602001908152602001600020600082015181600001906003610c719291906114c9565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610cd5929190611577565b50905050876000600381101515610ce857fe5b60200201519350600360009054906101000a900467ffffffffffffffff1667ffffffffffffffff168467ffffffffffffffff161115610d5e57876000600381101515610d3057fe5b6020020151600360006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b876001600381101515610d6d57fe5b60200201519250876002600381101515610d8357fe5b6020020151915060016000600260008767ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054600019166000191681526020019081526020016000206000019050610e4a81600380602002604051908101604052809291908260038015610e40576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610dfb5790505b5050505050611331565b80610e965750806001600381101515610e5f57fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16115b80610f2f5750806001600381101515610eab57fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16148015610f2e5750806002600381101515610ef757fe5b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff16115b5b15610f655784600260008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002081600019169055505b7fc5b9b96b4952fc60f5a916010c882de0324dd4fdfaa999f9ad6947f55d8427628888886040518084600360200280838360005b83811015610fb4578082015181840152602081019050610f99565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561102957808201518184015260208101905061100e565b50505050905090810190601f1680156110565780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050505050505050565b60006060600060016000611082866111d0565b6000191660001916815260200190815260200160002090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600201808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111585780601f1061112d57610100808354040283529160200191611158565b820191906000526020600020905b81548152906001019060200180831161113b57829003601f168201915b505050505090509250925050915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111c457600080fd5b6111cd816113ac565b50565b60008160006003811015156111e157fe5b60200201518260016003811015156111f557fe5b602002015183600260038110151561120957fe5b6020020151604051602001808467ffffffffffffffff1667ffffffffffffffff1678010000000000000000000000000000000000000000000000000281526008018367ffffffffffffffff1667ffffffffffffffff1678010000000000000000000000000000000000000000000000000281526008018267ffffffffffffffff1667ffffffffffffffff16780100000000000000000000000000000000000000000000000002815260080193505050506040516020818303038152906040526040518082805190602001908083835b6020831015156112fd57805182526020820191506020810190506020830392506112d8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b60008082600060038110151561134357fe5b602002015167ffffffffffffffff1614801561137c5750600082600160038110151561136b57fe5b602002015167ffffffffffffffff16145b80156113a55750600082600260038110151561139457fe5b602002015167ffffffffffffffff16145b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156113e857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060405190810160405280600390602082028038833980820191505090505090565b82600380016004900481019282156115665791602002820160005b8382111561153057835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026114e4565b80156115645782816101000a81549067ffffffffffffffff0219169055600801602081600701049283019260010302611530565b505b50905061157391906115f7565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106115b857805160ff19168380011785556115e6565b828001600101855582156115e6579182015b828111156115e55782518255916020019190600101906115ca565b5b5090506115f3919061162e565b5090565b61162b91905b8082111561162757600081816101000a81549067ffffffffffffffff0219169055506001016115fd565b5090565b90565b61165091905b8082111561164c576000816000905550600101611634565b5090565b905600a165627a7a72305820a32a835ea694ca14a0e6e69eba8516da5a0665d544b623a90352437114c10ebf0029",
  "sourceMap": "454:5458:4:-;;;575:10:29;567:5;;:18;;;;;;;;;;;;;;;;;;454:5458:4;;;;;;",
  "deployedSourceMap": "454:5458:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1871:213;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1871:213:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4029:216;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4029:216:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;827:111:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:111:29;;;;;;238:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:29;;;;;;;;;;;;;;;;;;;;;;;;;;;5302:289:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5302:289:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5302:289:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5302:289:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4657:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4657:159:4;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4657:159:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4657:159:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2499:1309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2499:1309:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1311:253;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1311:253:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1311:253:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1100:103:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1100:103:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;1871:213:4;1940:23;1971;1997:8;:46;2006:36;2026:15;2006:19;:36::i;:::-;1997:46;;;;;;;;;;;;;;;;;1971:72;;2056:7;:23;;;;;;;;;;;;2049:30;;1871:213;;;;:::o;4029:216::-;4097:4;4109:23;4135:8;:46;4144:36;4164:15;4144:19;:36::i;:::-;4135:46;;;;;;;;;;;;;;;;;4109:72;;4238:1;4194:46;;4202:7;:23;;;;;;;;;;;;4194:46;;;;4187:53;;4029:216;;;;:::o;827:111:29:-;719:5;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;903:5;;;;;;;;;;;884:25;;;;;;;;;;;;931:1;915:5;;:18;;;;;;;;;;;;;;;;;;827:111::o;238:20::-;;;;;;;;;;;;;:::o;5302:289:4:-;5363:25;;:::i;:::-;5390:23;5415:16;5439:23;5465:8;:37;5474:20;:27;5495:5;5474:27;;;;;;;;;;;;;;;;5465:37;;;;;;;;;;;;;;;;;5439:63;;5516:7;:23;;5541:7;:23;;;;;;;;;;;;5566:7;:18;;5508:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5302:289;;;;;;:::o;4657:159::-;4699:25;;:::i;:::-;4726:23;4751:16;4782:29;4799:11;;;;;;;;;;;4782:16;:29::i;:::-;4775:36;;;;;;4657:159;;;:::o;2499:1309::-;2888:17;3063:12;3224;3263;3302:31;719:5:29;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;2647:1:4;2620:29;;:15;:29;;;;2612:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2697:27;2708:15;2697:10;:27::i;:::-;2696:28;2688:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2790:38;2812:15;2790:21;:38::i;:::-;2789:39;2781:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2908:36;2928:15;2908:19;:36::i;:::-;2888:56;;2972:53;;;;;;;;;2980:15;2972:53;;;;2997:15;2972:53;;;;;;3014:10;2972:53;;;2950:8;:19;2959:9;2950:19;;;;;;;;;;;;;;;;;:75;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;3078:15;3094:1;3078:18;;;;;;;;;;;;;3063:33;;3114:11;;;;;;;;;;;3106:19;;:5;:19;;;3102:72;;;3149:15;3165:1;3149:18;;;;;;;;;;;;;3135:11;;:32;;;;;;;;;;;;;;;;;;3102:72;3239:15;3255:1;3239:18;;;;;;;;;;;;;3224:33;;3278:15;3294:1;3278:18;;;;;;;;;;;;;3263:33;;3336:8;:37;3345:20;:27;3366:5;3345:27;;;;;;;;;;;;;;;;3336:37;;;;;;;;;;;;;;;;;:53;;3302:87;;3399:44;3421:21;3399:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;:44::i;:::-;:125;;;;3499:21;3521:1;3499:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3491:32;;:5;:32;;;3399:125;:239;;;;3577:21;3599:1;3577:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3568:33;;:5;:33;;;:69;;;;;3613:21;3635:1;3613:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3605:32;;:5;:32;;;3568:69;3399:239;3395:339;;;3718:9;3688:20;:27;3709:5;3688:27;;;;;;;;;;;;;;;:39;;;;;;;3395:339;3745:58;3758:15;3775;3792:10;3745:58;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3745:58:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3745:58:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2499:1309;;;;;;;;:::o;1311:253::-;1379:23;1404:16;1428:23;1454:8;:46;1463:36;1483:15;1463:19;:36::i;:::-;1454:46;;;;;;;;;;;;;;;;;1428:72;;1514:7;:23;;;;;;;;;;;;1539:7;:18;;1506:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1311:253;;;;:::o;1100:103:29:-;719:5;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1169:29;1188:9;1169:18;:29::i;:::-;1100:103;:::o;5595:161:4:-;5666:7;5715;5723:1;5715:10;;;;;;;;;;;;;5727:7;5735:1;5727:10;;;;;;;;;;;;;5739:7;5747:1;5739:10;;;;;;;;;;;;;5698:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5698:52:4;;;5688:63;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;5688:63:4;;;;;;;;;;;;;;;;5681:70;;5595:161;;;:::o;5760:150::-;5833:4;5866:1;5852:7;5860:1;5852:10;;;;;;;;;;;;;:15;;;:34;;;;;5885:1;5871:7;5879:1;5871:10;;;;;;;;;;;;;:15;;;5852:34;:53;;;;;5904:1;5890:7;5898:1;5890:10;;;;;;;;;;;;;:15;;;5852:53;5845:60;;5760:150;;;:::o;1338:171:29:-;1429:1;1408:23;;:9;:23;;;;1400:32;;;;;;;;1471:9;1443:38;;1464:5;;;;;;;;;;;1443:38;;;;;;;;;;;;1495:9;1487:5;;:17;;;;;;;;;;;;;;;;;;1338:171;:::o;454:5458:4:-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;454:5458:4;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\n\n/**\n * @title Package\n * @dev A package is composed by a set of versions, identified via semantic versioning,\n * where each version has a contract address that refers to a reusable implementation,\n * plus an optional content URI with metadata. Note that the semver identifier is restricted\n * to major, minor, and patch, as prerelease tags are not supported.\n */\ncontract Package is Ownable {\n  /**\n   * @dev Emitted when a version is added to the package.\n   * @param semanticVersion Name of the added version.\n   * @param contractAddress Contract associated with the version.\n   * @param contentURI Optional content URI with metadata of the version.\n   */\n  event VersionAdded(uint64[3] semanticVersion, address contractAddress, bytes contentURI);\n\n  struct Version {\n    uint64[3] semanticVersion;\n    address contractAddress;\n    bytes contentURI; \n  }\n\n  mapping (bytes32 => Version) internal versions;\n  mapping (uint64 => bytes32) internal majorToLatestVersion;\n  uint64 internal latestMajor;\n\n  /**\n   * @dev Returns a version given its semver identifier.\n   * @param semanticVersion Semver identifier of the version.\n   * @return Contract address and content URI for the version, or zero if not exists.\n   */\n  function getVersion(uint64[3] semanticVersion) public view returns (address contractAddress, bytes contentURI) {\n    Version storage version = versions[semanticVersionHash(semanticVersion)];\n    return (version.contractAddress, version.contentURI); \n  }\n\n  /**\n   * @dev Returns a contract for a version given its semver identifier.\n   * This method is equivalent to `getVersion`, but returns only the contract address.\n   * @param semanticVersion Semver identifier of the version.\n   * @return Contract address for the version, or zero if not exists.\n   */\n  function getContract(uint64[3] semanticVersion) public view returns (address contractAddress) {\n    Version storage version = versions[semanticVersionHash(semanticVersion)];\n    return version.contractAddress;\n  }\n\n  /**\n   * @dev Adds a new version to the package. Only the Owner can add new versions.\n   * Reverts if the specified semver identifier already exists. \n   * Emits a `VersionAdded` event if successful.\n   * @param semanticVersion Semver identifier of the version.\n   * @param contractAddress Contract address for the version, must be non-zero.\n   * @param contentURI Optional content URI for the version.\n   */\n  function addVersion(uint64[3] semanticVersion, address contractAddress, bytes contentURI) public onlyOwner {\n    require(contractAddress != address(0), \"Contract address is required\");\n    require(!hasVersion(semanticVersion), \"Given version is already registered in package\");\n    require(!semanticVersionIsZero(semanticVersion), \"Version must be non zero\");\n\n    // Register version\n    bytes32 versionId = semanticVersionHash(semanticVersion);\n    versions[versionId] = Version(semanticVersion, contractAddress, contentURI);\n    \n    // Update latest major\n    uint64 major = semanticVersion[0];\n    if (major > latestMajor) {\n      latestMajor = semanticVersion[0];\n    }\n\n    // Update latest version for this major\n    uint64 minor = semanticVersion[1];\n    uint64 patch = semanticVersion[2];\n    uint64[3] latestVersionForMajor = versions[majorToLatestVersion[major]].semanticVersion;\n    if (semanticVersionIsZero(latestVersionForMajor) // No latest was set for this major\n       || (minor > latestVersionForMajor[1]) // Or current minor is greater \n       || (minor == latestVersionForMajor[1] && patch > latestVersionForMajor[2]) // Or current patch is greater\n       ) { \n      majorToLatestVersion[major] = versionId;\n    }\n\n    emit VersionAdded(semanticVersion, contractAddress, contentURI);\n  }\n\n  /**\n   * @dev Checks whether a version is present in the package.\n   * @param semanticVersion Semver identifier of the version.\n   * @return true if the version is registered in this package, false otherwise.\n   */\n  function hasVersion(uint64[3] semanticVersion) public view returns (bool) {\n    Version storage version = versions[semanticVersionHash(semanticVersion)];\n    return address(version.contractAddress) != address(0);\n  }\n\n  /**\n   * @dev Returns the version with the highest semver identifier registered in the package.\n   * For instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will always return `2.0.0`, regardless \n   * of the order in which they were registered. Returns zero if no versions are registered.\n   * @return Semver identifier, contract address, and content URI for the version, or zero if not exists.\n   */\n  function getLatest() public view returns (uint64[3] semanticVersion, address contractAddress, bytes contentURI) {\n    return getLatestByMajor(latestMajor);\n  }\n\n  /**\n   * @dev Returns the version with the highest semver identifier for the given major.\n   * For instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will return `1.3.0` for major `1`, \n   * regardless of the order in which they were registered. Returns zero if no versions are registered\n   * for the specified major.\n   * @param major Major identifier to query\n   * @return Semver identifier, contract address, and content URI for the version, or zero if not exists.\n   */\n  function getLatestByMajor(uint64 major) public view returns (uint64[3] semanticVersion, address contractAddress, bytes contentURI) {\n    Version storage version = versions[majorToLatestVersion[major]];\n    return (version.semanticVersion, version.contractAddress, version.contentURI); \n  }\n\n  function semanticVersionHash(uint64[3] version) internal pure returns (bytes32) {\n    return keccak256(abi.encodePacked(version[0], version[1], version[2]));\n  }\n\n  function semanticVersionIsZero(uint64[3] version) internal pure returns (bool) {\n    return version[0] == 0 && version[1] == 0 && version[2] == 0;\n  }\n}\n",
  "sourcePath": "/Users/yoonjae/WebstormProjects/zos/packages/lib/contracts/application/Package.sol",
  "ast": {
    "absolutePath": "/Users/yoonjae/WebstormProjects/zos/packages/lib/contracts/application/Package.sol",
    "exportedSymbols": {
      "Package": [
        776
      ]
    },
    "id": 777,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 437,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:4"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 438,
        "nodeType": "ImportDirective",
        "scope": 777,
        "sourceUnit": 3143,
        "src": "26:63:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 439,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3142,
              "src": "474:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$3142",
                "typeString": "contract Ownable"
              }
            },
            "id": 440,
            "nodeType": "InheritanceSpecifier",
            "src": "474:7:4"
          }
        ],
        "contractDependencies": [
          3142
        ],
        "contractKind": "contract",
        "documentation": "@title Package\n@dev A package is composed by a set of versions, identified via semantic versioning,\nwhere each version has a contract address that refers to a reusable implementation,\nplus an optional content URI with metadata. Note that the semver identifier is restricted\nto major, minor, and patch, as prerelease tags are not supported.",
        "fullyImplemented": true,
        "id": 776,
        "linearizedBaseContracts": [
          776,
          3142
        ],
        "name": "Package",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": "@dev Emitted when a version is added to the package.\n@param semanticVersion Name of the added version.\n@param contractAddress Contract associated with the version.\n@param contentURI Optional content URI with metadata of the version.",
            "id": 450,
            "name": "VersionAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 444,
                  "indexed": false,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 450,
                  "src": "770:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 441,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "770:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 443,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "777:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "770:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 446,
                  "indexed": false,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 450,
                  "src": "797:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 445,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "797:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 448,
                  "indexed": false,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 450,
                  "src": "822:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 447,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "822:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "769:70:4"
            },
            "src": "751:89:4"
          },
          {
            "canonicalName": "Package.Version",
            "id": 459,
            "members": [
              {
                "constant": false,
                "id": 454,
                "name": "semanticVersion",
                "nodeType": "VariableDeclaration",
                "scope": 459,
                "src": "865:25:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                  "typeString": "uint64[3]"
                },
                "typeName": {
                  "baseType": {
                    "id": 451,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "865:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 453,
                  "length": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 452,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "872:1:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": null,
                      "typeString": null
                    },
                    "value": "3"
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "865:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                    "typeString": "uint64[3]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 456,
                "name": "contractAddress",
                "nodeType": "VariableDeclaration",
                "scope": 459,
                "src": "896:23:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 455,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "896:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 458,
                "name": "contentURI",
                "nodeType": "VariableDeclaration",
                "scope": 459,
                "src": "925:16:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 457,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "925:5:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Version",
            "nodeType": "StructDefinition",
            "scope": 776,
            "src": "844:103:4",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 463,
            "name": "versions",
            "nodeType": "VariableDeclaration",
            "scope": 776,
            "src": "951:46:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
              "typeString": "mapping(bytes32 => struct Package.Version)"
            },
            "typeName": {
              "id": 462,
              "keyType": {
                "id": 460,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "960:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "951:28:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                "typeString": "mapping(bytes32 => struct Package.Version)"
              },
              "valueType": {
                "contractScope": null,
                "id": 461,
                "name": "Version",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 459,
                "src": "971:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                  "typeString": "struct Package.Version"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 467,
            "name": "majorToLatestVersion",
            "nodeType": "VariableDeclaration",
            "scope": 776,
            "src": "1001:57:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
              "typeString": "mapping(uint64 => bytes32)"
            },
            "typeName": {
              "id": 466,
              "keyType": {
                "id": 464,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "1010:6:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              },
              "nodeType": "Mapping",
              "src": "1001:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                "typeString": "mapping(uint64 => bytes32)"
              },
              "valueType": {
                "id": 465,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1020:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 469,
            "name": "latestMajor",
            "nodeType": "VariableDeclaration",
            "scope": 776,
            "src": "1062:27:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 468,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1062:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 494,
              "nodeType": "Block",
              "src": "1422:142:4",
              "statements": [
                {
                  "assignments": [
                    481
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 481,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 495,
                      "src": "1428:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 480,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 459,
                        "src": "1428:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 487,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 482,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 463,
                      "src": "1454:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 486,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 484,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 473,
                          "src": "1483:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 483,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 747,
                        "src": "1463:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1463:36:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1454:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1428:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 488,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 481,
                          "src": "1514:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 489,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 456,
                        "src": "1514:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 490,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 481,
                          "src": "1539:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 491,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contentURI",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 458,
                        "src": "1539:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "id": 492,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1513:45:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_bytes_storage_$",
                      "typeString": "tuple(address,bytes storage ref)"
                    }
                  },
                  "functionReturnParameters": 479,
                  "id": 493,
                  "nodeType": "Return",
                  "src": "1506:52:4"
                }
              ]
            },
            "documentation": "@dev Returns a version given its semver identifier.\n@param semanticVersion Semver identifier of the version.\n@return Contract address and content URI for the version, or zero if not exists.",
            "id": 495,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 474,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 473,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "1331:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 470,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1331:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 472,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1338:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1331:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1330:27:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 476,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "1379:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1379:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 478,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "1404:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 477,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1404:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1378:43:4"
            },
            "scope": 776,
            "src": "1311:253:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 515,
              "nodeType": "Block",
              "src": "1965:119:4",
              "statements": [
                {
                  "assignments": [
                    505
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 505,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 516,
                      "src": "1971:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 504,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 459,
                        "src": "1971:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 511,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 506,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 463,
                      "src": "1997:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 510,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 508,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 499,
                          "src": "2026:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 507,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 747,
                        "src": "2006:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2006:36:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1997:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1971:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 512,
                      "name": "version",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 505,
                      "src": "2056:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version storage pointer"
                      }
                    },
                    "id": 513,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "contractAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 456,
                    "src": "2056:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 503,
                  "id": 514,
                  "nodeType": "Return",
                  "src": "2049:30:4"
                }
              ]
            },
            "documentation": "@dev Returns a contract for a version given its semver identifier.\nThis method is equivalent to `getVersion`, but returns only the contract address.\n@param semanticVersion Semver identifier of the version.\n@return Contract address for the version, or zero if not exists.",
            "id": 516,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 499,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 516,
                  "src": "1892:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 496,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1892:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 498,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1899:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1892:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1891:27:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 503,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 502,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 516,
                  "src": "1940:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 501,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1940:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1939:25:4"
            },
            "scope": 776,
            "src": "1871:213:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 648,
              "nodeType": "Block",
              "src": "2606:1202:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 530,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 522,
                          "src": "2620:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2647:1:4",
                              "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": 531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2639:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2639:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2620:29:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "436f6e74726163742061646472657373206973207265717569726564",
                        "id": 535,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2651:30:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_780e49f834be75d00932cec8d636b1a7b22db8f51cf085cf57f0b010ea79c7d2",
                          "typeString": "literal_string \"Contract address is required\""
                        },
                        "value": "Contract address is required"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_780e49f834be75d00932cec8d636b1a7b22db8f51cf085cf57f0b010ea79c7d2",
                          "typeString": "literal_string \"Contract address is required\""
                        }
                      ],
                      "id": 529,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3161,
                      "src": "2612:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2612:70:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 537,
                  "nodeType": "ExpressionStatement",
                  "src": "2612:70:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2696:28:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 540,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 520,
                              "src": "2708:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            ],
                            "id": 539,
                            "name": "hasVersion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 676,
                            "src": "2697:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint64[3] memory) view returns (bool)"
                            }
                          },
                          "id": 541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2697:27:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2076657273696f6e20697320616c7265616479207265676973746572656420696e207061636b616765",
                        "id": 543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2726:48:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b3ae3984ba439aa79dd8a004069b5c408247b6da429c2768dd9a60b038d8514",
                          "typeString": "literal_string \"Given version is already registered in package\""
                        },
                        "value": "Given version is already registered in package"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b3ae3984ba439aa79dd8a004069b5c408247b6da429c2768dd9a60b038d8514",
                          "typeString": "literal_string \"Given version is already registered in package\""
                        }
                      ],
                      "id": 538,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3161,
                      "src": "2688:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2688:87:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 545,
                  "nodeType": "ExpressionStatement",
                  "src": "2688:87:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2789:39:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 548,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 520,
                              "src": "2812:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            ],
                            "id": 547,
                            "name": "semanticVersionIsZero",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 775,
                            "src": "2790:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint64[3] memory) pure returns (bool)"
                            }
                          },
                          "id": 549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2790:38:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "56657273696f6e206d757374206265206e6f6e207a65726f",
                        "id": 551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2830:26:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae50164b17b79ab427212ce5adf036461d23ee5ab8d14bb5bfd84b837662d57a",
                          "typeString": "literal_string \"Version must be non zero\""
                        },
                        "value": "Version must be non zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae50164b17b79ab427212ce5adf036461d23ee5ab8d14bb5bfd84b837662d57a",
                          "typeString": "literal_string \"Version must be non zero\""
                        }
                      ],
                      "id": 546,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3161,
                      "src": "2781:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2781:76:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 553,
                  "nodeType": "ExpressionStatement",
                  "src": "2781:76:4"
                },
                {
                  "assignments": [
                    555
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 555,
                      "name": "versionId",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "2888:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 554,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2888:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 559,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 557,
                        "name": "semanticVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 520,
                        "src": "2928:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      ],
                      "id": 556,
                      "name": "semanticVersionHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "2908:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                      }
                    },
                    "id": 558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2908:36:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2888:56:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 560,
                        "name": "versions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 463,
                        "src": "2950:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                          "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                        }
                      },
                      "id": 562,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 561,
                        "name": "versionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "2959:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2950:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage",
                        "typeString": "struct Package.Version storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 564,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 520,
                          "src": "2980:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 565,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 522,
                          "src": "2997:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 566,
                          "name": "contentURI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 524,
                          "src": "3014:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 563,
                        "name": "Version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 459,
                        "src": "2972:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Version_$459_storage_ptr_$",
                          "typeString": "type(struct Package.Version storage pointer)"
                        }
                      },
                      "id": 567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2972:53:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_memory",
                        "typeString": "struct Package.Version memory"
                      }
                    },
                    "src": "2950:75:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "id": 569,
                  "nodeType": "ExpressionStatement",
                  "src": "2950:75:4"
                },
                {
                  "assignments": [
                    571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 571,
                      "name": "major",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "3063:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 570,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3063:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 575,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 572,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 520,
                      "src": "3078:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 574,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3094:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3078:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3063:33:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 576,
                      "name": "major",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 571,
                      "src": "3106:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 577,
                      "name": "latestMajor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 469,
                      "src": "3114:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "3106:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 586,
                  "nodeType": "IfStatement",
                  "src": "3102:72:4",
                  "trueBody": {
                    "id": 585,
                    "nodeType": "Block",
                    "src": "3127:47:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 579,
                            "name": "latestMajor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 469,
                            "src": "3135:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 580,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 520,
                              "src": "3149:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 582,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 581,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3165:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3149:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "3135:32:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 584,
                        "nodeType": "ExpressionStatement",
                        "src": "3135:32:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 588,
                      "name": "minor",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "3224:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 587,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3224:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 592,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 589,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 520,
                      "src": "3239:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 591,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3255:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3239:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3224:33:4"
                },
                {
                  "assignments": [
                    594
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 594,
                      "name": "patch",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "3263:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 593,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3263:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 598,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 595,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 520,
                      "src": "3278:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 597,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3294:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3278:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3263:33:4"
                },
                {
                  "assignments": [
                    603
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 603,
                      "name": "latestVersionForMajor",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "3302:31:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                        "typeString": "uint64[3]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 601,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "3302:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 602,
                        "length": {
                          "argumentTypes": null,
                          "hexValue": "33",
                          "id": 600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3309:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          },
                          "value": "3"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "3302:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                          "typeString": "uint64[3]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 610,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 604,
                        "name": "versions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 463,
                        "src": "3336:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                          "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                        }
                      },
                      "id": 608,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 605,
                          "name": "majorToLatestVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 467,
                          "src": "3345:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                            "typeString": "mapping(uint64 => bytes32)"
                          }
                        },
                        "id": 607,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 606,
                          "name": "major",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 571,
                          "src": "3366:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3345:27:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3336:37:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage",
                        "typeString": "struct Package.Version storage ref"
                      }
                    },
                    "id": 609,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "semanticVersion",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 454,
                    "src": "3336:53:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage",
                      "typeString": "uint64[3] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3302:87:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 612,
                            "name": "latestVersionForMajor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 603,
                            "src": "3421:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                              "typeString": "uint64[3] storage pointer"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                              "typeString": "uint64[3] storage pointer"
                            }
                          ],
                          "id": 611,
                          "name": "semanticVersionIsZero",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 775,
                          "src": "3399:21:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint64[3] memory) pure returns (bool)"
                          }
                        },
                        "id": 613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3399:44:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 618,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 614,
                              "name": "minor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 588,
                              "src": "3491:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 615,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "3499:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 617,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3521:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3499:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3491:32:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 619,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3490:34:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "3399:125:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 625,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 621,
                              "name": "minor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 588,
                              "src": "3568:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 622,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "3577:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 624,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 623,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3599:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3577:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3568:33:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 630,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 626,
                              "name": "patch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 594,
                              "src": "3605:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 627,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "3613:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 629,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 628,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3635:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3613:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3605:32:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3568:69:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 632,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3567:71:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3399:239:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 641,
                  "nodeType": "IfStatement",
                  "src": "3395:339:4",
                  "trueBody": {
                    "id": 640,
                    "nodeType": "Block",
                    "src": "3679:55:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 634,
                              "name": "majorToLatestVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 467,
                              "src": "3688:20:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                                "typeString": "mapping(uint64 => bytes32)"
                              }
                            },
                            "id": 636,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 635,
                              "name": "major",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 571,
                              "src": "3709:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3688:27:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 637,
                            "name": "versionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 555,
                            "src": "3718:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3688:39:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 639,
                        "nodeType": "ExpressionStatement",
                        "src": "3688:39:4"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 643,
                        "name": "semanticVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 520,
                        "src": "3758:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 644,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 522,
                        "src": "3775:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 645,
                        "name": "contentURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 524,
                        "src": "3792:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 642,
                      "name": "VersionAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 450,
                      "src": "3745:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint64[3] memory,address,bytes memory)"
                      }
                    },
                    "id": 646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3745:58:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 647,
                  "nodeType": "EmitStatement",
                  "src": "3740:63:4"
                }
              ]
            },
            "documentation": "@dev Adds a new version to the package. Only the Owner can add new versions.\nReverts if the specified semver identifier already exists. \nEmits a `VersionAdded` event if successful.\n@param semanticVersion Semver identifier of the version.\n@param contractAddress Contract address for the version, must be non-zero.\n@param contentURI Optional content URI for the version.",
            "id": 649,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 527,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 526,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3090,
                  "src": "2596:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2596:9:4"
              }
            ],
            "name": "addVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 520,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 649,
                  "src": "2519:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 517,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "2519:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 519,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 518,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2526:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2519:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 522,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 649,
                  "src": "2546:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 521,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2546:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 524,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 649,
                  "src": "2571:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 523,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2571:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2518:70:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 528,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2606:0:4"
            },
            "scope": 776,
            "src": "2499:1309:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 675,
              "nodeType": "Block",
              "src": "4103:142:4",
              "statements": [
                {
                  "assignments": [
                    659
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 659,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 676,
                      "src": "4109:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 658,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 459,
                        "src": "4109:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 665,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 660,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 463,
                      "src": "4135:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 664,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 662,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 653,
                          "src": "4164:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 661,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 747,
                        "src": "4144:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 663,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4144:36:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4135:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4109:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 667,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 659,
                            "src": "4202:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                              "typeString": "struct Package.Version storage pointer"
                            }
                          },
                          "id": 668,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "contractAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 456,
                          "src": "4202:23:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4194:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 669,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4194:32:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4238:1:4",
                          "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": 670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4230:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 672,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4230:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4194:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 657,
                  "id": 674,
                  "nodeType": "Return",
                  "src": "4187:53:4"
                }
              ]
            },
            "documentation": "@dev Checks whether a version is present in the package.\n@param semanticVersion Semver identifier of the version.\n@return true if the version is registered in this package, false otherwise.",
            "id": 676,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 654,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 653,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 676,
                  "src": "4049:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 650,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "4049:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 652,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4056:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "4049:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4048:27:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 656,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 676,
                  "src": "4097:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 655,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4097:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4096:6:4"
            },
            "scope": 776,
            "src": "4029:216:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 691,
              "nodeType": "Block",
              "src": "4769:47:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 688,
                        "name": "latestMajor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 469,
                        "src": "4799:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 687,
                      "name": "getLatestByMajor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 722,
                      "src": "4782:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint64_$returns$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint64) view returns (uint64[3] memory,address,bytes memory)"
                      }
                    },
                    "id": 689,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4782:29:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(uint64[3] memory,address,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 686,
                  "id": 690,
                  "nodeType": "Return",
                  "src": "4775:36:4"
                }
              ]
            },
            "documentation": "@dev Returns the version with the highest semver identifier registered in the package.\nFor instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will always return `2.0.0`, regardless \nof the order in which they were registered. Returns zero if no versions are registered.\n@return Semver identifier, contract address, and content URI for the version, or zero if not exists.",
            "id": 692,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getLatest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 677,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4675:2:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 681,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 692,
                  "src": "4699:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 678,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "4699:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 680,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 679,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4706:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "4699:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 683,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 692,
                  "src": "4726:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 682,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4726:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 685,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 692,
                  "src": "4751:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 684,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4751:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4698:70:4"
            },
            "scope": 776,
            "src": "4657:159:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 721,
              "nodeType": "Block",
              "src": "5433:158:4",
              "statements": [
                {
                  "assignments": [
                    706
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 706,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 722,
                      "src": "5439:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 705,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 459,
                        "src": "5439:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 712,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 707,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 463,
                      "src": "5465:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 711,
                    "indexExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 708,
                        "name": "majorToLatestVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 467,
                        "src": "5474:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                          "typeString": "mapping(uint64 => bytes32)"
                        }
                      },
                      "id": 710,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 709,
                        "name": "major",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 694,
                        "src": "5495:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5474:27:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5465:37:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5439:63:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 713,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 706,
                          "src": "5516:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 714,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "semanticVersion",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 454,
                        "src": "5516:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage",
                          "typeString": "uint64[3] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 715,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 706,
                          "src": "5541:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 716,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 456,
                        "src": "5541:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 717,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 706,
                          "src": "5566:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 718,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contentURI",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 458,
                        "src": "5566:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "id": 719,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "5515:70:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_uint64_$3_storage_$_t_address_$_t_bytes_storage_$",
                      "typeString": "tuple(uint64[3] storage ref,address,bytes storage ref)"
                    }
                  },
                  "functionReturnParameters": 704,
                  "id": 720,
                  "nodeType": "Return",
                  "src": "5508:77:4"
                }
              ]
            },
            "documentation": "@dev Returns the version with the highest semver identifier for the given major.\nFor instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will return `1.3.0` for major `1`, \nregardless of the order in which they were registered. Returns zero if no versions are registered\nfor the specified major.\n@param major Major identifier to query\n@return Semver identifier, contract address, and content URI for the version, or zero if not exists.",
            "id": 722,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getLatestByMajor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 695,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 694,
                  "name": "major",
                  "nodeType": "VariableDeclaration",
                  "scope": 722,
                  "src": "5328:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 693,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5328:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5327:14:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 699,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 722,
                  "src": "5363:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 696,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5363:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 698,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 697,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5370:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5363:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 701,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 722,
                  "src": "5390:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 700,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5390:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 703,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 722,
                  "src": "5415:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 702,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5415:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5362:70:4"
            },
            "scope": 776,
            "src": "5302:289:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 746,
              "nodeType": "Block",
              "src": "5675:81:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 734,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 726,
                              "src": "5715:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 736,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 735,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5723:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5715:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 737,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 726,
                              "src": "5727:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 739,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5735:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5727:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 740,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 726,
                              "src": "5739:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 742,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 741,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5747:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5739:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 732,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3144,
                            "src": "5698:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5698:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5698:52:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 731,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3151,
                      "src": "5688:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5688:63:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 730,
                  "id": 745,
                  "nodeType": "Return",
                  "src": "5681:70:4"
                }
              ]
            },
            "documentation": null,
            "id": 747,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "semanticVersionHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 726,
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "scope": 747,
                  "src": "5624:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 723,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5624:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 725,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 724,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5631:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5624:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5623:19:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 729,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 747,
                  "src": "5666:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 728,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5666:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5665:9:4"
            },
            "scope": 776,
            "src": "5595:161:4",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 774,
              "nodeType": "Block",
              "src": "5839:71:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 766,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 756,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 751,
                            "src": "5852:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          },
                          "id": 758,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5860:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5852:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5866:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5852:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 765,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 761,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 751,
                            "src": "5871:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          },
                          "id": 763,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5879:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5871:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5885:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5871:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "5852:34:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 767,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 751,
                          "src": "5890:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        },
                        "id": 769,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5898:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5890:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5904:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5890:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5852:53:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 755,
                  "id": 773,
                  "nodeType": "Return",
                  "src": "5845:60:4"
                }
              ]
            },
            "documentation": null,
            "id": 775,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "semanticVersionIsZero",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 751,
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "scope": 775,
                  "src": "5791:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 748,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5791:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 750,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 749,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5798:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5791:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5790:19:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 754,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 775,
                  "src": "5833:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 753,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5833:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5832:6:4"
            },
            "scope": 776,
            "src": "5760:150:4",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 777,
        "src": "454:5458:4"
      }
    ],
    "src": "0:5913:4"
  },
  "legacyAST": {
    "absolutePath": "/Users/yoonjae/WebstormProjects/zos/packages/lib/contracts/application/Package.sol",
    "exportedSymbols": {
      "Package": [
        776
      ]
    },
    "id": 777,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 437,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:4"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 438,
        "nodeType": "ImportDirective",
        "scope": 777,
        "sourceUnit": 3143,
        "src": "26:63:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 439,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3142,
              "src": "474:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$3142",
                "typeString": "contract Ownable"
              }
            },
            "id": 440,
            "nodeType": "InheritanceSpecifier",
            "src": "474:7:4"
          }
        ],
        "contractDependencies": [
          3142
        ],
        "contractKind": "contract",
        "documentation": "@title Package\n@dev A package is composed by a set of versions, identified via semantic versioning,\nwhere each version has a contract address that refers to a reusable implementation,\nplus an optional content URI with metadata. Note that the semver identifier is restricted\nto major, minor, and patch, as prerelease tags are not supported.",
        "fullyImplemented": true,
        "id": 776,
        "linearizedBaseContracts": [
          776,
          3142
        ],
        "name": "Package",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": "@dev Emitted when a version is added to the package.\n@param semanticVersion Name of the added version.\n@param contractAddress Contract associated with the version.\n@param contentURI Optional content URI with metadata of the version.",
            "id": 450,
            "name": "VersionAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 444,
                  "indexed": false,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 450,
                  "src": "770:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 441,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "770:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 443,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "777:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "770:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 446,
                  "indexed": false,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 450,
                  "src": "797:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 445,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "797:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 448,
                  "indexed": false,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 450,
                  "src": "822:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 447,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "822:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "769:70:4"
            },
            "src": "751:89:4"
          },
          {
            "canonicalName": "Package.Version",
            "id": 459,
            "members": [
              {
                "constant": false,
                "id": 454,
                "name": "semanticVersion",
                "nodeType": "VariableDeclaration",
                "scope": 459,
                "src": "865:25:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                  "typeString": "uint64[3]"
                },
                "typeName": {
                  "baseType": {
                    "id": 451,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "865:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 453,
                  "length": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 452,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "872:1:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": null,
                      "typeString": null
                    },
                    "value": "3"
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "865:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                    "typeString": "uint64[3]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 456,
                "name": "contractAddress",
                "nodeType": "VariableDeclaration",
                "scope": 459,
                "src": "896:23:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 455,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "896:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 458,
                "name": "contentURI",
                "nodeType": "VariableDeclaration",
                "scope": 459,
                "src": "925:16:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 457,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "925:5:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Version",
            "nodeType": "StructDefinition",
            "scope": 776,
            "src": "844:103:4",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 463,
            "name": "versions",
            "nodeType": "VariableDeclaration",
            "scope": 776,
            "src": "951:46:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
              "typeString": "mapping(bytes32 => struct Package.Version)"
            },
            "typeName": {
              "id": 462,
              "keyType": {
                "id": 460,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "960:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "951:28:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                "typeString": "mapping(bytes32 => struct Package.Version)"
              },
              "valueType": {
                "contractScope": null,
                "id": 461,
                "name": "Version",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 459,
                "src": "971:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                  "typeString": "struct Package.Version"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 467,
            "name": "majorToLatestVersion",
            "nodeType": "VariableDeclaration",
            "scope": 776,
            "src": "1001:57:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
              "typeString": "mapping(uint64 => bytes32)"
            },
            "typeName": {
              "id": 466,
              "keyType": {
                "id": 464,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "1010:6:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              },
              "nodeType": "Mapping",
              "src": "1001:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                "typeString": "mapping(uint64 => bytes32)"
              },
              "valueType": {
                "id": 465,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1020:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 469,
            "name": "latestMajor",
            "nodeType": "VariableDeclaration",
            "scope": 776,
            "src": "1062:27:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 468,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1062:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 494,
              "nodeType": "Block",
              "src": "1422:142:4",
              "statements": [
                {
                  "assignments": [
                    481
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 481,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 495,
                      "src": "1428:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 480,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 459,
                        "src": "1428:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 487,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 482,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 463,
                      "src": "1454:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 486,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 484,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 473,
                          "src": "1483:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 483,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 747,
                        "src": "1463:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1463:36:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1454:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1428:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 488,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 481,
                          "src": "1514:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 489,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 456,
                        "src": "1514:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 490,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 481,
                          "src": "1539:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 491,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contentURI",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 458,
                        "src": "1539:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "id": 492,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1513:45:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_bytes_storage_$",
                      "typeString": "tuple(address,bytes storage ref)"
                    }
                  },
                  "functionReturnParameters": 479,
                  "id": 493,
                  "nodeType": "Return",
                  "src": "1506:52:4"
                }
              ]
            },
            "documentation": "@dev Returns a version given its semver identifier.\n@param semanticVersion Semver identifier of the version.\n@return Contract address and content URI for the version, or zero if not exists.",
            "id": 495,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 474,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 473,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "1331:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 470,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1331:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 472,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1338:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1331:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1330:27:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 476,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "1379:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1379:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 478,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "1404:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 477,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1404:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1378:43:4"
            },
            "scope": 776,
            "src": "1311:253:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 515,
              "nodeType": "Block",
              "src": "1965:119:4",
              "statements": [
                {
                  "assignments": [
                    505
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 505,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 516,
                      "src": "1971:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 504,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 459,
                        "src": "1971:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 511,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 506,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 463,
                      "src": "1997:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 510,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 508,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 499,
                          "src": "2026:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 507,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 747,
                        "src": "2006:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2006:36:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1997:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1971:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 512,
                      "name": "version",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 505,
                      "src": "2056:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version storage pointer"
                      }
                    },
                    "id": 513,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "contractAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 456,
                    "src": "2056:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 503,
                  "id": 514,
                  "nodeType": "Return",
                  "src": "2049:30:4"
                }
              ]
            },
            "documentation": "@dev Returns a contract for a version given its semver identifier.\nThis method is equivalent to `getVersion`, but returns only the contract address.\n@param semanticVersion Semver identifier of the version.\n@return Contract address for the version, or zero if not exists.",
            "id": 516,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 499,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 516,
                  "src": "1892:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 496,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1892:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 498,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1899:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1892:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1891:27:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 503,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 502,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 516,
                  "src": "1940:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 501,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1940:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1939:25:4"
            },
            "scope": 776,
            "src": "1871:213:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 648,
              "nodeType": "Block",
              "src": "2606:1202:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 530,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 522,
                          "src": "2620:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2647:1:4",
                              "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": 531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2639:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2639:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2620:29:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "436f6e74726163742061646472657373206973207265717569726564",
                        "id": 535,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2651:30:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_780e49f834be75d00932cec8d636b1a7b22db8f51cf085cf57f0b010ea79c7d2",
                          "typeString": "literal_string \"Contract address is required\""
                        },
                        "value": "Contract address is required"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_780e49f834be75d00932cec8d636b1a7b22db8f51cf085cf57f0b010ea79c7d2",
                          "typeString": "literal_string \"Contract address is required\""
                        }
                      ],
                      "id": 529,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3161,
                      "src": "2612:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2612:70:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 537,
                  "nodeType": "ExpressionStatement",
                  "src": "2612:70:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2696:28:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 540,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 520,
                              "src": "2708:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            ],
                            "id": 539,
                            "name": "hasVersion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 676,
                            "src": "2697:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint64[3] memory) view returns (bool)"
                            }
                          },
                          "id": 541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2697:27:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2076657273696f6e20697320616c7265616479207265676973746572656420696e207061636b616765",
                        "id": 543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2726:48:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b3ae3984ba439aa79dd8a004069b5c408247b6da429c2768dd9a60b038d8514",
                          "typeString": "literal_string \"Given version is already registered in package\""
                        },
                        "value": "Given version is already registered in package"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b3ae3984ba439aa79dd8a004069b5c408247b6da429c2768dd9a60b038d8514",
                          "typeString": "literal_string \"Given version is already registered in package\""
                        }
                      ],
                      "id": 538,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3161,
                      "src": "2688:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2688:87:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 545,
                  "nodeType": "ExpressionStatement",
                  "src": "2688:87:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2789:39:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 548,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 520,
                              "src": "2812:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            ],
                            "id": 547,
                            "name": "semanticVersionIsZero",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 775,
                            "src": "2790:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint64[3] memory) pure returns (bool)"
                            }
                          },
                          "id": 549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2790:38:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "56657273696f6e206d757374206265206e6f6e207a65726f",
                        "id": 551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2830:26:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae50164b17b79ab427212ce5adf036461d23ee5ab8d14bb5bfd84b837662d57a",
                          "typeString": "literal_string \"Version must be non zero\""
                        },
                        "value": "Version must be non zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae50164b17b79ab427212ce5adf036461d23ee5ab8d14bb5bfd84b837662d57a",
                          "typeString": "literal_string \"Version must be non zero\""
                        }
                      ],
                      "id": 546,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3161,
                      "src": "2781:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2781:76:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 553,
                  "nodeType": "ExpressionStatement",
                  "src": "2781:76:4"
                },
                {
                  "assignments": [
                    555
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 555,
                      "name": "versionId",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "2888:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 554,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2888:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 559,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 557,
                        "name": "semanticVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 520,
                        "src": "2928:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      ],
                      "id": 556,
                      "name": "semanticVersionHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "2908:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                      }
                    },
                    "id": 558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2908:36:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2888:56:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 560,
                        "name": "versions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 463,
                        "src": "2950:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                          "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                        }
                      },
                      "id": 562,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 561,
                        "name": "versionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "2959:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2950:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage",
                        "typeString": "struct Package.Version storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 564,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 520,
                          "src": "2980:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 565,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 522,
                          "src": "2997:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 566,
                          "name": "contentURI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 524,
                          "src": "3014:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 563,
                        "name": "Version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 459,
                        "src": "2972:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Version_$459_storage_ptr_$",
                          "typeString": "type(struct Package.Version storage pointer)"
                        }
                      },
                      "id": 567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2972:53:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_memory",
                        "typeString": "struct Package.Version memory"
                      }
                    },
                    "src": "2950:75:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "id": 569,
                  "nodeType": "ExpressionStatement",
                  "src": "2950:75:4"
                },
                {
                  "assignments": [
                    571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 571,
                      "name": "major",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "3063:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 570,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3063:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 575,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 572,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 520,
                      "src": "3078:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 574,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3094:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3078:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3063:33:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 576,
                      "name": "major",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 571,
                      "src": "3106:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 577,
                      "name": "latestMajor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 469,
                      "src": "3114:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "3106:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 586,
                  "nodeType": "IfStatement",
                  "src": "3102:72:4",
                  "trueBody": {
                    "id": 585,
                    "nodeType": "Block",
                    "src": "3127:47:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 579,
                            "name": "latestMajor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 469,
                            "src": "3135:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 580,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 520,
                              "src": "3149:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 582,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 581,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3165:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3149:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "3135:32:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 584,
                        "nodeType": "ExpressionStatement",
                        "src": "3135:32:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 588,
                      "name": "minor",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "3224:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 587,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3224:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 592,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 589,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 520,
                      "src": "3239:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 591,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3255:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3239:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3224:33:4"
                },
                {
                  "assignments": [
                    594
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 594,
                      "name": "patch",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "3263:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 593,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3263:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 598,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 595,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 520,
                      "src": "3278:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 597,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3294:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3278:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3263:33:4"
                },
                {
                  "assignments": [
                    603
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 603,
                      "name": "latestVersionForMajor",
                      "nodeType": "VariableDeclaration",
                      "scope": 649,
                      "src": "3302:31:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                        "typeString": "uint64[3]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 601,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "3302:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 602,
                        "length": {
                          "argumentTypes": null,
                          "hexValue": "33",
                          "id": 600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3309:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          },
                          "value": "3"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "3302:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                          "typeString": "uint64[3]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 610,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 604,
                        "name": "versions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 463,
                        "src": "3336:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                          "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                        }
                      },
                      "id": 608,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 605,
                          "name": "majorToLatestVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 467,
                          "src": "3345:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                            "typeString": "mapping(uint64 => bytes32)"
                          }
                        },
                        "id": 607,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 606,
                          "name": "major",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 571,
                          "src": "3366:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3345:27:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3336:37:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage",
                        "typeString": "struct Package.Version storage ref"
                      }
                    },
                    "id": 609,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "semanticVersion",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 454,
                    "src": "3336:53:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage",
                      "typeString": "uint64[3] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3302:87:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 612,
                            "name": "latestVersionForMajor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 603,
                            "src": "3421:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                              "typeString": "uint64[3] storage pointer"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                              "typeString": "uint64[3] storage pointer"
                            }
                          ],
                          "id": 611,
                          "name": "semanticVersionIsZero",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 775,
                          "src": "3399:21:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint64[3] memory) pure returns (bool)"
                          }
                        },
                        "id": 613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3399:44:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 618,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 614,
                              "name": "minor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 588,
                              "src": "3491:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 615,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "3499:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 617,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3521:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3499:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3491:32:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 619,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3490:34:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "3399:125:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 625,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 621,
                              "name": "minor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 588,
                              "src": "3568:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 622,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "3577:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 624,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 623,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3599:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3577:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3568:33:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 630,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 626,
                              "name": "patch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 594,
                              "src": "3605:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 627,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "3613:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 629,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 628,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3635:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3613:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3605:32:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3568:69:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 632,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3567:71:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3399:239:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 641,
                  "nodeType": "IfStatement",
                  "src": "3395:339:4",
                  "trueBody": {
                    "id": 640,
                    "nodeType": "Block",
                    "src": "3679:55:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 634,
                              "name": "majorToLatestVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 467,
                              "src": "3688:20:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                                "typeString": "mapping(uint64 => bytes32)"
                              }
                            },
                            "id": 636,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 635,
                              "name": "major",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 571,
                              "src": "3709:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3688:27:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 637,
                            "name": "versionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 555,
                            "src": "3718:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3688:39:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 639,
                        "nodeType": "ExpressionStatement",
                        "src": "3688:39:4"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 643,
                        "name": "semanticVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 520,
                        "src": "3758:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 644,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 522,
                        "src": "3775:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 645,
                        "name": "contentURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 524,
                        "src": "3792:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 642,
                      "name": "VersionAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 450,
                      "src": "3745:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint64[3] memory,address,bytes memory)"
                      }
                    },
                    "id": 646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3745:58:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 647,
                  "nodeType": "EmitStatement",
                  "src": "3740:63:4"
                }
              ]
            },
            "documentation": "@dev Adds a new version to the package. Only the Owner can add new versions.\nReverts if the specified semver identifier already exists. \nEmits a `VersionAdded` event if successful.\n@param semanticVersion Semver identifier of the version.\n@param contractAddress Contract address for the version, must be non-zero.\n@param contentURI Optional content URI for the version.",
            "id": 649,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 527,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 526,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3090,
                  "src": "2596:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2596:9:4"
              }
            ],
            "name": "addVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 520,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 649,
                  "src": "2519:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 517,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "2519:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 519,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 518,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2526:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2519:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 522,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 649,
                  "src": "2546:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 521,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2546:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 524,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 649,
                  "src": "2571:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 523,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2571:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2518:70:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 528,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2606:0:4"
            },
            "scope": 776,
            "src": "2499:1309:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 675,
              "nodeType": "Block",
              "src": "4103:142:4",
              "statements": [
                {
                  "assignments": [
                    659
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 659,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 676,
                      "src": "4109:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 658,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 459,
                        "src": "4109:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 665,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 660,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 463,
                      "src": "4135:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 664,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 662,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 653,
                          "src": "4164:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 661,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 747,
                        "src": "4144:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 663,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4144:36:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4135:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4109:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 667,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 659,
                            "src": "4202:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                              "typeString": "struct Package.Version storage pointer"
                            }
                          },
                          "id": 668,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "contractAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 456,
                          "src": "4202:23:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4194:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 669,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4194:32:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4238:1:4",
                          "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": 670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4230:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 672,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4230:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4194:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 657,
                  "id": 674,
                  "nodeType": "Return",
                  "src": "4187:53:4"
                }
              ]
            },
            "documentation": "@dev Checks whether a version is present in the package.\n@param semanticVersion Semver identifier of the version.\n@return true if the version is registered in this package, false otherwise.",
            "id": 676,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "hasVersion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 654,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 653,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 676,
                  "src": "4049:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 650,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "4049:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 652,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4056:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "4049:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4048:27:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 656,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 676,
                  "src": "4097:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 655,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4097:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4096:6:4"
            },
            "scope": 776,
            "src": "4029:216:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 691,
              "nodeType": "Block",
              "src": "4769:47:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 688,
                        "name": "latestMajor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 469,
                        "src": "4799:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 687,
                      "name": "getLatestByMajor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 722,
                      "src": "4782:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint64_$returns$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint64) view returns (uint64[3] memory,address,bytes memory)"
                      }
                    },
                    "id": 689,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4782:29:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(uint64[3] memory,address,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 686,
                  "id": 690,
                  "nodeType": "Return",
                  "src": "4775:36:4"
                }
              ]
            },
            "documentation": "@dev Returns the version with the highest semver identifier registered in the package.\nFor instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will always return `2.0.0`, regardless \nof the order in which they were registered. Returns zero if no versions are registered.\n@return Semver identifier, contract address, and content URI for the version, or zero if not exists.",
            "id": 692,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getLatest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 677,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4675:2:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 681,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 692,
                  "src": "4699:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 678,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "4699:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 680,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 679,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4706:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "4699:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 683,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 692,
                  "src": "4726:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 682,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4726:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 685,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 692,
                  "src": "4751:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 684,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4751:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4698:70:4"
            },
            "scope": 776,
            "src": "4657:159:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 721,
              "nodeType": "Block",
              "src": "5433:158:4",
              "statements": [
                {
                  "assignments": [
                    706
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 706,
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "scope": 722,
                      "src": "5439:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 705,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 459,
                        "src": "5439:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 712,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 707,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 463,
                      "src": "5465:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$459_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 711,
                    "indexExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 708,
                        "name": "majorToLatestVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 467,
                        "src": "5474:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                          "typeString": "mapping(uint64 => bytes32)"
                        }
                      },
                      "id": 710,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 709,
                        "name": "major",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 694,
                        "src": "5495:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5474:27:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5465:37:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$459_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5439:63:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 713,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 706,
                          "src": "5516:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 714,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "semanticVersion",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 454,
                        "src": "5516:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage",
                          "typeString": "uint64[3] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 715,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 706,
                          "src": "5541:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 716,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 456,
                        "src": "5541:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 717,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 706,
                          "src": "5566:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$459_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 718,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contentURI",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 458,
                        "src": "5566:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "id": 719,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "5515:70:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_uint64_$3_storage_$_t_address_$_t_bytes_storage_$",
                      "typeString": "tuple(uint64[3] storage ref,address,bytes storage ref)"
                    }
                  },
                  "functionReturnParameters": 704,
                  "id": 720,
                  "nodeType": "Return",
                  "src": "5508:77:4"
                }
              ]
            },
            "documentation": "@dev Returns the version with the highest semver identifier for the given major.\nFor instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will return `1.3.0` for major `1`, \nregardless of the order in which they were registered. Returns zero if no versions are registered\nfor the specified major.\n@param major Major identifier to query\n@return Semver identifier, contract address, and content URI for the version, or zero if not exists.",
            "id": 722,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getLatestByMajor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 695,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 694,
                  "name": "major",
                  "nodeType": "VariableDeclaration",
                  "scope": 722,
                  "src": "5328:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 693,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5328:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5327:14:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 699,
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 722,
                  "src": "5363:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 696,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5363:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 698,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 697,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5370:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5363:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 701,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 722,
                  "src": "5390:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 700,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5390:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 703,
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 722,
                  "src": "5415:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 702,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5415:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5362:70:4"
            },
            "scope": 776,
            "src": "5302:289:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 746,
              "nodeType": "Block",
              "src": "5675:81:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 734,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 726,
                              "src": "5715:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 736,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 735,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5723:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5715:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 737,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 726,
                              "src": "5727:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 739,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5735:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5727:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 740,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 726,
                              "src": "5739:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 742,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 741,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5747:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5739:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 732,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3144,
                            "src": "5698:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5698:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5698:52:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 731,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3151,
                      "src": "5688:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5688:63:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 730,
                  "id": 745,
                  "nodeType": "Return",
                  "src": "5681:70:4"
                }
              ]
            },
            "documentation": null,
            "id": 747,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "semanticVersionHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 726,
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "scope": 747,
                  "src": "5624:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 723,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5624:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 725,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 724,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5631:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5624:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5623:19:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 729,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 747,
                  "src": "5666:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 728,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5666:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5665:9:4"
            },
            "scope": 776,
            "src": "5595:161:4",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 774,
              "nodeType": "Block",
              "src": "5839:71:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 766,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 756,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 751,
                            "src": "5852:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          },
                          "id": 758,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5860:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5852:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5866:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5852:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 765,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 761,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 751,
                            "src": "5871:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          },
                          "id": 763,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5879:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5871:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5885:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5871:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "5852:34:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 767,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 751,
                          "src": "5890:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        },
                        "id": 769,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5898:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5890:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5904:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5890:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5852:53:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 755,
                  "id": 773,
                  "nodeType": "Return",
                  "src": "5845:60:4"
                }
              ]
            },
            "documentation": null,
            "id": 775,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "semanticVersionIsZero",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 751,
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "scope": 775,
                  "src": "5791:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 748,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5791:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 750,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 749,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5798:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5791:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5790:19:4"
            },
            "payable": false,
            "returnParameters": {
              "id": 755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 754,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 775,
                  "src": "5833:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 753,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5833:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5832:6:4"
            },
            "scope": 776,
            "src": "5760:150:4",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 777,
        "src": "454:5458:4"
      }
    ],
    "src": "0:5913:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2019-02-15T10:15:15.357Z"
}