diff --git a/.circleci/config.yml b/.circleci/config.yml index 68b550ca51..697d920b1e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,6 +9,9 @@ common: &common - restore_cache: keys: - cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} + - run: + name: checkout ethpm-spec submodule + command: git submodule update --init --recursive - run: name: install dependencies command: pip install --user tox @@ -116,14 +119,17 @@ ethpm_steps: ðpm_steps - run: name: install ipfs command: - wget https://dist.ipfs.io/go-ipfs/v0.4.19/go-ipfs_v0.4.19_linux-amd64.tar.gz && - tar xvfz go-ipfs_v0.4.19_linux-amd64.tar.gz && + wget https://dist.ipfs.io/go-ipfs/v0.4.22/go-ipfs_v0.4.22_linux-amd64.tar.gz && + tar xvfz go-ipfs_v0.4.22_linux-amd64.tar.gz && sudo cp go-ipfs/ipfs /usr/local/bin && ipfs init - run: name: start ipfs node in background command: ipfs daemon background: true + - run: + name: checkout ethpm-spec submodule + command: git submodule update --init --recursive - run: name: install dependencies command: pip install --user tox diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..482fa10b27 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ethpm/ethpm-spec"] + path = ethpm/ethpm-spec + url = https://github.com/ethpm/ethpm-spec.git diff --git a/docs/ethpm.rst b/docs/ethpm.rst index ac616e0807..5f323c3431 100644 --- a/docs/ethpm.rst +++ b/docs/ethpm.rst @@ -6,10 +6,11 @@ Overview This is a Python implementation of the `Ethereum Smart Contract Packaging -Specification `__, +Specification V3 `__, driven by discussions in `ERC -190 `__ and `ERC -1123 `__. +190 `__, `ERC +1123 `__, `ERC +1319 `__. ``Py-EthPM`` is being built as a low-level library to help developers leverage the ethPM spec. Including ... @@ -20,6 +21,7 @@ driven by discussions in `ERC - Validate package bytecode matches compilation output. - Validate deployed bytecode matches compilation output. - Access to package’s dependencies. +- Native integration with compilation metadata. Package ------- @@ -33,11 +35,11 @@ new ``Package`` class for a given package. .. doctest:: - >>> from ethpm import Package, ASSETS_DIR + >>> from ethpm import Package, ETHPM_SPEC_DIR >>> from web3 import Web3 >>> w3 = Web3(Web3.EthereumTesterProvider()) - >>> owned_manifest_path = ASSETS_DIR / 'owned' / '1.0.0.json' + >>> owned_manifest_path = ETHPM_SPEC_DIR / 'examples' / 'owned' / 'v3.json' >>> OwnedPackage = Package.from_file(owned_manifest_path, w3) >>> assert isinstance(OwnedPackage, Package) @@ -72,13 +74,13 @@ Validation The ``Package`` class currently verifies the following things. -- Manifests used to instantiate a ``Package`` object conform to the `EthPM V2 Manifest Specification `__ and are tightly packed, with keys sorted alphabetically. +- Manifests used to instantiate a ``Package`` object conform to the `EthPM V3 Manifest Specification `__ and are tightly packed, with keys sorted alphabetically, and no trailing newline. LinkableContract ---------------- -`Py-EthPM` uses a custom subclass of ``Web3.contract.Contract`` to manage contract factories and instances which might require bytecode linking. To create a deployable contract factory, both the contract type's ``abi`` and ``deployment_bytecode`` must be available in the Package's manifest. +`Py-EthPM` uses a custom subclass of ``Web3.contract.Contract`` to manage contract factories and instances which might require bytecode linking. To create a deployable contract factory, both the contract type's ``abi`` and ``deploymentBytecode`` must be available in the Package's manifest. .. doctest:: @@ -87,7 +89,7 @@ LinkableContract >>> from ethpm import Package, ASSETS_DIR >>> w3 = Web3(Web3.EthereumTesterProvider()) - >>> escrow_manifest_path = ASSETS_DIR / 'escrow' / '1.0.3.json' + >>> escrow_manifest_path = ASSETS_DIR / 'escrow' / 'with_bytecode_v3.json' >>> # Try to deploy from unlinked factory >>> EscrowPackage = Package.from_file(escrow_manifest_path, w3) @@ -150,7 +152,7 @@ BaseURIBackend .. py:method:: BaseURIBackend.can_translate_uri(uri) Return a bool indicating whether this backend class can translate the given URI to a corresponding content-addressed URI. - A registry URI is said to be capable of "transalating" if it points to another content-addressed URI in its respective on-chain registry. + A registry URI is said to be capable of "translating" if it points to another content-addressed URI in its respective on-chain registry. .. py:method:: BaseURIBackend.fetch_uri_contents(uri) @@ -216,7 +218,7 @@ way through the EIP process) :: - scheme://address:chain_id/package-name@version + scheme://address:chain_id/package_name@version - URI must be a string type - ``scheme``: (required) ``ethpm`` or ``erc1319`` @@ -236,15 +238,18 @@ way through the EIP process) - ``version``: The URI escaped version string, *should* conform to the `semver `__ version numbering specification. -i.e. +Examples... + - ``ethpm://packages.zeppelinos.eth/owned@1.0.0`` + - ``ethpm://0x808B53bF4D70A24bA5cb720D37A4835621A9df00:1/ethregistrar@1.0.0`` To specify a specific asset within a package, you can namespace the target asset. -i.e. - ``ethpm://maker.snakecharmers.eth:1/dai-dai@1.0.0/sources/token.sol`` -- ``ethpm://maker.snakecharmers.eth:1/dai-dai@1.0.0/contract_types/DSToken/abi`` + +- ``ethpm://maker.snakecharmers.eth:1/dai-dai@1.0.0/contractTypes/DSToken/abi`` + - ``ethpm://maker.snakecharmers.eth:1/dai-dai@1.0.0/deployments/mainnet/dai`` @@ -268,7 +273,7 @@ For all manifests, the following ingredients are *required*. ) # Or build( - init_manifest(package_name: str, version: str, manifest_version: str="2") + init_manifest(package_name: str, version: str, manifest_version: str="ethpm/3") ..., ) @@ -280,33 +285,33 @@ The builder (i.e. ``build()``) expects a dict as the first argument. This dict c >>> from ethpm.tools.builder import * >>> expected_manifest = { - ... "package_name": "owned", + ... "name": "owned", ... "version": "1.0.0", - ... "manifest_version": "2" + ... "manifest": "ethpm/3" ... } - >>> base_manifest = {"package_name": "owned"} + >>> base_manifest = {"name": "owned"} >>> built_manifest = build( ... {}, ... package_name("owned"), - ... manifest_version("2"), + ... manifest_version("ethpm/3"), ... version("1.0.0"), ... ) >>> extended_manifest = build( ... base_manifest, - ... manifest_version("2"), + ... manifest_version("ethpm/3"), ... version("1.0.0"), ... ) >>> assert built_manifest == expected_manifest >>> assert extended_manifest == expected_manifest -With ``init_manifest()``, which populates "version" with "2" (the only supported EthPM specification version), unless provided with an alternative "version". +With ``init_manifest()``, which populates "manifest" with "ethpm/3" (the only supported EthPM specification version), unless provided with an alternative "version". .. doctest:: >>> build( ... init_manifest("owned", "1.0.0"), ... ) - {'package_name': 'owned', 'version': '1.0.0', 'manifest_version': '2'} + {'name': 'owned', 'version': '1.0.0', 'manifest': 'ethpm/3'} @@ -331,7 +336,7 @@ By default, the manifest builder returns a dict representing the manifest. To re >>> built_package = build( ... {}, ... package_name("owned"), - ... manifest_version("2"), + ... manifest_version("ethpm/3"), ... version("1.0.0"), ... as_package(w3), ... ) @@ -348,7 +353,7 @@ To validate a manifest validate(), ) -By default, the manifest builder does *not* perform any validation that the generated fields are correctly formatted. There are two ways to validate that the built manifest conforms to the EthPM V2 Specification. +By default, the manifest builder does *not* perform any validation that the generated fields are correctly formatted. There are two ways to validate that the built manifest conforms to the EthPM V3 Specification. - Return a Package, which automatically runs validation. - Add the ``validate()`` function to the end of the manifest builder. @@ -357,15 +362,15 @@ By default, the manifest builder does *not* perform any validation that the gene >>> valid_manifest = build( ... {}, ... package_name("owned"), - ... manifest_version("2"), + ... manifest_version("ethpm/3"), ... version("1.0.0"), ... validate(), ... ) - >>> assert valid_manifest == {"package_name": "owned", "manifest_version": "2", "version": "1.0.0"} + >>> assert valid_manifest == {"name": "owned", "manifest": "ethpm/3", "version": "1.0.0"} >>> invalid_manifest = build( ... {}, ... package_name("_InvalidPkgName"), - ... manifest_version("2"), + ... manifest_version("ethpm/3"), ... version("1.0.0"), ... validate(), ... ) @@ -392,7 +397,7 @@ Writes the active manifest to disk. Will not overwrite an existing manifest with Defaults - Writes manifest to current working directory (as returned by ``os.getcwd()``) unless a ``Path`` is provided as manifest_root_dir. -- Writes manifest with a filename of ".json" unless desired manifest name (which must end in ".json") is provided as manifest_name. +- Writes manifest with a filename of ``.json`` unless desired manifest name (which must end in ".json") is provided as manifest_name. - Writes the minified manifest version to disk unless prettify is set to True .. doctest:: @@ -403,17 +408,17 @@ Defaults >>> build( ... {}, ... package_name("owned"), - ... manifest_version("2"), + ... manifest_version("ethpm/3"), ... version("1.0.0"), ... write_to_disk(manifest_root_dir=p, manifest_name="manifest.json", prettify=True), ... ) - {'package_name': 'owned', 'manifest_version': '2', 'version': '1.0.0'} + {'name': 'owned', 'manifest': 'ethpm/3', 'version': '1.0.0'} >>> with open(str(p / "manifest.json")) as f: ... actual_manifest = f.read() >>> print(actual_manifest) { - "manifest_version": "2", - "package_name": "owned", + "manifest": "ethpm/3", + "name": "owned", "version": "1.0.0" } @@ -451,10 +456,10 @@ To add meta fields .. doctest:: - >>> BASE_MANIFEST = {"package_name": "owned", "manifest_version": "2", "version": "1.0.0"} + >>> BASE_MANIFEST = {"name": "owned", "manifest": "ethpm/3", "version": "1.0.0"} >>> expected_manifest = { - ... "package_name": "owned", - ... "manifest_version": "2", + ... "name": "owned", + ... "manifest": "ethpm/3", ... "version": "1.0.0", ... "meta": { ... "authors": ["Satoshi", "Nakamoto"], @@ -463,7 +468,7 @@ To add meta fields ... "license": "MIT", ... "links": { ... "documentation": "www.readthedocs.com/...", - ... "repo": "www.github/...", + ... "repo": "www.github.com/...", ... "website": "www.website.com", ... } ... } @@ -474,7 +479,7 @@ To add meta fields ... description("An awesome package."), ... keywords("auth"), ... license("MIT"), - ... links(documentation="www.readthedocs.com/...", repo="www.github/...", website="www.website.com"), + ... links(documentation="www.readthedocs.com/...", repo="www.github.com/...", website="www.website.com"), ... ) >>> assert expected_manifest == built_manifest @@ -482,7 +487,7 @@ To add meta fields Compiler Output ~~~~~~~~~~~~~~~ -To build a more complex manifest for solidity contracts, it is required that you provide standard-json output from the solidity compiler. +To build a more complex manifest for solidity contracts, it is required that you provide standard-json output from the solidity compiler. Or for a more convenient experience, use the `EthPM CLI `__. Here is an example of how to compile the contracts and generate the standard-json output. More information can be found in the `Solidity Compiler `__ docs. @@ -553,23 +558,26 @@ To inline the source code directly in the manifest, use ``inline_source()`` or ` .. note:: - ``owned_compiler_output.json`` below is expected to be the standard-json output generated by the solidity compiler as described `here `_. The output must contain the ``abi`` and ``bytecode`` objects from compilation. + ``output_v3.json`` below is expected to be the standard-json output generated by the solidity compiler as described `here `_. The output must contain the ``abi`` and ``bytecode`` objects from compilation. .. doctest:: >>> import json - >>> from ethpm import ASSETS_DIR - >>> owned_dir = ASSETS_DIR / "owned" / "contracts" - >>> owned_contract_source = owned_dir / "Owned.sol" - >>> compiler_output = json.loads((ASSETS_DIR / "owned" / "owned_compiler_output.json").read_text())['contracts'] + >>> from ethpm import ASSETS_DIR, ETHPM_SPEC_DIR + >>> owned_dir = ETHPM_SPEC_DIR / "examples" / "owned" / "contracts" + >>> compiler_output = json.loads((ASSETS_DIR / "owned" / "output_v3.json").read_text())['contracts'] >>> expected_manifest = { - ... "package_name": "owned", + ... "name": "owned", ... "version": "1.0.0", - ... "manifest_version": "2", + ... "manifest": "ethpm/3", ... "sources": { - ... "./Owned.sol": """pragma solidity ^0.4.24;\n\ncontract Owned {\n address""" - ... """ owner;\n \n modifier onlyOwner { require(msg.sender == owner); _; }\n\n """ - ... """constructor() public {\n owner = msg.sender;\n }\n}""" + ... "./Owned.sol": { + ... "content": """// SPDX-License-Identifier: MIT\npragma solidity ^0.6.8;\n\ncontract Owned """ + ... """{\n address owner;\n \n modifier onlyOwner { require(msg.sender == owner); _; }""" + ... """\n\n constructor() public {\n owner = msg.sender;\n }\n}""", + ... "type": "solidity", + ... "installPath": "./Owned.sol" + ... } ... } ... } >>> # With `inline_source()` @@ -592,14 +600,22 @@ To include the source as a content-addressed URI, ``Py-EthPM`` can pin your sour .. doctest:: + >>> import json + >>> from ethpm import ASSETS_DIR, ETHPM_SPEC_DIR >>> from ethpm.backends.ipfs import get_ipfs_backend + >>> owned_dir = ETHPM_SPEC_DIR / "examples" / "owned" / "contracts" + >>> compiler_output = json.loads((ASSETS_DIR / "owned" / "output_v3.json").read_text())['contracts'] >>> ipfs_backend = get_ipfs_backend() >>> expected_manifest = { - ... "package_name": "owned", + ... "name": "owned", ... "version": "1.0.0", - ... "manifest_version": "2", + ... "manifest": "ethpm/3", ... "sources": { - ... "./Owned.sol": "ipfs://Qme4otpS88NV8yQi8TfTP89EsQC5bko3F5N1yhRoi6cwGV" + ... "./Owned.sol": { + ... "installPath": "./Owned.sol", + ... "type": "solidity", + ... "urls": ["ipfs://QmU8QUSt56ZoBDJgjjXvAZEPro9LmK1m2gjVG5Q4s9x29W"] + ... } ... } ... } >>> # With `pin_source()` @@ -634,7 +650,9 @@ To add a contract type compiler: Optional[bool], contract_type: Optional[bool], deployment_bytecode: Optional[bool], - natspec: Optional[bool], + devdoc: Optional[bool], + userdoc: Optional[bool], + source_id: Optional[bool], runtime_bytecode: Optional[bool] ), ..., @@ -645,15 +663,21 @@ The default behavior of the manifest builder's ``contract_type()`` function is t .. doctest:: >>> expected_manifest = { - ... 'package_name': 'owned', - ... 'manifest_version': '2', + ... 'name': 'owned', + ... 'manifest': 'ethpm/3', ... 'version': '1.0.0', - ... 'contract_types': { + ... 'compilers': [ + ... {'name': 'solc', 'version': '0.6.8+commit.0bbfe453', 'settings': {'optimize': True}, 'contractTypes': ['Owned']} + ... ], + ... 'contractTypes': { ... 'Owned': { - ... 'abi': [{'inputs': [], 'payable': False, 'stateMutability': 'nonpayable', 'type': 'constructor'}], - ... 'deployment_bytecode': { - ... 'bytecode': '0x6080604052348015600f57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603580605d6000396000f3006080604052600080fd00a165627a7a72305820d6ab9e295aa1d1adb0fca69ce42c2c73e991afe290852e8247a208a78b352ff00029' - ... } + ... 'abi': [{'inputs': [], 'stateMutability': 'nonpayable', 'type': 'constructor'}], + ... 'deploymentBytecode': { + ... 'bytecode': '0x6080604052348015600f57600080fd5b50600080546001600160a01b03191633179055603f80602f6000396000f3fe6080604052600080fdfea26469706673582212208cbf6c3ccde7837026b3ec9660a0e95f1dbee0ce985f6879d7bc7e422519cc7564736f6c63430006080033' + ... }, + ... 'sourceId': 'Owned.sol', + ... 'devdoc': {'methods': {}}, + ... 'userdoc': {'methods': {}} ... } ... } ... } @@ -668,18 +692,20 @@ To select only certain contract type data to be included in your manifest, provi - ``abi`` - ``compiler`` - ``deployment_bytecode`` - - ``natspec`` - ``runtime_bytecode`` + - ``devdoc`` + - ``userdoc`` + - ``source_id`` .. doctest:: >>> expected_manifest = { - ... 'package_name': 'owned', - ... 'manifest_version': '2', + ... 'name': 'owned', + ... 'manifest': 'ethpm/3', ... 'version': '1.0.0', - ... 'contract_types': { + ... 'contractTypes': { ... 'Owned': { - ... 'abi': [{'inputs': [], 'payable': False, 'stateMutability': 'nonpayable', 'type': 'constructor'}], + ... 'abi': [{'inputs': [], 'stateMutability': 'nonpayable', 'type': 'constructor'}], ... } ... } ... } @@ -689,18 +715,18 @@ To select only certain contract type data to be included in your manifest, provi ... ) >>> assert expected_manifest == built_manifest -If you would like to alias your contract type, provide the desired alias as a kwarg. This will automatically include the original contract type in a ``contract_type`` field. Unless specific contract type fields are provided as kwargs, ``contract_type`` will stil default to including all availabe contract type data found in the compiler output. +If you would like to alias your contract type, provide the desired alias as a kwarg. This will automatically include the original contract type in a ``contractType`` field. Unless specific contract type fields are provided as kwargs, ``contractType`` will stil default to including all availabe contract type data found in the compiler output. .. doctest:: >>> expected_manifest = { - ... 'package_name': 'owned', - ... 'manifest_version': '2', + ... 'name': 'owned', + ... 'manifest': 'ethpm/3', ... 'version': '1.0.0', - ... 'contract_types': { + ... 'contractTypes': { ... 'OwnedAlias': { - ... 'abi': [{'inputs': [], 'payable': False, 'stateMutability': 'nonpayable', 'type': 'constructor'}], - ... 'contract_type': 'Owned' + ... 'abi': [{'inputs': [], 'stateMutability': 'nonpayable', 'type': 'constructor'}], + ... 'contractType': 'Owned' ... } ... } ... } @@ -744,13 +770,13 @@ This is the simplest builder function for adding a deployment to a manifest. All .. doctest:: >>> expected_manifest = { - ... 'package_name': 'owned', - ... 'manifest_version': '2', + ... 'name': 'owned', + ... 'manifest': 'ethpm/3', ... 'version': '1.0.0', ... 'deployments': { ... 'blockchain://1234567890123456789012345678901234567890123456789012345678901234/block/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef': { ... 'Owned': { - ... 'contract_type': 'Owned', + ... 'contractType': 'Owned', ... 'address': '0x4F5B11C860B37B68De6d14FB7e7b5f18A9a1BD00', ... } ... } @@ -796,7 +822,7 @@ This builder function simplifies adding the same contract type deployment across manifest = build( package_name("escrow"), version("1.0.0"), - manifest_version("2"), + manifest_version("ethpm/3"), owned_type( block_uri='blockchain://abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd/block/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', address=owned_testnet_address, @@ -839,10 +865,10 @@ To add a build dependency to your manifest, just provide the package's name and .. doctest:: >>> expected_manifest = { - ... 'package_name': 'owned', - ... 'manifest_version': '2', + ... 'name': 'owned', + ... 'manifest': 'ethpm/3', ... 'version': '1.0.0', - ... 'build_dependencies': { + ... 'buildDependencies': { ... 'owned': 'ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW', ... } ... } @@ -865,6 +891,6 @@ To validate a manifest >>> from ethpm.tools.checker import check_manifest - >>> basic_manifest = {"package_name": "example", "version": "1.0.0", "manifest_version": "2"} + >>> basic_manifest = {"name": "example", "version": "1.0.0", "manifest": "ethpm/3"} >>> check_manifest(basic_manifest) - {'meta': "Manifest missing a suggested 'meta' field.", 'sources': 'Manifest is missing a sources field, which defines a source tree that should comprise the full source tree necessary to recompile the contracts contained in this release.', 'contract_types': "Manifest does not contain any 'contract_types'. Packages should only include contract types that can be found in the source files for this package. Packages should not include contract types from dependencies. Packages should not include abstract contracts in the contract types section of a release."} + {'meta': "Manifest missing a suggested 'meta' field.", 'sources': 'Manifest is missing a sources field, which defines a source tree that should comprise the full source tree necessary to recompile the contracts contained in this release.', 'contractTypes': "Manifest does not contain any 'contractTypes'. Packages should only include contract types that can be found in the source files for this package. Packages should not include contract types from dependencies. Packages should not include abstract contracts in the contract types section of a release.", 'compilers': 'Manifest is missing a suggested `compilers` field.'} diff --git a/docs/web3.pm.rst b/docs/web3.pm.rst index 8c5d7f877a..289859ce9d 100644 --- a/docs/web3.pm.rst +++ b/docs/web3.pm.rst @@ -4,8 +4,7 @@ Package Manager API The ``web3.pm`` object exposes methods to interact with Packages as defined by `ERC 1123 `_. -- To learn more about the EthPM spec, visit the `documentation `__. -- To learn more about the Py-EthPM library used in this module, visit the `documentation `__. +- To learn more about the EthPM spec, visit the `spec `__ or the `documentation `__. .. WARNING:: diff --git a/ethpm/__init__.py b/ethpm/__init__.py index 099708a2fa..e1dfd4ada9 100644 --- a/ethpm/__init__.py +++ b/ethpm/__init__.py @@ -3,7 +3,7 @@ ETHPM_DIR = Path(__file__).parent ASSETS_DIR = ETHPM_DIR / "assets" -SPEC_DIR: Path = ASSETS_DIR / "spec" +ETHPM_SPEC_DIR: Path = ETHPM_DIR / "ethpm-spec" from .package import Package # noqa: F401 from .backends.registry import RegistryURI # noqa: F401 diff --git a/ethpm/_utils/contract.py b/ethpm/_utils/contract.py index 33751a1f2b..5e8d2ccf3f 100644 --- a/ethpm/_utils/contract.py +++ b/ethpm/_utils/contract.py @@ -20,16 +20,16 @@ def generate_contract_factory_kwargs( if "abi" in contract_data: yield "abi", contract_data["abi"] - if "deployment_bytecode" in contract_data: - yield "bytecode", contract_data["deployment_bytecode"]["bytecode"] - if "link_references" in contract_data["deployment_bytecode"]: + if "deploymentBytecode" in contract_data: + yield "bytecode", contract_data["deploymentBytecode"]["bytecode"] + if "linkReferences" in contract_data["deploymentBytecode"]: yield "unlinked_references", tuple( - contract_data["deployment_bytecode"]["link_references"] + contract_data["deploymentBytecode"]["linkReferences"] ) - if "runtime_bytecode" in contract_data: - yield "bytecode_runtime", contract_data["runtime_bytecode"]["bytecode"] - if "link_references" in contract_data["runtime_bytecode"]: + if "runtimeBytecode" in contract_data: + yield "bytecode_runtime", contract_data["runtimeBytecode"]["bytecode"] + if "linkReferences" in contract_data["runtimeBytecode"]: yield "linked_references", tuple( - contract_data["runtime_bytecode"]["link_references"] + contract_data["runtimeBytecode"]["linkReferences"] ) diff --git a/ethpm/_utils/deployments.py b/ethpm/_utils/deployments.py index 7cea8f3abf..3749d54e37 100644 --- a/ethpm/_utils/deployments.py +++ b/ethpm/_utils/deployments.py @@ -32,12 +32,12 @@ def get_linked_deployments(deployments: Dict[str, Any]) -> Dict[str, Any]: linked_deployments = { dep: data for dep, data in deployments.items() - if get_in(("runtime_bytecode", "link_dependencies"), data) + if get_in(("runtimeBytecode", "linkDependencies"), data) } for deployment, data in linked_deployments.items(): if any( link_dep["value"] == deployment - for link_dep in data["runtime_bytecode"]["link_dependencies"] + for link_dep in data["runtimeBytecode"]["linkDependencies"] ): raise BytecodeLinkingError( f"Link dependency found in {deployment} deployment that references its " diff --git a/ethpm/_utils/mappings.py b/ethpm/_utils/mappings.py deleted file mode 100644 index 5e8906ed32..0000000000 --- a/ethpm/_utils/mappings.py +++ /dev/null @@ -1,24 +0,0 @@ -import itertools -from typing import ( - Any, - Dict, - Iterable, - Tuple, -) - -from eth_utils import ( - is_dict, - to_dict, -) - - -@to_dict -def deep_merge_dicts(*dicts: Dict[Any, Any]) -> Iterable[Tuple[Any, Any]]: - for key in set(itertools.chain(*(_dict.keys() for _dict in dicts))): - values = tuple((_dict[key] for _dict in dicts if key in _dict)) - if is_dict(values[-1]): - yield key, deep_merge_dicts( - *(_dict[key] for _dict in dicts if is_dict(_dict.get(key))) - ) - else: - yield key, values[-1] diff --git a/ethpm/assets/ens/1.0.1.json b/ethpm/assets/ens/1.0.1.json deleted file mode 100644 index 247c9ee67e..0000000000 --- a/ethpm/assets/ens/1.0.1.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"ENS":{"abi":[{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setSubnodeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"ttl","type":"uint64"}],"name":"setTTL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"ttl","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"resolver","type":"address"}],"name":"setResolver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"label","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"resolver","type":"address"}],"name":"NewResolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"ttl","type":"uint64"}],"name":"NewTTL","type":"event"}],"deployment_bytecode":{"bytecode":"0x"},"runtime_bytecode":{"bytecode":"0x"}},"ENSRegistry":{"abi":[{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setSubnodeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"ttl","type":"uint64"}],"name":"setTTL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"ttl","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"resolver","type":"address"}],"name":"setResolver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"label","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"resolver","type":"address"}],"name":"NewResolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"ttl","type":"uint64"}],"name":"NewTTL","type":"event"}],"deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b50336000808060010260001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109778061007b6000396000f300608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630178b8bf1461008857806302571be3146100f957806306ab59231461016a57806314ab9038146101c957806316a25cbd1461020e5780631896f70a146102675780635b0fc9c3146102b8575b600080fd5b34801561009457600080fd5b506100b76004803603810190808035600019169060200190929190505050610309565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561010557600080fd5b506101286004803603810190808035600019169060200190929190505050610350565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017657600080fd5b506101c760048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610397565b005b3480156101d557600080fd5b5061020c6004803603810190808035600019169060200190929190803567ffffffffffffffff16906020019092919050505061057d565b005b34801561021a57600080fd5b5061023d600480360381019080803560001916906020019092919050505061068e565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561027357600080fd5b506102b66004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c9565b005b3480156102c457600080fd5b506103076004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080a565b005b6000806000836000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000833373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561041157600080fd5b84846040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561047e5780518252602082019150602081019050602083039250610459565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150836000191685600019167fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a382600080846000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156105f557600080fd5b82600019167f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6000806000836000191660001916815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561074157600080fd5b82600019167f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561088257600080fd5b82600019167fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a7230582056008d06b44e6cfd9a8e4b8a63f7ac2650d3855c0ffe3ca9765a7f80d7bb5ec60029"},"runtime_bytecode":{"bytecode":"0x608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630178b8bf1461008857806302571be3146100f957806306ab59231461016a57806314ab9038146101c957806316a25cbd1461020e5780631896f70a146102675780635b0fc9c3146102b8575b600080fd5b34801561009457600080fd5b506100b76004803603810190808035600019169060200190929190505050610309565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561010557600080fd5b506101286004803603810190808035600019169060200190929190505050610350565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017657600080fd5b506101c760048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610397565b005b3480156101d557600080fd5b5061020c6004803603810190808035600019169060200190929190803567ffffffffffffffff16906020019092919050505061057d565b005b34801561021a57600080fd5b5061023d600480360381019080803560001916906020019092919050505061068e565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561027357600080fd5b506102b66004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c9565b005b3480156102c457600080fd5b506103076004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080a565b005b6000806000836000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000833373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561041157600080fd5b84846040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561047e5780518252602082019150602081019050602083039250610459565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150836000191685600019167fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a382600080846000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156105f557600080fd5b82600019167f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6000806000836000191660001916815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561074157600080fd5b82600019167f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561088257600080fd5b82600019167fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a7230582056008d06b44e6cfd9a8e4b8a63f7ac2650d3855c0ffe3ca9765a7f80d7bb5ec60029"}},"FIFSRegistrar":{"abi":[{"constant":false,"inputs":[{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"register","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"ensAddr","type":"address"},{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b506040516040806104268339810180604052810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018160001916905550505061038d806100996000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063d22057a914610046575b600080fd5b34801561005257600080fd5b506100956004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610097565b005b8160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3600154846040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156101465780518252602082019150602081019050602083039250610121565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b505050506040513d60208110156101f757600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16148061025a57503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561026557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015486866040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b50505050505050505600a165627a7a72305820ec5a26df47d3f55c9f8759e24517f00718f8d416777fbb957f5f28957627add60029"},"runtime_bytecode":{"bytecode":"0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063d22057a914610046575b600080fd5b34801561005257600080fd5b506100956004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610097565b005b8160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3600154846040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156101465780518252602082019150602081019050602083039250610121565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b505050506040513d60208110156101f757600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16148061025a57503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561026557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015486866040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b50505050505050505600a165627a7a72305820ec5a26df47d3f55c9f8759e24517f00718f8d416777fbb957f5f28957627add60029"}},"PublicResolver":{"abi":[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"key","type":"string"},{"name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"},{"name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"name":"contentType","type":"uint256"},{"name":"data","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"x","type":"bytes32"},{"name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"content","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"addr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"},{"name":"key","type":"string"}],"name":"text","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"contentType","type":"uint256"},{"name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"hash","type":"bytes"}],"name":"setMultihash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"hash","type":"bytes32"}],"name":"setContent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"name":"x","type":"bytes32"},{"name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"addr","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"multihash","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"ensAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"hash","type":"bytes32"}],"name":"ContentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"x","type":"bytes32"},{"indexed":false,"name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"indexedKey","type":"string"},{"indexed":false,"name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"hash","type":"bytes"}],"name":"MultihashChanged","type":"event"}],"deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b50604051602080611f8083398101806040528101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611efd806100836000396000f3006080604052600436106100db576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146100e057806310f13a8c146101445780632203ab561461020157806329cd62ea146102bc5780632dff6941146103095780633b3b57de1461035657806359d1d43c146103c7578063623195b0146104b7578063691f34311461053857806377372213146105e2578063aa4cb54714610659578063c3d014d6146106d0578063c86902331461070f578063d5fa2b001461076b578063e89401a1146107bc575b600080fd5b3480156100ec57600080fd5b5061012a60048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610866565b604051808215151515815260200191505060405180910390f35b34801561015057600080fd5b506101ff6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bc0565b005b34801561020d57600080fd5b5061023a600480360381019080803560001916906020019092919080359060200190929190505050610e7d565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610280578082015181840152602081019050610265565b50505050905090810190601f1680156102ad5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156102c857600080fd5b50610307600480360381019080803560001916906020019092919080356000191690602001909291908035600019169060200190929190505050610fc0565b005b34801561031557600080fd5b506103386004803603810190808035600019169060200190929190505050611185565b60405180826000191660001916815260200191505060405180910390f35b34801561036257600080fd5b5061038560048036038101908080356000191690602001909291905050506111ad565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d357600080fd5b5061043c6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111f5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047c578082015181840152602081019050610461565b50505050905090810190601f1680156104a95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104c357600080fd5b50610536600480360381019080803560001916906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061131f565b005b34801561054457600080fd5b5061056760048036038101908080356000191690602001909291905050506114bc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105a757808201518184015260208101905061058c565b50505050905090810190601f1680156105d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105ee57600080fd5b506106576004803603810190808035600019169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061157c565b005b34801561066557600080fd5b506106ce6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611762565b005b3480156106dc57600080fd5b5061070d60048036038101908080356000191690602001909291908035600019169060200190929190505050611948565b005b34801561071b57600080fd5b5061073e6004803603810190808035600019169060200190929190505050611ac5565b60405180836000191660001916815260200182600019166000191681526020019250505060405180910390f35b34801561077757600080fd5b506107ba6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b15565b005b3480156107c857600080fd5b506107eb6004803603810190808035600019169060200190929190505050611cec565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082b578082015181840152602081019050610810565b50505050905090810190601f1680156108585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000633b3b57de7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610937575063d8389dc57c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a2575063691f34317c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0d5750632203ab567c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a78575063c86902337c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae357506359d1d43c7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b4e575063e89401a17c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bb957506301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b505050506040513d6020811015610c9a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515610ccd57600080fd5b81600160008660001916600019168152602001908152602001600020600501846040518082805190602001908083835b602083101515610d225780518252602082019150602081019050602083039250610cfd565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080519060200190610d68929190611dac565b5083600019167fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508485604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610dd5578082015181840152602081019050610dba565b50505050905090810190601f168015610e025780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610e3b578082015181840152602081019050610e20565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250505050565b6000606060006001600086600019166000191681526020019081526020016000209050600192505b8383111515610fb357600084841614158015610eea57506000816006016000858152602001908152602001600020805460018160011615610100020316600290049050115b15610fa4578060060160008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f985780601f10610f6d57610100808354040283529160200191610f98565b820191906000526020600020905b815481529060010190602001808311610f7b57829003601f168201915b50505050509150610fb8565b6001839060020a029250610ea5565b600092505b509250929050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561107057600080fd5b505af1158015611084573d6000803e3d6000fd5b505050506040513d602081101561109a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156110cd57600080fd5b6040805190810160405280846000191681526020018360001916815250600160008660001916600019168152602001908152602001600020600301600082015181600001906000191690556020820151816001019060001916905590505083600019167f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46848460405180836000191660001916815260200182600019166000191681526020019250505060405180910390a250505050565b6000600160008360001916600019168152602001908152602001600020600101549050919050565b600060016000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6060600160008460001916600019168152602001908152602001600020600501826040518082805190602001908083835b60208310151561124b5780518252602082019150602081019050602083039250611226565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113125780601f106112e757610100808354040283529160200191611312565b820191906000526020600020905b8154815290600101906020018083116112f557829003601f168201915b5050505050905092915050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156113cf57600080fd5b505af11580156113e3573d6000803e3d6000fd5b505050506040513d60208110156113f957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561142c57600080fd5b600083600185031614151561144057600080fd5b8160016000866000191660001916815260200190815260200160002060060160008581526020019081526020016000209080519060200190611483929190611e2c565b508284600019167faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a350505050565b60606001600083600019166000191681526020019081526020016000206002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115705780601f1061154557610100808354040283529160200191611570565b820191906000526020600020905b81548152906001019060200180831161155357829003601f168201915b50505050509050919050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561162c57600080fd5b505af1158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561168957600080fd5b8160016000856000191660001916815260200190815260200160002060020190805190602001906116bb929190611dac565b5082600019167fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7836040518080602001828103825283818151815260200191508051906020019080838360005b83811015611723578082015181840152602081019050611708565b50505050905090810190601f1680156117505780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561181257600080fd5b505af1158015611826573d6000803e3d6000fd5b505050506040513d602081101561183c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561186f57600080fd5b8160016000856000191660001916815260200190815260200160002060070190805190602001906118a1929190611e2c565b5082600019167fc0b0fc07269fc2749adada3221c095a1d2187b2d075b51c915857b520f3a5021836040518080602001828103825283818151815260200191508051906020019080838360005b838110156119095780820151818401526020810190506118ee565b50505050905090810190601f1680156119365780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611a5557600080fd5b81600160008560001916600019168152602001908152602001600020600101816000191690555082600019167f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc8360405180826000191660001916815260200191505060405180910390a2505050565b600080600160008460001916600019168152602001908152602001600020600301600001546001600085600019166000191681526020019081526020016000206003016001015491509150915091565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611bc557600080fd5b505af1158015611bd9573d6000803e3d6000fd5b505050506040513d6020811015611bef57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611c2257600080fd5b8160016000856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600019167f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd283604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2505050565b60606001600083600019166000191681526020019081526020016000206007018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611da05780601f10611d7557610100808354040283529160200191611da0565b820191906000526020600020905b815481529060010190602001808311611d8357829003601f168201915b50505050509050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ded57805160ff1916838001178555611e1b565b82800160010185558215611e1b579182015b82811115611e1a578251825591602001919060010190611dff565b5b509050611e289190611eac565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e6d57805160ff1916838001178555611e9b565b82800160010185558215611e9b579182015b82811115611e9a578251825591602001919060010190611e7f565b5b509050611ea89190611eac565b5090565b611ece91905b80821115611eca576000816000905550600101611eb2565b5090565b905600a165627a7a7230582080ff20c780d2aa7e5b83782c955f590f1b85400bdf9aa54b0f4ca4dbca9ed55a0029"},"runtime_bytecode":{"bytecode":"0x6080604052600436106100db576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146100e057806310f13a8c146101445780632203ab561461020157806329cd62ea146102bc5780632dff6941146103095780633b3b57de1461035657806359d1d43c146103c7578063623195b0146104b7578063691f34311461053857806377372213146105e2578063aa4cb54714610659578063c3d014d6146106d0578063c86902331461070f578063d5fa2b001461076b578063e89401a1146107bc575b600080fd5b3480156100ec57600080fd5b5061012a60048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610866565b604051808215151515815260200191505060405180910390f35b34801561015057600080fd5b506101ff6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bc0565b005b34801561020d57600080fd5b5061023a600480360381019080803560001916906020019092919080359060200190929190505050610e7d565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610280578082015181840152602081019050610265565b50505050905090810190601f1680156102ad5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156102c857600080fd5b50610307600480360381019080803560001916906020019092919080356000191690602001909291908035600019169060200190929190505050610fc0565b005b34801561031557600080fd5b506103386004803603810190808035600019169060200190929190505050611185565b60405180826000191660001916815260200191505060405180910390f35b34801561036257600080fd5b5061038560048036038101908080356000191690602001909291905050506111ad565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d357600080fd5b5061043c6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111f5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047c578082015181840152602081019050610461565b50505050905090810190601f1680156104a95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104c357600080fd5b50610536600480360381019080803560001916906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061131f565b005b34801561054457600080fd5b5061056760048036038101908080356000191690602001909291905050506114bc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105a757808201518184015260208101905061058c565b50505050905090810190601f1680156105d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105ee57600080fd5b506106576004803603810190808035600019169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061157c565b005b34801561066557600080fd5b506106ce6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611762565b005b3480156106dc57600080fd5b5061070d60048036038101908080356000191690602001909291908035600019169060200190929190505050611948565b005b34801561071b57600080fd5b5061073e6004803603810190808035600019169060200190929190505050611ac5565b60405180836000191660001916815260200182600019166000191681526020019250505060405180910390f35b34801561077757600080fd5b506107ba6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b15565b005b3480156107c857600080fd5b506107eb6004803603810190808035600019169060200190929190505050611cec565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082b578082015181840152602081019050610810565b50505050905090810190601f1680156108585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000633b3b57de7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610937575063d8389dc57c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a2575063691f34317c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0d5750632203ab567c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a78575063c86902337c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae357506359d1d43c7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b4e575063e89401a17c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bb957506301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b505050506040513d6020811015610c9a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515610ccd57600080fd5b81600160008660001916600019168152602001908152602001600020600501846040518082805190602001908083835b602083101515610d225780518252602082019150602081019050602083039250610cfd565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080519060200190610d68929190611dac565b5083600019167fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508485604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610dd5578082015181840152602081019050610dba565b50505050905090810190601f168015610e025780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610e3b578082015181840152602081019050610e20565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250505050565b6000606060006001600086600019166000191681526020019081526020016000209050600192505b8383111515610fb357600084841614158015610eea57506000816006016000858152602001908152602001600020805460018160011615610100020316600290049050115b15610fa4578060060160008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f985780601f10610f6d57610100808354040283529160200191610f98565b820191906000526020600020905b815481529060010190602001808311610f7b57829003601f168201915b50505050509150610fb8565b6001839060020a029250610ea5565b600092505b509250929050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561107057600080fd5b505af1158015611084573d6000803e3d6000fd5b505050506040513d602081101561109a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156110cd57600080fd5b6040805190810160405280846000191681526020018360001916815250600160008660001916600019168152602001908152602001600020600301600082015181600001906000191690556020820151816001019060001916905590505083600019167f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46848460405180836000191660001916815260200182600019166000191681526020019250505060405180910390a250505050565b6000600160008360001916600019168152602001908152602001600020600101549050919050565b600060016000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6060600160008460001916600019168152602001908152602001600020600501826040518082805190602001908083835b60208310151561124b5780518252602082019150602081019050602083039250611226565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113125780601f106112e757610100808354040283529160200191611312565b820191906000526020600020905b8154815290600101906020018083116112f557829003601f168201915b5050505050905092915050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156113cf57600080fd5b505af11580156113e3573d6000803e3d6000fd5b505050506040513d60208110156113f957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561142c57600080fd5b600083600185031614151561144057600080fd5b8160016000866000191660001916815260200190815260200160002060060160008581526020019081526020016000209080519060200190611483929190611e2c565b508284600019167faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a350505050565b60606001600083600019166000191681526020019081526020016000206002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115705780601f1061154557610100808354040283529160200191611570565b820191906000526020600020905b81548152906001019060200180831161155357829003601f168201915b50505050509050919050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561162c57600080fd5b505af1158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561168957600080fd5b8160016000856000191660001916815260200190815260200160002060020190805190602001906116bb929190611dac565b5082600019167fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7836040518080602001828103825283818151815260200191508051906020019080838360005b83811015611723578082015181840152602081019050611708565b50505050905090810190601f1680156117505780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561181257600080fd5b505af1158015611826573d6000803e3d6000fd5b505050506040513d602081101561183c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561186f57600080fd5b8160016000856000191660001916815260200190815260200160002060070190805190602001906118a1929190611e2c565b5082600019167fc0b0fc07269fc2749adada3221c095a1d2187b2d075b51c915857b520f3a5021836040518080602001828103825283818151815260200191508051906020019080838360005b838110156119095780820151818401526020810190506118ee565b50505050905090810190601f1680156119365780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611a5557600080fd5b81600160008560001916600019168152602001908152602001600020600101816000191690555082600019167f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc8360405180826000191660001916815260200191505060405180910390a2505050565b600080600160008460001916600019168152602001908152602001600020600301600001546001600085600019166000191681526020019081526020016000206003016001015491509150915091565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611bc557600080fd5b505af1158015611bd9573d6000803e3d6000fd5b505050506040513d6020811015611bef57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611c2257600080fd5b8160016000856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600019167f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd283604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2505050565b60606001600083600019166000191681526020019081526020016000206007018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611da05780601f10611d7557610100808354040283529160200191611da0565b820191906000526020600020905b815481529060010190602001808311611d8357829003601f168201915b50505050509050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ded57805160ff1916838001178555611e1b565b82800160010185558215611e1b579182015b82811115611e1a578251825591602001919060010190611dff565b5b509050611e289190611eac565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e6d57805160ff1916838001178555611e9b565b82800160010185558215611e9b579182015b82811115611e9a578251825591602001919060010190611e7f565b5b509050611ea89190611eac565b5090565b611ece91905b80821115611eca576000816000905550600101611eb2565b5090565b905600a165627a7a7230582080ff20c780d2aa7e5b83782c955f590f1b85400bdf9aa54b0f4ca4dbca9ed55a0029"}},"TestRegistrar":{"abi":[{"constant":true,"inputs":[],"name":"ens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"expiryTimes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"register","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rootNode","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"ensAddr","type":"address"},{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b506040516040806103d78339810180604052810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018160001916905550505061033e806100996000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633f15457f14610067578063af9f26e4146100be578063d22057a914610103578063faff50a814610154575b600080fd5b34801561007357600080fd5b5061007c610187565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100ca57600080fd5b506100ed60048036038101908080356000191690602001909291905050506101ac565b6040518082815260200191505060405180910390f35b34801561010f57600080fd5b506101526004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101c4565b005b34801561016057600080fd5b5061016961030c565b60405180826000191660001916815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b42600260008460001916600019168152602001908152602001600020541015156101ed57600080fd5b6224ea004201600260008460001916600019168152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015484846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156102f057600080fd5b505af1158015610304573d6000803e3d6000fd5b505050505050565b600154815600a165627a7a723058202e62cf216496a54f98da0d79120cfce29a7e9f3f024d4be0e82b3abcc704d8a60029"},"runtime_bytecode":{"bytecode":"0x608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633f15457f14610067578063af9f26e4146100be578063d22057a914610103578063faff50a814610154575b600080fd5b34801561007357600080fd5b5061007c610187565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100ca57600080fd5b506100ed60048036038101908080356000191690602001909291905050506101ac565b6040518082815260200191505060405180910390f35b34801561010f57600080fd5b506101526004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101c4565b005b34801561016057600080fd5b5061016961030c565b60405180826000191660001916815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b42600260008460001916600019168152602001908152602001600020541015156101ed57600080fd5b6224ea004201600260008460001916600019168152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015484846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156102f057600080fd5b505af1158015610304573d6000803e3d6000fd5b505050505050565b600154815600a165627a7a723058202e62cf216496a54f98da0d79120cfce29a7e9f3f024d4be0e82b3abcc704d8a60029"}}},"manifest_version":"2","package_name":"ens","sources":{"ENS.sol":"pragma solidity ^0.4.24;\n\ninterface ENS {\n\n // Logged when the owner of a node assigns a new owner to a subnode.\n event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);\n\n // Logged when the owner of a node transfers ownership to a new account.\n event Transfer(bytes32 indexed node, address owner);\n\n // Logged when the resolver for a node changes.\n event NewResolver(bytes32 indexed node, address resolver);\n\n // Logged when the TTL of a node changes\n event NewTTL(bytes32 indexed node, uint64 ttl);\n\n\n function setSubnodeOwner(bytes32 node, bytes32 label, address owner) public;\n function setResolver(bytes32 node, address resolver) public;\n function setOwner(bytes32 node, address owner) public;\n function setTTL(bytes32 node, uint64 ttl) public;\n function owner(bytes32 node) public view returns (address);\n function resolver(bytes32 node) public view returns (address);\n function ttl(bytes32 node) public view returns (uint64);\n\n}\n","ENSRegistry.sol":"pragma solidity ^0.4.24;\n\nimport \"./ENS.sol\";\n\n/**\n * The ENS registry contract.\n */\ncontract ENSRegistry is ENS {\n struct Record {\n address owner;\n address resolver;\n uint64 ttl;\n }\n\n mapping (bytes32 => Record) records;\n\n // Permits modifications only by the owner of the specified node.\n modifier only_owner(bytes32 node) {\n require(records[node].owner == msg.sender);\n _;\n }\n\n /**\n * @dev Constructs a new ENS registrar.\n */\n constructor() public {\n records[0x0].owner = msg.sender;\n }\n\n /**\n * @dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\n * @param node The node to transfer ownership of.\n * @param owner The address of the new owner.\n */\n function setOwner(bytes32 node, address owner) public only_owner(node) {\n emit Transfer(node, owner);\n records[node].owner = owner;\n }\n\n /**\n * @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\n * @param node The parent node.\n * @param label The hash of the label specifying the subnode.\n * @param owner The address of the new owner.\n */\n function setSubnodeOwner(bytes32 node, bytes32 label, address owner) public only_owner(node) {\n bytes32 subnode = keccak256(abi.encodePacked(node, label));\n emit NewOwner(node, label, owner);\n records[subnode].owner = owner;\n }\n\n /**\n * @dev Sets the resolver address for the specified node.\n * @param node The node to update.\n * @param resolver The address of the resolver.\n */\n function setResolver(bytes32 node, address resolver) public only_owner(node) {\n emit NewResolver(node, resolver); \n records[node].resolver = resolver;\n }\n\n /**\n * @dev Sets the TTL for the specified node.\n * @param node The node to update.\n * @param ttl The TTL in seconds.\n */\n function setTTL(bytes32 node, uint64 ttl) public only_owner(node) {\n emit NewTTL(node, ttl);\n records[node].ttl = ttl;\n }\n\n /**\n * @dev Returns the address that owns the specified node.\n * @param node The specified node.\n * @return address of the owner.\n */\n function owner(bytes32 node) public view returns (address) {\n return records[node].owner;\n }\n\n /**\n * @dev Returns the address of the resolver for the specified node.\n * @param node The specified node.\n * @return address of the resolver.\n */\n function resolver(bytes32 node) public view returns (address) {\n return records[node].resolver;\n }\n\n /**\n * @dev Returns the TTL of a node, and any records associated with it.\n * @param node The specified node.\n * @return ttl of the node.\n */\n function ttl(bytes32 node) public view returns (uint64) {\n return records[node].ttl;\n }\n\n}\n","FIFSRegistrar.sol":"pragma solidity ^0.4.24;\n\nimport \"./ENS.sol\";\n\n/**\n * A registrar that allocates subdomains to the first person to claim them.\n */\ncontract FIFSRegistrar {\n ENS ens;\n bytes32 rootNode;\n\n modifier only_owner(bytes32 label) {\n address currentOwner = ens.owner(keccak256(abi.encodePacked(rootNode, label)));\n require(currentOwner == 0 || currentOwner == msg.sender);\n _;\n }\n\n /**\n * Constructor.\n * @param ensAddr The address of the ENS registry.\n * @param node The node that this registrar administers.\n */\n constructor(ENS ensAddr, bytes32 node) public {\n ens = ensAddr;\n rootNode = node;\n }\n\n /**\n * Register a name, or change the owner of an existing registration.\n * @param label The hash of the label to register.\n * @param owner The address of the new owner.\n */\n function register(bytes32 label, address owner) public only_owner(label) {\n ens.setSubnodeOwner(rootNode, label, owner);\n }\n}\n","PublicResolver.sol":"pragma solidity ^0.4.24;\n\nimport \"./ENS.sol\";\n\n/**\n * A simple resolver anyone can use; only allows the owner of a node to set its\n * address.\n */\ncontract PublicResolver {\n\n bytes4 constant INTERFACE_META_ID = 0x01ffc9a7;\n bytes4 constant ADDR_INTERFACE_ID = 0x3b3b57de;\n bytes4 constant CONTENT_INTERFACE_ID = 0xd8389dc5;\n bytes4 constant NAME_INTERFACE_ID = 0x691f3431;\n bytes4 constant ABI_INTERFACE_ID = 0x2203ab56;\n bytes4 constant PUBKEY_INTERFACE_ID = 0xc8690233;\n bytes4 constant TEXT_INTERFACE_ID = 0x59d1d43c;\n bytes4 constant MULTIHASH_INTERFACE_ID = 0xe89401a1;\n\n event AddrChanged(bytes32 indexed node, address a);\n event ContentChanged(bytes32 indexed node, bytes32 hash);\n event NameChanged(bytes32 indexed node, string name);\n event ABIChanged(bytes32 indexed node, uint256 indexed contentType);\n event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);\n event TextChanged(bytes32 indexed node, string indexedKey, string key);\n event MultihashChanged(bytes32 indexed node, bytes hash);\n\n struct PublicKey {\n bytes32 x;\n bytes32 y;\n }\n\n struct Record {\n address addr;\n bytes32 content;\n string name;\n PublicKey pubkey;\n mapping(string=>string) text;\n mapping(uint256=>bytes) abis;\n bytes multihash;\n }\n\n ENS ens;\n\n mapping (bytes32 => Record) records;\n\n modifier only_owner(bytes32 node) {\n require(ens.owner(node) == msg.sender);\n _;\n }\n\n /**\n * Constructor.\n * @param ensAddr The ENS registrar contract.\n */\n constructor(ENS ensAddr) public {\n ens = ensAddr;\n }\n\n /**\n * Sets the address associated with an ENS node.\n * May only be called by the owner of that node in the ENS registry.\n * @param node The node to update.\n * @param addr The address to set.\n */\n function setAddr(bytes32 node, address addr) public only_owner(node) {\n records[node].addr = addr;\n emit AddrChanged(node, addr);\n }\n\n /**\n * Sets the content hash associated with an ENS node.\n * May only be called by the owner of that node in the ENS registry.\n * Note that this resource type is not standardized, and will likely change\n * in future to a resource type based on multihash.\n * @param node The node to update.\n * @param hash The content hash to set\n */\n function setContent(bytes32 node, bytes32 hash) public only_owner(node) {\n records[node].content = hash;\n emit ContentChanged(node, hash);\n }\n\n /**\n * Sets the multihash associated with an ENS node.\n * May only be called by the owner of that node in the ENS registry.\n * @param node The node to update.\n * @param hash The multihash to set\n */\n function setMultihash(bytes32 node, bytes hash) public only_owner(node) {\n records[node].multihash = hash;\n emit MultihashChanged(node, hash);\n }\n \n /**\n * Sets the name associated with an ENS node, for reverse records.\n * May only be called by the owner of that node in the ENS registry.\n * @param node The node to update.\n * @param name The name to set.\n */\n function setName(bytes32 node, string name) public only_owner(node) {\n records[node].name = name;\n emit NameChanged(node, name);\n }\n\n /**\n * Sets the ABI associated with an ENS node.\n * Nodes may have one ABI of each content type. To remove an ABI, set it to\n * the empty string.\n * @param node The node to update.\n * @param contentType The content type of the ABI\n * @param data The ABI data.\n */\n function setABI(bytes32 node, uint256 contentType, bytes data) public only_owner(node) {\n // Content types must be powers of 2\n require(((contentType - 1) & contentType) == 0);\n \n records[node].abis[contentType] = data;\n emit ABIChanged(node, contentType);\n }\n \n /**\n * Sets the SECP256k1 public key associated with an ENS node.\n * @param node The ENS node to query\n * @param x the X coordinate of the curve point for the public key.\n * @param y the Y coordinate of the curve point for the public key.\n */\n function setPubkey(bytes32 node, bytes32 x, bytes32 y) public only_owner(node) {\n records[node].pubkey = PublicKey(x, y);\n emit PubkeyChanged(node, x, y);\n }\n\n /**\n * Sets the text data associated with an ENS node and key.\n * May only be called by the owner of that node in the ENS registry.\n * @param node The node to update.\n * @param key The key to set.\n * @param value The text data value to set.\n */\n function setText(bytes32 node, string key, string value) public only_owner(node) {\n records[node].text[key] = value;\n emit TextChanged(node, key, key);\n }\n\n /**\n * Returns the text data associated with an ENS node and key.\n * @param node The ENS node to query.\n * @param key The text data key to query.\n * @return The associated text data.\n */\n function text(bytes32 node, string key) public view returns (string) {\n return records[node].text[key];\n }\n\n /**\n * Returns the SECP256k1 public key associated with an ENS node.\n * Defined in EIP 619.\n * @param node The ENS node to query\n * @return x, y the X and Y coordinates of the curve point for the public key.\n */\n function pubkey(bytes32 node) public view returns (bytes32 x, bytes32 y) {\n return (records[node].pubkey.x, records[node].pubkey.y);\n }\n\n /**\n * Returns the ABI associated with an ENS node.\n * Defined in EIP205.\n * @param node The ENS node to query\n * @param contentTypes A bitwise OR of the ABI formats accepted by the caller.\n * @return contentType The content type of the return value\n * @return data The ABI data\n */\n function ABI(bytes32 node, uint256 contentTypes) public view returns (uint256 contentType, bytes data) {\n Record storage record = records[node];\n for (contentType = 1; contentType <= contentTypes; contentType <<= 1) {\n if ((contentType & contentTypes) != 0 && record.abis[contentType].length > 0) {\n data = record.abis[contentType];\n return;\n }\n }\n contentType = 0;\n }\n\n /**\n * Returns the name associated with an ENS node, for reverse records.\n * Defined in EIP181.\n * @param node The ENS node to query.\n * @return The associated name.\n */\n function name(bytes32 node) public view returns (string) {\n return records[node].name;\n }\n\n /**\n * Returns the content hash associated with an ENS node.\n * Note that this resource type is not standardized, and will likely change\n * in future to a resource type based on multihash.\n * @param node The ENS node to query.\n * @return The associated content hash.\n */\n function content(bytes32 node) public view returns (bytes32) {\n return records[node].content;\n }\n\n /**\n * Returns the multihash associated with an ENS node.\n * @param node The ENS node to query.\n * @return The associated multihash.\n */\n function multihash(bytes32 node) public view returns (bytes) {\n return records[node].multihash;\n }\n\n /**\n * Returns the address associated with an ENS node.\n * @param node The ENS node to query.\n * @return The associated address.\n */\n function addr(bytes32 node) public view returns (address) {\n return records[node].addr;\n }\n\n /**\n * Returns true if the resolver implements the interface specified by the provided hash.\n * @param interfaceID The ID of the interface to check for.\n * @return True if the contract implements the requested interface.\n */\n function supportsInterface(bytes4 interfaceID) public pure returns (bool) {\n return interfaceID == ADDR_INTERFACE_ID ||\n interfaceID == CONTENT_INTERFACE_ID ||\n interfaceID == NAME_INTERFACE_ID ||\n interfaceID == ABI_INTERFACE_ID ||\n interfaceID == PUBKEY_INTERFACE_ID ||\n interfaceID == TEXT_INTERFACE_ID ||\n interfaceID == MULTIHASH_INTERFACE_ID ||\n interfaceID == INTERFACE_META_ID;\n }\n}\n","TestRegistrar.sol":"pragma solidity ^0.4.24;\n\nimport \"./ENS.sol\";\n\n/**\n * A registrar that allocates subdomains to the first person to claim them, but\n * expires registrations a fixed period after they're initially claimed.\n */\ncontract TestRegistrar {\n uint constant registrationPeriod = 4 weeks;\n\n ENS public ens;\n bytes32 public rootNode;\n mapping (bytes32 => uint) public expiryTimes;\n\n /**\n * Constructor.\n * @param ensAddr The address of the ENS registry.\n * @param node The node that this registrar administers.\n */\n constructor(ENS ensAddr, bytes32 node) public {\n ens = ensAddr;\n rootNode = node;\n }\n\n /**\n * Register a name that's not currently registered\n * @param label The hash of the label to register.\n * @param owner The address of the new owner.\n */\n function register(bytes32 label, address owner) public {\n require(expiryTimes[label] < now);\n\n expiryTimes[label] = now + registrationPeriod;\n ens.setSubnodeOwner(rootNode, label, owner);\n }\n}\n"},"version":"1.0.0"} \ No newline at end of file diff --git a/ethpm/assets/ens/v3.json b/ethpm/assets/ens/v3.json new file mode 100644 index 0000000000..a4e0c257b0 --- /dev/null +++ b/ethpm/assets/ens/v3.json @@ -0,0 +1 @@ +{"contractTypes":{"ENS":{"abi":[{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setSubnodeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"ttl","type":"uint64"}],"name":"setTTL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"ttl","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"resolver","type":"address"}],"name":"setResolver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"label","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"resolver","type":"address"}],"name":"NewResolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"ttl","type":"uint64"}],"name":"NewTTL","type":"event"}],"deploymentbytecode":{"bytecode":"0x"},"runtime_bytecode":{"bytecode":"0x"}},"ENSRegistry":{"abi":[{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setSubnodeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"ttl","type":"uint64"}],"name":"setTTL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"ttl","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"resolver","type":"address"}],"name":"setResolver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"label","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"resolver","type":"address"}],"name":"NewResolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"ttl","type":"uint64"}],"name":"NewTTL","type":"event"}],"deploymentBytecode":{"bytecode":"0x608060405234801561001057600080fd5b50336000808060010260001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109778061007b6000396000f300608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630178b8bf1461008857806302571be3146100f957806306ab59231461016a57806314ab9038146101c957806316a25cbd1461020e5780631896f70a146102675780635b0fc9c3146102b8575b600080fd5b34801561009457600080fd5b506100b76004803603810190808035600019169060200190929190505050610309565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561010557600080fd5b506101286004803603810190808035600019169060200190929190505050610350565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017657600080fd5b506101c760048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610397565b005b3480156101d557600080fd5b5061020c6004803603810190808035600019169060200190929190803567ffffffffffffffff16906020019092919050505061057d565b005b34801561021a57600080fd5b5061023d600480360381019080803560001916906020019092919050505061068e565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561027357600080fd5b506102b66004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c9565b005b3480156102c457600080fd5b506103076004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080a565b005b6000806000836000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000833373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561041157600080fd5b84846040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561047e5780518252602082019150602081019050602083039250610459565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150836000191685600019167fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a382600080846000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156105f557600080fd5b82600019167f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6000806000836000191660001916815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561074157600080fd5b82600019167f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561088257600080fd5b82600019167fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a7230582056008d06b44e6cfd9a8e4b8a63f7ac2650d3855c0ffe3ca9765a7f80d7bb5ec60029"},"runtime_bytecode":{"bytecode":"0x608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630178b8bf1461008857806302571be3146100f957806306ab59231461016a57806314ab9038146101c957806316a25cbd1461020e5780631896f70a146102675780635b0fc9c3146102b8575b600080fd5b34801561009457600080fd5b506100b76004803603810190808035600019169060200190929190505050610309565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561010557600080fd5b506101286004803603810190808035600019169060200190929190505050610350565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017657600080fd5b506101c760048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610397565b005b3480156101d557600080fd5b5061020c6004803603810190808035600019169060200190929190803567ffffffffffffffff16906020019092919050505061057d565b005b34801561021a57600080fd5b5061023d600480360381019080803560001916906020019092919050505061068e565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561027357600080fd5b506102b66004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c9565b005b3480156102c457600080fd5b506103076004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080a565b005b6000806000836000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000833373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561041157600080fd5b84846040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561047e5780518252602082019150602081019050602083039250610459565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150836000191685600019167fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a382600080846000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156105f557600080fd5b82600019167f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6000806000836000191660001916815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561074157600080fd5b82600019167f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b813373ffffffffffffffffffffffffffffffffffffffff16600080836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561088257600080fd5b82600019167fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a281600080856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a7230582056008d06b44e6cfd9a8e4b8a63f7ac2650d3855c0ffe3ca9765a7f80d7bb5ec60029"}},"FIFSRegistrar":{"abi":[{"constant":false,"inputs":[{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"register","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"ensAddr","type":"address"},{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"deploymentBytecode":{"bytecode":"0x608060405234801561001057600080fd5b506040516040806104268339810180604052810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018160001916905550505061038d806100996000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063d22057a914610046575b600080fd5b34801561005257600080fd5b506100956004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610097565b005b8160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3600154846040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156101465780518252602082019150602081019050602083039250610121565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b505050506040513d60208110156101f757600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16148061025a57503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561026557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015486866040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b50505050505050505600a165627a7a72305820ec5a26df47d3f55c9f8759e24517f00718f8d416777fbb957f5f28957627add60029"},"runtime_bytecode":{"bytecode":"0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063d22057a914610046575b600080fd5b34801561005257600080fd5b506100956004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610097565b005b8160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3600154846040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156101465780518252602082019150602081019050602083039250610121565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b505050506040513d60208110156101f757600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16148061025a57503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561026557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015486866040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b50505050505050505600a165627a7a72305820ec5a26df47d3f55c9f8759e24517f00718f8d416777fbb957f5f28957627add60029"}},"PublicResolver":{"abi":[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"key","type":"string"},{"name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"},{"name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"name":"contentType","type":"uint256"},{"name":"data","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"x","type":"bytes32"},{"name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"content","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"addr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"},{"name":"key","type":"string"}],"name":"text","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"contentType","type":"uint256"},{"name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"hash","type":"bytes"}],"name":"setMultihash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"hash","type":"bytes32"}],"name":"setContent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"name":"x","type":"bytes32"},{"name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"addr","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"multihash","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"ensAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"hash","type":"bytes32"}],"name":"ContentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"x","type":"bytes32"},{"indexed":false,"name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"indexedKey","type":"string"},{"indexed":false,"name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"hash","type":"bytes"}],"name":"MultihashChanged","type":"event"}],"deploymentBytecode":{"bytecode":"0x608060405234801561001057600080fd5b50604051602080611f8083398101806040528101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611efd806100836000396000f3006080604052600436106100db576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146100e057806310f13a8c146101445780632203ab561461020157806329cd62ea146102bc5780632dff6941146103095780633b3b57de1461035657806359d1d43c146103c7578063623195b0146104b7578063691f34311461053857806377372213146105e2578063aa4cb54714610659578063c3d014d6146106d0578063c86902331461070f578063d5fa2b001461076b578063e89401a1146107bc575b600080fd5b3480156100ec57600080fd5b5061012a60048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610866565b604051808215151515815260200191505060405180910390f35b34801561015057600080fd5b506101ff6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bc0565b005b34801561020d57600080fd5b5061023a600480360381019080803560001916906020019092919080359060200190929190505050610e7d565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610280578082015181840152602081019050610265565b50505050905090810190601f1680156102ad5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156102c857600080fd5b50610307600480360381019080803560001916906020019092919080356000191690602001909291908035600019169060200190929190505050610fc0565b005b34801561031557600080fd5b506103386004803603810190808035600019169060200190929190505050611185565b60405180826000191660001916815260200191505060405180910390f35b34801561036257600080fd5b5061038560048036038101908080356000191690602001909291905050506111ad565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d357600080fd5b5061043c6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111f5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047c578082015181840152602081019050610461565b50505050905090810190601f1680156104a95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104c357600080fd5b50610536600480360381019080803560001916906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061131f565b005b34801561054457600080fd5b5061056760048036038101908080356000191690602001909291905050506114bc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105a757808201518184015260208101905061058c565b50505050905090810190601f1680156105d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105ee57600080fd5b506106576004803603810190808035600019169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061157c565b005b34801561066557600080fd5b506106ce6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611762565b005b3480156106dc57600080fd5b5061070d60048036038101908080356000191690602001909291908035600019169060200190929190505050611948565b005b34801561071b57600080fd5b5061073e6004803603810190808035600019169060200190929190505050611ac5565b60405180836000191660001916815260200182600019166000191681526020019250505060405180910390f35b34801561077757600080fd5b506107ba6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b15565b005b3480156107c857600080fd5b506107eb6004803603810190808035600019169060200190929190505050611cec565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082b578082015181840152602081019050610810565b50505050905090810190601f1680156108585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000633b3b57de7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610937575063d8389dc57c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a2575063691f34317c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0d5750632203ab567c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a78575063c86902337c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae357506359d1d43c7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b4e575063e89401a17c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bb957506301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b505050506040513d6020811015610c9a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515610ccd57600080fd5b81600160008660001916600019168152602001908152602001600020600501846040518082805190602001908083835b602083101515610d225780518252602082019150602081019050602083039250610cfd565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080519060200190610d68929190611dac565b5083600019167fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508485604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610dd5578082015181840152602081019050610dba565b50505050905090810190601f168015610e025780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610e3b578082015181840152602081019050610e20565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250505050565b6000606060006001600086600019166000191681526020019081526020016000209050600192505b8383111515610fb357600084841614158015610eea57506000816006016000858152602001908152602001600020805460018160011615610100020316600290049050115b15610fa4578060060160008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f985780601f10610f6d57610100808354040283529160200191610f98565b820191906000526020600020905b815481529060010190602001808311610f7b57829003601f168201915b50505050509150610fb8565b6001839060020a029250610ea5565b600092505b509250929050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561107057600080fd5b505af1158015611084573d6000803e3d6000fd5b505050506040513d602081101561109a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156110cd57600080fd5b6040805190810160405280846000191681526020018360001916815250600160008660001916600019168152602001908152602001600020600301600082015181600001906000191690556020820151816001019060001916905590505083600019167f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46848460405180836000191660001916815260200182600019166000191681526020019250505060405180910390a250505050565b6000600160008360001916600019168152602001908152602001600020600101549050919050565b600060016000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6060600160008460001916600019168152602001908152602001600020600501826040518082805190602001908083835b60208310151561124b5780518252602082019150602081019050602083039250611226565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113125780601f106112e757610100808354040283529160200191611312565b820191906000526020600020905b8154815290600101906020018083116112f557829003601f168201915b5050505050905092915050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156113cf57600080fd5b505af11580156113e3573d6000803e3d6000fd5b505050506040513d60208110156113f957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561142c57600080fd5b600083600185031614151561144057600080fd5b8160016000866000191660001916815260200190815260200160002060060160008581526020019081526020016000209080519060200190611483929190611e2c565b508284600019167faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a350505050565b60606001600083600019166000191681526020019081526020016000206002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115705780601f1061154557610100808354040283529160200191611570565b820191906000526020600020905b81548152906001019060200180831161155357829003601f168201915b50505050509050919050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561162c57600080fd5b505af1158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561168957600080fd5b8160016000856000191660001916815260200190815260200160002060020190805190602001906116bb929190611dac565b5082600019167fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7836040518080602001828103825283818151815260200191508051906020019080838360005b83811015611723578082015181840152602081019050611708565b50505050905090810190601f1680156117505780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561181257600080fd5b505af1158015611826573d6000803e3d6000fd5b505050506040513d602081101561183c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561186f57600080fd5b8160016000856000191660001916815260200190815260200160002060070190805190602001906118a1929190611e2c565b5082600019167fc0b0fc07269fc2749adada3221c095a1d2187b2d075b51c915857b520f3a5021836040518080602001828103825283818151815260200191508051906020019080838360005b838110156119095780820151818401526020810190506118ee565b50505050905090810190601f1680156119365780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611a5557600080fd5b81600160008560001916600019168152602001908152602001600020600101816000191690555082600019167f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc8360405180826000191660001916815260200191505060405180910390a2505050565b600080600160008460001916600019168152602001908152602001600020600301600001546001600085600019166000191681526020019081526020016000206003016001015491509150915091565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611bc557600080fd5b505af1158015611bd9573d6000803e3d6000fd5b505050506040513d6020811015611bef57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611c2257600080fd5b8160016000856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600019167f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd283604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2505050565b60606001600083600019166000191681526020019081526020016000206007018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611da05780601f10611d7557610100808354040283529160200191611da0565b820191906000526020600020905b815481529060010190602001808311611d8357829003601f168201915b50505050509050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ded57805160ff1916838001178555611e1b565b82800160010185558215611e1b579182015b82811115611e1a578251825591602001919060010190611dff565b5b509050611e289190611eac565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e6d57805160ff1916838001178555611e9b565b82800160010185558215611e9b579182015b82811115611e9a578251825591602001919060010190611e7f565b5b509050611ea89190611eac565b5090565b611ece91905b80821115611eca576000816000905550600101611eb2565b5090565b905600a165627a7a7230582080ff20c780d2aa7e5b83782c955f590f1b85400bdf9aa54b0f4ca4dbca9ed55a0029"},"runtime_bytecode":{"bytecode":"0x6080604052600436106100db576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146100e057806310f13a8c146101445780632203ab561461020157806329cd62ea146102bc5780632dff6941146103095780633b3b57de1461035657806359d1d43c146103c7578063623195b0146104b7578063691f34311461053857806377372213146105e2578063aa4cb54714610659578063c3d014d6146106d0578063c86902331461070f578063d5fa2b001461076b578063e89401a1146107bc575b600080fd5b3480156100ec57600080fd5b5061012a60048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610866565b604051808215151515815260200191505060405180910390f35b34801561015057600080fd5b506101ff6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bc0565b005b34801561020d57600080fd5b5061023a600480360381019080803560001916906020019092919080359060200190929190505050610e7d565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610280578082015181840152602081019050610265565b50505050905090810190601f1680156102ad5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156102c857600080fd5b50610307600480360381019080803560001916906020019092919080356000191690602001909291908035600019169060200190929190505050610fc0565b005b34801561031557600080fd5b506103386004803603810190808035600019169060200190929190505050611185565b60405180826000191660001916815260200191505060405180910390f35b34801561036257600080fd5b5061038560048036038101908080356000191690602001909291905050506111ad565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d357600080fd5b5061043c6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111f5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047c578082015181840152602081019050610461565b50505050905090810190601f1680156104a95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104c357600080fd5b50610536600480360381019080803560001916906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061131f565b005b34801561054457600080fd5b5061056760048036038101908080356000191690602001909291905050506114bc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105a757808201518184015260208101905061058c565b50505050905090810190601f1680156105d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105ee57600080fd5b506106576004803603810190808035600019169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061157c565b005b34801561066557600080fd5b506106ce6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611762565b005b3480156106dc57600080fd5b5061070d60048036038101908080356000191690602001909291908035600019169060200190929190505050611948565b005b34801561071b57600080fd5b5061073e6004803603810190808035600019169060200190929190505050611ac5565b60405180836000191660001916815260200182600019166000191681526020019250505060405180910390f35b34801561077757600080fd5b506107ba6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b15565b005b3480156107c857600080fd5b506107eb6004803603810190808035600019169060200190929190505050611cec565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082b578082015181840152602081019050610810565b50505050905090810190601f1680156108585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000633b3b57de7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610937575063d8389dc57c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a2575063691f34317c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0d5750632203ab567c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a78575063c86902337c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae357506359d1d43c7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b4e575063e89401a17c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bb957506301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b505050506040513d6020811015610c9a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515610ccd57600080fd5b81600160008660001916600019168152602001908152602001600020600501846040518082805190602001908083835b602083101515610d225780518252602082019150602081019050602083039250610cfd565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080519060200190610d68929190611dac565b5083600019167fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508485604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610dd5578082015181840152602081019050610dba565b50505050905090810190601f168015610e025780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610e3b578082015181840152602081019050610e20565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250505050565b6000606060006001600086600019166000191681526020019081526020016000209050600192505b8383111515610fb357600084841614158015610eea57506000816006016000858152602001908152602001600020805460018160011615610100020316600290049050115b15610fa4578060060160008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f985780601f10610f6d57610100808354040283529160200191610f98565b820191906000526020600020905b815481529060010190602001808311610f7b57829003601f168201915b50505050509150610fb8565b6001839060020a029250610ea5565b600092505b509250929050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561107057600080fd5b505af1158015611084573d6000803e3d6000fd5b505050506040513d602081101561109a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156110cd57600080fd5b6040805190810160405280846000191681526020018360001916815250600160008660001916600019168152602001908152602001600020600301600082015181600001906000191690556020820151816001019060001916905590505083600019167f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46848460405180836000191660001916815260200182600019166000191681526020019250505060405180910390a250505050565b6000600160008360001916600019168152602001908152602001600020600101549050919050565b600060016000836000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6060600160008460001916600019168152602001908152602001600020600501826040518082805190602001908083835b60208310151561124b5780518252602082019150602081019050602083039250611226565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113125780601f106112e757610100808354040283529160200191611312565b820191906000526020600020905b8154815290600101906020018083116112f557829003601f168201915b5050505050905092915050565b823373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156113cf57600080fd5b505af11580156113e3573d6000803e3d6000fd5b505050506040513d60208110156113f957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561142c57600080fd5b600083600185031614151561144057600080fd5b8160016000866000191660001916815260200190815260200160002060060160008581526020019081526020016000209080519060200190611483929190611e2c565b508284600019167faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a350505050565b60606001600083600019166000191681526020019081526020016000206002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115705780601f1061154557610100808354040283529160200191611570565b820191906000526020600020905b81548152906001019060200180831161155357829003601f168201915b50505050509050919050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561162c57600080fd5b505af1158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561168957600080fd5b8160016000856000191660001916815260200190815260200160002060020190805190602001906116bb929190611dac565b5082600019167fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7836040518080602001828103825283818151815260200191508051906020019080838360005b83811015611723578082015181840152602081019050611708565b50505050905090810190601f1680156117505780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561181257600080fd5b505af1158015611826573d6000803e3d6000fd5b505050506040513d602081101561183c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561186f57600080fd5b8160016000856000191660001916815260200190815260200160002060070190805190602001906118a1929190611e2c565b5082600019167fc0b0fc07269fc2749adada3221c095a1d2187b2d075b51c915857b520f3a5021836040518080602001828103825283818151815260200191508051906020019080838360005b838110156119095780820151818401526020810190506118ee565b50505050905090810190601f1680156119365780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156119f857600080fd5b505af1158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611a5557600080fd5b81600160008560001916600019168152602001908152602001600020600101816000191690555082600019167f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc8360405180826000191660001916815260200191505060405180910390a2505050565b600080600160008460001916600019168152602001908152602001600020600301600001546001600085600019166000191681526020019081526020016000206003016001015491509150915091565b813373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611bc557600080fd5b505af1158015611bd9573d6000803e3d6000fd5b505050506040513d6020811015611bef57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611c2257600080fd5b8160016000856000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600019167f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd283604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2505050565b60606001600083600019166000191681526020019081526020016000206007018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611da05780601f10611d7557610100808354040283529160200191611da0565b820191906000526020600020905b815481529060010190602001808311611d8357829003601f168201915b50505050509050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ded57805160ff1916838001178555611e1b565b82800160010185558215611e1b579182015b82811115611e1a578251825591602001919060010190611dff565b5b509050611e289190611eac565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e6d57805160ff1916838001178555611e9b565b82800160010185558215611e9b579182015b82811115611e9a578251825591602001919060010190611e7f565b5b509050611ea89190611eac565b5090565b611ece91905b80821115611eca576000816000905550600101611eb2565b5090565b905600a165627a7a7230582080ff20c780d2aa7e5b83782c955f590f1b85400bdf9aa54b0f4ca4dbca9ed55a0029"}},"TestRegistrar":{"abi":[{"constant":true,"inputs":[],"name":"ens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"expiryTimes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"register","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rootNode","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"ensAddr","type":"address"},{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"deploymentBytecode":{"bytecode":"0x608060405234801561001057600080fd5b506040516040806103d78339810180604052810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060018160001916905550505061033e806100996000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633f15457f14610067578063af9f26e4146100be578063d22057a914610103578063faff50a814610154575b600080fd5b34801561007357600080fd5b5061007c610187565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100ca57600080fd5b506100ed60048036038101908080356000191690602001909291905050506101ac565b6040518082815260200191505060405180910390f35b34801561010f57600080fd5b506101526004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101c4565b005b34801561016057600080fd5b5061016961030c565b60405180826000191660001916815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b42600260008460001916600019168152602001908152602001600020541015156101ed57600080fd5b6224ea004201600260008460001916600019168152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015484846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156102f057600080fd5b505af1158015610304573d6000803e3d6000fd5b505050505050565b600154815600a165627a7a723058202e62cf216496a54f98da0d79120cfce29a7e9f3f024d4be0e82b3abcc704d8a60029"},"runtime_bytecode":{"bytecode":"0x608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633f15457f14610067578063af9f26e4146100be578063d22057a914610103578063faff50a814610154575b600080fd5b34801561007357600080fd5b5061007c610187565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100ca57600080fd5b506100ed60048036038101908080356000191690602001909291905050506101ac565b6040518082815260200191505060405180910390f35b34801561010f57600080fd5b506101526004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101c4565b005b34801561016057600080fd5b5061016961030c565b60405180826000191660001916815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b42600260008460001916600019168152602001908152602001600020541015156101ed57600080fd5b6224ea004201600260008460001916600019168152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015484846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156102f057600080fd5b505af1158015610304573d6000803e3d6000fd5b505050505050565b600154815600a165627a7a723058202e62cf216496a54f98da0d79120cfce29a7e9f3f024d4be0e82b3abcc704d8a60029"}}},"manifest":"ethpm/3","name":"ens","sources":{"ENS.sol":{"content":"pragma solidity ^0.4.24;\n\ninterface ENS {\n\n // Logged when the owner of a node assigns a new owner to a subnode.\n event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);\n\n // Logged when the owner of a node transfers ownership to a new account.\n event Transfer(bytes32 indexed node, address owner);\n\n // Logged when the resolver for a node changes.\n event NewResolver(bytes32 indexed node, address resolver);\n\n // Logged when the TTL of a node changes\n event NewTTL(bytes32 indexed node, uint64 ttl);\n\n\n function setSubnodeOwner(bytes32 node, bytes32 label, address owner) public;\n function setResolver(bytes32 node, address resolver) public;\n function setOwner(bytes32 node, address owner) public;\n function setTTL(bytes32 node, uint64 ttl) public;\n function owner(bytes32 node) public view returns (address);\n function resolver(bytes32 node) public view returns (address);\n function ttl(bytes32 node) public view returns (uint64);\n\n}\n"},"ENSRegistry.sol":{"content":"pragma solidity ^0.4.24;\n\nimport \"./ENS.sol\";\n\n/**\n * The ENS registry contract.\n */\ncontract ENSRegistry is ENS {\n struct Record {\n address owner;\n address resolver;\n uint64 ttl;\n }\n\n mapping (bytes32 => Record) records;\n\n // Permits modifications only by the owner of the specified node.\n modifier only_owner(bytes32 node) {\n require(records[node].owner == msg.sender);\n _;\n }\n\n /**\n * @dev Constructs a new ENS registrar.\n */\n constructor() public {\n records[0x0].owner = msg.sender;\n }\n\n /**\n * @dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\n * @param node The node to transfer ownership of.\n * @param owner The address of the new owner.\n */\n function setOwner(bytes32 node, address owner) public only_owner(node) {\n emit Transfer(node, owner);\n records[node].owner = owner;\n }\n\n /**\n * @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\n * @param node The parent node.\n * @param label The hash of the label specifying the subnode.\n * @param owner The address of the new owner.\n */\n function setSubnodeOwner(bytes32 node, bytes32 label, address owner) public only_owner(node) {\n bytes32 subnode = keccak256(abi.encodePacked(node, label));\n emit NewOwner(node, label, owner);\n records[subnode].owner = owner;\n }\n\n /**\n * @dev Sets the resolver address for the specified node.\n * @param node The node to update.\n * @param resolver The address of the resolver.\n */\n function setResolver(bytes32 node, address resolver) public only_owner(node) {\n emit NewResolver(node, resolver); \n records[node].resolver = resolver;\n }\n\n /**\n * @dev Sets the TTL for the specified node.\n * @param node The node to update.\n * @param ttl The TTL in seconds.\n */\n function setTTL(bytes32 node, uint64 ttl) public only_owner(node) {\n emit NewTTL(node, ttl);\n records[node].ttl = ttl;\n }\n\n /**\n * @dev Returns the address that owns the specified node.\n * @param node The specified node.\n * @return address of the owner.\n */\n function owner(bytes32 node) public view returns (address) {\n return records[node].owner;\n }\n\n /**\n * @dev Returns the address of the resolver for the specified node.\n * @param node The specified node.\n * @return address of the resolver.\n */\n function resolver(bytes32 node) public view returns (address) {\n return records[node].resolver;\n }\n\n /**\n * @dev Returns the TTL of a node, and any records associated with it.\n * @param node The specified node.\n * @return ttl of the node.\n */\n function ttl(bytes32 node) public view returns (uint64) {\n return records[node].ttl;\n }\n\n}\n"},"FIFSRegistrar.sol":{"content":"pragma solidity ^0.4.24;\n\nimport \"./ENS.sol\";\n\n/**\n * A registrar that allocates subdomains to the first person to claim them.\n */\ncontract FIFSRegistrar {\n ENS ens;\n bytes32 rootNode;\n\n modifier only_owner(bytes32 label) {\n address currentOwner = ens.owner(keccak256(abi.encodePacked(rootNode, label)));\n require(currentOwner == 0 || currentOwner == msg.sender);\n _;\n }\n\n /**\n * Constructor.\n * @param ensAddr The address of the ENS registry.\n * @param node The node that this registrar administers.\n */\n constructor(ENS ensAddr, bytes32 node) public {\n ens = ensAddr;\n rootNode = node;\n }\n\n /**\n * Register a name, or change the owner of an existing registration.\n * @param label The hash of the label to register.\n * @param owner The address of the new owner.\n */\n function register(bytes32 label, address owner) public only_owner(label) {\n ens.setSubnodeOwner(rootNode, label, owner);\n }\n}\n"},"PublicResolver.sol":{"content":"pragma solidity ^0.4.24;\n\nimport \"./ENS.sol\";\n\n/**\n * A simple resolver anyone can use; only allows the owner of a node to set its\n * address.\n */\ncontract PublicResolver {\n\n bytes4 constant INTERFACE_META_ID = 0x01ffc9a7;\n bytes4 constant ADDR_INTERFACE_ID = 0x3b3b57de;\n bytes4 constant CONTENT_INTERFACE_ID = 0xd8389dc5;\n bytes4 constant NAME_INTERFACE_ID = 0x691f3431;\n bytes4 constant ABI_INTERFACE_ID = 0x2203ab56;\n bytes4 constant PUBKEY_INTERFACE_ID = 0xc8690233;\n bytes4 constant TEXT_INTERFACE_ID = 0x59d1d43c;\n bytes4 constant MULTIHASH_INTERFACE_ID = 0xe89401a1;\n\n event AddrChanged(bytes32 indexed node, address a);\n event ContentChanged(bytes32 indexed node, bytes32 hash);\n event NameChanged(bytes32 indexed node, string name);\n event ABIChanged(bytes32 indexed node, uint256 indexed contentType);\n event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);\n event TextChanged(bytes32 indexed node, string indexedKey, string key);\n event MultihashChanged(bytes32 indexed node, bytes hash);\n\n struct PublicKey {\n bytes32 x;\n bytes32 y;\n }\n\n struct Record {\n address addr;\n bytes32 content;\n string name;\n PublicKey pubkey;\n mapping(string=>string) text;\n mapping(uint256=>bytes) abis;\n bytes multihash;\n }\n\n ENS ens;\n\n mapping (bytes32 => Record) records;\n\n modifier only_owner(bytes32 node) {\n require(ens.owner(node) == msg.sender);\n _;\n }\n\n /**\n * Constructor.\n * @param ensAddr The ENS registrar contract.\n */\n constructor(ENS ensAddr) public {\n ens = ensAddr;\n }\n\n /**\n * Sets the address associated with an ENS node.\n * May only be called by the owner of that node in the ENS registry.\n * @param node The node to update.\n * @param addr The address to set.\n */\n function setAddr(bytes32 node, address addr) public only_owner(node) {\n records[node].addr = addr;\n emit AddrChanged(node, addr);\n }\n\n /**\n * Sets the content hash associated with an ENS node.\n * May only be called by the owner of that node in the ENS registry.\n * Note that this resource type is not standardized, and will likely change\n * in future to a resource type based on multihash.\n * @param node The node to update.\n * @param hash The content hash to set\n */\n function setContent(bytes32 node, bytes32 hash) public only_owner(node) {\n records[node].content = hash;\n emit ContentChanged(node, hash);\n }\n\n /**\n * Sets the multihash associated with an ENS node.\n * May only be called by the owner of that node in the ENS registry.\n * @param node The node to update.\n * @param hash The multihash to set\n */\n function setMultihash(bytes32 node, bytes hash) public only_owner(node) {\n records[node].multihash = hash;\n emit MultihashChanged(node, hash);\n }\n \n /**\n * Sets the name associated with an ENS node, for reverse records.\n * May only be called by the owner of that node in the ENS registry.\n * @param node The node to update.\n * @param name The name to set.\n */\n function setName(bytes32 node, string name) public only_owner(node) {\n records[node].name = name;\n emit NameChanged(node, name);\n }\n\n /**\n * Sets the ABI associated with an ENS node.\n * Nodes may have one ABI of each content type. To remove an ABI, set it to\n * the empty string.\n * @param node The node to update.\n * @param contentType The content type of the ABI\n * @param data The ABI data.\n */\n function setABI(bytes32 node, uint256 contentType, bytes data) public only_owner(node) {\n // Content types must be powers of 2\n require(((contentType - 1) & contentType) == 0);\n \n records[node].abis[contentType] = data;\n emit ABIChanged(node, contentType);\n }\n \n /**\n * Sets the SECP256k1 public key associated with an ENS node.\n * @param node The ENS node to query\n * @param x the X coordinate of the curve point for the public key.\n * @param y the Y coordinate of the curve point for the public key.\n */\n function setPubkey(bytes32 node, bytes32 x, bytes32 y) public only_owner(node) {\n records[node].pubkey = PublicKey(x, y);\n emit PubkeyChanged(node, x, y);\n }\n\n /**\n * Sets the text data associated with an ENS node and key.\n * May only be called by the owner of that node in the ENS registry.\n * @param node The node to update.\n * @param key The key to set.\n * @param value The text data value to set.\n */\n function setText(bytes32 node, string key, string value) public only_owner(node) {\n records[node].text[key] = value;\n emit TextChanged(node, key, key);\n }\n\n /**\n * Returns the text data associated with an ENS node and key.\n * @param node The ENS node to query.\n * @param key The text data key to query.\n * @return The associated text data.\n */\n function text(bytes32 node, string key) public view returns (string) {\n return records[node].text[key];\n }\n\n /**\n * Returns the SECP256k1 public key associated with an ENS node.\n * Defined in EIP 619.\n * @param node The ENS node to query\n * @return x, y the X and Y coordinates of the curve point for the public key.\n */\n function pubkey(bytes32 node) public view returns (bytes32 x, bytes32 y) {\n return (records[node].pubkey.x, records[node].pubkey.y);\n }\n\n /**\n * Returns the ABI associated with an ENS node.\n * Defined in EIP205.\n * @param node The ENS node to query\n * @param contentTypes A bitwise OR of the ABI formats accepted by the caller.\n * @return contentType The content type of the return value\n * @return data The ABI data\n */\n function ABI(bytes32 node, uint256 contentTypes) public view returns (uint256 contentType, bytes data) {\n Record storage record = records[node];\n for (contentType = 1; contentType <= contentTypes; contentType <<= 1) {\n if ((contentType & contentTypes) != 0 && record.abis[contentType].length > 0) {\n data = record.abis[contentType];\n return;\n }\n }\n contentType = 0;\n }\n\n /**\n * Returns the name associated with an ENS node, for reverse records.\n * Defined in EIP181.\n * @param node The ENS node to query.\n * @return The associated name.\n */\n function name(bytes32 node) public view returns (string) {\n return records[node].name;\n }\n\n /**\n * Returns the content hash associated with an ENS node.\n * Note that this resource type is not standardized, and will likely change\n * in future to a resource type based on multihash.\n * @param node The ENS node to query.\n * @return The associated content hash.\n */\n function content(bytes32 node) public view returns (bytes32) {\n return records[node].content;\n }\n\n /**\n * Returns the multihash associated with an ENS node.\n * @param node The ENS node to query.\n * @return The associated multihash.\n */\n function multihash(bytes32 node) public view returns (bytes) {\n return records[node].multihash;\n }\n\n /**\n * Returns the address associated with an ENS node.\n * @param node The ENS node to query.\n * @return The associated address.\n */\n function addr(bytes32 node) public view returns (address) {\n return records[node].addr;\n }\n\n /**\n * Returns true if the resolver implements the interface specified by the provided hash.\n * @param interfaceID The ID of the interface to check for.\n * @return True if the contract implements the requested interface.\n */\n function supportsInterface(bytes4 interfaceID) public pure returns (bool) {\n return interfaceID == ADDR_INTERFACE_ID ||\n interfaceID == CONTENT_INTERFACE_ID ||\n interfaceID == NAME_INTERFACE_ID ||\n interfaceID == ABI_INTERFACE_ID ||\n interfaceID == PUBKEY_INTERFACE_ID ||\n interfaceID == TEXT_INTERFACE_ID ||\n interfaceID == MULTIHASH_INTERFACE_ID ||\n interfaceID == INTERFACE_META_ID;\n }\n}\n"},"TestRegistrar.sol":{"content":"pragma solidity ^0.4.24;\n\nimport \"./ENS.sol\";\n\n/**\n * A registrar that allocates subdomains to the first person to claim them, but\n * expires registrations a fixed period after they're initially claimed.\n */\ncontract TestRegistrar {\n uint constant registrationPeriod = 4 weeks;\n\n ENS public ens;\n bytes32 public rootNode;\n mapping (bytes32 => uint) public expiryTimes;\n\n /**\n * Constructor.\n * @param ensAddr The address of the ENS registry.\n * @param node The node that this registrar administers.\n */\n constructor(ENS ensAddr, bytes32 node) public {\n ens = ensAddr;\n rootNode = node;\n }\n\n /**\n * Register a name that's not currently registered\n * @param label The hash of the label to register.\n * @param owner The address of the new owner.\n */\n function register(bytes32 label, address owner) public {\n require(expiryTimes[label] < now);\n\n expiryTimes[label] = now + registrationPeriod;\n ens.setSubnodeOwner(rootNode, label, owner);\n }\n}\n"}},"version":"1.0.0"} diff --git a/ethpm/assets/escrow/1.0.0-pretty.json b/ethpm/assets/escrow/1.0.0-pretty.json deleted file mode 100644 index bd615dc3cd..0000000000 --- a/ethpm/assets/escrow/1.0.0-pretty.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "manifest_version": "2", - "version": "1.0.0", - "package_name": "escrow", - "sources": { - "./contracts/SafeSendLib.sol": "ipfs://QmXsTBDZvtGBsJHg1HKinz1p6QvhphLV8UPX6Jqo3LcKW3", - "./contracts/Escrow.sol": "ipfs://Qmbm91zWRqwjuRTSbuyVNUAV7umu5o594MzBMxWbEMRQPj" - }, - "contract_types": { - "SafeSendLib": { - "deployment_bytecode": { - "bytecode": "0x61011c610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f300730000000000000000000000000000000000000000301460806040526004361060555763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416639341231c8114605a575b600080fd5b818015606557600080fd5b50608873ffffffffffffffffffffffffffffffffffffffff60043516602435609c565b604080519115158252519081900360200190f35b6000303182111560ab57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050151560e757600080fd5b506001929150505600a165627a7a723058200300c406f268c8026cb55ced0cb3c2ee571e2225be95d6c43816ce75e303dd6f0029" - }, - "runtime_bytecode": { - "bytecode": "0x734f5b11c860b37b68de6d14fb7e7b5f18a9a1bdc0301460806040526004361060555763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416639341231c8114605a575b600080fd5b818015606557600080fd5b50608873ffffffffffffffffffffffffffffffffffffffff60043516602435609c565b604080519115158252519081900360200190f35b6000303182111560ab57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050151560e757600080fd5b506001929150505600a165627a7a723058200300c406f268c8026cb55ced0cb3c2ee571e2225be95d6c43816ce75e303dd6f0029" - }, - "abi": [ - { - "constant": false, - "inputs": [ - {"name": "recipient", "type": "address"}, - {"name": "value", "type": "uint256"} - ], - "name": "sendOrThrow", - "outputs": [ - {"name": "", "type": "bool"} - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang", - "settings": { - "optimize": true - } - }, - "natspec": { - "author": "Piper Merriam ", - "methods": { - "sendOrThrow(address,uint256)": { - "details": "Attempts to send the specified amount to the recipient throwing an error if it fails", - "params": { - "recipient": "The address that the funds should be to.", - "value": "The amount in wei that should be sent." - } - } - }, - "title": "Library for safe sending of ether." - } - }, - "Escrow": { - "runtime_bytecode": { - "bytecode": "0x6080604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166366d003ac811461005b57806367e404ce1461008c57806369d89575146100a1575b600080fd5b34801561006757600080fd5b506100706100b8565b60408051600160a060020a039092168252519081900360200190f35b34801561009857600080fd5b506100706100c7565b3480156100ad57600080fd5b506100b66100d6565b005b600154600160a060020a031681565b600054600160a060020a031681565b600054600160a060020a031633141561019857600154604080517f9341231c000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152303160248301525173000000000000000000000000000000000000000091639341231c916044808301926020929190829003018186803b15801561016657600080fd5b505af415801561017a573d6000803e3d6000fd5b505050506040513d602081101561019057600080fd5b506102289050565b600154600160a060020a031633141561005657600054604080517f9341231c000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152303160248301525173000000000000000000000000000000000000000091639341231c916044808301926020929190829003018186803b15801561016657600080fd5b5600a165627a7a723058201766d3411ff91d047cf900369478c682a497a6e560cd1b2fe4d9f2d6fe13b4210029", - "link_references": [ - { - "offsets": [301, 495], - "length": 20, - "name": "SafeSendLib" - } - ] - }, - "abi": [ - { - "constant": true, - "inputs": [], - "name": "recipient", - "outputs": [ - {"name": "","type": "address"} - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "sender", - "outputs": [ - {"name": "","type": "address"} - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "releaseFunds", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - {"name": "_recipient","type": "address"} - ], - "payable": true, - "stateMutability": "payable", - "type": "constructor" - } - ], - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang", - "settings": { - "optimize": true - } - }, - "natspec": { - "author": "Piper Merriam ", - "methods": { - "releaseFunds()": { - "details": "Releases the escrowed funds to the other party.", - "notice": "This will release the escrowed funds to the other party." - } - }, - "title": "Contract for holding funds in escrow between two semi trusted parties." - } - } - }, - "deployments": { - "blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/d2e1b78094a358550ae340c47a00aee43a5444fb44235fdb73e7e07ff5faeadb": { - "SafeSendLib": { - "contract_type": "SafeSendLib", - "address": "0x4F5B11c860b37b68DE6D14Fb7e7b5f18A9A1bdC0", - "transaction": "0x208492026eff5fc838f23d12e930239dcfae9cde9cc96b87b38bb50bd1465b81", - "block": "0x29e9393113b96ff1e9048710355d213dafc9896fd2b97ca74e3f3e6aaf4092c6" - }, - "Escrow": { - "contract_type": "Escrow", - "address": "0x8c1968deB27251A3f1F4508df32dA4dfD1b7b57f", - "transaction": "0xc60e32c63abf34579390ef65d83cc5eb52225de38c3eeca2e5afa961d71c16d0", - "block": "0x4d1a618802bb87752d95db453dddeea622820424a2f836bedf8769a67ee276b8", - "runtime_bytecode": { - "link_dependencies": [ - {"offsets": [301, 495], "type": "reference", "value": "SafeSendLib"} - ] - } - } - } - } -} diff --git a/ethpm/assets/escrow/1.0.0.json b/ethpm/assets/escrow/1.0.0.json deleted file mode 100644 index fcc2ddae49..0000000000 --- a/ethpm/assets/escrow/1.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"Escrow":{"abi":[{"constant":true,"inputs":[],"name":"recipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sender","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"releaseFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_recipient","type":"address"}],"payable":true,"stateMutability":"payable","type":"constructor"}],"compiler":{"name":"solc","settings":{"optimize":true},"version":"0.4.24+commit.e67f0147.Emscripten.clang"},"natspec":{"author":"Piper Merriam ","methods":{"releaseFunds()":{"details":"Releases the escrowed funds to the other party.","notice":"This will release the escrowed funds to the other party."}},"title":"Contract for holding funds in escrow between two semi trusted parties."},"runtime_bytecode":{"bytecode":"0x6080604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166366d003ac811461005b57806367e404ce1461008c57806369d89575146100a1575b600080fd5b34801561006757600080fd5b506100706100b8565b60408051600160a060020a039092168252519081900360200190f35b34801561009857600080fd5b506100706100c7565b3480156100ad57600080fd5b506100b66100d6565b005b600154600160a060020a031681565b600054600160a060020a031681565b600054600160a060020a031633141561019857600154604080517f9341231c000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152303160248301525173000000000000000000000000000000000000000091639341231c916044808301926020929190829003018186803b15801561016657600080fd5b505af415801561017a573d6000803e3d6000fd5b505050506040513d602081101561019057600080fd5b506102289050565b600154600160a060020a031633141561005657600054604080517f9341231c000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152303160248301525173000000000000000000000000000000000000000091639341231c916044808301926020929190829003018186803b15801561016657600080fd5b5600a165627a7a723058201766d3411ff91d047cf900369478c682a497a6e560cd1b2fe4d9f2d6fe13b4210029","link_references":[{"length":20,"name":"SafeSendLib","offsets":[301,495]}]}},"SafeSendLib":{"abi":[{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"}],"name":"sendOrThrow","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"compiler":{"name":"solc","settings":{"optimize":true},"version":"0.4.24+commit.e67f0147.Emscripten.clang"},"deployment_bytecode":{"bytecode":"0x61011c610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f300730000000000000000000000000000000000000000301460806040526004361060555763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416639341231c8114605a575b600080fd5b818015606557600080fd5b50608873ffffffffffffffffffffffffffffffffffffffff60043516602435609c565b604080519115158252519081900360200190f35b6000303182111560ab57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050151560e757600080fd5b506001929150505600a165627a7a723058200300c406f268c8026cb55ced0cb3c2ee571e2225be95d6c43816ce75e303dd6f0029"},"natspec":{"author":"Piper Merriam ","methods":{"sendOrThrow(address,uint256)":{"details":"Attempts to send the specified amount to the recipient throwing an error if it fails","params":{"recipient":"The address that the funds should be to.","value":"The amount in wei that should be sent."}}},"title":"Library for safe sending of ether."},"runtime_bytecode":{"bytecode":"0x734f5b11c860b37b68de6d14fb7e7b5f18a9a1bdc0301460806040526004361060555763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416639341231c8114605a575b600080fd5b818015606557600080fd5b50608873ffffffffffffffffffffffffffffffffffffffff60043516602435609c565b604080519115158252519081900360200190f35b6000303182111560ab57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050151560e757600080fd5b506001929150505600a165627a7a723058200300c406f268c8026cb55ced0cb3c2ee571e2225be95d6c43816ce75e303dd6f0029"}}},"deployments":{"blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/d2e1b78094a358550ae340c47a00aee43a5444fb44235fdb73e7e07ff5faeadb":{"Escrow":{"address":"0x8c1968deB27251A3f1F4508df32dA4dfD1b7b57f","block":"0x4d1a618802bb87752d95db453dddeea622820424a2f836bedf8769a67ee276b8","contract_type":"Escrow","runtime_bytecode":{"link_dependencies":[{"offsets":[301,495],"type":"reference","value":"SafeSendLib"}]},"transaction":"0xc60e32c63abf34579390ef65d83cc5eb52225de38c3eeca2e5afa961d71c16d0"},"SafeSendLib":{"address":"0x4F5B11c860b37b68DE6D14Fb7e7b5f18A9A1bdC0","block":"0x29e9393113b96ff1e9048710355d213dafc9896fd2b97ca74e3f3e6aaf4092c6","contract_type":"SafeSendLib","transaction":"0x208492026eff5fc838f23d12e930239dcfae9cde9cc96b87b38bb50bd1465b81"}}},"manifest_version":"2","package_name":"escrow","sources":{"./contracts/Escrow.sol":"ipfs://Qmbm91zWRqwjuRTSbuyVNUAV7umu5o594MzBMxWbEMRQPj","./contracts/SafeSendLib.sol":"ipfs://QmXsTBDZvtGBsJHg1HKinz1p6QvhphLV8UPX6Jqo3LcKW3"},"version":"1.0.0"} \ No newline at end of file diff --git a/ethpm/assets/escrow/1.0.2.json b/ethpm/assets/escrow/1.0.2.json deleted file mode 100644 index 2590a9fc14..0000000000 --- a/ethpm/assets/escrow/1.0.2.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"Escrow":{"abi":[{"constant":true,"inputs":[],"name":"recipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sender","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"releaseFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_recipient","type":"address"}],"payable":true,"stateMutability":"payable","type":"constructor"}],"deployment_bytecode":{"bytecode":"0x608060405260405160208061056383398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506104ac806100b76000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806366d003ac1461005c57806367e404ce146100b357806369d895751461010a575b600080fd5b34801561006857600080fd5b50610071610121565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100bf57600080fd5b506100c8610147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561011657600080fd5b5061011f61016c565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102f257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156102b157600080fd5b505af41580156102c5573d6000803e3d6000fd5b505050506040513d60208110156102db57600080fd5b81019080805190602001909291905050505061047e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610478576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561043757600080fd5b505af415801561044b573d6000803e3d6000fd5b505050506040513d602081101561046157600080fd5b81019080805190602001909291905050505061047d565b600080fd5b5b5600a165627a7a72305820bd9c4ae36bcaaf04d521c1c78022fbfed3b34bff286af3c544b53dea8bf5fbe20029","link_references":[{"length":20,"name":"SafeSendLib","offsets":[691,1081]}]}},"SafeSendLib":{"abi":[{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"}],"name":"sendOrThrow","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"deployment_bytecode":{"bytecode":"0x61015e610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f3007300000000000000000000000000000000000000003014608060405260043610610058576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680639341231c1461005d575b600080fd5b81801561006957600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506100c2565b604051808215151515815260200191505060405180910390f35b60003073ffffffffffffffffffffffffffffffffffffffff16318211156100e857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561012857600080fd5b60019050929150505600a165627a7a7230582041b548ecef0d0db47b915605a920606883582fc2f47f7a5d3d55692c21d26a3f0029"}}},"manifest_version":"2","package_name":"escrow","sources":{"Escrow.sol":"ipfs://Qmbm91zWRqwjuRTSbuyVNUAV7umu5o594MzBMxWbEMRQPj","SafeSendLib.sol":"ipfs://QmXsTBDZvtGBsJHg1HKinz1p6QvhphLV8UPX6Jqo3LcKW3"},"version":"1.0.2"} \ No newline at end of file diff --git a/ethpm/assets/escrow/1.0.3.json b/ethpm/assets/escrow/1.0.3.json deleted file mode 100644 index 1de02d0ec9..0000000000 --- a/ethpm/assets/escrow/1.0.3.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"Escrow":{"abi":[{"constant":true,"inputs":[],"name":"recipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sender","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"releaseFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_recipient","type":"address"}],"payable":true,"stateMutability":"payable","type":"constructor"}],"deployment_bytecode":{"bytecode":"0x608060405260405160208061056383398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506104ac806100b76000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806366d003ac1461005c57806367e404ce146100b357806369d895751461010a575b600080fd5b34801561006857600080fd5b50610071610121565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100bf57600080fd5b506100c8610147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561011657600080fd5b5061011f61016c565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102f257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156102b157600080fd5b505af41580156102c5573d6000803e3d6000fd5b505050506040513d60208110156102db57600080fd5b81019080805190602001909291905050505061047e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610478576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561043757600080fd5b505af415801561044b573d6000803e3d6000fd5b505050506040513d602081101561046157600080fd5b81019080805190602001909291905050505061047d565b600080fd5b5b5600a165627a7a72305820bd9c4ae36bcaaf04d521c1c78022fbfed3b34bff286af3c544b53dea8bf5fbe20029","link_references":[{"length":20,"name":"SafeSendLib","offsets":[691,1081]}]},"runtime_bytecode":{"bytecode":"0x608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806366d003ac1461005c57806367e404ce146100b357806369d895751461010a575b600080fd5b34801561006857600080fd5b50610071610121565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100bf57600080fd5b506100c8610147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561011657600080fd5b5061011f61016c565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102f257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156102b157600080fd5b505af41580156102c5573d6000803e3d6000fd5b505050506040513d60208110156102db57600080fd5b81019080805190602001909291905050505061047e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610478576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561043757600080fd5b505af415801561044b573d6000803e3d6000fd5b505050506040513d602081101561046157600080fd5b81019080805190602001909291905050505061047d565b600080fd5b5b5600a165627a7a72305820bd9c4ae36bcaaf04d521c1c78022fbfed3b34bff286af3c544b53dea8bf5fbe20029","link_references":[{"length":20,"name":"SafeSendLib","offsets":[508,898]}]}},"SafeSendLib":{"abi":[{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"}],"name":"sendOrThrow","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"deployment_bytecode":{"bytecode":"0x61015e610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f3007300000000000000000000000000000000000000003014608060405260043610610058576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680639341231c1461005d575b600080fd5b81801561006957600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506100c2565b604051808215151515815260200191505060405180910390f35b60003073ffffffffffffffffffffffffffffffffffffffff16318211156100e857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561012857600080fd5b60019050929150505600a165627a7a7230582041b548ecef0d0db47b915605a920606883582fc2f47f7a5d3d55692c21d26a3f0029"},"runtime_bytecode":{"bytecode":"0x7300000000000000000000000000000000000000003014608060405260043610610058576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680639341231c1461005d575b600080fd5b81801561006957600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506100c2565b604051808215151515815260200191505060405180910390f35b60003073ffffffffffffffffffffffffffffffffffffffff16318211156100e857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561012857600080fd5b60019050929150505600a165627a7a7230582041b548ecef0d0db47b915605a920606883582fc2f47f7a5d3d55692c21d26a3f0029"}}},"manifest_version":"2","package_name":"escrow","sources":{"Escrow.sol":"ipfs://Qmbm91zWRqwjuRTSbuyVNUAV7umu5o594MzBMxWbEMRQPj","SafeSendLib.sol":"ipfs://QmXsTBDZvtGBsJHg1HKinz1p6QvhphLV8UPX6Jqo3LcKW3"},"version":"1.0.3"} \ No newline at end of file diff --git a/ethpm/assets/escrow/contracts/Escrow.sol b/ethpm/assets/escrow/contracts/Escrow.sol deleted file mode 100644 index 917cfb3e52..0000000000 --- a/ethpm/assets/escrow/contracts/Escrow.sol +++ /dev/null @@ -1,31 +0,0 @@ -pragma solidity ^0.4.24; - - -import {SafeSendLib} from "./SafeSendLib.sol"; - - -/// @title Contract for holding funds in escrow between two semi trusted parties. -/// @author Piper Merriam -contract Escrow { - using SafeSendLib for address; - - address public sender; - address public recipient; - - constructor(address _recipient) public payable { - sender = msg.sender; - recipient = _recipient; - } - - /// @dev Releases the escrowed funds to the other party. - /// @notice This will release the escrowed funds to the other party. - function releaseFunds() public { - if (msg.sender == sender) { - recipient.sendOrThrow(address(this).balance); - } else if (msg.sender == recipient) { - sender.sendOrThrow(address(this).balance); - } else { - revert(); - } - } -} diff --git a/ethpm/assets/escrow/contracts/SafeSendLib.sol b/ethpm/assets/escrow/contracts/SafeSendLib.sol deleted file mode 100644 index a70117d926..0000000000 --- a/ethpm/assets/escrow/contracts/SafeSendLib.sol +++ /dev/null @@ -1,19 +0,0 @@ -pragma solidity ^0.4.24; - - -/// @title Library for safe sending of ether. -/// @author Piper Merriam -library SafeSendLib { - /// @dev Attempts to send the specified amount to the recipient throwing an error if it fails - /// @param recipient The address that the funds should be to. - /// @param value The amount in wei that should be sent. - function sendOrThrow(address recipient, uint value) public returns (bool) { - if (value > address(this).balance) - revert(); - - if (!recipient.send(value)) - revert(); - - return true; - } -} diff --git a/ethpm/assets/escrow/with_bytecode_v3.json b/ethpm/assets/escrow/with_bytecode_v3.json new file mode 100644 index 0000000000..50ef876269 --- /dev/null +++ b/ethpm/assets/escrow/with_bytecode_v3.json @@ -0,0 +1 @@ +{"contractTypes":{"Escrow":{"abi":[{"constant":true,"inputs":[],"name":"recipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sender","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"releaseFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_recipient","type":"address"}],"payable":true,"stateMutability":"payable","type":"constructor"}],"deploymentBytecode":{"bytecode":"0x608060405260405160208061056383398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506104ac806100b76000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806366d003ac1461005c57806367e404ce146100b357806369d895751461010a575b600080fd5b34801561006857600080fd5b50610071610121565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100bf57600080fd5b506100c8610147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561011657600080fd5b5061011f61016c565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102f257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156102b157600080fd5b505af41580156102c5573d6000803e3d6000fd5b505050506040513d60208110156102db57600080fd5b81019080805190602001909291905050505061047e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610478576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561043757600080fd5b505af415801561044b573d6000803e3d6000fd5b505050506040513d602081101561046157600080fd5b81019080805190602001909291905050505061047d565b600080fd5b5b5600a165627a7a72305820bd9c4ae36bcaaf04d521c1c78022fbfed3b34bff286af3c544b53dea8bf5fbe20029","linkReferences":[{"length":20,"name":"SafeSendLib","offsets":[691,1081]}]},"runtimeBytecode":{"bytecode":"0x608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806366d003ac1461005c57806367e404ce146100b357806369d895751461010a575b600080fd5b34801561006857600080fd5b50610071610121565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100bf57600080fd5b506100c8610147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561011657600080fd5b5061011f61016c565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102f257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156102b157600080fd5b505af41580156102c5573d6000803e3d6000fd5b505050506040513d60208110156102db57600080fd5b81019080805190602001909291905050505061047e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610478576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16730000000000000000000000000000000000000000639341231c90913073ffffffffffffffffffffffffffffffffffffffff16316040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561043757600080fd5b505af415801561044b573d6000803e3d6000fd5b505050506040513d602081101561046157600080fd5b81019080805190602001909291905050505061047d565b600080fd5b5b5600a165627a7a72305820bd9c4ae36bcaaf04d521c1c78022fbfed3b34bff286af3c544b53dea8bf5fbe20029","linkReferences":[{"length":20,"name":"SafeSendLib","offsets":[508,898]}]}},"SafeSendLib":{"abi":[{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"}],"name":"sendOrThrow","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"deploymentBytecode":{"bytecode":"0x61015e610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f3007300000000000000000000000000000000000000003014608060405260043610610058576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680639341231c1461005d575b600080fd5b81801561006957600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506100c2565b604051808215151515815260200191505060405180910390f35b60003073ffffffffffffffffffffffffffffffffffffffff16318211156100e857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561012857600080fd5b60019050929150505600a165627a7a7230582041b548ecef0d0db47b915605a920606883582fc2f47f7a5d3d55692c21d26a3f0029"},"runtimeBytecode":{"bytecode":"0x7300000000000000000000000000000000000000003014608060405260043610610058576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680639341231c1461005d575b600080fd5b81801561006957600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506100c2565b604051808215151515815260200191505060405180910390f35b60003073ffffffffffffffffffffffffffffffffffffffff16318211156100e857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561012857600080fd5b60019050929150505600a165627a7a7230582041b548ecef0d0db47b915605a920606883582fc2f47f7a5d3d55692c21d26a3f0029"}}},"manifest":"ethpm/3","name":"escrow","sources":{"Escrow.sol":{"urls":["ipfs://Qmbm91zWRqwjuRTSbuyVNUAV7umu5o594MzBMxWbEMRQPj"]},"SafeSendLib.sol":{"urls":["ipfs://QmXsTBDZvtGBsJHg1HKinz1p6QvhphLV8UPX6Jqo3LcKW3"]}},"version":"1.0.3"} \ No newline at end of file diff --git a/ethpm/assets/owned/1.0.0-pretty.json b/ethpm/assets/owned/1.0.0-pretty.json deleted file mode 100644 index 4c3f172506..0000000000 --- a/ethpm/assets/owned/1.0.0-pretty.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "manifest_version": "2", - "version": "1.0.0", - "package_name": "owned", - "meta": { - "license": "MIT", - "authors": [ - "Piper Merriam " - ], - "description": "Reusable contracts which implement a privileged 'owner' model for authorization.", - "keywords": [ - "authorization" - ], - "links": { - "documentation": "ipfs://QmUYcVzTfSwJoigggMxeo2g5STWAgJdisQsqcXHws7b1FW" - } - }, - "sources": { - "./contracts/Owned.sol": "ipfs://Qme4otpS88NV8yQi8TfTP89EsQC5bko3F5N1yhRoi6cwGV" - } -} diff --git a/ethpm/assets/owned/1.0.0.json b/ethpm/assets/owned/1.0.0.json deleted file mode 100644 index 5ba06816c8..0000000000 --- a/ethpm/assets/owned/1.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"manifest_version":"2","meta":{"authors":["Piper Merriam "],"description":"Reusable contracts which implement a privileged 'owner' model for authorization.","keywords":["authorization"],"license":"MIT","links":{"documentation":"ipfs://QmUYcVzTfSwJoigggMxeo2g5STWAgJdisQsqcXHws7b1FW"}},"package_name":"owned","sources":{"./Owned.sol":"ipfs://Qme4otpS88NV8yQi8TfTP89EsQC5bko3F5N1yhRoi6cwGV"},"version":"1.0.0"} \ No newline at end of file diff --git a/ethpm/assets/owned/1.0.1.json b/ethpm/assets/owned/1.0.1.json deleted file mode 100644 index a7232a93f1..0000000000 --- a/ethpm/assets/owned/1.0.1.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"Owned":{"abi":[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"deployment_bytecode":{"bytecode":"0x6080604052348015600f57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603580605d6000396000f3006080604052600080fd00a165627a7a72305820d6ab9e295aa1d1adb0fca69ce42c2c73e991afe290852e8247a208a78b352ff00029"}}},"manifest_version":"2","package_name":"owned","sources":{"Owned.sol":"pragma solidity ^0.4.24;\n\ncontract Owned {\n address owner;\n \n modifier onlyOwner { require(msg.sender == owner); _; }\n\n constructor() public {\n owner = msg.sender;\n }\n}\n"},"version":"1.0.1"} \ No newline at end of file diff --git a/ethpm/assets/owned/contracts/Owned.sol b/ethpm/assets/owned/contracts/Owned.sol deleted file mode 100644 index 1a900ff6e3..0000000000 --- a/ethpm/assets/owned/contracts/Owned.sol +++ /dev/null @@ -1,11 +0,0 @@ -pragma solidity ^0.4.24; - -contract Owned { - address owner; - - modifier onlyOwner { require(msg.sender == owner); _; } - - constructor() public { - owner = msg.sender; - } -} diff --git a/ethpm/assets/owned/output_v3.json b/ethpm/assets/owned/output_v3.json new file mode 100644 index 0000000000..b03d8412c8 --- /dev/null +++ b/ethpm/assets/owned/output_v3.json @@ -0,0 +1 @@ +{"contracts":{"Owned.sol":{"Owned":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"6080604052348015600f57600080fd5b50600080546001600160a01b03191633179055603f80602f6000396000f3fe6080604052600080fdfea26469706673582212208cbf6c3ccde7837026b3ec9660a0e95f1dbee0ce985f6879d7bc7e422519cc7564736f6c63430006080033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH1 0x3F DUP1 PUSH1 0x2F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0xBF PUSH13 0x3CCDE7837026B3EC9660A0E95F SAR 0xBE 0xE0 0xCE SWAP9 0x5F PUSH9 0x79D7BC7E422519CC75 PUSH5 0x736F6C6343 STOP MOD ADDMOD STOP CALLER ","sourceMap":"25:164:0:-:0;;;131:56;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;162:5:0;:18;;-1:-1:-1;;;;;;162:18:0;170:10;162:18;;;25:164;;;;;;"}},"metadata":"{\"compiler\":{\"version\":\"0.6.8+commit.0bbfe453\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"Owned.sol\":\"Owned\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"Owned.sol\":{\"keccak256\":\"0x38c04b8a01ef178bb0d8edc266f0ad107b52af2e913d26ef6248da83b40b88ca\",\"urls\":[\"bzz-raw://d7bfb3d5598469963d54a00878f253fb4df870dd10c35e822e1092a1e4a7f116\",\"dweb:/ipfs/QmQfmUAxLfpu5WMqwbjjjg8oqhiPVmwC4dGxf2mufmD3sw\"]}},\"version\":1}","userdoc":{"methods":{}}}}},"errors":[{"component":"general","formattedMessage":"Owned.sol: Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"Owned.sol","start":-1},"type":"Warning"}],"sources":{"Owned.sol":{"id":0}}} diff --git a/ethpm/assets/owned/owned_compiler_output.json b/ethpm/assets/owned/owned_compiler_output.json deleted file mode 100644 index 2b6015d68d..0000000000 --- a/ethpm/assets/owned/owned_compiler_output.json +++ /dev/null @@ -1 +0,0 @@ -{"contracts":{"Owned.sol":{"Owned":{"abi":[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"linkReferences":{},"object":"6080604052348015600f57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603580605d6000396000f3006080604052600080fd00a165627a7a72305820d6ab9e295aa1d1adb0fca69ce42c2c73e991afe290852e8247a208a78b352ff00029","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x35 DUP1 PUSH1 0x5D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd6 0xab SWAP15 0x29 GAS LOG1 0xd1 0xad 0xb0 0xfc 0xa6 SWAP13 0xe4 0x2c 0x2c PUSH20 0xE991AFE290852E8247A208A78B352FF000290000 ","sourceMap":"26:164:0:-;;;132:56;8:9:-1;5:2;;;30:1;27;20:12;5:2;132:56:0;171:10;163:5;;:18;;;;;;;;;;;;;;;;;;26:164;;;;;;"}}}}},"sources":{"Owned.sol":{"id":0}}} diff --git a/ethpm/assets/owned/owned_compiler_output_devdoc.json b/ethpm/assets/owned/owned_compiler_output_devdoc.json deleted file mode 100644 index 3a7b43cbf6..0000000000 --- a/ethpm/assets/owned/owned_compiler_output_devdoc.json +++ /dev/null @@ -1 +0,0 @@ -{"contracts":{"Owned.sol":{"Owned":{"abi":[{"constant":false,"inputs":[{"name":"test","type":"string"}],"name":"testMe","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"author":"Ongo Gablogian ","methods":{"testMe(string)":{"details":"Test dev string","params":{"test":"input param for testing solc output."}}},"title":"Owned contract for authentication"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061015e806100606000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636b7b33ab14610046575b600080fd5b34801561005257600080fd5b506100ad600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610128565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100ed5780820151818401526020810190506100d2565b50505050905090810190601f16801561011a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60608190509190505600a165627a7a723058201a5f6189562615e7e9b1a20b1c23ef24d8b916141fb6fca20a8753dd65f492a30029","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x15E DUP1 PUSH2 0x60 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x6B7B33AB EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP3 ADD DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x128 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xED JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11A JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 BYTE 0x5f PUSH2 0x8956 0x26 ISZERO 0xe7 0xe9 0xb1 LOG2 SIGNEXTEND SHR 0x23 0xef 0x24 0xd8 0xb9 AND EQ 0x1f 0xb6 0xfc LOG2 EXP DUP8 MSTORE8 0xdd PUSH6 0xF492A3002900 ","sourceMap":"121:319:0:-;;;228:56;8:9:-1;5:2;;;30:1;27;20:12;5:2;228:56:0;267:10;259:5;;:18;;;;;;;;;;;;;;;;;;121:319;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636b7b33ab14610046575b600080fd5b34801561005257600080fd5b506100ad600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610128565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100ed5780820151818401526020810190506100d2565b50505050905090810190601f16801561011a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60608190509190505600a165627a7a723058201a5f6189562615e7e9b1a20b1c23ef24d8b916141fb6fca20a8753dd65f492a30029","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x6B7B33AB EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP3 ADD DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x128 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xED JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11A JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 BYTE 0x5f PUSH2 0x8956 0x26 ISZERO 0xe7 0xe9 0xb1 LOG2 SIGNEXTEND SHR 0x23 0xef 0x24 0xd8 0xb9 AND EQ 0x1f 0xb6 0xfc LOG2 EXP DUP8 MSTORE8 0xdd PUSH6 0xF492A3002900 ","sourceMap":"121:319:0:-;;;;;;;;;;;;;;;;;;;;;;;;367:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;367:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;367:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;411:6;430:4;423:11;;367:71;;;:::o"}},"metadata":"{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"test\",\"type\":\"string\"}],\"name\":\"testMe\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"author\":\"Ongo Gablogian \",\"methods\":{\"testMe(string)\":{\"details\":\"Test dev string\",\"params\":{\"test\":\"input param for testing solc output.\"}}},\"title\":\"Owned contract for authentication\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"Owned.sol\":\"Owned\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"Owned.sol\":{\"keccak256\":\"0x002b6298b3fec6f539d9019cc87360474d45091fa40756a934aa0f98ccbfd353\",\"urls\":[\"bzzr://0ee8002b1f9b5db22f87aab02435670e60e07449ea0e9809e7b6ec97e6e2aed8\"]}},\"version\":1}"}}},"errors":[{"component":"general","formattedMessage":"Owned.sol:17:2: Warning: Function state mutability can be restricted to pure\n\tfunction testMe(string test) public returns(string) {\n ^ (Relevant source part starts here and spans across multiple lines).\n","message":"Function state mutability can be restricted to pure","severity":"warning","sourceLocation":{"end":438,"file":"Owned.sol","start":367},"type":"Warning"}],"sources":{"Owned.sol":{"id":0}}} diff --git a/ethpm/assets/owned/with_contract_type_v3.json b/ethpm/assets/owned/with_contract_type_v3.json new file mode 100644 index 0000000000..17ef8c33b6 --- /dev/null +++ b/ethpm/assets/owned/with_contract_type_v3.json @@ -0,0 +1 @@ +{"contractTypes":{"Owned":{"abi":[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"deploymentBytecode":{"bytecode":"0x6080604052348015600f57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603580605d6000396000f3006080604052600080fd00a165627a7a72305820d6ab9e295aa1d1adb0fca69ce42c2c73e991afe290852e8247a208a78b352ff00029"}}},"manifest":"ethpm/3","name":"owned","sources":{"Owned.sol":{"content":"pragma solidity ^0.4.24;\n\ncontract Owned {\n address owner;\n \n modifier onlyOwner { require(msg.sender == owner); _; }\n\n constructor() public {\n owner = msg.sender;\n }\n}\n"}},"version":"1.0.1"} diff --git a/ethpm/assets/piper-coin/1.0.0-pretty.json b/ethpm/assets/piper-coin/1.0.0-pretty.json deleted file mode 100644 index 0c541801ab..0000000000 --- a/ethpm/assets/piper-coin/1.0.0-pretty.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "manifest_version": "2", - "version": "1.0.0", - "package_name": "piper-coin", - "deployments": { - "blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/4803939cf88aaf46fb7c9fb771cda4e4072c6c5fe3aaad1860f7064ef18f50b9": { - "PiperCoin": { - "contract_type": "standard-token:StandardToken", - "address": "0xC70871869Ff35e9d08e650b49F23891DB462F181", - "transaction": "0x93f6c5fbdb4c62f1bff8bace3ec2f80267b6cdd3710c36f9b1445031175d9f6f", - "block": "0xb21dda724b6f14bcdde1db9703a5c1bfb088763acdb725be2429c1ef8ce0a4e1", - "deployment_bytecode": { - "bytecode": "0x608060405234801561001057600080fd5b5060405160208061045383398101604081815291516002819055336000818152602081815285822084905583855294519294919390927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506103d2806100816000396000f3006080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100b457806323b872dd146100db57806370a0823114610105578063a9059cbb14610126578063dd62ed3e1461014a575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610171565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100c96101d8565b60408051918252519081900360200190f35b3480156100e757600080fd5b506100a0600160a060020a03600435811690602435166044356101de565b34801561011157600080fd5b506100c9600160a060020a03600435166102c9565b34801561013257600080fd5b506100a0600160a060020a03600435166024356102e4565b34801561015657600080fd5b506100c9600160a060020a036004358116906024351661037b565b336000818152600160209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60025481565b600160a060020a03831660009081526020819052604081205482118015906102295750600160a060020a03841660009081526001602090815260408083203384529091529020548211155b80156102355750600082115b156102be57600160a060020a0380841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060016102c2565b5060005b9392505050565b600160a060020a031660009081526020819052604090205490565b3360009081526020819052604081205482118015906103035750600082115b15610373573360008181526020818152604080832080548790039055600160a060020a03871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060016101d2565b5060006101d2565b600160a060020a039182166000908152600160209081526040808320939094168252919091522054905600a165627a7a72305820cf9d6a3f751ca1e6b9bc2324e42633a4cde513d64c3e6cc32d6359629249e90200290000000000000000000000000000000000000000000000000000000000000001" - }, - "runtime_bytecode": { - "bytecode": "0x6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100b457806323b872dd146100db57806370a0823114610105578063a9059cbb14610126578063dd62ed3e1461014a575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610171565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100c96101d8565b60408051918252519081900360200190f35b3480156100e757600080fd5b506100a0600160a060020a03600435811690602435166044356101de565b34801561011157600080fd5b506100c9600160a060020a03600435166102c9565b34801561013257600080fd5b506100a0600160a060020a03600435166024356102e4565b34801561015657600080fd5b506100c9600160a060020a036004358116906024351661037b565b336000818152600160209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60025481565b600160a060020a03831660009081526020819052604081205482118015906102295750600160a060020a03841660009081526001602090815260408083203384529091529020548211155b80156102355750600082115b156102be57600160a060020a0380841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060016102c2565b5060005b9392505050565b600160a060020a031660009081526020819052604090205490565b3360009081526020819052604081205482118015906103035750600082115b15610373573360008181526020818152604080832080548790039055600160a060020a03871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060016101d2565b5060006101d2565b600160a060020a039182166000908152600160209081526040808320939094168252919091522054905600a165627a7a72305820cf9d6a3f751ca1e6b9bc2324e42633a4cde513d64c3e6cc32d6359629249e9020029" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang", - "settings": { - "optimize": true - } - } - } - } - }, - "build_dependencies": { - "standard-token": "ipfs://QmVu9zuza5mkJwwcFdh2SXBugm1oSgZVuEKkph9XLsbUwg" - } -} diff --git a/ethpm/assets/piper-coin/1.0.0.json b/ethpm/assets/piper-coin/1.0.0.json deleted file mode 100644 index 33590d0bb6..0000000000 --- a/ethpm/assets/piper-coin/1.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"build_dependencies":{"standard-token":"ipfs://QmVu9zuza5mkJwwcFdh2SXBugm1oSgZVuEKkph9XLsbUwg"},"deployments":{"blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/4803939cf88aaf46fb7c9fb771cda4e4072c6c5fe3aaad1860f7064ef18f50b9":{"PiperCoin":{"address":"0xC70871869Ff35e9d08e650b49F23891DB462F181","block":"0xb21dda724b6f14bcdde1db9703a5c1bfb088763acdb725be2429c1ef8ce0a4e1","compiler":{"name":"solc","settings":{"optimize":true},"version":"0.4.24+commit.e67f0147.Emscripten.clang"},"contract_type":"standard-token:StandardToken","deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b5060405160208061045383398101604081815291516002819055336000818152602081815285822084905583855294519294919390927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506103d2806100816000396000f3006080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100b457806323b872dd146100db57806370a0823114610105578063a9059cbb14610126578063dd62ed3e1461014a575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610171565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100c96101d8565b60408051918252519081900360200190f35b3480156100e757600080fd5b506100a0600160a060020a03600435811690602435166044356101de565b34801561011157600080fd5b506100c9600160a060020a03600435166102c9565b34801561013257600080fd5b506100a0600160a060020a03600435166024356102e4565b34801561015657600080fd5b506100c9600160a060020a036004358116906024351661037b565b336000818152600160209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60025481565b600160a060020a03831660009081526020819052604081205482118015906102295750600160a060020a03841660009081526001602090815260408083203384529091529020548211155b80156102355750600082115b156102be57600160a060020a0380841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060016102c2565b5060005b9392505050565b600160a060020a031660009081526020819052604090205490565b3360009081526020819052604081205482118015906103035750600082115b15610373573360008181526020818152604080832080548790039055600160a060020a03871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060016101d2565b5060006101d2565b600160a060020a039182166000908152600160209081526040808320939094168252919091522054905600a165627a7a72305820cf9d6a3f751ca1e6b9bc2324e42633a4cde513d64c3e6cc32d6359629249e90200290000000000000000000000000000000000000000000000000000000000000001"},"runtime_bytecode":{"bytecode":"0x6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100b457806323b872dd146100db57806370a0823114610105578063a9059cbb14610126578063dd62ed3e1461014a575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610171565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100c96101d8565b60408051918252519081900360200190f35b3480156100e757600080fd5b506100a0600160a060020a03600435811690602435166044356101de565b34801561011157600080fd5b506100c9600160a060020a03600435166102c9565b34801561013257600080fd5b506100a0600160a060020a03600435166024356102e4565b34801561015657600080fd5b506100c9600160a060020a036004358116906024351661037b565b336000818152600160209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60025481565b600160a060020a03831660009081526020819052604081205482118015906102295750600160a060020a03841660009081526001602090815260408083203384529091529020548211155b80156102355750600082115b156102be57600160a060020a0380841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060016102c2565b5060005b9392505050565b600160a060020a031660009081526020819052604090205490565b3360009081526020819052604081205482118015906103035750600082115b15610373573360008181526020818152604080832080548790039055600160a060020a03871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060016101d2565b5060006101d2565b600160a060020a039182166000908152600160209081526040808320939094168252919091522054905600a165627a7a72305820cf9d6a3f751ca1e6b9bc2324e42633a4cde513d64c3e6cc32d6359629249e9020029"},"transaction":"0x93f6c5fbdb4c62f1bff8bace3ec2f80267b6cdd3710c36f9b1445031175d9f6f"}}},"manifest_version":"2","package_name":"piper-coin","version":"1.0.0"} diff --git a/ethpm/assets/registry/1.0.0.json b/ethpm/assets/registry/1.0.0.json deleted file mode 100644 index 43b9729446..0000000000 --- a/ethpm/assets/registry/1.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"AuthorityInterface":{"abi":[{"constant":true,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"}],"name":"canCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}],"deployment_bytecode":{"bytecode":"0x"},"runtime_bytecode":{"bytecode":"0x"}},"Authorized":{"abi":[{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3610758806100c66000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af4035146100675780637a9e5e4b146100c25780638da5cb5b1461011d578063bf7e214f14610174575b600080fd5b34801561007357600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101cb565b604051808215151515815260200191505060405180910390f35b3480156100ce57600080fd5b50610103600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610333565b604051808215151515815260200191505060405180910390f35b34801561012957600080fd5b5061013261049d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018057600080fd5b506101896104c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006101d56104e8565b151561026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061033d6104e8565b15156103d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105485760019050610729565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105925760009050610729565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b1580156106eb57600080fd5b505afa1580156106ff573d6000803e3d6000fd5b505050506040513d602081101561071557600080fd5b810190808051906020019092919050505090505b905600a165627a7a7230582017b7c52e0047449f2b775293f289f4bc4b3505ff3267070c5e83b193acfc5ab40029"},"runtime_bytecode":{"bytecode":"0x608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af4035146100675780637a9e5e4b146100c25780638da5cb5b1461011d578063bf7e214f14610174575b600080fd5b34801561007357600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101cb565b604051808215151515815260200191505060405180910390f35b3480156100ce57600080fd5b50610103600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610333565b604051808215151515815260200191505060405180910390f35b34801561012957600080fd5b5061013261049d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018057600080fd5b506101896104c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006101d56104e8565b151561026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061033d6104e8565b15156103d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105485760019050610729565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105925760009050610729565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b1580156106eb57600080fd5b505afa1580156106ff573d6000803e3d6000fd5b505050506040513d602081101561071557600080fd5b810190808051906020019092919050505090505b905600a165627a7a7230582017b7c52e0047449f2b775293f289f4bc4b3505ff3267070c5e83b193acfc5ab40029"}},"AuthorizedInterface":{"abi":[{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deployment_bytecode":{"bytecode":"0x"},"runtime_bytecode":{"bytecode":"0x"}},"IndexedOrderedSetLib":{"abi":[{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"}],"name":"size","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"indexOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"contains","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"idx","type":"uint256"}],"name":"get","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"add","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"remove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"idx","type":"uint256"}],"name":"pop","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"deployment_bytecode":{"bytecode":"0x6106df610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f300730000000000000000000000000000000000000000301460806040526004361061009a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631aeaa5041461009f57806326966f11146100d35780632a2dbb481461011557806377e91da11461015b57806391d8a284146101a1578063ed05c0c5146101f4578063f78a9f9514610247575b600080fd5b6100bd6004803603810190808035906020019092919050505061029a565b6040518082815260200191505060405180910390f35b6100ff6004803603810190808035906020019092919080356000191690602001909291905050506102ab565b6040518082815260200191505060405180910390f35b61014160048036038101908080359060200190929190803560001916906020019092919050505061037b565b604051808215151515815260200191505060405180910390f35b61018360048036038101908080359060200190929190803590602001909291905050506103b0565b60405180826000191660001916815260200191505060405180910390f35b8180156101ad57600080fd5b506101da6004803603810190808035906020019092919080356000191690602001909291905050506103d6565b604051808215151515815260200191505060405180910390f35b81801561020057600080fd5b5061022d60048036038101908080359060200190929190803560001916906020019092919050505061048e565b604051808215151515815260200191505060405180910390f35b81801561025357600080fd5b5061027c600480360381019080803590602001909291908035906020019092919050505061055b565b60405180826000191660001916815260200191505060405180910390f35b600081600001805490509050919050565b600082826102b9828261037b565b1515610353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b8460010160008560001916600019168152602001908152602001600020549250505092915050565b6000826002016000836000191660001916815260200190815260200160002060009054906101000a900460ff16905092915050565b600082600001828154811015156103c357fe5b9060005260206000200154905092915050565b60006103e2838361037b565b156103f05760019050610488565b8260000180549050836001016000846000191660001916815260200190815260200160002081905550826000018290806001815401808255809150509060018203906000526020600020016000909192909190915090600019169055506001836002016000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600190505b92915050565b600080838361049d828261037b565b1515610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b61054186866102ab565b925061054d868461055b565b506001935050505092915050565b600080600061056a85856103b0565b91506001856000018054905003841415156105ee5784600001600186600001805490500381548110151561059a57fe5b906000526020600020015490508085600001858154811015156105b957fe5b906000526020600020018160001916905550838560010160008360001916600019168152602001908152602001600020819055505b600185600001818180549050039150816106089190610662565b50846001016000836000191660001916815260200190815260200160002060009055846002016000836000191660001916815260200190815260200160002060006101000a81549060ff0219169055819250505092915050565b81548183558181111561068957818360005260206000209182019101610688919061068e565b5b505050565b6106b091905b808211156106ac576000816000905550600101610694565b5090565b905600a165627a7a72305820b8aa404539ab3e355589a8d47bdc01f1d40fcef1ba319fa8653dfecd8c9180170029"},"runtime_bytecode":{"bytecode":"0x730000000000000000000000000000000000000000301460806040526004361061009a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631aeaa5041461009f57806326966f11146100d35780632a2dbb481461011557806377e91da11461015b57806391d8a284146101a1578063ed05c0c5146101f4578063f78a9f9514610247575b600080fd5b6100bd6004803603810190808035906020019092919050505061029a565b6040518082815260200191505060405180910390f35b6100ff6004803603810190808035906020019092919080356000191690602001909291905050506102ab565b6040518082815260200191505060405180910390f35b61014160048036038101908080359060200190929190803560001916906020019092919050505061037b565b604051808215151515815260200191505060405180910390f35b61018360048036038101908080359060200190929190803590602001909291905050506103b0565b60405180826000191660001916815260200191505060405180910390f35b8180156101ad57600080fd5b506101da6004803603810190808035906020019092919080356000191690602001909291905050506103d6565b604051808215151515815260200191505060405180910390f35b81801561020057600080fd5b5061022d60048036038101908080359060200190929190803560001916906020019092919050505061048e565b604051808215151515815260200191505060405180910390f35b81801561025357600080fd5b5061027c600480360381019080803590602001909291908035906020019092919050505061055b565b60405180826000191660001916815260200191505060405180910390f35b600081600001805490509050919050565b600082826102b9828261037b565b1515610353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b8460010160008560001916600019168152602001908152602001600020549250505092915050565b6000826002016000836000191660001916815260200190815260200160002060009054906101000a900460ff16905092915050565b600082600001828154811015156103c357fe5b9060005260206000200154905092915050565b60006103e2838361037b565b156103f05760019050610488565b8260000180549050836001016000846000191660001916815260200190815260200160002081905550826000018290806001815401808255809150509060018203906000526020600020016000909192909190915090600019169055506001836002016000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600190505b92915050565b600080838361049d828261037b565b1515610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b61054186866102ab565b925061054d868461055b565b506001935050505092915050565b600080600061056a85856103b0565b91506001856000018054905003841415156105ee5784600001600186600001805490500381548110151561059a57fe5b906000526020600020015490508085600001858154811015156105b957fe5b906000526020600020018160001916905550838560010160008360001916600019168152602001908152602001600020819055505b600185600001818180549050039150816106089190610662565b50846001016000836000191660001916815260200190815260200160002060009055846002016000836000191660001916815260200190815260200160002060006101000a81549060ff0219169055819250505092915050565b81548183558181111561068957818360005260206000209182019101610688919061068e565b5b505050565b6106b091905b808211156106ac576000816000905550600101610694565b5090565b905600a165627a7a72305820b8aa404539ab3e355589a8d47bdc01f1d40fcef1ba319fa8653dfecd8c9180170029"}},"PackageDB":{"abi":[{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"reason","type":"string"}],"name":"removePackage","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"}],"name":"setPackage","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"newPackageOwner","type":"address"}],"name":"setPackageOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNumPackages","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getPackageNameHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"hashName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getPackageData","outputs":[{"name":"packageOwner","type":"address"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"releaseHash","type":"bytes32"}],"name":"PackageReleaseAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"releaseHash","type":"bytes32"}],"name":"PackageReleaseRemove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"}],"name":"PackageCreate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":false,"name":"reason","type":"string"}],"name":"PackageDelete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageOwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3611a8a806100b96000396000f3006080604052600436106100cf576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680621f8d11146100d457806306fe1fd714610163578063083ae1fe1461020d57806313af40351461028e5780632406cedb146102e957806343212cf1146103525780637370a38d146103e55780637a9e5e4b146104105780638da5cb5b1461046b57806395f0684b146104c2578063a9b352401461050b578063af9a3f9b14610554578063b4d6d4c7146105d9578063bf7e214f14610658575b600080fd5b3480156100e057600080fd5b506101496004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506106af565b604051808215151515815260200191505060405180910390f35b34801561016f57600080fd5b5061019260048036038101908080356000191690602001909291905050506109d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d25780820151818401526020810190506101b7565b50505050905090810190601f1680156101ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021957600080fd5b50610274600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610b3b565b604051808215151515815260200191505060405180910390f35b34801561029a57600080fd5b506102cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b604051808215151515815260200191505060405180910390f35b3480156102f557600080fd5b506103386004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ec0565b604051808215151515815260200191505060405180910390f35b34801561035e57600080fd5b506103876004803603810190808035906020019092919080359060200190929190505050611130565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156103d05780820151818401526020810190506103b5565b50505050905001935050505060405180910390f35b3480156103f157600080fd5b506103fa6111fc565b6040518082815260200191505060405180910390f35b34801561041c57600080fd5b50610451600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ac565b604051808215151515815260200191505060405180910390f35b34801561047757600080fd5b50610480611416565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ce57600080fd5b506104ed6004803603810190808035906020019092919050505061143b565b60405180826000191660001916815260200191505060405180910390f35b34801561051757600080fd5b5061053a60048036038101908080356000191690602001909291905050506114f5565b604051808215151515815260200191505060405180910390f35b34801561056057600080fd5b506105bb600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061152a565b60405180826000191660001916815260200191505060405180910390f35b3480156105e557600080fd5b506106086004803603810190808035600019169060200190929190505050611602565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34801561066457600080fd5b5061066d611707565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006106b961172d565b1515610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8261075d816114f5565b15156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b83600019167f188d63b2c009063a155fbcf0c8121b521638675d3d54561c1955bbec5b9ea6bb846040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085e578082015181840152602081019050610843565b50505050905090810190601f16801561088b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2600260008560001916600019168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905560028201600090556003820160006108e89190611971565b6004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600373000000000000000000000000000000000000000063ed05c0c59091866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b15801561098f57600080fd5b505af41580156109a3573d6000803e3d6000fd5b505050506040513d60208110156109b957600080fd5b810190808051906020019092919050505050600191505092915050565b6060816109e2816114f5565b1515610a7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050915050919050565b6000806000610b4861172d565b1515610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610beb8461152a565b91506002600083600019166000191681526020019081526020016000209050610c13826114f5565b1515610d445760018160000160006101000a81548160ff02191690831515021790555042816001018190555083816003019080519060200190610c579291906119b9565b5060037300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610cd657600080fd5b505af4158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b81019080805190602001909291905050505081600019167f94d68ac0a5dee0e8dd504e7e82e1fb1eb122682ceb9fc6aa6647f203fee26f1e60405160405180910390a25b428160020181905550600192505050919050565b6000610d6261172d565b1515610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610eca61172d565b1515610f64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82610f6e816114f5565b1515611008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660026000866000191660001916815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685600019167ffe2ec6b3a2236fea1f48069f386e0daac1b7b56b918998a3c3a282159461881760405160405180910390a48260026000866000191660001916815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260026000866000191660001916815260200190815260200160002060020181905550600191505092915050565b6060600060606000806000808893506111476111fc565b9150818410156111ea57838203925087831115611162578792505b826040519080825280602002602001820160405280156111915781602001602082028038833980820191505090505b5094505b60008311156111e9576111a78461143b565b90508085600185038151811015156111bb57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611195565b5b84849650965050505050509250929050565b60006003730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561126c57600080fd5b505af4158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b8101908080519060200190929190505050905090565b60006112b661172d565b1515611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060037300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b1580156114b357600080fd5b505af41580156114c7573d6000803e3d6000fd5b505050506040513d60208110156114dd57600080fd5b81019080805190602001909291905050509050919050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000816040516020018082805190602001908083835b6020831015156115655780518252602082019150602081019050602083039250611540565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831015156115ce57805182526020820191506020810190506020830392506115a9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b60008060008084611612816114f5565b15156116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000876000191660001916815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260010154836002015494509450945050509193909250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561178d576001905061196e565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117d7576000905061196e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561193057600080fd5b505afa158015611944573d6000803e3d6000fd5b505050506040513d602081101561195a57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f1061199757506119b6565b601f0160209004906000526020600020908101906119b59190611a39565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119fa57805160ff1916838001178555611a28565b82800160010185558215611a28579182015b82811115611a27578251825591602001919060010190611a0c565b5b509050611a359190611a39565b5090565b611a5b91905b80821115611a57576000816000905550600101611a3f565b5090565b905600a165627a7a7230582076e996c2669facdc9f56e3a40a582c28b737598937586c51748c06c81ef351bf0029","link_references":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2510,3349,4795,5370]}]},"runtime_bytecode":{"bytecode":"0x6080604052600436106100cf576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680621f8d11146100d457806306fe1fd714610163578063083ae1fe1461020d57806313af40351461028e5780632406cedb146102e957806343212cf1146103525780637370a38d146103e55780637a9e5e4b146104105780638da5cb5b1461046b57806395f0684b146104c2578063a9b352401461050b578063af9a3f9b14610554578063b4d6d4c7146105d9578063bf7e214f14610658575b600080fd5b3480156100e057600080fd5b506101496004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506106af565b604051808215151515815260200191505060405180910390f35b34801561016f57600080fd5b5061019260048036038101908080356000191690602001909291905050506109d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d25780820151818401526020810190506101b7565b50505050905090810190601f1680156101ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021957600080fd5b50610274600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610b3b565b604051808215151515815260200191505060405180910390f35b34801561029a57600080fd5b506102cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b604051808215151515815260200191505060405180910390f35b3480156102f557600080fd5b506103386004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ec0565b604051808215151515815260200191505060405180910390f35b34801561035e57600080fd5b506103876004803603810190808035906020019092919080359060200190929190505050611130565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156103d05780820151818401526020810190506103b5565b50505050905001935050505060405180910390f35b3480156103f157600080fd5b506103fa6111fc565b6040518082815260200191505060405180910390f35b34801561041c57600080fd5b50610451600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ac565b604051808215151515815260200191505060405180910390f35b34801561047757600080fd5b50610480611416565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ce57600080fd5b506104ed6004803603810190808035906020019092919050505061143b565b60405180826000191660001916815260200191505060405180910390f35b34801561051757600080fd5b5061053a60048036038101908080356000191690602001909291905050506114f5565b604051808215151515815260200191505060405180910390f35b34801561056057600080fd5b506105bb600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061152a565b60405180826000191660001916815260200191505060405180910390f35b3480156105e557600080fd5b506106086004803603810190808035600019169060200190929190505050611602565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34801561066457600080fd5b5061066d611707565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006106b961172d565b1515610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8261075d816114f5565b15156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b83600019167f188d63b2c009063a155fbcf0c8121b521638675d3d54561c1955bbec5b9ea6bb846040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085e578082015181840152602081019050610843565b50505050905090810190601f16801561088b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2600260008560001916600019168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905560028201600090556003820160006108e89190611971565b6004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600373000000000000000000000000000000000000000063ed05c0c59091866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b15801561098f57600080fd5b505af41580156109a3573d6000803e3d6000fd5b505050506040513d60208110156109b957600080fd5b810190808051906020019092919050505050600191505092915050565b6060816109e2816114f5565b1515610a7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050915050919050565b6000806000610b4861172d565b1515610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610beb8461152a565b91506002600083600019166000191681526020019081526020016000209050610c13826114f5565b1515610d445760018160000160006101000a81548160ff02191690831515021790555042816001018190555083816003019080519060200190610c579291906119b9565b5060037300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610cd657600080fd5b505af4158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b81019080805190602001909291905050505081600019167f94d68ac0a5dee0e8dd504e7e82e1fb1eb122682ceb9fc6aa6647f203fee26f1e60405160405180910390a25b428160020181905550600192505050919050565b6000610d6261172d565b1515610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610eca61172d565b1515610f64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82610f6e816114f5565b1515611008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660026000866000191660001916815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685600019167ffe2ec6b3a2236fea1f48069f386e0daac1b7b56b918998a3c3a282159461881760405160405180910390a48260026000866000191660001916815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260026000866000191660001916815260200190815260200160002060020181905550600191505092915050565b6060600060606000806000808893506111476111fc565b9150818410156111ea57838203925087831115611162578792505b826040519080825280602002602001820160405280156111915781602001602082028038833980820191505090505b5094505b60008311156111e9576111a78461143b565b90508085600185038151811015156111bb57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611195565b5b84849650965050505050509250929050565b60006003730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561126c57600080fd5b505af4158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b8101908080519060200190929190505050905090565b60006112b661172d565b1515611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060037300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b1580156114b357600080fd5b505af41580156114c7573d6000803e3d6000fd5b505050506040513d60208110156114dd57600080fd5b81019080805190602001909291905050509050919050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000816040516020018082805190602001908083835b6020831015156115655780518252602082019150602081019050602083039250611540565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831015156115ce57805182526020820191506020810190506020830392506115a9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b60008060008084611612816114f5565b15156116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000876000191660001916815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260010154836002015494509450945050509193909250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561178d576001905061196e565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117d7576000905061196e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561193057600080fd5b505afa158015611944573d6000803e3d6000fd5b505050506040513d602081101561195a57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f1061199757506119b6565b601f0160209004906000526020600020908101906119b59190611a39565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119fa57805160ff1916838001178555611a28565b82800160010185558215611a28579182015b82811115611a27578251825591602001919060010190611a0c565b5b509050611a359190611a39565b5090565b611a5b91905b80821115611a57576000816000905550600101611a3f565b5090565b905600a165627a7a7230582076e996c2669facdc9f56e3a40a582c28b737598937586c51748c06c81ef351bf0029","link_references":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2325,3164,4610,5185]}]}},"PackageRegistry":{"abi":[{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReleaseValidator","type":"address"}],"name":"setReleaseValidator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPackageDb","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPackageDb","type":"address"}],"name":"setPackageDb","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"id","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReleaseValidator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"newPackageOwner","type":"address"}],"name":"transferPackageOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"getPackageData","outputs":[{"name":"packageOwner","type":"address"},{"name":"createdAt","type":"uint256"},{"name":"numReleases","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"_offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"version","type":"string"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReleaseDb","type":"address"}],"name":"setReleaseDb","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getReleaseDb","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"releaseId","type":"bytes32"}],"name":"PackageRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a36145ca806100b96000396000f300608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fe1fd71461013857806310ae4ce2146101e257806313af40351461023d5780631fb1c6c014610298578063271cd7601461036357806334c0d654146103ba578063379037dc1461041557806343212cf1146105265780634961b40c146105b95780634c4aea87146106105780634f197ee7146107925780637a9e5e4b1461083357806383ea06201461088e5780638da5cb5b1461090f578063a54fb68514610966578063b4b42e3514610991578063bf7e214f14610a5c578063c2ba5b4014610ab3578063c999a3b214610b71578063eb8cc47c14610c4a578063efae87d714610cc7578063f314bf4614610d8e578063fb3a1fb214610de9575b600080fd5b34801561014457600080fd5b506101676004803603810190808035600019169060200190929190505050610e40565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a757808201518184015260208101905061018c565b50505050905090810190601f1680156101d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ee57600080fd5b50610223600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f71565b604051808215151515815260200191505060405180910390f35b34801561024957600080fd5b5061027e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105f565b604051808215151515815260200191505060405180910390f35b3480156102a457600080fd5b50610345600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111c7565b60405180826000191660001916815260200191505060405180910390f35b34801561036f57600080fd5b5061037861134c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611376565b604051808215151515815260200191505060405180910390f35b34801561042157600080fd5b50610508600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611464565b60405180826000191660001916815260200191505060405180910390f35b34801561053257600080fd5b5061055b60048036038101908080359060200190929190803590602001909291905050506123b2565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105a4578082015181840152602081019050610589565b50505050905001935050505060405180910390f35b3480156105c557600080fd5b506105ce6124f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061c57600080fd5b5061063f6004803603810190808035600019169060200190929190505050612520565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561068757808201518184015260208101905061066c565b50505050905090810190601f1680156106b45780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106ed5780820151818401526020810190506106d2565b50505050905090810190601f16801561071a5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610753578082015181840152602081019050610738565b50505050905090810190601f1680156107805780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561079e57600080fd5b50610819600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129b3565b604051808215151515815260200191505060405180910390f35b34801561083f57600080fd5b50610874600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d20565b604051808215151515815260200191505060405180910390f35b34801561089a57600080fd5b506108f5600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612e8a565b604051808215151515815260200191505060405180910390f35b34801561091b57600080fd5b50610924613093565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561097257600080fd5b5061097b6130b8565b6040518082815260200191505060405180910390f35b34801561099d57600080fd5b50610a3e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613183565b60405180826000191660001916815260200191505060405180910390f35b348015610a6857600080fd5b50610a7161348e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610abf57600080fd5b50610b1a600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506134b4565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b348015610b7d57600080fd5b50610bec600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190803590602001909291905050506137c7565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610c35578082015181840152602081019050610c1a565b50505050905001935050505060405180910390f35b348015610c5657600080fd5b50610cb1600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613a4f565b6040518082815260200191505060405180910390f35b348015610cd357600080fd5b50610d74600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613dcf565b604051808215151515815260200191505060405180910390f35b348015610d9a57600080fd5b50610dcf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506141f3565b604051808215151515815260200191505060405180910390f35b348015610df557600080fd5b50610dfe6142e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b158015610ed957600080fd5b505afa158015610eed573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610f1757600080fd5b810190808051640100000000811115610f2f57600080fd5b82810190506020810184811115610f4557600080fd5b8151856001820283011164010000000082111715610f6257600080fd5b50509291905050509050919050565b6000610f7b61430b565b1515611015576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061106961430b565b1515611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806111d48484613183565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561126d57600080fd5b505afa158015611281573d6000803e3d6000fd5b505050506040513d602081101561129757600080fd5b81019080805190602001909291905050501515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a76657273696f6e2d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8091505092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061138061430b565b151561141a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600080600080600061147461430b565b151561150e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a7061636b6167652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156116bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d76616c6981526020017f6461746f722d6e6f742d7365740000000000000000000000000000000000000081525060400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561183d578082015181840152602081019050611822565b50505050905090810190601f16801561186a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561188757600080fd5b505afa15801561189b573d6000803e3d6000fd5b505050506040513d60208110156118b157600080fd5b81019080805190602001909291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb814e9e856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561195b57600080fd5b505afa15801561196f573d6000803e3d6000fd5b505050506040513d602081101561198557600080fd5b81019080805190602001909291905050501515611acf57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788bc78c886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a46578082015181840152602081019050611a2b565b50505050905090810190601f168015611a735780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611a9257600080fd5b505af1158015611aa6573d6000803e3d6000fd5b505050506040513d6020811015611abc57600080fd5b8101908080519060200190929190505050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028fe498600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338c8c8c6040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611c60578082015181840152602081019050611c45565b50505050905090810190601f168015611c8d5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015611cc6578082015181840152602081019050611cab565b50505050905090810190601f168015611cf35780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015611d2c578082015181840152602081019050611d11565b50505050905090810190601f168015611d595780820380516001836020036101000a031916815260200191505b50995050505050505050505060206040518083038186803b158015611d7d57600080fd5b505afa158015611d91573d6000803e3d6000fd5b505050506040513d6020811015611da757600080fd5b810190808051906020019092919050505050611dc288612e8a565b9250600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663083ae1fe896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e6e578082015181840152602081019050611e53565b50505050905090810190601f168015611e9b5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b505050506040513d6020811015611ee457600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fa0578082015181840152602081019050611f85565b50505050905090810190601f168015611fcd5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611fea57600080fd5b505afa158015611ffe573d6000803e3d6000fd5b505050506040513d602081101561201457600080fd5b8101908080519060200190929190505050915082151561213857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb83336040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156120fb57600080fd5b505af115801561210f573d6000803e3d6000fd5b505050506040513d602081101561212557600080fd5b8101908080519060200190929190505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b8594098386896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122005780820151818401526020810190506121e5565b50505050905090810190601f16801561222d5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561224e57600080fd5b505af1158015612262573d6000803e3d6000fd5b505050506040513d602081101561227857600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910583866040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b15801561233157600080fd5b505afa158015612345573d6000803e3d6000fd5b505050506040513d602081101561235b57600080fd5b81019080805190602001909291905050509050806000191682600019167fac0f7a48e2519eee455114a50e2ccd53b8f68a28609b5532bdb924638d3d4a0760405160405180910390a3809450505050509392505050565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343212cf185856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060006040518083038186803b15801561244d57600080fd5b505afa158015612461573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561248b57600080fd5b8101908080516401000000008111156124a357600080fd5b828101905060208101848111156124b957600080fd5b81518560208202830111640100000000821117156124d657600080fd5b505092919060200180519060200190929190505050915091509250929050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060806060600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c4aea87876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060806040518083038186803b1580156125bf57600080fd5b505afa1580156125d3573d6000803e3d6000fd5b505050506040513d60808110156125e957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509050508093508192505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b1580156126ba57600080fd5b505afa1580156126ce573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156126f857600080fd5b81019080805164010000000081111561271057600080fd5b8281019050602081018481111561272657600080fd5b815185600182028301116401000000008211171561274357600080fd5b50509291905050509450600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aaf9f08836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b1580156127e457600080fd5b505afa1580156127f8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561282257600080fd5b81019080805164010000000081111561283a57600080fd5b8281019050602081018481111561285057600080fd5b815185600182028301116401000000008211171561286d57600080fd5b50509291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d672640d876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561290e57600080fd5b505afa158015612922573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561294c57600080fd5b81019080805164010000000081111561296457600080fd5b8281019050602081018481111561297a57600080fd5b815185600182028301116401000000008211171561299757600080fd5b5050929190505050925084848494509450945050509193909250565b6000806129be61430b565b1515612a58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b612a62843361454f565b15612a705760009150612d19565b612a79846134b4565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa99a0b26852fc94fb40663ad64c63bac913f2e345ff098ea82209694879cb95e60405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bc5578082015181840152602081019050612baa565b50505050905090810190601f168015612bf25780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015612c0f57600080fd5b505afa158015612c23573d6000803e3d6000fd5b505050506040513d6020811015612c3957600080fd5b8101908080519060200190929190505050856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015612cd857600080fd5b505af1158015612cec573d6000803e3d6000fd5b505050506040513d6020811015612d0257600080fd5b810190808051906020019092919050505050600191505b5092915050565b6000612d2a61430b565b1515612dc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9b35240600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f74578082015181840152602081019050612f59565b50505050905090810190601f168015612fa15780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015612fbe57600080fd5b505afa158015612fd2573d6000803e3d6000fd5b505050506040513d6020811015612fe857600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561305157600080fd5b505afa158015613065573d6000803e3d6000fd5b505050506040513d602081101561307b57600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637370a38d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561313f57600080fd5b505afa158015613153573d6000803e3d6000fd5b505050506040513d602081101561316957600080fd5b810190808051906020019092919050505090508091505090565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613232578082015181840152602081019050613217565b50505050905090810190601f16801561325f5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561327c57600080fd5b505afa158015613290573d6000803e3d6000fd5b505050506040513d60208110156132a657600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613363578082015181840152602081019050613348565b50505050905090810190601f1680156133905780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156133ad57600080fd5b505afa1580156133c1573d6000803e3d6000fd5b505050506040513d60208110156133d757600080fd5b8101908080519060200190929190505050905081816040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156134575780518252602082019150602081019050602083039250613432565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209250505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561356657808201518184015260208101905061354b565b50505050905090810190601f1680156135935780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156135b057600080fd5b505afa1580156135c4573d6000803e3d6000fd5b505050506040513d60208110156135da57600080fd5b81019080805190602001909291905050509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561368457600080fd5b505afa158015613698573d6000803e3d6000fd5b505050506040513d60608110156136ae57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809450819650829750505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561377657600080fd5b505afa15801561378a573d6000803e3d6000fd5b505050506040513d60208110156137a057600080fd5b81019080805190602001909291905050509250848484849450945094509450509193509193565b6060600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561387657808201518184015260208101905061385b565b50505050905090810190601f1680156138a35780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156138c057600080fd5b505afa1580156138d4573d6000803e3d6000fd5b505050506040513d60208110156138ea57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa6bf4da8287876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001838152602001828152602001935050505060006040518083038186803b1580156139a457600080fd5b505afa1580156139b8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060408110156139e257600080fd5b8101908080516401000000008111156139fa57600080fd5b82810190506020810184811115613a1057600080fd5b8151856020820283011164010000000082111715613a2d57600080fd5b5050929190602001805190602001909291905050509250925050935093915050565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613afe578082015181840152602081019050613ae3565b50505050905090810190601f168015613b2b5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613b4857600080fd5b505afa158015613b5c573d6000803e3d6000fd5b505050506040513d6020811015613b7257600080fd5b81019080805190602001909291905050509150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015613c1c57600080fd5b505afa158015613c30573d6000803e3d6000fd5b505050506040513d6020811015613c4657600080fd5b81019080805190602001909291905050501515613cf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015613d8857600080fd5b505afa158015613d9c573d6000803e3d6000fd5b505050506040513d6020811015613db257600080fd5b810190808051906020019092919050505090508092505050919050565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e7e578082015181840152602081019050613e63565b50505050905090810190601f168015613eab5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613ec857600080fd5b505afa158015613edc573d6000803e3d6000fd5b505050506040513d6020811015613ef257600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613faf578082015181840152602081019050613f94565b50505050905090810190601f168015613fdc5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613ff957600080fd5b505afa15801561400d573d6000803e3d6000fd5b505050506040513d602081101561402357600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910585856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b15801561411b57600080fd5b505afa15801561412f573d6000803e3d6000fd5b505050506040513d602081101561414557600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b1580156141ae57600080fd5b505afa1580156141c2573d6000803e3d6000fd5b505050506040513d60208110156141d857600080fd5b81019080805190602001909291905050509250505092915050565b60006141fd61430b565b1515614297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561436b576001905061454c565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156143b5576000905061454c565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561450e57600080fd5b505afa158015614522573d6000803e3d6000fd5b505050506040513d602081101561453857600080fd5b810190808051906020019092919050505090505b90565b60008061455b846134b4565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050929150505600a165627a7a72305820adcc2861c020a3bf5137319e340b37364203431c5b9bf8c7943ea991f7f084780029"},"runtime_bytecode":{"bytecode":"0x608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fe1fd71461013857806310ae4ce2146101e257806313af40351461023d5780631fb1c6c014610298578063271cd7601461036357806334c0d654146103ba578063379037dc1461041557806343212cf1146105265780634961b40c146105b95780634c4aea87146106105780634f197ee7146107925780637a9e5e4b1461083357806383ea06201461088e5780638da5cb5b1461090f578063a54fb68514610966578063b4b42e3514610991578063bf7e214f14610a5c578063c2ba5b4014610ab3578063c999a3b214610b71578063eb8cc47c14610c4a578063efae87d714610cc7578063f314bf4614610d8e578063fb3a1fb214610de9575b600080fd5b34801561014457600080fd5b506101676004803603810190808035600019169060200190929190505050610e40565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a757808201518184015260208101905061018c565b50505050905090810190601f1680156101d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ee57600080fd5b50610223600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f71565b604051808215151515815260200191505060405180910390f35b34801561024957600080fd5b5061027e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105f565b604051808215151515815260200191505060405180910390f35b3480156102a457600080fd5b50610345600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111c7565b60405180826000191660001916815260200191505060405180910390f35b34801561036f57600080fd5b5061037861134c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611376565b604051808215151515815260200191505060405180910390f35b34801561042157600080fd5b50610508600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611464565b60405180826000191660001916815260200191505060405180910390f35b34801561053257600080fd5b5061055b60048036038101908080359060200190929190803590602001909291905050506123b2565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105a4578082015181840152602081019050610589565b50505050905001935050505060405180910390f35b3480156105c557600080fd5b506105ce6124f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061c57600080fd5b5061063f6004803603810190808035600019169060200190929190505050612520565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561068757808201518184015260208101905061066c565b50505050905090810190601f1680156106b45780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106ed5780820151818401526020810190506106d2565b50505050905090810190601f16801561071a5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610753578082015181840152602081019050610738565b50505050905090810190601f1680156107805780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561079e57600080fd5b50610819600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129b3565b604051808215151515815260200191505060405180910390f35b34801561083f57600080fd5b50610874600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d20565b604051808215151515815260200191505060405180910390f35b34801561089a57600080fd5b506108f5600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612e8a565b604051808215151515815260200191505060405180910390f35b34801561091b57600080fd5b50610924613093565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561097257600080fd5b5061097b6130b8565b6040518082815260200191505060405180910390f35b34801561099d57600080fd5b50610a3e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613183565b60405180826000191660001916815260200191505060405180910390f35b348015610a6857600080fd5b50610a7161348e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610abf57600080fd5b50610b1a600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506134b4565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b348015610b7d57600080fd5b50610bec600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190803590602001909291905050506137c7565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610c35578082015181840152602081019050610c1a565b50505050905001935050505060405180910390f35b348015610c5657600080fd5b50610cb1600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613a4f565b6040518082815260200191505060405180910390f35b348015610cd357600080fd5b50610d74600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613dcf565b604051808215151515815260200191505060405180910390f35b348015610d9a57600080fd5b50610dcf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506141f3565b604051808215151515815260200191505060405180910390f35b348015610df557600080fd5b50610dfe6142e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b158015610ed957600080fd5b505afa158015610eed573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610f1757600080fd5b810190808051640100000000811115610f2f57600080fd5b82810190506020810184811115610f4557600080fd5b8151856001820283011164010000000082111715610f6257600080fd5b50509291905050509050919050565b6000610f7b61430b565b1515611015576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061106961430b565b1515611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806111d48484613183565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561126d57600080fd5b505afa158015611281573d6000803e3d6000fd5b505050506040513d602081101561129757600080fd5b81019080805190602001909291905050501515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a76657273696f6e2d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8091505092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061138061430b565b151561141a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600080600080600061147461430b565b151561150e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a7061636b6167652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156116bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d76616c6981526020017f6461746f722d6e6f742d7365740000000000000000000000000000000000000081525060400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561183d578082015181840152602081019050611822565b50505050905090810190601f16801561186a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561188757600080fd5b505afa15801561189b573d6000803e3d6000fd5b505050506040513d60208110156118b157600080fd5b81019080805190602001909291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb814e9e856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561195b57600080fd5b505afa15801561196f573d6000803e3d6000fd5b505050506040513d602081101561198557600080fd5b81019080805190602001909291905050501515611acf57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788bc78c886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a46578082015181840152602081019050611a2b565b50505050905090810190601f168015611a735780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611a9257600080fd5b505af1158015611aa6573d6000803e3d6000fd5b505050506040513d6020811015611abc57600080fd5b8101908080519060200190929190505050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028fe498600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338c8c8c6040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611c60578082015181840152602081019050611c45565b50505050905090810190601f168015611c8d5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015611cc6578082015181840152602081019050611cab565b50505050905090810190601f168015611cf35780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015611d2c578082015181840152602081019050611d11565b50505050905090810190601f168015611d595780820380516001836020036101000a031916815260200191505b50995050505050505050505060206040518083038186803b158015611d7d57600080fd5b505afa158015611d91573d6000803e3d6000fd5b505050506040513d6020811015611da757600080fd5b810190808051906020019092919050505050611dc288612e8a565b9250600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663083ae1fe896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e6e578082015181840152602081019050611e53565b50505050905090810190601f168015611e9b5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b505050506040513d6020811015611ee457600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fa0578082015181840152602081019050611f85565b50505050905090810190601f168015611fcd5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611fea57600080fd5b505afa158015611ffe573d6000803e3d6000fd5b505050506040513d602081101561201457600080fd5b8101908080519060200190929190505050915082151561213857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb83336040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156120fb57600080fd5b505af115801561210f573d6000803e3d6000fd5b505050506040513d602081101561212557600080fd5b8101908080519060200190929190505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b8594098386896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122005780820151818401526020810190506121e5565b50505050905090810190601f16801561222d5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561224e57600080fd5b505af1158015612262573d6000803e3d6000fd5b505050506040513d602081101561227857600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910583866040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b15801561233157600080fd5b505afa158015612345573d6000803e3d6000fd5b505050506040513d602081101561235b57600080fd5b81019080805190602001909291905050509050806000191682600019167fac0f7a48e2519eee455114a50e2ccd53b8f68a28609b5532bdb924638d3d4a0760405160405180910390a3809450505050509392505050565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343212cf185856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060006040518083038186803b15801561244d57600080fd5b505afa158015612461573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561248b57600080fd5b8101908080516401000000008111156124a357600080fd5b828101905060208101848111156124b957600080fd5b81518560208202830111640100000000821117156124d657600080fd5b505092919060200180519060200190929190505050915091509250929050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060806060600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c4aea87876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060806040518083038186803b1580156125bf57600080fd5b505afa1580156125d3573d6000803e3d6000fd5b505050506040513d60808110156125e957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509050508093508192505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b1580156126ba57600080fd5b505afa1580156126ce573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156126f857600080fd5b81019080805164010000000081111561271057600080fd5b8281019050602081018481111561272657600080fd5b815185600182028301116401000000008211171561274357600080fd5b50509291905050509450600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aaf9f08836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b1580156127e457600080fd5b505afa1580156127f8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561282257600080fd5b81019080805164010000000081111561283a57600080fd5b8281019050602081018481111561285057600080fd5b815185600182028301116401000000008211171561286d57600080fd5b50509291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d672640d876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561290e57600080fd5b505afa158015612922573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561294c57600080fd5b81019080805164010000000081111561296457600080fd5b8281019050602081018481111561297a57600080fd5b815185600182028301116401000000008211171561299757600080fd5b5050929190505050925084848494509450945050509193909250565b6000806129be61430b565b1515612a58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b612a62843361454f565b15612a705760009150612d19565b612a79846134b4565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa99a0b26852fc94fb40663ad64c63bac913f2e345ff098ea82209694879cb95e60405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bc5578082015181840152602081019050612baa565b50505050905090810190601f168015612bf25780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015612c0f57600080fd5b505afa158015612c23573d6000803e3d6000fd5b505050506040513d6020811015612c3957600080fd5b8101908080519060200190929190505050856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015612cd857600080fd5b505af1158015612cec573d6000803e3d6000fd5b505050506040513d6020811015612d0257600080fd5b810190808051906020019092919050505050600191505b5092915050565b6000612d2a61430b565b1515612dc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9b35240600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f74578082015181840152602081019050612f59565b50505050905090810190601f168015612fa15780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015612fbe57600080fd5b505afa158015612fd2573d6000803e3d6000fd5b505050506040513d6020811015612fe857600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561305157600080fd5b505afa158015613065573d6000803e3d6000fd5b505050506040513d602081101561307b57600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637370a38d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561313f57600080fd5b505afa158015613153573d6000803e3d6000fd5b505050506040513d602081101561316957600080fd5b810190808051906020019092919050505090508091505090565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613232578082015181840152602081019050613217565b50505050905090810190601f16801561325f5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561327c57600080fd5b505afa158015613290573d6000803e3d6000fd5b505050506040513d60208110156132a657600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613363578082015181840152602081019050613348565b50505050905090810190601f1680156133905780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156133ad57600080fd5b505afa1580156133c1573d6000803e3d6000fd5b505050506040513d60208110156133d757600080fd5b8101908080519060200190929190505050905081816040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156134575780518252602082019150602081019050602083039250613432565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209250505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561356657808201518184015260208101905061354b565b50505050905090810190601f1680156135935780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156135b057600080fd5b505afa1580156135c4573d6000803e3d6000fd5b505050506040513d60208110156135da57600080fd5b81019080805190602001909291905050509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561368457600080fd5b505afa158015613698573d6000803e3d6000fd5b505050506040513d60608110156136ae57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809450819650829750505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561377657600080fd5b505afa15801561378a573d6000803e3d6000fd5b505050506040513d60208110156137a057600080fd5b81019080805190602001909291905050509250848484849450945094509450509193509193565b6060600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561387657808201518184015260208101905061385b565b50505050905090810190601f1680156138a35780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156138c057600080fd5b505afa1580156138d4573d6000803e3d6000fd5b505050506040513d60208110156138ea57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa6bf4da8287876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001838152602001828152602001935050505060006040518083038186803b1580156139a457600080fd5b505afa1580156139b8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060408110156139e257600080fd5b8101908080516401000000008111156139fa57600080fd5b82810190506020810184811115613a1057600080fd5b8151856020820283011164010000000082111715613a2d57600080fd5b5050929190602001805190602001909291905050509250925050935093915050565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613afe578082015181840152602081019050613ae3565b50505050905090810190601f168015613b2b5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613b4857600080fd5b505afa158015613b5c573d6000803e3d6000fd5b505050506040513d6020811015613b7257600080fd5b81019080805190602001909291905050509150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015613c1c57600080fd5b505afa158015613c30573d6000803e3d6000fd5b505050506040513d6020811015613c4657600080fd5b81019080805190602001909291905050501515613cf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015613d8857600080fd5b505afa158015613d9c573d6000803e3d6000fd5b505050506040513d6020811015613db257600080fd5b810190808051906020019092919050505090508092505050919050565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e7e578082015181840152602081019050613e63565b50505050905090810190601f168015613eab5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613ec857600080fd5b505afa158015613edc573d6000803e3d6000fd5b505050506040513d6020811015613ef257600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613faf578082015181840152602081019050613f94565b50505050905090810190601f168015613fdc5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613ff957600080fd5b505afa15801561400d573d6000803e3d6000fd5b505050506040513d602081101561402357600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910585856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b15801561411b57600080fd5b505afa15801561412f573d6000803e3d6000fd5b505050506040513d602081101561414557600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b1580156141ae57600080fd5b505afa1580156141c2573d6000803e3d6000fd5b505050506040513d60208110156141d857600080fd5b81019080805190602001909291905050509250505092915050565b60006141fd61430b565b1515614297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561436b576001905061454c565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156143b5576000905061454c565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561450e57600080fd5b505afa158015614522573d6000803e3d6000fd5b505050506040513d602081101561453857600080fd5b810190808051906020019092919050505090505b90565b60008061455b846134b4565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050929150505600a165627a7a72305820adcc2861c020a3bf5137319e340b37364203431c5b9bf8c7943ea991f7f084780029"}},"PackageRegistryInterface":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"ids","type":"bytes32[]"},{"name":"_offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"ids","type":"bytes32[]"},{"name":"_offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"deployment_bytecode":{"bytecode":"0x"},"runtime_bytecode":{"bytecode":"0x"}},"ReleaseDB":{"abi":[{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getNumReleasesForNameHash","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"version","type":"string"}],"name":"hashVersion","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"releaseId","type":"bytes32"},{"name":"reason","type":"string"}],"name":"removeRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"version","type":"string"}],"name":"setVersion","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"},{"name":"manifestURI","type":"string"}],"name":"setRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"}],"name":"hashRelease","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"versionHash","type":"bytes32"}],"name":"getVersion","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"versionHash","type":"bytes32"}],"name":"versionExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"releaseExisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"idx","type":"uint256"}],"name":"getReleaseIdForNameHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getManifestURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"_offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseId","type":"bytes32"}],"name":"ReleaseCreate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseId","type":"bytes32"}],"name":"ReleaseUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseId","type":"bytes32"},{"indexed":false,"name":"reason","type":"string"}],"name":"ReleaseDelete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a361206d806100b96000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af403514610101578063173cb7de1461015c5780631a2b3f62146101a1578063244fcd03146102265780633f415772146102b55780634c4aea87146102fe578063788bc78c146103685780637a9e5e4b146103ed5780638b859409146104485780638da5cb5b146104e557806393d791051461053c5780639aaf9f0814610597578063bb814e9e14610641578063bf7e214f1461068a578063ceef4a12146106e1578063cf6a4d591461072a578063d672640d14610781578063fa6bf4da1461082b575b600080fd5b34801561010d57600080fd5b50610142600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108cc565b604051808215151515815260200191505060405180910390f35b34801561016857600080fd5b5061018b6004803603810190808035600019169060200190929190505050610a34565b6040518082815260200191505060405180910390f35b3480156101ad57600080fd5b50610208600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610aff565b60405180826000191660001916815260200191505060405180910390f35b34801561023257600080fd5b5061029b6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bd7565b604051808215151515815260200191505060405180910390f35b3480156102c157600080fd5b506102e4600480360381019080803560001916906020019092919050505061102e565b604051808215151515815260200191505060405180910390f35b34801561030a57600080fd5b5061032d6004803603810190808035600019169060200190929190505050611063565b604051808560001916600019168152602001846000191660001916815260200183815260200182815260200194505050505060405180910390f35b34801561037457600080fd5b506103cf600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611151565b60405180826000191660001916815260200191505060405180910390f35b3480156103f957600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129e565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104cb60048036038101908080356000191690602001909291908035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611408565b604051808215151515815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b5061057960048036038101908080356000191690602001909291908035600019169060200190929190505050611778565b60405180826000191660001916815260200191505060405180910390f35b3480156105a357600080fd5b506105c6600480360381019080803560001916906020019092919050505061181c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106065780820151818401526020810190506105eb565b50505050905090810190601f1680156106335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561064d57600080fd5b50610670600480360381019080803560001916906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561069657600080fd5b5061069f6119b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106ed57600080fd5b5061071060048036038101908080356000191690602001909291905050506119d6565b604051808215151515815260200191505060405180910390f35b34801561073657600080fd5b50610763600480360381019080803560001916906020019092919080359060200190929190505050611a08565b60405180826000191660001916815260200191505060405180910390f35b34801561078d57600080fd5b506107b06004803603810190808035600019169060200190929190505050611adc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107f05780820151818401526020810190506107d5565b50505050905090810190601f16801561081d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561083757600080fd5b5061086e60048036038101908080356000191690602001909291908035906020019092919080359060200190929190505050611c41565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156108b757808201518184015260208101905061089c565b50505050905001935050505060405180910390f35b60006108d6611d10565b1515610970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600760008360001916600019168152602001908152602001600020730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610abd57600080fd5b505af4158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b81019080805190602001909291905050509050919050565b6000816040516020018082805190602001908083835b602083101515610b3a5780518252602082019150602081019050602083039250610b15565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515610ba35780518252602082019150602081019050602083039250610b7e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000610be4611d10565b1515610c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84610c888161102e565b1515610d22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610d2b86611063565b9050508093508194505050600260008760001916600019168152602001908152602001600020600080820160006101000a81549060ff02191690556001820160009055600282016000905560038201600090556004820160009055600582016000610d969190611f54565b50506008600083600019166000191681526020019081526020016000206000610dbf9190611f54565b600473000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610e3d57600080fd5b505af4158015610e51573d6000803e3d6000fd5b505050506040513d6020811015610e6757600080fd5b81019080805190602001909291905050505060076000846000191660001916815260200190815260200160002073000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610f1057600080fd5b505af4158015610f24573d6000803e3d6000fd5b505050506040513d6020811015610f3a57600080fd5b810190808051906020019092919050505050600160036000886000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555085600019167f72f61f9276232f7592082903bb275df873e35580890da43e4ff3338f8bcccca6866040518080602001828103825283818151815260200191508051906020019080838360005b83811015610fe7578082015181840152602081019050610fcc565b50505050905090810190601f1680156110145780820380516001836020036101000a031916815260200191505b509250505060405180910390a26001935050505092915050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000806000806000856110758161102e565b151561110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000886000191660001916815260200190815260200160002091508160030154826004015483600101548460020154955095509550955050509193509193565b60008061115c611d10565b15156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6111ff83610aff565b905060096000826000191660001916815260200190815260200160002060009054906101000a900460ff1615156112955782600860008360001916600019168152602001908152602001600020908051906020019061125f929190611f9c565b50600160096000836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80915050919050565b60006112a8611d10565b1515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000611415611d10565b15156114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6114b98686611778565b915060026000836000191660001916815260200190815260200160002090508060000160009054906101000a900460ff16156115255781600019167f421b70585c97d607687082e6736e0da3fc5c2c2ac156dfbe444cf54729d5e02d60405160405180910390a2611724565b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160030181600019169055508481600401816000191690555060047300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156115e357600080fd5b505af41580156115f7573d6000803e3d6000fd5b505050506040513d602081101561160d57600080fd5b8101908080519060200190929190505050506007600087600019166000191681526020019081526020016000207300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156116b657600080fd5b505af41580156116ca573d6000803e3d6000fd5b505050506040513d60208110156116e057600080fd5b81019080805190602001909291905050505081600019167feb3a047e740f5b7dd241cb3412aed51d713354a030f7966fe818d2bf9691b5fc60405160405180910390a25b42816002018190555083816005019080519060200190611745929190611f9c565b506001925050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156117e757805182526020820191506020810190506020830392506117c2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6060816118288161197e565b15156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a76657273696f6e2d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6008600084600019166000191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119715780601f1061194657610100808354040283529160200191611971565b820191906000526020600020905b81548152906001019060200180831161195457829003601f168201915b5050505050915050919050565b600060096000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060036000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b60006007600084600019166000191681526020019081526020016000207300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b158015611a9957600080fd5b505af4158015611aad573d6000803e3d6000fd5b505050506040513d6020811015611ac357600080fd5b8101908080519060200190929190505050905092915050565b606081611ae88161102e565b1515611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206005018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c345780601f10611c0957610100808354040283529160200191611c34565b820191906000526020600020905b815481529060010190602001808311611c1757829003601f168201915b5050505050915050919050565b606060006060600080600080889350611c598a610a34565b915081841015611cfd57838203925087831115611c74578792505b82604051908082528060200260200182016040528015611ca35781602001602082028038833980820191505090505b5094505b6000831115611cfc57611cba8a85611a08565b9050808560018503815181101515611cce57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611ca7565b5b8484965096505050505050935093915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d705760019050611f51565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611dba5760009050611f51565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d6020811015611f3d57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f10611f7a5750611f99565b601f016020900490600052602060002090810190611f98919061201c565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fdd57805160ff191683800117855561200b565b8280016001018555821561200b579182015b8281111561200a578251825591602001919060010190611fef565b5b509050612018919061201c565b5090565b61203e91905b8082111561203a576000816000905550600101612022565b5090565b905600a165627a7a72305820d3caa2468f9e89b092edb9656dd310f5225a8e0ef58952de13ad4cb1975b5c210029","link_references":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2828,3708,3919,5666,5877,6880]}]},"runtime_bytecode":{"bytecode":"0x6080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af403514610101578063173cb7de1461015c5780631a2b3f62146101a1578063244fcd03146102265780633f415772146102b55780634c4aea87146102fe578063788bc78c146103685780637a9e5e4b146103ed5780638b859409146104485780638da5cb5b146104e557806393d791051461053c5780639aaf9f0814610597578063bb814e9e14610641578063bf7e214f1461068a578063ceef4a12146106e1578063cf6a4d591461072a578063d672640d14610781578063fa6bf4da1461082b575b600080fd5b34801561010d57600080fd5b50610142600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108cc565b604051808215151515815260200191505060405180910390f35b34801561016857600080fd5b5061018b6004803603810190808035600019169060200190929190505050610a34565b6040518082815260200191505060405180910390f35b3480156101ad57600080fd5b50610208600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610aff565b60405180826000191660001916815260200191505060405180910390f35b34801561023257600080fd5b5061029b6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bd7565b604051808215151515815260200191505060405180910390f35b3480156102c157600080fd5b506102e4600480360381019080803560001916906020019092919050505061102e565b604051808215151515815260200191505060405180910390f35b34801561030a57600080fd5b5061032d6004803603810190808035600019169060200190929190505050611063565b604051808560001916600019168152602001846000191660001916815260200183815260200182815260200194505050505060405180910390f35b34801561037457600080fd5b506103cf600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611151565b60405180826000191660001916815260200191505060405180910390f35b3480156103f957600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129e565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104cb60048036038101908080356000191690602001909291908035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611408565b604051808215151515815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b5061057960048036038101908080356000191690602001909291908035600019169060200190929190505050611778565b60405180826000191660001916815260200191505060405180910390f35b3480156105a357600080fd5b506105c6600480360381019080803560001916906020019092919050505061181c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106065780820151818401526020810190506105eb565b50505050905090810190601f1680156106335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561064d57600080fd5b50610670600480360381019080803560001916906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561069657600080fd5b5061069f6119b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106ed57600080fd5b5061071060048036038101908080356000191690602001909291905050506119d6565b604051808215151515815260200191505060405180910390f35b34801561073657600080fd5b50610763600480360381019080803560001916906020019092919080359060200190929190505050611a08565b60405180826000191660001916815260200191505060405180910390f35b34801561078d57600080fd5b506107b06004803603810190808035600019169060200190929190505050611adc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107f05780820151818401526020810190506107d5565b50505050905090810190601f16801561081d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561083757600080fd5b5061086e60048036038101908080356000191690602001909291908035906020019092919080359060200190929190505050611c41565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156108b757808201518184015260208101905061089c565b50505050905001935050505060405180910390f35b60006108d6611d10565b1515610970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600760008360001916600019168152602001908152602001600020730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610abd57600080fd5b505af4158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b81019080805190602001909291905050509050919050565b6000816040516020018082805190602001908083835b602083101515610b3a5780518252602082019150602081019050602083039250610b15565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515610ba35780518252602082019150602081019050602083039250610b7e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000610be4611d10565b1515610c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84610c888161102e565b1515610d22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610d2b86611063565b9050508093508194505050600260008760001916600019168152602001908152602001600020600080820160006101000a81549060ff02191690556001820160009055600282016000905560038201600090556004820160009055600582016000610d969190611f54565b50506008600083600019166000191681526020019081526020016000206000610dbf9190611f54565b600473000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610e3d57600080fd5b505af4158015610e51573d6000803e3d6000fd5b505050506040513d6020811015610e6757600080fd5b81019080805190602001909291905050505060076000846000191660001916815260200190815260200160002073000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610f1057600080fd5b505af4158015610f24573d6000803e3d6000fd5b505050506040513d6020811015610f3a57600080fd5b810190808051906020019092919050505050600160036000886000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555085600019167f72f61f9276232f7592082903bb275df873e35580890da43e4ff3338f8bcccca6866040518080602001828103825283818151815260200191508051906020019080838360005b83811015610fe7578082015181840152602081019050610fcc565b50505050905090810190601f1680156110145780820380516001836020036101000a031916815260200191505b509250505060405180910390a26001935050505092915050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000806000806000856110758161102e565b151561110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000886000191660001916815260200190815260200160002091508160030154826004015483600101548460020154955095509550955050509193509193565b60008061115c611d10565b15156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6111ff83610aff565b905060096000826000191660001916815260200190815260200160002060009054906101000a900460ff1615156112955782600860008360001916600019168152602001908152602001600020908051906020019061125f929190611f9c565b50600160096000836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80915050919050565b60006112a8611d10565b1515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000611415611d10565b15156114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6114b98686611778565b915060026000836000191660001916815260200190815260200160002090508060000160009054906101000a900460ff16156115255781600019167f421b70585c97d607687082e6736e0da3fc5c2c2ac156dfbe444cf54729d5e02d60405160405180910390a2611724565b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160030181600019169055508481600401816000191690555060047300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156115e357600080fd5b505af41580156115f7573d6000803e3d6000fd5b505050506040513d602081101561160d57600080fd5b8101908080519060200190929190505050506007600087600019166000191681526020019081526020016000207300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156116b657600080fd5b505af41580156116ca573d6000803e3d6000fd5b505050506040513d60208110156116e057600080fd5b81019080805190602001909291905050505081600019167feb3a047e740f5b7dd241cb3412aed51d713354a030f7966fe818d2bf9691b5fc60405160405180910390a25b42816002018190555083816005019080519060200190611745929190611f9c565b506001925050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156117e757805182526020820191506020810190506020830392506117c2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6060816118288161197e565b15156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a76657273696f6e2d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6008600084600019166000191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119715780601f1061194657610100808354040283529160200191611971565b820191906000526020600020905b81548152906001019060200180831161195457829003601f168201915b5050505050915050919050565b600060096000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060036000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b60006007600084600019166000191681526020019081526020016000207300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b158015611a9957600080fd5b505af4158015611aad573d6000803e3d6000fd5b505050506040513d6020811015611ac357600080fd5b8101908080519060200190929190505050905092915050565b606081611ae88161102e565b1515611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206005018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c345780601f10611c0957610100808354040283529160200191611c34565b820191906000526020600020905b815481529060010190602001808311611c1757829003601f168201915b5050505050915050919050565b606060006060600080600080889350611c598a610a34565b915081841015611cfd57838203925087831115611c74578792505b82604051908082528060200260200182016040528015611ca35781602001602082028038833980820191505090505b5094505b6000831115611cfc57611cba8a85611a08565b9050808560018503815181101515611cce57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611ca7565b5b8484965096505050505050935093915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d705760019050611f51565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611dba5760009050611f51565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d6020811015611f3d57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f10611f7a5750611f99565b601f016020900490600052602060002090810190611f98919061201c565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fdd57805160ff191683800117855561200b565b8280016001018555821561200b579182015b8281111561200a578251825591602001919060010190611fef565b5b509050612018919061201c565b5090565b61203e91905b8082111561203a576000816000905550600101612022565b5090565b905600a165627a7a72305820d3caa2468f9e89b092edb9656dd310f5225a8e0ef58952de13ad4cb1975b5c210029","link_references":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2643,3523,3734,5481,5692,6695]}]}},"ReleaseValidator":{"abi":[{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"releaseDb","type":"address"},{"name":"callerAddress","type":"address"},{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"validateRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"releaseDb","type":"address"},{"name":"name","type":"string"},{"name":"version","type":"string"}],"name":"validateIsNewRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"callerAddress","type":"address"},{"name":"name","type":"string"}],"name":"validateAuthorization","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"name","type":"string"}],"name":"validatePackageName","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"value","type":"string"}],"name":"validateStringIdentifier","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"}],"deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b50611679806100206000396000f30060806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063028fe4981461007257806310c8e28f146101df5780632113e91b146102e65780632520a1b8146103a757806382ee976f14610448575b600080fd5b34801561007e57600080fd5b506101c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506104c9565b604051808215151515815260200191505060405180910390f35b3480156101eb57600080fd5b506102cc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610973565b604051808215151515815260200191505060405180910390f35b3480156102f257600080fd5b5061038d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610d17565b604051808215151515815260200191505060405180910390f35b3480156103b357600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611000565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104af600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061162f565b604051808215151515815260200191505060405180910390f35b6000808773ffffffffffffffffffffffffffffffffffffffff16141561057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a7061636b6167652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff161415610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a72656c656173652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61063b878686610d17565b15156106d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a52656c6561736556616c696461746f723a63616c6c65722d6e81526020017f6f742d617574686f72697a65640000000000000000000000000000000000000081525060400191505060405180910390fd5b6106e187878686610973565b151561077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a52656c6561736556616c696461746f723a76657273696f6e2d81526020017f657869737473000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6107858785611000565b151561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f7061636b6167652d6e616d65000000000000000000000000000000000000000081525060400191505060405180910390fd5b6108288261162f565b15156108c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f6d616e69666573742d757269000000000000000000000000000000000000000081525060400191505060405180910390fd5b6108cb8361162f565b1515610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f72656c656173652d76657273696f6e000000000000000000000000000000000081525060400191505060405180910390fd5b600190509695505050505050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a015780820151818401526020810190506109e6565b50505050905090810190601f168015610a2e5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610a4b57600080fd5b505afa158015610a5f573d6000803e3d6000fd5b505050506040513d6020811015610a7557600080fd5b810190808051906020019092919050505092508673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b10578082015181840152602081019050610af5565b50505050905090810190601f168015610b3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d6020811015610b8457600080fd5b810190808051906020019092919050505091508673ffffffffffffffffffffffffffffffffffffffff166393d7910584846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d6020811015610c4657600080fd5b810190808051906020019092919050505090508673ffffffffffffffffffffffffffffffffffffffff16633f415772826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610cce57600080fd5b505afa158015610ce2573d6000803e3d6000fd5b505050506040513d6020811015610cf857600080fd5b8101908080519060200190929190505050159350505050949350505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610da4578082015181840152602081019050610d89565b50505050905090810190601f168015610dd15780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d6020811015610e1857600080fd5b810190808051906020019092919050505091508573ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610ea057600080fd5b505afa158015610eb4573d6000803e3d6000fd5b505050506040513d6020811015610eca57600080fd5b81019080805190602001909291905050501515610eea5760019250610ff7565b8573ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b158015610f5f57600080fd5b505afa158015610f73573d6000803e3d6000fd5b505050506040513d6060811015610f8957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050905050809150508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ff25760019250610ff7565b600092505b50509392505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561108d578082015181840152602081019050611072565b50505050905090810190601f1680156110ba5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156110d757600080fd5b505afa1580156110eb573d6000803e3d6000fd5b505050506040513d602081101561110157600080fd5b810190808051906020019092919050505091508473ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561118957600080fd5b505afa15801561119d573d6000803e3d6000fd5b505050506040513d60208110156111b357600080fd5b8101908080519060200190929190505050156111d25760019250611627565b6002845110806111e3575060ff8451115b156111f15760009250611627565b600090505b8351811015611622577f2d000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561125057fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156112ca5750600081115b156112d457611615565b6000811180156113a257507f30000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561133157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900410155b801561146c57507f39000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156113fb57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b1561147657611615565b7f61000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156114c857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041015801561160257507f7a000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561159157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b1561160c57611615565b60009250611627565b80806001019150506111f6565b600192505b505092915050565b600080825114156116435760009050611648565b600190505b9190505600a165627a7a723058203dcd4caafc5ae1bc405cd5cfe9f142f9746dcffbcbf12baeb8f3718a612fdfbf0029"},"runtime_bytecode":{"bytecode":"0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063028fe4981461007257806310c8e28f146101df5780632113e91b146102e65780632520a1b8146103a757806382ee976f14610448575b600080fd5b34801561007e57600080fd5b506101c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506104c9565b604051808215151515815260200191505060405180910390f35b3480156101eb57600080fd5b506102cc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610973565b604051808215151515815260200191505060405180910390f35b3480156102f257600080fd5b5061038d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610d17565b604051808215151515815260200191505060405180910390f35b3480156103b357600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611000565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104af600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061162f565b604051808215151515815260200191505060405180910390f35b6000808773ffffffffffffffffffffffffffffffffffffffff16141561057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a7061636b6167652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff161415610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a72656c656173652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61063b878686610d17565b15156106d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a52656c6561736556616c696461746f723a63616c6c65722d6e81526020017f6f742d617574686f72697a65640000000000000000000000000000000000000081525060400191505060405180910390fd5b6106e187878686610973565b151561077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a52656c6561736556616c696461746f723a76657273696f6e2d81526020017f657869737473000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6107858785611000565b151561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f7061636b6167652d6e616d65000000000000000000000000000000000000000081525060400191505060405180910390fd5b6108288261162f565b15156108c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f6d616e69666573742d757269000000000000000000000000000000000000000081525060400191505060405180910390fd5b6108cb8361162f565b1515610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f72656c656173652d76657273696f6e000000000000000000000000000000000081525060400191505060405180910390fd5b600190509695505050505050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a015780820151818401526020810190506109e6565b50505050905090810190601f168015610a2e5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610a4b57600080fd5b505afa158015610a5f573d6000803e3d6000fd5b505050506040513d6020811015610a7557600080fd5b810190808051906020019092919050505092508673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b10578082015181840152602081019050610af5565b50505050905090810190601f168015610b3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d6020811015610b8457600080fd5b810190808051906020019092919050505091508673ffffffffffffffffffffffffffffffffffffffff166393d7910584846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d6020811015610c4657600080fd5b810190808051906020019092919050505090508673ffffffffffffffffffffffffffffffffffffffff16633f415772826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610cce57600080fd5b505afa158015610ce2573d6000803e3d6000fd5b505050506040513d6020811015610cf857600080fd5b8101908080519060200190929190505050159350505050949350505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610da4578082015181840152602081019050610d89565b50505050905090810190601f168015610dd15780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d6020811015610e1857600080fd5b810190808051906020019092919050505091508573ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610ea057600080fd5b505afa158015610eb4573d6000803e3d6000fd5b505050506040513d6020811015610eca57600080fd5b81019080805190602001909291905050501515610eea5760019250610ff7565b8573ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b158015610f5f57600080fd5b505afa158015610f73573d6000803e3d6000fd5b505050506040513d6060811015610f8957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050905050809150508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ff25760019250610ff7565b600092505b50509392505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561108d578082015181840152602081019050611072565b50505050905090810190601f1680156110ba5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156110d757600080fd5b505afa1580156110eb573d6000803e3d6000fd5b505050506040513d602081101561110157600080fd5b810190808051906020019092919050505091508473ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561118957600080fd5b505afa15801561119d573d6000803e3d6000fd5b505050506040513d60208110156111b357600080fd5b8101908080519060200190929190505050156111d25760019250611627565b6002845110806111e3575060ff8451115b156111f15760009250611627565b600090505b8351811015611622577f2d000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561125057fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156112ca5750600081115b156112d457611615565b6000811180156113a257507f30000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561133157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900410155b801561146c57507f39000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156113fb57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b1561147657611615565b7f61000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156114c857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041015801561160257507f7a000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561159157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b1561160c57611615565b60009250611627565b80806001019150506111f6565b600192505b505092915050565b600080825114156116435760009050611648565b600190505b9190505600a165627a7a723058203dcd4caafc5ae1bc405cd5cfe9f142f9746dcffbcbf12baeb8f3718a612fdfbf0029"}},"WhitelistAuthority":{"abi":[{"constant":false,"inputs":[{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setAnyoneCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"}],"name":"canCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"callerAddress","type":"address"},{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetAnyoneCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3610ecf806100b96000396000f300608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302acdb441461008857806313af4035146101185780637a9e5e4b1461017357806387045369146101ce5780638da5cb5b1461027e578063b7009613146102d5578063bf7e214f14610379575b600080fd5b34801561009457600080fd5b506100fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291908035151590602001909291905050506103d0565b604051808215151515815260200191505060405180910390f35b34801561012457600080fd5b50610159600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610597565b604051808215151515815260200191505060405180910390f35b34801561017f57600080fd5b506101b4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106ff565b604051808215151515815260200191505060405180910390f35b3480156101da57600080fd5b50610264600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803515159060200190929190505050610869565b604051808215151515815260200191505060405180910390f35b34801561028a57600080fd5b50610293610a85565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b5061035f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610aaa565b604051808215151515815260200191505060405180910390f35b34801561038557600080fd5b5061038e610c39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006103da610c5f565b1515610474576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff167f2bdcdc8a0588683c308a993fd1243cffdf4da84fc0e91b056dbe7baced0b43b284604051808215151515815260200191505060405180910390a3600190509392505050565b60006105a1610c5f565b151561063b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610709610c5f565b15156107a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610873610c5f565b151561090d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2f92249a3089c63a63689d414f60bbb3cb57484dfac21dd4e39605e6dd845c6285604051808215151515815260200191505060405180910390a460019050949350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615610b565760019050610c32565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690505b9392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610cbf5760019050610ea0565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d095760009050610ea0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610e6257600080fd5b505afa158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b810190808051906020019092919050505090505b905600a165627a7a723058207a537ea9da667b4d387ca2ff74993d525ec07155b31e27423d98ad10502a02960029"},"runtime_bytecode":{"bytecode":"0x608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302acdb441461008857806313af4035146101185780637a9e5e4b1461017357806387045369146101ce5780638da5cb5b1461027e578063b7009613146102d5578063bf7e214f14610379575b600080fd5b34801561009457600080fd5b506100fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291908035151590602001909291905050506103d0565b604051808215151515815260200191505060405180910390f35b34801561012457600080fd5b50610159600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610597565b604051808215151515815260200191505060405180910390f35b34801561017f57600080fd5b506101b4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106ff565b604051808215151515815260200191505060405180910390f35b3480156101da57600080fd5b50610264600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803515159060200190929190505050610869565b604051808215151515815260200191505060405180910390f35b34801561028a57600080fd5b50610293610a85565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b5061035f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610aaa565b604051808215151515815260200191505060405180910390f35b34801561038557600080fd5b5061038e610c39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006103da610c5f565b1515610474576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff167f2bdcdc8a0588683c308a993fd1243cffdf4da84fc0e91b056dbe7baced0b43b284604051808215151515815260200191505060405180910390a3600190509392505050565b60006105a1610c5f565b151561063b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610709610c5f565b15156107a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610873610c5f565b151561090d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2f92249a3089c63a63689d414f60bbb3cb57484dfac21dd4e39605e6dd845c6285604051808215151515815260200191505060405180910390a460019050949350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615610b565760019050610c32565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690505b9392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610cbf5760019050610ea0565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d095760009050610ea0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610e6257600080fd5b505afa158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b810190808051906020019092919050505090505b905600a165627a7a723058207a537ea9da667b4d387ca2ff74993d525ec07155b31e27423d98ad10502a02960029"}},"WhitelistAuthorityInterface":{"abi":[{"constant":false,"inputs":[{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setAnyoneCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"}],"name":"canCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"callerAddress","type":"address"},{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetAnyoneCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deployment_bytecode":{"bytecode":"0x"},"runtime_bytecode":{"bytecode":"0x"}}},"manifest_version":"2","package_name":"solidity-registry","sources":{"./Authority.sol":"ipfs://Qmbqw8XRpok53TCm5htzZdNnXxdtavCehcGVGSWSk5bomJ","./IndexedOrderedSetLib.sol":"ipfs://QmWQXJYi3c7tKdgA2biTnVgdjn7qQfChevkus7j7ABgesD","./PackageDB.sol":"ipfs://Qmf5AjqNpL4GwBwipLLsyAeRBSpDPTEDaKFuwM5Woq4KHm","./PackageRegistry.sol":"ipfs://QmRN9VJnbzxjns1vNkDbTTPevNj1jxKYFtdUgLaHfbHo6D","./PackageRegistryInterface.sol":"ipfs://QmNq3WCHv7FeYjPit8FpKyZ2Dhv3TTEKuKa6tDsYrNjsHc","./ReleaseDB.sol":"ipfs://QmWaEzWevHaoty9vf1DUFWgiUjVzd766qZRKYQ65nJ4ZRH","./ReleaseValidator.sol":"ipfs://QmTVpN5UyPP4JW5mambkesyVEQfTXEXsarX7vUmkWErV36"},"version":"1.0.0"} diff --git a/ethpm/assets/registry/2.0.0.json b/ethpm/assets/registry/2.0.0.json deleted file mode 100644 index fc1f27c62d..0000000000 --- a/ethpm/assets/registry/2.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"AuthorityInterface":{"abi":[{"constant":true,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"}],"name":"canCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}],"deployment_bytecode":{"bytecode":"0x"},"natspec":{"methods":{}},"runtime_bytecode":{"bytecode":"0x"}},"Authorized":{"abi":[{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.4.26+commit.4563c3fc"},"deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3610758806100c66000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af4035146100675780637a9e5e4b146100c25780638da5cb5b1461011d578063bf7e214f14610174575b600080fd5b34801561007357600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101cb565b604051808215151515815260200191505060405180910390f35b3480156100ce57600080fd5b50610103600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610333565b604051808215151515815260200191505060405180910390f35b34801561012957600080fd5b5061013261049d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018057600080fd5b506101896104c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006101d56104e8565b151561026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061033d6104e8565b15156103d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105485760019050610729565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105925760009050610729565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b1580156106eb57600080fd5b505afa1580156106ff573d6000803e3d6000fd5b505050506040513d602081101561071557600080fd5b810190808051906020019092919050505090505b905600a165627a7a72305820838731e394f7c3b92dfe64eff937235e42de62cc70c037bb46e3d1b0e88868be0029"},"natspec":{"methods":{}},"runtime_bytecode":{"bytecode":"0x608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af4035146100675780637a9e5e4b146100c25780638da5cb5b1461011d578063bf7e214f14610174575b600080fd5b34801561007357600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101cb565b604051808215151515815260200191505060405180910390f35b3480156100ce57600080fd5b50610103600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610333565b604051808215151515815260200191505060405180910390f35b34801561012957600080fd5b5061013261049d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018057600080fd5b506101896104c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006101d56104e8565b151561026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061033d6104e8565b15156103d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105485760019050610729565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105925760009050610729565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b1580156106eb57600080fd5b505afa1580156106ff573d6000803e3d6000fd5b505050506040513d602081101561071557600080fd5b810190808051906020019092919050505090505b905600a165627a7a72305820838731e394f7c3b92dfe64eff937235e42de62cc70c037bb46e3d1b0e88868be0029"}},"AuthorizedInterface":{"abi":[{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deployment_bytecode":{"bytecode":"0x"},"natspec":{"methods":{}},"runtime_bytecode":{"bytecode":"0x"}},"IndexedOrderedSetLib":{"abi":[{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"}],"name":"size","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"indexOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"contains","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"idx","type":"uint256"}],"name":"get","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"add","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"remove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"idx","type":"uint256"}],"name":"pop","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.4.26+commit.4563c3fc"},"deployment_bytecode":{"bytecode":"0x6106df610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f300730000000000000000000000000000000000000000301460806040526004361061009a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631aeaa5041461009f57806326966f11146100d35780632a2dbb481461011557806377e91da11461015b57806391d8a284146101a1578063ed05c0c5146101f4578063f78a9f9514610247575b600080fd5b6100bd6004803603810190808035906020019092919050505061029a565b6040518082815260200191505060405180910390f35b6100ff6004803603810190808035906020019092919080356000191690602001909291905050506102ab565b6040518082815260200191505060405180910390f35b61014160048036038101908080359060200190929190803560001916906020019092919050505061037b565b604051808215151515815260200191505060405180910390f35b61018360048036038101908080359060200190929190803590602001909291905050506103b0565b60405180826000191660001916815260200191505060405180910390f35b8180156101ad57600080fd5b506101da6004803603810190808035906020019092919080356000191690602001909291905050506103d6565b604051808215151515815260200191505060405180910390f35b81801561020057600080fd5b5061022d60048036038101908080359060200190929190803560001916906020019092919050505061048e565b604051808215151515815260200191505060405180910390f35b81801561025357600080fd5b5061027c600480360381019080803590602001909291908035906020019092919050505061055b565b60405180826000191660001916815260200191505060405180910390f35b600081600001805490509050919050565b600082826102b9828261037b565b1515610353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b8460010160008560001916600019168152602001908152602001600020549250505092915050565b6000826002016000836000191660001916815260200190815260200160002060009054906101000a900460ff16905092915050565b600082600001828154811015156103c357fe5b9060005260206000200154905092915050565b60006103e2838361037b565b156103f05760019050610488565b8260000180549050836001016000846000191660001916815260200190815260200160002081905550826000018290806001815401808255809150509060018203906000526020600020016000909192909190915090600019169055506001836002016000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600190505b92915050565b600080838361049d828261037b565b1515610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b61054186866102ab565b925061054d868461055b565b506001935050505092915050565b600080600061056a85856103b0565b91506001856000018054905003841415156105ee5784600001600186600001805490500381548110151561059a57fe5b906000526020600020015490508085600001858154811015156105b957fe5b906000526020600020018160001916905550838560010160008360001916600019168152602001908152602001600020819055505b600185600001818180549050039150816106089190610662565b50846001016000836000191660001916815260200190815260200160002060009055846002016000836000191660001916815260200190815260200160002060006101000a81549060ff0219169055819250505092915050565b81548183558181111561068957818360005260206000209182019101610688919061068e565b5b505050565b6106b091905b808211156106ac576000816000905550600101610694565b5090565b905600a165627a7a723058204b968e3ee907ffced1e9a3c8075c0a6d06295f28c6f2625e260444f839e7edaa0029"},"natspec":{"author":"Piper Merriam ","methods":{"add(IndexedOrderedSetLib.IndexedOrderedSet storage,bytes32)":{"details":"Pushes the new value onto the set","params":{"self":"The set","value":"The value to push."}},"contains(IndexedOrderedSetLib.IndexedOrderedSet storage,bytes32)":{"details":"Returns boolean if the key is in the set","params":{"self":"The set","value":"The value to check"}},"get(IndexedOrderedSetLib.IndexedOrderedSet storage,uint256)":{"details":"Retrieves the element at the provided index.","params":{"idx":"The index to retrieve.","self":"The set"}},"indexOf(IndexedOrderedSetLib.IndexedOrderedSet storage,bytes32)":{"details":"Returns the index of the value in the set.","params":{"self":"The set","value":"The value to look up the index for."}},"pop(IndexedOrderedSetLib.IndexedOrderedSet storage,uint256)":{"details":"Removes the element at index idx from the set and returns it.","params":{"idx":"The index to remove and return.","self":"The set"}},"remove(IndexedOrderedSetLib.IndexedOrderedSet storage,bytes32)":{"details":"Removes the element at index idx from the set","params":{"self":"The set","value":"The value to remove from the set."}},"size(IndexedOrderedSetLib.IndexedOrderedSet storage)":{"details":"Returns the size of the set","params":{"self":"The set"}}},"title":"Library implementing an array type which allows O(1) lookups on values."},"runtime_bytecode":{"bytecode":"0x730000000000000000000000000000000000000000301460806040526004361061009a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631aeaa5041461009f57806326966f11146100d35780632a2dbb481461011557806377e91da11461015b57806391d8a284146101a1578063ed05c0c5146101f4578063f78a9f9514610247575b600080fd5b6100bd6004803603810190808035906020019092919050505061029a565b6040518082815260200191505060405180910390f35b6100ff6004803603810190808035906020019092919080356000191690602001909291905050506102ab565b6040518082815260200191505060405180910390f35b61014160048036038101908080359060200190929190803560001916906020019092919050505061037b565b604051808215151515815260200191505060405180910390f35b61018360048036038101908080359060200190929190803590602001909291905050506103b0565b60405180826000191660001916815260200191505060405180910390f35b8180156101ad57600080fd5b506101da6004803603810190808035906020019092919080356000191690602001909291905050506103d6565b604051808215151515815260200191505060405180910390f35b81801561020057600080fd5b5061022d60048036038101908080359060200190929190803560001916906020019092919050505061048e565b604051808215151515815260200191505060405180910390f35b81801561025357600080fd5b5061027c600480360381019080803590602001909291908035906020019092919050505061055b565b60405180826000191660001916815260200191505060405180910390f35b600081600001805490509050919050565b600082826102b9828261037b565b1515610353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b8460010160008560001916600019168152602001908152602001600020549250505092915050565b6000826002016000836000191660001916815260200190815260200160002060009054906101000a900460ff16905092915050565b600082600001828154811015156103c357fe5b9060005260206000200154905092915050565b60006103e2838361037b565b156103f05760019050610488565b8260000180549050836001016000846000191660001916815260200190815260200160002081905550826000018290806001815401808255809150509060018203906000526020600020016000909192909190915090600019169055506001836002016000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600190505b92915050565b600080838361049d828261037b565b1515610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b61054186866102ab565b925061054d868461055b565b506001935050505092915050565b600080600061056a85856103b0565b91506001856000018054905003841415156105ee5784600001600186600001805490500381548110151561059a57fe5b906000526020600020015490508085600001858154811015156105b957fe5b906000526020600020018160001916905550838560010160008360001916600019168152602001908152602001600020819055505b600185600001818180549050039150816106089190610662565b50846001016000836000191660001916815260200190815260200160002060009055846002016000836000191660001916815260200190815260200160002060006101000a81549060ff0219169055819250505092915050565b81548183558181111561068957818360005260206000209182019101610688919061068e565b5b505050565b6106b091905b808211156106ac576000816000905550600101610694565b5090565b905600a165627a7a723058204b968e3ee907ffced1e9a3c8075c0a6d06295f28c6f2625e260444f839e7edaa0029"}},"PackageDB":{"abi":[{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"reason","type":"string"}],"name":"removePackage","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"}],"name":"setPackage","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"newPackageOwner","type":"address"}],"name":"setPackageOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNumPackages","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getPackageNameHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"hashName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getPackageData","outputs":[{"name":"packageOwner","type":"address"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"releaseHash","type":"bytes32"}],"name":"PackageReleaseAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"releaseHash","type":"bytes32"}],"name":"PackageReleaseRemove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"}],"name":"PackageCreate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":false,"name":"reason","type":"string"}],"name":"PackageDelete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageOwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.4.26+commit.4563c3fc"},"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3611a8a806100b96000396000f3006080604052600436106100cf576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680621f8d11146100d457806306fe1fd714610163578063083ae1fe1461020d57806313af40351461028e5780632406cedb146102e957806343212cf1146103525780637370a38d146103e55780637a9e5e4b146104105780638da5cb5b1461046b57806395f0684b146104c2578063a9b352401461050b578063af9a3f9b14610554578063b4d6d4c7146105d9578063bf7e214f14610658575b600080fd5b3480156100e057600080fd5b506101496004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506106af565b604051808215151515815260200191505060405180910390f35b34801561016f57600080fd5b5061019260048036038101908080356000191690602001909291905050506109d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d25780820151818401526020810190506101b7565b50505050905090810190601f1680156101ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021957600080fd5b50610274600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610b3b565b604051808215151515815260200191505060405180910390f35b34801561029a57600080fd5b506102cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b604051808215151515815260200191505060405180910390f35b3480156102f557600080fd5b506103386004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ec0565b604051808215151515815260200191505060405180910390f35b34801561035e57600080fd5b506103876004803603810190808035906020019092919080359060200190929190505050611130565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156103d05780820151818401526020810190506103b5565b50505050905001935050505060405180910390f35b3480156103f157600080fd5b506103fa6111fc565b6040518082815260200191505060405180910390f35b34801561041c57600080fd5b50610451600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ac565b604051808215151515815260200191505060405180910390f35b34801561047757600080fd5b50610480611416565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ce57600080fd5b506104ed6004803603810190808035906020019092919050505061143b565b60405180826000191660001916815260200191505060405180910390f35b34801561051757600080fd5b5061053a60048036038101908080356000191690602001909291905050506114f5565b604051808215151515815260200191505060405180910390f35b34801561056057600080fd5b506105bb600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061152a565b60405180826000191660001916815260200191505060405180910390f35b3480156105e557600080fd5b506106086004803603810190808035600019169060200190929190505050611602565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34801561066457600080fd5b5061066d611707565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006106b961172d565b1515610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8261075d816114f5565b15156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b83600019167f188d63b2c009063a155fbcf0c8121b521638675d3d54561c1955bbec5b9ea6bb846040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085e578082015181840152602081019050610843565b50505050905090810190601f16801561088b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2600260008560001916600019168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905560028201600090556003820160006108e89190611971565b6004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600373000000000000000000000000000000000000000063ed05c0c59091866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b15801561098f57600080fd5b505af41580156109a3573d6000803e3d6000fd5b505050506040513d60208110156109b957600080fd5b810190808051906020019092919050505050600191505092915050565b6060816109e2816114f5565b1515610a7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050915050919050565b6000806000610b4861172d565b1515610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610beb8461152a565b91506002600083600019166000191681526020019081526020016000209050610c13826114f5565b1515610d445760018160000160006101000a81548160ff02191690831515021790555042816001018190555083816003019080519060200190610c579291906119b9565b5060037300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610cd657600080fd5b505af4158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b81019080805190602001909291905050505081600019167f94d68ac0a5dee0e8dd504e7e82e1fb1eb122682ceb9fc6aa6647f203fee26f1e60405160405180910390a25b428160020181905550600192505050919050565b6000610d6261172d565b1515610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610eca61172d565b1515610f64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82610f6e816114f5565b1515611008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660026000866000191660001916815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685600019167ffe2ec6b3a2236fea1f48069f386e0daac1b7b56b918998a3c3a282159461881760405160405180910390a48260026000866000191660001916815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260026000866000191660001916815260200190815260200160002060020181905550600191505092915050565b6060600060606000806000808893506111476111fc565b9150818410156111ea57838203925087831115611162578792505b826040519080825280602002602001820160405280156111915781602001602082028038833980820191505090505b5094505b60008311156111e9576111a78461143b565b90508085600185038151811015156111bb57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611195565b5b84849650965050505050509250929050565b60006003730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561126c57600080fd5b505af4158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b8101908080519060200190929190505050905090565b60006112b661172d565b1515611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060037300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b1580156114b357600080fd5b505af41580156114c7573d6000803e3d6000fd5b505050506040513d60208110156114dd57600080fd5b81019080805190602001909291905050509050919050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000816040516020018082805190602001908083835b6020831015156115655780518252602082019150602081019050602083039250611540565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831015156115ce57805182526020820191506020810190506020830392506115a9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b60008060008084611612816114f5565b15156116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000876000191660001916815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260010154836002015494509450945050509193909250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561178d576001905061196e565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117d7576000905061196e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561193057600080fd5b505afa158015611944573d6000803e3d6000fd5b505050506040513d602081101561195a57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f1061199757506119b6565b601f0160209004906000526020600020908101906119b59190611a39565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119fa57805160ff1916838001178555611a28565b82800160010185558215611a28579182015b82811115611a27578251825591602001919060010190611a0c565b5b509050611a359190611a39565b5090565b611a5b91905b80821115611a57576000816000905550600101611a3f565b5090565b905600a165627a7a72305820ecfb139e8113ac5c198045a9e69defd4b24c145a1cd07ec5fa3174c2f674d8790029","link_references":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2510,3349,4795,5370]}]},"natspec":{"author":"Tim Coulter , Piper Merriam ","methods":{"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getNumPackages()":{"details":"Return the total number of packages"},"getPackageData(bytes32)":{"details":"Returns information about the package.","params":{"nameHash":"The name hash to look up."}},"getPackageName(bytes32)":{"details":"Returns the package name for the given namehash","params":{"nameHash":"The name hash to look up."}},"getPackageNameHash(uint256)":{"details":"Returns package namehash at the provided index from the set of all known name hashes.","params":{"idx":"The index of the package name hash to retrieve."}},"hashName(string)":{"details":"Returns name hash for a given package name.","params":{"name":"Package name"}},"packageExists(bytes32)":{"details":"Query the existence of a package with the given name. Returns boolean indicating whether the package exists.","params":{"nameHash":"The name hash of a package."}},"removePackage(bytes32,string)":{"details":"Removes a package from the package db. Packages with existing releases may not be removed. Returns success.","params":{"nameHash":"The name hash of a package."}},"setPackage(string)":{"details":"Creates or updates a release for a package. Returns success.","params":{"name":"Package name"}},"setPackageOwner(bytes32,address)":{"details":"Sets the owner of a package to the provided address. Returns success.","params":{"nameHash":"The name hash of a package.","newPackageOwner":"The address of the new owner."}}},"title":"Database contract for a package index package data."},"runtime_bytecode":{"bytecode":"0x6080604052600436106100cf576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680621f8d11146100d457806306fe1fd714610163578063083ae1fe1461020d57806313af40351461028e5780632406cedb146102e957806343212cf1146103525780637370a38d146103e55780637a9e5e4b146104105780638da5cb5b1461046b57806395f0684b146104c2578063a9b352401461050b578063af9a3f9b14610554578063b4d6d4c7146105d9578063bf7e214f14610658575b600080fd5b3480156100e057600080fd5b506101496004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506106af565b604051808215151515815260200191505060405180910390f35b34801561016f57600080fd5b5061019260048036038101908080356000191690602001909291905050506109d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d25780820151818401526020810190506101b7565b50505050905090810190601f1680156101ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021957600080fd5b50610274600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610b3b565b604051808215151515815260200191505060405180910390f35b34801561029a57600080fd5b506102cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b604051808215151515815260200191505060405180910390f35b3480156102f557600080fd5b506103386004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ec0565b604051808215151515815260200191505060405180910390f35b34801561035e57600080fd5b506103876004803603810190808035906020019092919080359060200190929190505050611130565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156103d05780820151818401526020810190506103b5565b50505050905001935050505060405180910390f35b3480156103f157600080fd5b506103fa6111fc565b6040518082815260200191505060405180910390f35b34801561041c57600080fd5b50610451600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ac565b604051808215151515815260200191505060405180910390f35b34801561047757600080fd5b50610480611416565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ce57600080fd5b506104ed6004803603810190808035906020019092919050505061143b565b60405180826000191660001916815260200191505060405180910390f35b34801561051757600080fd5b5061053a60048036038101908080356000191690602001909291905050506114f5565b604051808215151515815260200191505060405180910390f35b34801561056057600080fd5b506105bb600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061152a565b60405180826000191660001916815260200191505060405180910390f35b3480156105e557600080fd5b506106086004803603810190808035600019169060200190929190505050611602565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34801561066457600080fd5b5061066d611707565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006106b961172d565b1515610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8261075d816114f5565b15156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b83600019167f188d63b2c009063a155fbcf0c8121b521638675d3d54561c1955bbec5b9ea6bb846040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085e578082015181840152602081019050610843565b50505050905090810190601f16801561088b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2600260008560001916600019168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905560028201600090556003820160006108e89190611971565b6004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600373000000000000000000000000000000000000000063ed05c0c59091866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b15801561098f57600080fd5b505af41580156109a3573d6000803e3d6000fd5b505050506040513d60208110156109b957600080fd5b810190808051906020019092919050505050600191505092915050565b6060816109e2816114f5565b1515610a7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050915050919050565b6000806000610b4861172d565b1515610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610beb8461152a565b91506002600083600019166000191681526020019081526020016000209050610c13826114f5565b1515610d445760018160000160006101000a81548160ff02191690831515021790555042816001018190555083816003019080519060200190610c579291906119b9565b5060037300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610cd657600080fd5b505af4158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b81019080805190602001909291905050505081600019167f94d68ac0a5dee0e8dd504e7e82e1fb1eb122682ceb9fc6aa6647f203fee26f1e60405160405180910390a25b428160020181905550600192505050919050565b6000610d6261172d565b1515610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610eca61172d565b1515610f64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82610f6e816114f5565b1515611008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660026000866000191660001916815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685600019167ffe2ec6b3a2236fea1f48069f386e0daac1b7b56b918998a3c3a282159461881760405160405180910390a48260026000866000191660001916815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260026000866000191660001916815260200190815260200160002060020181905550600191505092915050565b6060600060606000806000808893506111476111fc565b9150818410156111ea57838203925087831115611162578792505b826040519080825280602002602001820160405280156111915781602001602082028038833980820191505090505b5094505b60008311156111e9576111a78461143b565b90508085600185038151811015156111bb57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611195565b5b84849650965050505050509250929050565b60006003730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561126c57600080fd5b505af4158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b8101908080519060200190929190505050905090565b60006112b661172d565b1515611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060037300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b1580156114b357600080fd5b505af41580156114c7573d6000803e3d6000fd5b505050506040513d60208110156114dd57600080fd5b81019080805190602001909291905050509050919050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000816040516020018082805190602001908083835b6020831015156115655780518252602082019150602081019050602083039250611540565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831015156115ce57805182526020820191506020810190506020830392506115a9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b60008060008084611612816114f5565b15156116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000876000191660001916815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260010154836002015494509450945050509193909250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561178d576001905061196e565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117d7576000905061196e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561193057600080fd5b505afa158015611944573d6000803e3d6000fd5b505050506040513d602081101561195a57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f1061199757506119b6565b601f0160209004906000526020600020908101906119b59190611a39565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119fa57805160ff1916838001178555611a28565b82800160010185558215611a28579182015b82811115611a27578251825591602001919060010190611a0c565b5b509050611a359190611a39565b5090565b611a5b91905b80821115611a57576000816000905550600101611a3f565b5090565b905600a165627a7a72305820ecfb139e8113ac5c198045a9e69defd4b24c145a1cd07ec5fa3174c2f674d8790029","link_references":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2325,3164,4610,5185]}]}},"PackageRegistry":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReleaseValidator","type":"address"}],"name":"setReleaseValidator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPackageDb","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPackageDb","type":"address"}],"name":"setPackageDb","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReleaseValidator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"newPackageOwner","type":"address"}],"name":"transferPackageOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"getPackageData","outputs":[{"name":"packageOwner","type":"address"},{"name":"createdAt","type":"uint256"},{"name":"numReleases","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"version","type":"string"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReleaseDb","type":"address"}],"name":"setReleaseDb","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getReleaseDb","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"packageName","type":"string"},{"indexed":false,"name":"version","type":"string"},{"indexed":false,"name":"manifestURI","type":"string"}],"name":"VersionRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.4.26+commit.4563c3fc"},"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a361452b806100b96000396000f300608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fe1fd71461013857806310ae4ce2146101e257806313af40351461023d5780631fb1c6c014610298578063271cd7601461036357806334c0d654146103ba578063379037dc1461041557806343212cf1146105265780634961b40c146105b95780634c4aea87146106105780634f197ee7146107925780637a9e5e4b1461083357806383ea06201461088e5780638da5cb5b1461090f578063a54fb68514610966578063b4b42e3514610991578063bf7e214f14610a5c578063c2ba5b4014610ab3578063c999a3b214610b71578063eb8cc47c14610c4a578063efae87d714610cc7578063f314bf4614610d8e578063fb3a1fb214610de9575b600080fd5b34801561014457600080fd5b506101676004803603810190808035600019169060200190929190505050610e40565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a757808201518184015260208101905061018c565b50505050905090810190601f1680156101d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ee57600080fd5b50610223600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f71565b604051808215151515815260200191505060405180910390f35b34801561024957600080fd5b5061027e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105f565b604051808215151515815260200191505060405180910390f35b3480156102a457600080fd5b50610345600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111c7565b60405180826000191660001916815260200191505060405180910390f35b34801561036f57600080fd5b506103786112c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f2565b604051808215151515815260200191505060405180910390f35b34801561042157600080fd5b50610508600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506113e0565b60405180826000191660001916815260200191505060405180910390f35b34801561053257600080fd5b5061055b600480360381019080803590602001909291908035906020019092919050505061246b565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105a4578082015181840152602081019050610589565b50505050905001935050505060405180910390f35b3480156105c557600080fd5b506105ce6125af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061c57600080fd5b5061063f60048036038101908080356000191690602001909291905050506125d9565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561068757808201518184015260208101905061066c565b50505050905090810190601f1680156106b45780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106ed5780820151818401526020810190506106d2565b50505050905090810190601f16801561071a5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610753578082015181840152602081019050610738565b50505050905090810190601f1680156107805780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561079e57600080fd5b50610819600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a6c565b604051808215151515815260200191505060405180910390f35b34801561083f57600080fd5b50610874600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dd9565b604051808215151515815260200191505060405180910390f35b34801561089a57600080fd5b506108f5600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612f43565b604051808215151515815260200191505060405180910390f35b34801561091b57600080fd5b5061092461314c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561097257600080fd5b5061097b613171565b6040518082815260200191505060405180910390f35b34801561099d57600080fd5b50610a3e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613237565b60405180826000191660001916815260200191505060405180910390f35b348015610a6857600080fd5b50610a71613542565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610abf57600080fd5b50610b1a600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613568565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b348015610b7d57600080fd5b50610bec600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001909291908035906020019092919050505061387b565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610c35578082015181840152602081019050610c1a565b50505050905001935050505060405180910390f35b348015610c5657600080fd5b50610cb1600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b03565b6040518082815260200191505060405180910390f35b348015610cd357600080fd5b50610d74600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613d30565b604051808215151515815260200191505060405180910390f35b348015610d9a57600080fd5b50610dcf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614154565b604051808215151515815260200191505060405180910390f35b348015610df557600080fd5b50610dfe614242565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b158015610ed957600080fd5b505afa158015610eed573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610f1757600080fd5b810190808051640100000000811115610f2f57600080fd5b82810190506020810184811115610f4557600080fd5b8151856001820283011164010000000082111715610f6257600080fd5b50509291905050509050919050565b6000610f7b61426c565b1515611015576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061106961426c565b1515611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806111d48484613237565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561126d57600080fd5b505afa158015611281573d6000803e3d6000fd5b505050506040513d602081101561129757600080fd5b810190808051906020019092919050505090508015156112bd57600060010291506112c1565b8191505b5092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006112fc61426c565b1515611396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000806113ee61426c565b1515611488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561155f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a7061636b6167652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611636576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d76616c6981526020017f6461746f722d6e6f742d7365740000000000000000000000000000000000000081525060400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117b757808201518184015260208101905061179c565b50505050905090810190601f1680156117e45780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561180157600080fd5b505afa158015611815573d6000803e3d6000fd5b505050506040513d602081101561182b57600080fd5b81019080805190602001909291905050509250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb814e9e846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b1580156118d557600080fd5b505afa1580156118e9573d6000803e3d6000fd5b505050506040513d60208110156118ff57600080fd5b81019080805190602001909291905050501515611a4957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788bc78c876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119c05780820151818401526020810190506119a5565b50505050905090810190601f1680156119ed5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b505050506040513d6020811015611a3657600080fd5b8101908080519060200190929190505050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028fe498600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338b8b8b6040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611bda578082015181840152602081019050611bbf565b50505050905090810190601f168015611c075780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015611c40578082015181840152602081019050611c25565b50505050905090810190601f168015611c6d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015611ca6578082015181840152602081019050611c8b565b50505050905090810190601f168015611cd35780820380516001836020036101000a031916815260200191505b50995050505050505050505060206040518083038186803b158015611cf757600080fd5b505afa158015611d0b573d6000803e3d6000fd5b505050506040513d6020811015611d2157600080fd5b810190808051906020019092919050505050611d3c87612f43565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663083ae1fe886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611de8578082015181840152602081019050611dcd565b50505050905090810190601f168015611e155780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b505050506040513d6020811015611e5e57600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f1a578082015181840152602081019050611eff565b50505050905090810190601f168015611f475780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611f6457600080fd5b505afa158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b810190808051906020019092919050505090508115156120b257600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb82336040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561207557600080fd5b505af1158015612089573d6000803e3d6000fd5b505050506040513d602081101561209f57600080fd5b8101908080519060200190929190505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b8594098285886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561217a57808201518184015260208101905061215f565b50505050905090810190601f1680156121a75780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156121c857600080fd5b505af11580156121dc573d6000803e3d6000fd5b505050506040513d60208110156121f257600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910582856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b1580156122ab57600080fd5b505afa1580156122bf573d6000803e3d6000fd5b505050506040513d60208110156122d557600080fd5b810190808051906020019092919050505093507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c387878760405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015612354578082015181840152602081019050612339565b50505050905090810190601f1680156123815780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156123ba57808201518184015260208101905061239f565b50505050905090810190601f1680156123e75780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612420578082015181840152602081019050612405565b50505050905090810190601f16801561244d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a18393505050509392505050565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343212cf185856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060006040518083038186803b15801561250657600080fd5b505afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561254457600080fd5b81019080805164010000000081111561255c57600080fd5b8281019050602081018481111561257257600080fd5b815185602082028301116401000000008211171561258f57600080fd5b505092919060200180519060200190929190505050915091509250929050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060806060600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c4aea87876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060806040518083038186803b15801561267857600080fd5b505afa15801561268c573d6000803e3d6000fd5b505050506040513d60808110156126a257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509050508093508192505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156127b157600080fd5b8101908080516401000000008111156127c957600080fd5b828101905060208101848111156127df57600080fd5b81518560018202830111640100000000821117156127fc57600080fd5b50509291905050509450600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aaf9f08836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561289d57600080fd5b505afa1580156128b1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156128db57600080fd5b8101908080516401000000008111156128f357600080fd5b8281019050602081018481111561290957600080fd5b815185600182028301116401000000008211171561292657600080fd5b50509291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d672640d876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b1580156129c757600080fd5b505afa1580156129db573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015612a0557600080fd5b810190808051640100000000811115612a1d57600080fd5b82810190506020810184811115612a3357600080fd5b8151856001820283011164010000000082111715612a5057600080fd5b5050929190505050925084848494509450945050509193909250565b600080612a7761426c565b1515612b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b612b1b84336144b0565b15612b295760009150612dd2565b612b3284613568565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa99a0b26852fc94fb40663ad64c63bac913f2e345ff098ea82209694879cb95e60405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c7e578082015181840152602081019050612c63565b50505050905090810190601f168015612cab5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015612cc857600080fd5b505afa158015612cdc573d6000803e3d6000fd5b505050506040513d6020811015612cf257600080fd5b8101908080519060200190929190505050856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015612d9157600080fd5b505af1158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b810190808051906020019092919050505050600191505b5092915050565b6000612de361426c565b1515612e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9b35240600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561302d578082015181840152602081019050613012565b50505050905090810190601f16801561305a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561307757600080fd5b505afa15801561308b573d6000803e3d6000fd5b505050506040513d60208110156130a157600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561310a57600080fd5b505afa15801561311e573d6000803e3d6000fd5b505050506040513d602081101561313457600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637370a38d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156131f757600080fd5b505afa15801561320b573d6000803e3d6000fd5b505050506040513d602081101561322157600080fd5b8101908080519060200190929190505050905090565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132e65780820151818401526020810190506132cb565b50505050905090810190601f1680156133135780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561333057600080fd5b505afa158015613344573d6000803e3d6000fd5b505050506040513d602081101561335a57600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134175780820151818401526020810190506133fc565b50505050905090810190601f1680156134445780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561346157600080fd5b505afa158015613475573d6000803e3d6000fd5b505050506040513d602081101561348b57600080fd5b8101908080519060200190929190505050905081816040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561350b57805182526020820191506020810190506020830392506134e6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209250505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561361a5780820151818401526020810190506135ff565b50505050905090810190601f1680156136475780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561366457600080fd5b505afa158015613678573d6000803e3d6000fd5b505050506040513d602081101561368e57600080fd5b81019080805190602001909291905050509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561373857600080fd5b505afa15801561374c573d6000803e3d6000fd5b505050506040513d606081101561376257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809450819650829750505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561382a57600080fd5b505afa15801561383e573d6000803e3d6000fd5b505050506040513d602081101561385457600080fd5b81019080805190602001909291905050509250848484849450945094509450509193509193565b6060600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561392a57808201518184015260208101905061390f565b50505050905090810190601f1680156139575780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561397457600080fd5b505afa158015613988573d6000803e3d6000fd5b505050506040513d602081101561399e57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa6bf4da8287876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001838152602001828152602001935050505060006040518083038186803b158015613a5857600080fd5b505afa158015613a6c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506040811015613a9657600080fd5b810190808051640100000000811115613aae57600080fd5b82810190506020810184811115613ac457600080fd5b8151856020820283011164010000000082111715613ae157600080fd5b5050929190602001805190602001909291905050509250925050935093915050565b6000806000613b1184612f43565b9150811515613b235760009250613d29565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bcd578082015181840152602081019050613bb2565b50505050905090810190601f168015613bfa5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613c1757600080fd5b505afa158015613c2b573d6000803e3d6000fd5b505050506040513d6020811015613c4157600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015613ceb57600080fd5b505afa158015613cff573d6000803e3d6000fd5b505050506040513d6020811015613d1557600080fd5b810190808051906020019092919050505092505b5050919050565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ddf578082015181840152602081019050613dc4565b50505050905090810190601f168015613e0c5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613e2957600080fd5b505afa158015613e3d573d6000803e3d6000fd5b505050506040513d6020811015613e5357600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f10578082015181840152602081019050613ef5565b50505050905090810190601f168015613f3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613f5a57600080fd5b505afa158015613f6e573d6000803e3d6000fd5b505050506040513d6020811015613f8457600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910585856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b15801561407c57600080fd5b505afa158015614090573d6000803e3d6000fd5b505050506040513d60208110156140a657600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561410f57600080fd5b505afa158015614123573d6000803e3d6000fd5b505050506040513d602081101561413957600080fd5b81019080805190602001909291905050509250505092915050565b600061415e61426c565b15156141f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156142cc57600190506144ad565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561431657600090506144ad565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561446f57600080fd5b505afa158015614483573d6000803e3d6000fd5b505050506040513d602081101561449957600080fd5b810190808051906020019092919050505090505b90565b6000806144bc84613568565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050929150505600a165627a7a723058201e88c2626a458a31cbd8a0ddb0353fc5252c30948d2e4eda22e499e5fe88d9d40029"},"natspec":{"author":"Tim Coulter , Piper Merriam ","methods":{"generateReleaseId(string,string)":{"details":"Returns release id that *would* be generated for a name and version pair on `release`.","params":{"packageName":"Package name","version":"Version string (ex: '1.0.0')"}},"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all package hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getPackageData(string)":{"details":"Returns the package data.","params":{"name":"Package name"}},"getPackageDb()":{"details":"Returns the address of the packageDb"},"getPackageName(bytes32)":{"details":"Retrieves the name for the given name hash.","params":{"packageId":"The name hash of package to lookup the name for."}},"getReleaseData(bytes32)":{"details":"Returns the release data for the release associated with the given release hash.","params":{"releaseId":"The release hash."}},"getReleaseDb()":{"details":"Returns the address of the releaseDb"},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"getReleaseValidator()":{"details":"Returns the address of the releaseValidator"},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"packageExists(string)":{"details":"Query the existence of a package with the given name. Returns boolean indicating whether the package exists.","params":{"name":"Package name"}},"release(string,string,string)":{"details":"Creates a a new release for the named package. If this is the first release for the given package then this will also assign msg.sender as the owner of the package. Returns success.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: '1.0.0')"}},"releaseExists(string,string)":{"details":"Query the existence of a release at the provided version for the named package. Returns boolean indicating whether such a release exists.","params":{"name":"Package name","version":"Version string (ex: '1.0.0')"}},"setPackageDb(address)":{"details":"Sets the address of the PackageDb contract.","params":{"newPackageDb":"The address to set for the PackageDb."}},"setReleaseDb(address)":{"details":"Sets the address of the ReleaseDb contract.","params":{"newReleaseDb":"The address to set for the ReleaseDb."}},"setReleaseValidator(address)":{"details":"Sets the address of the ReleaseValidator contract.","params":{"newReleaseValidator":"The address to set for the ReleaseValidator."}},"transferPackageOwner(string,address)":{"details":"Transfers package ownership to the provider new owner address.","params":{"name":"Package name","newPackageOwner":"The address of the new owner."}}},"title":"Database contract for a package index."},"runtime_bytecode":{"bytecode":"0x608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fe1fd71461013857806310ae4ce2146101e257806313af40351461023d5780631fb1c6c014610298578063271cd7601461036357806334c0d654146103ba578063379037dc1461041557806343212cf1146105265780634961b40c146105b95780634c4aea87146106105780634f197ee7146107925780637a9e5e4b1461083357806383ea06201461088e5780638da5cb5b1461090f578063a54fb68514610966578063b4b42e3514610991578063bf7e214f14610a5c578063c2ba5b4014610ab3578063c999a3b214610b71578063eb8cc47c14610c4a578063efae87d714610cc7578063f314bf4614610d8e578063fb3a1fb214610de9575b600080fd5b34801561014457600080fd5b506101676004803603810190808035600019169060200190929190505050610e40565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a757808201518184015260208101905061018c565b50505050905090810190601f1680156101d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ee57600080fd5b50610223600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f71565b604051808215151515815260200191505060405180910390f35b34801561024957600080fd5b5061027e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105f565b604051808215151515815260200191505060405180910390f35b3480156102a457600080fd5b50610345600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111c7565b60405180826000191660001916815260200191505060405180910390f35b34801561036f57600080fd5b506103786112c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f2565b604051808215151515815260200191505060405180910390f35b34801561042157600080fd5b50610508600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506113e0565b60405180826000191660001916815260200191505060405180910390f35b34801561053257600080fd5b5061055b600480360381019080803590602001909291908035906020019092919050505061246b565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105a4578082015181840152602081019050610589565b50505050905001935050505060405180910390f35b3480156105c557600080fd5b506105ce6125af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061c57600080fd5b5061063f60048036038101908080356000191690602001909291905050506125d9565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561068757808201518184015260208101905061066c565b50505050905090810190601f1680156106b45780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106ed5780820151818401526020810190506106d2565b50505050905090810190601f16801561071a5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610753578082015181840152602081019050610738565b50505050905090810190601f1680156107805780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561079e57600080fd5b50610819600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a6c565b604051808215151515815260200191505060405180910390f35b34801561083f57600080fd5b50610874600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dd9565b604051808215151515815260200191505060405180910390f35b34801561089a57600080fd5b506108f5600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612f43565b604051808215151515815260200191505060405180910390f35b34801561091b57600080fd5b5061092461314c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561097257600080fd5b5061097b613171565b6040518082815260200191505060405180910390f35b34801561099d57600080fd5b50610a3e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613237565b60405180826000191660001916815260200191505060405180910390f35b348015610a6857600080fd5b50610a71613542565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610abf57600080fd5b50610b1a600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613568565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b348015610b7d57600080fd5b50610bec600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001909291908035906020019092919050505061387b565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610c35578082015181840152602081019050610c1a565b50505050905001935050505060405180910390f35b348015610c5657600080fd5b50610cb1600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b03565b6040518082815260200191505060405180910390f35b348015610cd357600080fd5b50610d74600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613d30565b604051808215151515815260200191505060405180910390f35b348015610d9a57600080fd5b50610dcf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614154565b604051808215151515815260200191505060405180910390f35b348015610df557600080fd5b50610dfe614242565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b158015610ed957600080fd5b505afa158015610eed573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610f1757600080fd5b810190808051640100000000811115610f2f57600080fd5b82810190506020810184811115610f4557600080fd5b8151856001820283011164010000000082111715610f6257600080fd5b50509291905050509050919050565b6000610f7b61426c565b1515611015576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061106961426c565b1515611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806111d48484613237565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561126d57600080fd5b505afa158015611281573d6000803e3d6000fd5b505050506040513d602081101561129757600080fd5b810190808051906020019092919050505090508015156112bd57600060010291506112c1565b8191505b5092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006112fc61426c565b1515611396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000806113ee61426c565b1515611488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561155f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a7061636b6167652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611636576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d76616c6981526020017f6461746f722d6e6f742d7365740000000000000000000000000000000000000081525060400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117b757808201518184015260208101905061179c565b50505050905090810190601f1680156117e45780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561180157600080fd5b505afa158015611815573d6000803e3d6000fd5b505050506040513d602081101561182b57600080fd5b81019080805190602001909291905050509250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb814e9e846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b1580156118d557600080fd5b505afa1580156118e9573d6000803e3d6000fd5b505050506040513d60208110156118ff57600080fd5b81019080805190602001909291905050501515611a4957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788bc78c876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119c05780820151818401526020810190506119a5565b50505050905090810190601f1680156119ed5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b505050506040513d6020811015611a3657600080fd5b8101908080519060200190929190505050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028fe498600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338b8b8b6040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611bda578082015181840152602081019050611bbf565b50505050905090810190601f168015611c075780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015611c40578082015181840152602081019050611c25565b50505050905090810190601f168015611c6d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015611ca6578082015181840152602081019050611c8b565b50505050905090810190601f168015611cd35780820380516001836020036101000a031916815260200191505b50995050505050505050505060206040518083038186803b158015611cf757600080fd5b505afa158015611d0b573d6000803e3d6000fd5b505050506040513d6020811015611d2157600080fd5b810190808051906020019092919050505050611d3c87612f43565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663083ae1fe886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611de8578082015181840152602081019050611dcd565b50505050905090810190601f168015611e155780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b505050506040513d6020811015611e5e57600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f1a578082015181840152602081019050611eff565b50505050905090810190601f168015611f475780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611f6457600080fd5b505afa158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b810190808051906020019092919050505090508115156120b257600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb82336040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561207557600080fd5b505af1158015612089573d6000803e3d6000fd5b505050506040513d602081101561209f57600080fd5b8101908080519060200190929190505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b8594098285886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561217a57808201518184015260208101905061215f565b50505050905090810190601f1680156121a75780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156121c857600080fd5b505af11580156121dc573d6000803e3d6000fd5b505050506040513d60208110156121f257600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910582856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b1580156122ab57600080fd5b505afa1580156122bf573d6000803e3d6000fd5b505050506040513d60208110156122d557600080fd5b810190808051906020019092919050505093507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c387878760405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015612354578082015181840152602081019050612339565b50505050905090810190601f1680156123815780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156123ba57808201518184015260208101905061239f565b50505050905090810190601f1680156123e75780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612420578082015181840152602081019050612405565b50505050905090810190601f16801561244d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a18393505050509392505050565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343212cf185856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060006040518083038186803b15801561250657600080fd5b505afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561254457600080fd5b81019080805164010000000081111561255c57600080fd5b8281019050602081018481111561257257600080fd5b815185602082028301116401000000008211171561258f57600080fd5b505092919060200180519060200190929190505050915091509250929050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060806060600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c4aea87876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060806040518083038186803b15801561267857600080fd5b505afa15801561268c573d6000803e3d6000fd5b505050506040513d60808110156126a257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509050508093508192505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156127b157600080fd5b8101908080516401000000008111156127c957600080fd5b828101905060208101848111156127df57600080fd5b81518560018202830111640100000000821117156127fc57600080fd5b50509291905050509450600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aaf9f08836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561289d57600080fd5b505afa1580156128b1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156128db57600080fd5b8101908080516401000000008111156128f357600080fd5b8281019050602081018481111561290957600080fd5b815185600182028301116401000000008211171561292657600080fd5b50509291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d672640d876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b1580156129c757600080fd5b505afa1580156129db573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015612a0557600080fd5b810190808051640100000000811115612a1d57600080fd5b82810190506020810184811115612a3357600080fd5b8151856001820283011164010000000082111715612a5057600080fd5b5050929190505050925084848494509450945050509193909250565b600080612a7761426c565b1515612b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b612b1b84336144b0565b15612b295760009150612dd2565b612b3284613568565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa99a0b26852fc94fb40663ad64c63bac913f2e345ff098ea82209694879cb95e60405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c7e578082015181840152602081019050612c63565b50505050905090810190601f168015612cab5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015612cc857600080fd5b505afa158015612cdc573d6000803e3d6000fd5b505050506040513d6020811015612cf257600080fd5b8101908080519060200190929190505050856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015612d9157600080fd5b505af1158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b810190808051906020019092919050505050600191505b5092915050565b6000612de361426c565b1515612e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9b35240600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561302d578082015181840152602081019050613012565b50505050905090810190601f16801561305a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561307757600080fd5b505afa15801561308b573d6000803e3d6000fd5b505050506040513d60208110156130a157600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561310a57600080fd5b505afa15801561311e573d6000803e3d6000fd5b505050506040513d602081101561313457600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637370a38d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156131f757600080fd5b505afa15801561320b573d6000803e3d6000fd5b505050506040513d602081101561322157600080fd5b8101908080519060200190929190505050905090565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132e65780820151818401526020810190506132cb565b50505050905090810190601f1680156133135780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561333057600080fd5b505afa158015613344573d6000803e3d6000fd5b505050506040513d602081101561335a57600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134175780820151818401526020810190506133fc565b50505050905090810190601f1680156134445780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561346157600080fd5b505afa158015613475573d6000803e3d6000fd5b505050506040513d602081101561348b57600080fd5b8101908080519060200190929190505050905081816040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561350b57805182526020820191506020810190506020830392506134e6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209250505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561361a5780820151818401526020810190506135ff565b50505050905090810190601f1680156136475780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561366457600080fd5b505afa158015613678573d6000803e3d6000fd5b505050506040513d602081101561368e57600080fd5b81019080805190602001909291905050509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561373857600080fd5b505afa15801561374c573d6000803e3d6000fd5b505050506040513d606081101561376257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809450819650829750505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561382a57600080fd5b505afa15801561383e573d6000803e3d6000fd5b505050506040513d602081101561385457600080fd5b81019080805190602001909291905050509250848484849450945094509450509193509193565b6060600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561392a57808201518184015260208101905061390f565b50505050905090810190601f1680156139575780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561397457600080fd5b505afa158015613988573d6000803e3d6000fd5b505050506040513d602081101561399e57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa6bf4da8287876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001838152602001828152602001935050505060006040518083038186803b158015613a5857600080fd5b505afa158015613a6c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506040811015613a9657600080fd5b810190808051640100000000811115613aae57600080fd5b82810190506020810184811115613ac457600080fd5b8151856020820283011164010000000082111715613ae157600080fd5b5050929190602001805190602001909291905050509250925050935093915050565b6000806000613b1184612f43565b9150811515613b235760009250613d29565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bcd578082015181840152602081019050613bb2565b50505050905090810190601f168015613bfa5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613c1757600080fd5b505afa158015613c2b573d6000803e3d6000fd5b505050506040513d6020811015613c4157600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015613ceb57600080fd5b505afa158015613cff573d6000803e3d6000fd5b505050506040513d6020811015613d1557600080fd5b810190808051906020019092919050505092505b5050919050565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ddf578082015181840152602081019050613dc4565b50505050905090810190601f168015613e0c5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613e2957600080fd5b505afa158015613e3d573d6000803e3d6000fd5b505050506040513d6020811015613e5357600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f10578082015181840152602081019050613ef5565b50505050905090810190601f168015613f3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613f5a57600080fd5b505afa158015613f6e573d6000803e3d6000fd5b505050506040513d6020811015613f8457600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910585856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b15801561407c57600080fd5b505afa158015614090573d6000803e3d6000fd5b505050506040513d60208110156140a657600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561410f57600080fd5b505afa158015614123573d6000803e3d6000fd5b505050506040513d602081101561413957600080fd5b81019080805190602001909291905050509250505092915050565b600061415e61426c565b15156141f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156142cc57600190506144ad565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561431657600090506144ad565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561446f57600080fd5b505afa158015614483573d6000803e3d6000fd5b505050506040513d602081101561449957600080fd5b810190808051906020019092919050505090505b90565b6000806144bc84613568565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050929150505600a165627a7a723058201e88c2626a458a31cbd8a0ddb0353fc5252c30948d2e4eda22e499e5fe88d9d40029"}},"PackageRegistryInterface":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"deployment_bytecode":{"bytecode":"0x"},"natspec":{"author":"Piper Merriam , Christopher Gewecke ","methods":{"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package ids for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all release hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice.","packageName":"Package name"}},"getPackageName(bytes32)":{"details":"Returns the string name of the package associated with a package id","params":{"packageId":"The package id to look up"}},"getReleaseData(bytes32)":{"details":"Returns the package data for a release.","params":{"releaseId":"Release id"}},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"release(string,string,string)":{"details":"Creates a a new release for the named package.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: 1.0.0)"}}},"title":"EIP 1319 Smart Contract Package Registry Interface"},"runtime_bytecode":{"bytecode":"0x"}},"ReleaseDB":{"abi":[{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getNumReleasesForNameHash","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"version","type":"string"}],"name":"hashVersion","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"releaseId","type":"bytes32"},{"name":"reason","type":"string"}],"name":"removeRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"version","type":"string"}],"name":"setVersion","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"},{"name":"manifestURI","type":"string"}],"name":"setRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"}],"name":"hashRelease","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"versionHash","type":"bytes32"}],"name":"getVersion","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"versionHash","type":"bytes32"}],"name":"versionExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"releaseExisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"idx","type":"uint256"}],"name":"getReleaseIdForNameHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getManifestURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"_offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseId","type":"bytes32"}],"name":"ReleaseCreate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseId","type":"bytes32"}],"name":"ReleaseUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseId","type":"bytes32"},{"indexed":false,"name":"reason","type":"string"}],"name":"ReleaseDelete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.4.26+commit.4563c3fc"},"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a361206d806100b96000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af403514610101578063173cb7de1461015c5780631a2b3f62146101a1578063244fcd03146102265780633f415772146102b55780634c4aea87146102fe578063788bc78c146103685780637a9e5e4b146103ed5780638b859409146104485780638da5cb5b146104e557806393d791051461053c5780639aaf9f0814610597578063bb814e9e14610641578063bf7e214f1461068a578063ceef4a12146106e1578063cf6a4d591461072a578063d672640d14610781578063fa6bf4da1461082b575b600080fd5b34801561010d57600080fd5b50610142600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108cc565b604051808215151515815260200191505060405180910390f35b34801561016857600080fd5b5061018b6004803603810190808035600019169060200190929190505050610a34565b6040518082815260200191505060405180910390f35b3480156101ad57600080fd5b50610208600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610aff565b60405180826000191660001916815260200191505060405180910390f35b34801561023257600080fd5b5061029b6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bd7565b604051808215151515815260200191505060405180910390f35b3480156102c157600080fd5b506102e4600480360381019080803560001916906020019092919050505061102e565b604051808215151515815260200191505060405180910390f35b34801561030a57600080fd5b5061032d6004803603810190808035600019169060200190929190505050611063565b604051808560001916600019168152602001846000191660001916815260200183815260200182815260200194505050505060405180910390f35b34801561037457600080fd5b506103cf600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611151565b60405180826000191660001916815260200191505060405180910390f35b3480156103f957600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129e565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104cb60048036038101908080356000191690602001909291908035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611408565b604051808215151515815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b5061057960048036038101908080356000191690602001909291908035600019169060200190929190505050611778565b60405180826000191660001916815260200191505060405180910390f35b3480156105a357600080fd5b506105c6600480360381019080803560001916906020019092919050505061181c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106065780820151818401526020810190506105eb565b50505050905090810190601f1680156106335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561064d57600080fd5b50610670600480360381019080803560001916906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561069657600080fd5b5061069f6119b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106ed57600080fd5b5061071060048036038101908080356000191690602001909291905050506119d6565b604051808215151515815260200191505060405180910390f35b34801561073657600080fd5b50610763600480360381019080803560001916906020019092919080359060200190929190505050611a08565b60405180826000191660001916815260200191505060405180910390f35b34801561078d57600080fd5b506107b06004803603810190808035600019169060200190929190505050611adc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107f05780820151818401526020810190506107d5565b50505050905090810190601f16801561081d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561083757600080fd5b5061086e60048036038101908080356000191690602001909291908035906020019092919080359060200190929190505050611c41565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156108b757808201518184015260208101905061089c565b50505050905001935050505060405180910390f35b60006108d6611d10565b1515610970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600760008360001916600019168152602001908152602001600020730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610abd57600080fd5b505af4158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b81019080805190602001909291905050509050919050565b6000816040516020018082805190602001908083835b602083101515610b3a5780518252602082019150602081019050602083039250610b15565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515610ba35780518252602082019150602081019050602083039250610b7e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000610be4611d10565b1515610c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84610c888161102e565b1515610d22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610d2b86611063565b9050508093508194505050600260008760001916600019168152602001908152602001600020600080820160006101000a81549060ff02191690556001820160009055600282016000905560038201600090556004820160009055600582016000610d969190611f54565b50506008600083600019166000191681526020019081526020016000206000610dbf9190611f54565b600473000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610e3d57600080fd5b505af4158015610e51573d6000803e3d6000fd5b505050506040513d6020811015610e6757600080fd5b81019080805190602001909291905050505060076000846000191660001916815260200190815260200160002073000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610f1057600080fd5b505af4158015610f24573d6000803e3d6000fd5b505050506040513d6020811015610f3a57600080fd5b810190808051906020019092919050505050600160036000886000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555085600019167f72f61f9276232f7592082903bb275df873e35580890da43e4ff3338f8bcccca6866040518080602001828103825283818151815260200191508051906020019080838360005b83811015610fe7578082015181840152602081019050610fcc565b50505050905090810190601f1680156110145780820380516001836020036101000a031916815260200191505b509250505060405180910390a26001935050505092915050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000806000806000856110758161102e565b151561110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000886000191660001916815260200190815260200160002091508160030154826004015483600101548460020154955095509550955050509193509193565b60008061115c611d10565b15156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6111ff83610aff565b905060096000826000191660001916815260200190815260200160002060009054906101000a900460ff1615156112955782600860008360001916600019168152602001908152602001600020908051906020019061125f929190611f9c565b50600160096000836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80915050919050565b60006112a8611d10565b1515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000611415611d10565b15156114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6114b98686611778565b915060026000836000191660001916815260200190815260200160002090508060000160009054906101000a900460ff16156115255781600019167f421b70585c97d607687082e6736e0da3fc5c2c2ac156dfbe444cf54729d5e02d60405160405180910390a2611724565b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160030181600019169055508481600401816000191690555060047300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156115e357600080fd5b505af41580156115f7573d6000803e3d6000fd5b505050506040513d602081101561160d57600080fd5b8101908080519060200190929190505050506007600087600019166000191681526020019081526020016000207300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156116b657600080fd5b505af41580156116ca573d6000803e3d6000fd5b505050506040513d60208110156116e057600080fd5b81019080805190602001909291905050505081600019167feb3a047e740f5b7dd241cb3412aed51d713354a030f7966fe818d2bf9691b5fc60405160405180910390a25b42816002018190555083816005019080519060200190611745929190611f9c565b506001925050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156117e757805182526020820191506020810190506020830392506117c2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6060816118288161197e565b15156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a76657273696f6e2d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6008600084600019166000191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119715780601f1061194657610100808354040283529160200191611971565b820191906000526020600020905b81548152906001019060200180831161195457829003601f168201915b5050505050915050919050565b600060096000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060036000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b60006007600084600019166000191681526020019081526020016000207300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b158015611a9957600080fd5b505af4158015611aad573d6000803e3d6000fd5b505050506040513d6020811015611ac357600080fd5b8101908080519060200190929190505050905092915050565b606081611ae88161102e565b1515611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206005018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c345780601f10611c0957610100808354040283529160200191611c34565b820191906000526020600020905b815481529060010190602001808311611c1757829003601f168201915b5050505050915050919050565b606060006060600080600080889350611c598a610a34565b915081841015611cfd57838203925087831115611c74578792505b82604051908082528060200260200182016040528015611ca35781602001602082028038833980820191505090505b5094505b6000831115611cfc57611cba8a85611a08565b9050808560018503815181101515611cce57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611ca7565b5b8484965096505050505050935093915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d705760019050611f51565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611dba5760009050611f51565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d6020811015611f3d57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f10611f7a5750611f99565b601f016020900490600052602060002090810190611f98919061201c565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fdd57805160ff191683800117855561200b565b8280016001018555821561200b579182015b8281111561200a578251825591602001919060010190611fef565b5b509050612018919061201c565b5090565b61203e91905b8082111561203a576000816000905550600101612022565b5090565b905600a165627a7a72305820813eea520fe5c1cb0bc50921d9933c2b1eddb160d880bf1ca7444935f05b90df0029","link_references":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2828,3708,3919,5666,5877,6880]}]},"natspec":{"author":"Tim Coulter , Piper Merriam ","methods":{"getAllReleaseIds(bytes32,uint256,uint256)":{"details":"Returns a slice of the array of all releases hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getManifestURI(bytes32)":{"details":"Returns the URI of the release manifest for the given release hash.","params":{"releaseId":"Release hash"}},"getNumReleasesForNameHash(bytes32)":{"details":"Get the total number of releases","params":{"nameHash":"the name hash to lookup."}},"getReleaseData(bytes32)":{"details":"Returns the releaseData for the given release has a package.","params":{"releaseId":"The release hash."}},"getReleaseIdForNameHash(bytes32,uint256)":{"details":"Release hash for a Package at a given index","params":{"idx":"The index of the release hash to retrieve.","nameHash":"the name hash to lookup."}},"getVersion(bytes32)":{"details":"Returns string version identifier from the version of the given release hash.","params":{"versionHash":"the version hash"}},"hashRelease(bytes32,bytes32)":{"details":"Returns release hash for the given release","params":{"nameHash":"The name hash of the package name.","versionHash":"The version hash for the release version."}},"hashVersion(string)":{"details":"Returns version hash for the given semver version.","params":{"version":"Version string"}},"releaseExisted(bytes32)":{"details":"Query the past existence of a release at the provided version for a package. Returns boolean indicating whether such a release ever existed.","params":{"releaseHash":"The release hash to query."}},"releaseExists(bytes32)":{"details":"Query the existence of a release at the provided version for a package. Returns boolean indicating whether such a release exists.","params":{"releaseId":"The release hash to query."}},"removeRelease(bytes32,string)":{"details":"Removes a release from a package. Returns success.","params":{"reason":"Explanation for why the removal happened.","releaseId":"The release hash to be removed"}},"setRelease(bytes32,bytes32,string)":{"details":"Creates or updates a release for a package. Returns success.","params":{"manifestURI":"The URI for the release manifest for this release.","nameHash":"The name hash of the package.","versionHash":"The version hash for the release version."}},"setVersion(string)":{"details":"Adds the given version to the local version database. Returns the versionHash for the provided version.","params":{"version":"Version string (ex: '1.0.0')"}},"versionExists(bytes32)":{"details":"Query the existence of the provided version in the recorded versions. Returns boolean indicating whether such a version exists.","params":{"versionHash":"the version hash to check."}}},"title":"Database contract for a package index."},"runtime_bytecode":{"bytecode":"0x6080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af403514610101578063173cb7de1461015c5780631a2b3f62146101a1578063244fcd03146102265780633f415772146102b55780634c4aea87146102fe578063788bc78c146103685780637a9e5e4b146103ed5780638b859409146104485780638da5cb5b146104e557806393d791051461053c5780639aaf9f0814610597578063bb814e9e14610641578063bf7e214f1461068a578063ceef4a12146106e1578063cf6a4d591461072a578063d672640d14610781578063fa6bf4da1461082b575b600080fd5b34801561010d57600080fd5b50610142600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108cc565b604051808215151515815260200191505060405180910390f35b34801561016857600080fd5b5061018b6004803603810190808035600019169060200190929190505050610a34565b6040518082815260200191505060405180910390f35b3480156101ad57600080fd5b50610208600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610aff565b60405180826000191660001916815260200191505060405180910390f35b34801561023257600080fd5b5061029b6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bd7565b604051808215151515815260200191505060405180910390f35b3480156102c157600080fd5b506102e4600480360381019080803560001916906020019092919050505061102e565b604051808215151515815260200191505060405180910390f35b34801561030a57600080fd5b5061032d6004803603810190808035600019169060200190929190505050611063565b604051808560001916600019168152602001846000191660001916815260200183815260200182815260200194505050505060405180910390f35b34801561037457600080fd5b506103cf600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611151565b60405180826000191660001916815260200191505060405180910390f35b3480156103f957600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129e565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104cb60048036038101908080356000191690602001909291908035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611408565b604051808215151515815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b5061057960048036038101908080356000191690602001909291908035600019169060200190929190505050611778565b60405180826000191660001916815260200191505060405180910390f35b3480156105a357600080fd5b506105c6600480360381019080803560001916906020019092919050505061181c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106065780820151818401526020810190506105eb565b50505050905090810190601f1680156106335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561064d57600080fd5b50610670600480360381019080803560001916906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561069657600080fd5b5061069f6119b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106ed57600080fd5b5061071060048036038101908080356000191690602001909291905050506119d6565b604051808215151515815260200191505060405180910390f35b34801561073657600080fd5b50610763600480360381019080803560001916906020019092919080359060200190929190505050611a08565b60405180826000191660001916815260200191505060405180910390f35b34801561078d57600080fd5b506107b06004803603810190808035600019169060200190929190505050611adc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107f05780820151818401526020810190506107d5565b50505050905090810190601f16801561081d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561083757600080fd5b5061086e60048036038101908080356000191690602001909291908035906020019092919080359060200190929190505050611c41565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156108b757808201518184015260208101905061089c565b50505050905001935050505060405180910390f35b60006108d6611d10565b1515610970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600760008360001916600019168152602001908152602001600020730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610abd57600080fd5b505af4158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b81019080805190602001909291905050509050919050565b6000816040516020018082805190602001908083835b602083101515610b3a5780518252602082019150602081019050602083039250610b15565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515610ba35780518252602082019150602081019050602083039250610b7e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000610be4611d10565b1515610c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84610c888161102e565b1515610d22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610d2b86611063565b9050508093508194505050600260008760001916600019168152602001908152602001600020600080820160006101000a81549060ff02191690556001820160009055600282016000905560038201600090556004820160009055600582016000610d969190611f54565b50506008600083600019166000191681526020019081526020016000206000610dbf9190611f54565b600473000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610e3d57600080fd5b505af4158015610e51573d6000803e3d6000fd5b505050506040513d6020811015610e6757600080fd5b81019080805190602001909291905050505060076000846000191660001916815260200190815260200160002073000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610f1057600080fd5b505af4158015610f24573d6000803e3d6000fd5b505050506040513d6020811015610f3a57600080fd5b810190808051906020019092919050505050600160036000886000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555085600019167f72f61f9276232f7592082903bb275df873e35580890da43e4ff3338f8bcccca6866040518080602001828103825283818151815260200191508051906020019080838360005b83811015610fe7578082015181840152602081019050610fcc565b50505050905090810190601f1680156110145780820380516001836020036101000a031916815260200191505b509250505060405180910390a26001935050505092915050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000806000806000856110758161102e565b151561110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000886000191660001916815260200190815260200160002091508160030154826004015483600101548460020154955095509550955050509193509193565b60008061115c611d10565b15156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6111ff83610aff565b905060096000826000191660001916815260200190815260200160002060009054906101000a900460ff1615156112955782600860008360001916600019168152602001908152602001600020908051906020019061125f929190611f9c565b50600160096000836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80915050919050565b60006112a8611d10565b1515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000611415611d10565b15156114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6114b98686611778565b915060026000836000191660001916815260200190815260200160002090508060000160009054906101000a900460ff16156115255781600019167f421b70585c97d607687082e6736e0da3fc5c2c2ac156dfbe444cf54729d5e02d60405160405180910390a2611724565b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160030181600019169055508481600401816000191690555060047300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156115e357600080fd5b505af41580156115f7573d6000803e3d6000fd5b505050506040513d602081101561160d57600080fd5b8101908080519060200190929190505050506007600087600019166000191681526020019081526020016000207300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156116b657600080fd5b505af41580156116ca573d6000803e3d6000fd5b505050506040513d60208110156116e057600080fd5b81019080805190602001909291905050505081600019167feb3a047e740f5b7dd241cb3412aed51d713354a030f7966fe818d2bf9691b5fc60405160405180910390a25b42816002018190555083816005019080519060200190611745929190611f9c565b506001925050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156117e757805182526020820191506020810190506020830392506117c2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6060816118288161197e565b15156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a76657273696f6e2d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6008600084600019166000191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119715780601f1061194657610100808354040283529160200191611971565b820191906000526020600020905b81548152906001019060200180831161195457829003601f168201915b5050505050915050919050565b600060096000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060036000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b60006007600084600019166000191681526020019081526020016000207300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b158015611a9957600080fd5b505af4158015611aad573d6000803e3d6000fd5b505050506040513d6020811015611ac357600080fd5b8101908080519060200190929190505050905092915050565b606081611ae88161102e565b1515611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206005018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c345780601f10611c0957610100808354040283529160200191611c34565b820191906000526020600020905b815481529060010190602001808311611c1757829003601f168201915b5050505050915050919050565b606060006060600080600080889350611c598a610a34565b915081841015611cfd57838203925087831115611c74578792505b82604051908082528060200260200182016040528015611ca35781602001602082028038833980820191505090505b5094505b6000831115611cfc57611cba8a85611a08565b9050808560018503815181101515611cce57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611ca7565b5b8484965096505050505050935093915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d705760019050611f51565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611dba5760009050611f51565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d6020811015611f3d57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f10611f7a5750611f99565b601f016020900490600052602060002090810190611f98919061201c565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fdd57805160ff191683800117855561200b565b8280016001018555821561200b579182015b8281111561200a578251825591602001919060010190611fef565b5b509050612018919061201c565b5090565b61203e91905b8082111561203a576000816000905550600101612022565b5090565b905600a165627a7a72305820813eea520fe5c1cb0bc50921d9933c2b1eddb160d880bf1ca7444935f05b90df0029","link_references":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2643,3523,3734,5481,5692,6695]}]}},"ReleaseValidator":{"abi":[{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"releaseDb","type":"address"},{"name":"callerAddress","type":"address"},{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"validateRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"releaseDb","type":"address"},{"name":"name","type":"string"},{"name":"version","type":"string"}],"name":"validateIsNewRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"callerAddress","type":"address"},{"name":"name","type":"string"}],"name":"validateAuthorization","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"name","type":"string"}],"name":"validatePackageName","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"value","type":"string"}],"name":"validateStringIdentifier","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.4.26+commit.4563c3fc"},"deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b50611732806100206000396000f30060806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063028fe4981461007257806310c8e28f146101df5780632113e91b146102e65780632520a1b8146103a757806382ee976f14610448575b600080fd5b34801561007e57600080fd5b506101c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506104c9565b604051808215151515815260200191505060405180910390f35b3480156101eb57600080fd5b506102cc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610973565b604051808215151515815260200191505060405180910390f35b3480156102f257600080fd5b5061038d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610dd0565b604051808215151515815260200191505060405180910390f35b3480156103b357600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506110b9565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104af600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506116e8565b604051808215151515815260200191505060405180910390f35b6000808773ffffffffffffffffffffffffffffffffffffffff16141561057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a7061636b6167652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff161415610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a72656c656173652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61063b878686610dd0565b15156106d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a52656c6561736556616c696461746f723a63616c6c65722d6e81526020017f6f742d617574686f72697a65640000000000000000000000000000000000000081525060400191505060405180910390fd5b6106e187878686610973565b151561077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f6573636170653a52656c6561736556616c696461746f723a76657273696f6e2d81526020017f70726576696f75736c792d7075626c697368656400000000000000000000000081525060400191505060405180910390fd5b61078587856110b9565b151561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f7061636b6167652d6e616d65000000000000000000000000000000000000000081525060400191505060405180910390fd5b610828826116e8565b15156108c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f6d616e69666573742d757269000000000000000000000000000000000000000081525060400191505060405180910390fd5b6108cb836116e8565b1515610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f72656c656173652d76657273696f6e000000000000000000000000000000000081525060400191505060405180910390fd5b600190509695505050505050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a015780820151818401526020810190506109e6565b50505050905090810190601f168015610a2e5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610a4b57600080fd5b505afa158015610a5f573d6000803e3d6000fd5b505050506040513d6020811015610a7557600080fd5b810190808051906020019092919050505092508673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b10578082015181840152602081019050610af5565b50505050905090810190601f168015610b3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d6020811015610b8457600080fd5b810190808051906020019092919050505091508673ffffffffffffffffffffffffffffffffffffffff166393d7910584846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d6020811015610c4657600080fd5b810190808051906020019092919050505090508673ffffffffffffffffffffffffffffffffffffffff16633f415772826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610cce57600080fd5b505afa158015610ce2573d6000803e3d6000fd5b505050506040513d6020811015610cf857600080fd5b8101908080519060200190929190505050158015610dc357508673ffffffffffffffffffffffffffffffffffffffff1663ceef4a12826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610d8657600080fd5b505afa158015610d9a573d6000803e3d6000fd5b505050506040513d6020811015610db057600080fd5b8101908080519060200190929190505050155b9350505050949350505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e5d578082015181840152602081019050610e42565b50505050905090810190601f168015610e8a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610ea757600080fd5b505afa158015610ebb573d6000803e3d6000fd5b505050506040513d6020811015610ed157600080fd5b810190808051906020019092919050505091508573ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610f5957600080fd5b505afa158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b81019080805190602001909291905050501515610fa357600192506110b0565b8573ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561101857600080fd5b505afa15801561102c573d6000803e3d6000fd5b505050506040513d606081101561104257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050905050809150508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ab57600192506110b0565b600092505b50509392505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561114657808201518184015260208101905061112b565b50505050905090810190601f1680156111735780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561119057600080fd5b505afa1580156111a4573d6000803e3d6000fd5b505050506040513d60208110156111ba57600080fd5b810190808051906020019092919050505091508473ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561124257600080fd5b505afa158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b81019080805190602001909291905050501561128b57600192506116e0565b60028451108061129c575060ff8451115b156112aa57600092506116e0565b600090505b83518110156116db577f2d000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561130957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156113835750600081115b1561138d576116ce565b60008111801561145b57507f30000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156113ea57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900410155b801561152557507f39000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156114b457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b1561152f576116ce565b7f61000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561158157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004101580156116bb57507f7a000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561164a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b156116c5576116ce565b600092506116e0565b80806001019150506112af565b600192505b505092915050565b600080825114156116fc5760009050611701565b600190505b9190505600a165627a7a72305820c6631590e704be0dfc5bd89bbc410fd70472a41eae562ca6230bd34c1fa328650029"},"natspec":{"author":"Piper Merriam ","methods":{"validateAuthorization(address,address,string)":{"details":"Validate whether the callerAddress is authorized to make this release.","params":{"callerAddress":"The address which is attempting to create the release.","name":"The name of the package.","packageDb":"The address of the PackageDB"}},"validateIsNewRelease(address,address,string,string)":{"details":"Validate that the version being released has not already been released.","params":{"name":"The name of the package.","packageDb":"The address of the PackageDB","releaseDb":"The address of the ReleaseDB","version":"The version string for the release"}},"validatePackageName(address,string)":{"details":"Returns boolean whether the provided package name is valid.","params":{"name":"The name of the package.","packageDb":"The address of the PackageDB"}},"validateRelease(address,address,address,string,string,string)":{"details":"Runs validation on all of the data needed for releasing a package. Returns success.","params":{"callerAddress":"The address which is attempting to create the release.","manifestURI":"The URI of the release manifest.","name":"The name of the package.","packageDb":"The address of the PackageDB","releaseDb":"The address of the ReleaseDB","version":"The version string of the package (ex: `1.0.0`)"}},"validateStringIdentifier(string)":{"details":"Returns boolean whether the input string has a length","params":{"value":"The string to validate."}}},"title":"Database contract for a package index."},"runtime_bytecode":{"bytecode":"0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063028fe4981461007257806310c8e28f146101df5780632113e91b146102e65780632520a1b8146103a757806382ee976f14610448575b600080fd5b34801561007e57600080fd5b506101c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506104c9565b604051808215151515815260200191505060405180910390f35b3480156101eb57600080fd5b506102cc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610973565b604051808215151515815260200191505060405180910390f35b3480156102f257600080fd5b5061038d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610dd0565b604051808215151515815260200191505060405180910390f35b3480156103b357600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506110b9565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104af600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506116e8565b604051808215151515815260200191505060405180910390f35b6000808773ffffffffffffffffffffffffffffffffffffffff16141561057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a7061636b6167652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff161415610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a72656c656173652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61063b878686610dd0565b15156106d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a52656c6561736556616c696461746f723a63616c6c65722d6e81526020017f6f742d617574686f72697a65640000000000000000000000000000000000000081525060400191505060405180910390fd5b6106e187878686610973565b151561077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f6573636170653a52656c6561736556616c696461746f723a76657273696f6e2d81526020017f70726576696f75736c792d7075626c697368656400000000000000000000000081525060400191505060405180910390fd5b61078587856110b9565b151561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f7061636b6167652d6e616d65000000000000000000000000000000000000000081525060400191505060405180910390fd5b610828826116e8565b15156108c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f6d616e69666573742d757269000000000000000000000000000000000000000081525060400191505060405180910390fd5b6108cb836116e8565b1515610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f72656c656173652d76657273696f6e000000000000000000000000000000000081525060400191505060405180910390fd5b600190509695505050505050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a015780820151818401526020810190506109e6565b50505050905090810190601f168015610a2e5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610a4b57600080fd5b505afa158015610a5f573d6000803e3d6000fd5b505050506040513d6020811015610a7557600080fd5b810190808051906020019092919050505092508673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b10578082015181840152602081019050610af5565b50505050905090810190601f168015610b3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d6020811015610b8457600080fd5b810190808051906020019092919050505091508673ffffffffffffffffffffffffffffffffffffffff166393d7910584846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d6020811015610c4657600080fd5b810190808051906020019092919050505090508673ffffffffffffffffffffffffffffffffffffffff16633f415772826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610cce57600080fd5b505afa158015610ce2573d6000803e3d6000fd5b505050506040513d6020811015610cf857600080fd5b8101908080519060200190929190505050158015610dc357508673ffffffffffffffffffffffffffffffffffffffff1663ceef4a12826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610d8657600080fd5b505afa158015610d9a573d6000803e3d6000fd5b505050506040513d6020811015610db057600080fd5b8101908080519060200190929190505050155b9350505050949350505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e5d578082015181840152602081019050610e42565b50505050905090810190601f168015610e8a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610ea757600080fd5b505afa158015610ebb573d6000803e3d6000fd5b505050506040513d6020811015610ed157600080fd5b810190808051906020019092919050505091508573ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610f5957600080fd5b505afa158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b81019080805190602001909291905050501515610fa357600192506110b0565b8573ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561101857600080fd5b505afa15801561102c573d6000803e3d6000fd5b505050506040513d606081101561104257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050905050809150508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ab57600192506110b0565b600092505b50509392505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561114657808201518184015260208101905061112b565b50505050905090810190601f1680156111735780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561119057600080fd5b505afa1580156111a4573d6000803e3d6000fd5b505050506040513d60208110156111ba57600080fd5b810190808051906020019092919050505091508473ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561124257600080fd5b505afa158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b81019080805190602001909291905050501561128b57600192506116e0565b60028451108061129c575060ff8451115b156112aa57600092506116e0565b600090505b83518110156116db577f2d000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561130957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156113835750600081115b1561138d576116ce565b60008111801561145b57507f30000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156113ea57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900410155b801561152557507f39000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156114b457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b1561152f576116ce565b7f61000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561158157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004101580156116bb57507f7a000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561164a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b156116c5576116ce565b600092506116e0565b80806001019150506112af565b600192505b505092915050565b600080825114156116fc5760009050611701565b600190505b9190505600a165627a7a72305820c6631590e704be0dfc5bd89bbc410fd70472a41eae562ca6230bd34c1fa328650029"}},"WhitelistAuthority":{"abi":[{"constant":false,"inputs":[{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setAnyoneCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"}],"name":"canCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"callerAddress","type":"address"},{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetAnyoneCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.4.26+commit.4563c3fc"},"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3610ecf806100b96000396000f300608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302acdb441461008857806313af4035146101185780637a9e5e4b1461017357806387045369146101ce5780638da5cb5b1461027e578063b7009613146102d5578063bf7e214f14610379575b600080fd5b34801561009457600080fd5b506100fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291908035151590602001909291905050506103d0565b604051808215151515815260200191505060405180910390f35b34801561012457600080fd5b50610159600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610597565b604051808215151515815260200191505060405180910390f35b34801561017f57600080fd5b506101b4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106ff565b604051808215151515815260200191505060405180910390f35b3480156101da57600080fd5b50610264600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803515159060200190929190505050610869565b604051808215151515815260200191505060405180910390f35b34801561028a57600080fd5b50610293610a85565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b5061035f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610aaa565b604051808215151515815260200191505060405180910390f35b34801561038557600080fd5b5061038e610c39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006103da610c5f565b1515610474576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff167f2bdcdc8a0588683c308a993fd1243cffdf4da84fc0e91b056dbe7baced0b43b284604051808215151515815260200191505060405180910390a3600190509392505050565b60006105a1610c5f565b151561063b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610709610c5f565b15156107a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610873610c5f565b151561090d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2f92249a3089c63a63689d414f60bbb3cb57484dfac21dd4e39605e6dd845c6285604051808215151515815260200191505060405180910390a460019050949350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615610b565760019050610c32565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690505b9392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610cbf5760019050610ea0565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d095760009050610ea0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610e6257600080fd5b505afa158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b810190808051906020019092919050505090505b905600a165627a7a72305820a9dc2bbff75fb3cb9904c5ecd73b06ba22c1850dd2eda7b2874477e561dbb74e0029"},"natspec":{"methods":{}},"runtime_bytecode":{"bytecode":"0x608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302acdb441461008857806313af4035146101185780637a9e5e4b1461017357806387045369146101ce5780638da5cb5b1461027e578063b7009613146102d5578063bf7e214f14610379575b600080fd5b34801561009457600080fd5b506100fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291908035151590602001909291905050506103d0565b604051808215151515815260200191505060405180910390f35b34801561012457600080fd5b50610159600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610597565b604051808215151515815260200191505060405180910390f35b34801561017f57600080fd5b506101b4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106ff565b604051808215151515815260200191505060405180910390f35b3480156101da57600080fd5b50610264600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803515159060200190929190505050610869565b604051808215151515815260200191505060405180910390f35b34801561028a57600080fd5b50610293610a85565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b5061035f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610aaa565b604051808215151515815260200191505060405180910390f35b34801561038557600080fd5b5061038e610c39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006103da610c5f565b1515610474576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff167f2bdcdc8a0588683c308a993fd1243cffdf4da84fc0e91b056dbe7baced0b43b284604051808215151515815260200191505060405180910390a3600190509392505050565b60006105a1610c5f565b151561063b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610709610c5f565b15156107a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610873610c5f565b151561090d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2f92249a3089c63a63689d414f60bbb3cb57484dfac21dd4e39605e6dd845c6285604051808215151515815260200191505060405180910390a460019050949350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615610b565760019050610c32565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690505b9392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610cbf5760019050610ea0565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d095760009050610ea0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610e6257600080fd5b505afa158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b810190808051906020019092919050505090505b905600a165627a7a72305820a9dc2bbff75fb3cb9904c5ecd73b06ba22c1850dd2eda7b2874477e561dbb74e0029"}},"WhitelistAuthorityInterface":{"abi":[{"constant":false,"inputs":[{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setAnyoneCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"}],"name":"canCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"callerAddress","type":"address"},{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetAnyoneCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deployment_bytecode":{"bytecode":"0x"},"natspec":{"methods":{}},"runtime_bytecode":{"bytecode":"0x"}}},"manifest_version":"2","package_name":"solidity-registry","sources":{"./Authority.sol":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n\ncontract AuthorityInterface {\n function canCall(\n address callerAddress,\n address codeAddress,\n bytes4 sig\n )\n public\n view\n returns (bool);\n}\n\n\ncontract AuthorizedInterface {\n address public owner;\n AuthorityInterface public authority;\n\n modifier auth {\n require(isAuthorized(),\"escape:Authority:caller-not-authorized\");\n _;\n }\n\n event OwnerUpdate(address indexed oldOwner, address indexed newOwner);\n event AuthorityUpdate(address indexed oldAuthority, address indexed newAuthority);\n\n function setOwner(address newOwner) public returns (bool);\n\n function setAuthority(AuthorityInterface newAuthority) public returns (bool);\n\n function isAuthorized() internal returns (bool);\n}\n\n\ncontract Authorized is AuthorizedInterface {\n constructor() public {\n owner = msg.sender;\n emit OwnerUpdate(0x0, owner);\n }\n\n function setOwner(address newOwner)\n public\n auth\n returns (bool)\n {\n emit OwnerUpdate(owner, newOwner);\n owner = newOwner;\n return true;\n }\n\n function setAuthority(AuthorityInterface newAuthority)\n public\n auth\n returns (bool)\n {\n emit AuthorityUpdate(authority, newAuthority);\n authority = newAuthority;\n return true;\n }\n\n function isAuthorized() internal returns (bool) {\n if (msg.sender == owner) {\n return true;\n } else if (address(authority) == (0)) {\n return false;\n } else {\n return authority.canCall(msg.sender, this, msg.sig);\n }\n }\n}\n\n\ncontract WhitelistAuthorityInterface is AuthorityInterface, AuthorizedInterface {\n event SetCanCall(\n address indexed callerAddress,\n address indexed codeAddress,\n bytes4 indexed sig,\n bool can\n );\n\n event SetAnyoneCanCall(\n address indexed codeAddress,\n bytes4 indexed sig,\n bool can\n );\n\n function setCanCall(\n address callerAddress,\n address codeAddress,\n bytes4 sig,\n bool can\n )\n public\n returns (bool);\n\n function setAnyoneCanCall(\n address codeAddress,\n bytes4 sig,\n bool can\n )\n public\n returns (bool);\n}\n\n\ncontract WhitelistAuthority is WhitelistAuthorityInterface, Authorized {\n mapping (address => mapping (address => mapping (bytes4 => bool))) _canCall;\n mapping (address => mapping (bytes4 => bool)) _anyoneCanCall;\n\n function canCall(\n address callerAddress,\n address codeAddress,\n bytes4 sig\n )\n public\n view\n returns (bool)\n {\n if (_anyoneCanCall[codeAddress][sig]) {\n return true;\n } else {\n return _canCall[callerAddress][codeAddress][sig];\n }\n }\n\n function setCanCall(\n address callerAddress,\n address codeAddress,\n bytes4 sig,\n bool can\n )\n public\n auth\n returns (bool)\n {\n _canCall[callerAddress][codeAddress][sig] = can;\n emit SetCanCall(callerAddress, codeAddress, sig, can);\n return true;\n }\n\n function setAnyoneCanCall(\n address codeAddress,\n bytes4 sig,\n bool can\n )\n public\n auth\n returns (bool)\n {\n _anyoneCanCall[codeAddress][sig] = can;\n emit SetAnyoneCanCall(codeAddress, sig, can);\n return true;\n }\n}","./IndexedOrderedSetLib.sol":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n/// @title Library implementing an array type which allows O(1) lookups on values.\n/// @author Piper Merriam \nlibrary IndexedOrderedSetLib {\n struct IndexedOrderedSet {\n bytes32[] _values;\n mapping (bytes32 => uint) _valueIndices;\n mapping (bytes32 => bool) _exists;\n }\n\n modifier requireValue(IndexedOrderedSet storage self, bytes32 value) {\n require(contains(self, value), \"escape:IndexedOrderedSetLib:value-not-found\");\n _;\n }\n\n /// @dev Returns the size of the set\n /// @param self The set\n function size(IndexedOrderedSet storage self)\n public\n view\n returns (uint)\n {\n return self._values.length;\n }\n\n /// @dev Returns boolean if the key is in the set\n /// @param self The set\n /// @param value The value to check\n function contains(IndexedOrderedSet storage self, bytes32 value)\n public\n view\n returns (bool)\n {\n return self._exists[value];\n }\n\n /// @dev Returns the index of the value in the set.\n /// @param self The set\n /// @param value The value to look up the index for.\n function indexOf(IndexedOrderedSet storage self, bytes32 value)\n public\n view\n requireValue(self, value)\n returns (uint)\n {\n return self._valueIndices[value];\n }\n\n /// @dev Removes the element at index idx from the set and returns it.\n /// @param self The set\n /// @param idx The index to remove and return.\n function pop(IndexedOrderedSet storage self, uint idx) public returns (bytes32) {\n bytes32 value = get(self, idx);\n\n if (idx != self._values.length - 1) {\n bytes32 movedValue = self._values[self._values.length - 1];\n self._values[idx] = movedValue;\n self._valueIndices[movedValue] = idx;\n }\n self._values.length -= 1;\n\n delete self._valueIndices[value];\n delete self._exists[value];\n\n return value;\n }\n\n /// @dev Removes the element at index idx from the set\n /// @param self The set\n /// @param value The value to remove from the set.\n function remove(IndexedOrderedSet storage self, bytes32 value)\n public\n requireValue(self, value)\n returns (bool)\n {\n uint idx = indexOf(self, value);\n pop(self, idx);\n return true;\n }\n\n /// @dev Retrieves the element at the provided index.\n /// @param self The set\n /// @param idx The index to retrieve.\n function get(IndexedOrderedSet storage self, uint idx)\n public\n view\n returns (bytes32)\n {\n return self._values[idx];\n }\n\n /// @dev Pushes the new value onto the set\n /// @param self The set\n /// @param value The value to push.\n function add(IndexedOrderedSet storage self, bytes32 value) public returns (bool) {\n if (contains(self, value)) return true;\n\n self._valueIndices[value] = self._values.length;\n self._values.push(value);\n self._exists[value] = true;\n\n return true;\n }\n}","./PackageDB.sol":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\nimport {IndexedOrderedSetLib} from \"./IndexedOrderedSetLib.sol\";\nimport {Authorized} from \"./Authority.sol\";\n\n\n/// @title Database contract for a package index package data.\n/// @author Tim Coulter , Piper Merriam \ncontract PackageDB is Authorized {\n using IndexedOrderedSetLib for IndexedOrderedSetLib.IndexedOrderedSet;\n\n struct Package {\n bool exists;\n uint createdAt;\n uint updatedAt;\n string name;\n address owner;\n }\n\n // Package Data: (nameHash => value)\n mapping (bytes32 => Package) _recordedPackages;\n IndexedOrderedSetLib.IndexedOrderedSet _allPackageNameHashes;\n\n // Events\n event PackageReleaseAdd(bytes32 indexed nameHash, bytes32 indexed releaseHash);\n event PackageReleaseRemove(bytes32 indexed nameHash, bytes32 indexed releaseHash);\n event PackageCreate(bytes32 indexed nameHash);\n event PackageDelete(bytes32 indexed nameHash, string reason);\n event PackageOwnerUpdate(bytes32 indexed nameHash, address indexed oldOwner, address indexed newOwner);\n\n /*\n * Modifiers\n */\n modifier onlyIfPackageExists(bytes32 nameHash) {\n require(packageExists(nameHash), \"escape:PackageDB:package-not-found\");\n _;\n }\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n\n /// @dev Creates or updates a release for a package. Returns success.\n /// @param name Package name\n function setPackage(string name)\n public\n auth\n returns (bool)\n {\n // Hash the name and the version for storing data\n bytes32 nameHash = hashName(name);\n\n Package storage package = _recordedPackages[nameHash];\n\n // Mark the package as existing if it isn't already tracked.\n if (!packageExists(nameHash)) {\n\n // Set package data\n package.exists = true;\n package.createdAt = block.timestamp; // solium-disable-line security/no-block-members\n package.name = name;\n\n // Add the nameHash to the list of all package nameHashes.\n _allPackageNameHashes.add(nameHash);\n\n emit PackageCreate(nameHash);\n }\n\n package.updatedAt = block.timestamp; // solium-disable-line security/no-block-members\n\n return true;\n }\n\n /// @dev Removes a package from the package db. Packages with existing releases may not be removed. Returns success.\n /// @param nameHash The name hash of a package.\n function removePackage(bytes32 nameHash, string reason)\n public\n auth\n onlyIfPackageExists(nameHash)\n returns (bool)\n {\n emit PackageDelete(nameHash, reason);\n\n delete _recordedPackages[nameHash];\n _allPackageNameHashes.remove(nameHash);\n\n return true;\n }\n\n /// @dev Sets the owner of a package to the provided address. Returns success.\n /// @param nameHash The name hash of a package.\n /// @param newPackageOwner The address of the new owner.\n function setPackageOwner(bytes32 nameHash, address newPackageOwner)\n public\n auth\n onlyIfPackageExists(nameHash)\n returns (bool)\n {\n emit PackageOwnerUpdate(nameHash, _recordedPackages[nameHash].owner, newPackageOwner);\n\n _recordedPackages[nameHash].owner = newPackageOwner;\n _recordedPackages[nameHash].updatedAt = block.timestamp; // solium-disable-line security/no-block-members\n\n return true;\n }\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Query the existence of a package with the given name. Returns boolean indicating whether the package exists.\n /// @param nameHash The name hash of a package.\n function packageExists(bytes32 nameHash)\n public\n view\n returns (bool)\n {\n return _recordedPackages[nameHash].exists;\n }\n\n /// @dev Return the total number of packages\n function getNumPackages()\n public\n view\n returns (uint)\n {\n return _allPackageNameHashes.size();\n }\n\n /// @dev Returns package namehash at the provided index from the set of all known name hashes.\n /// @param idx The index of the package name hash to retrieve.\n function getPackageNameHash(uint idx)\n public\n view\n returns (bytes32)\n {\n return _allPackageNameHashes.get(idx);\n }\n\n /// @dev Returns information about the package.\n /// @param nameHash The name hash to look up.\n function getPackageData(bytes32 nameHash)\n public\n view\n onlyIfPackageExists(nameHash)\n returns (\n address packageOwner,\n uint createdAt,\n uint updatedAt\n )\n {\n Package storage package = _recordedPackages[nameHash];\n return (package.owner, package.createdAt, package.updatedAt);\n }\n\n /// @dev Returns the package name for the given namehash\n /// @param nameHash The name hash to look up.\n function getPackageName(bytes32 nameHash)\n public\n view\n onlyIfPackageExists(nameHash)\n returns (string)\n {\n return _recordedPackages[nameHash].name;\n }\n\n /// @dev Returns a slice of the array of all package hashes for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint _offset, uint limit)\n public\n view\n returns (\n bytes32[] packageIds,\n uint offset\n )\n {\n bytes32[] memory hashes; // Array of package ids to return\n uint cursor = _offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n uint totalPackages = getNumPackages(); // Total number of packages in registry\n\n // Is request within range?\n if (cursor < totalPackages){\n\n // Get total remaining records\n remaining = totalPackages - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records. (IndexedOrderedSet manages deletions.)\n while(remaining > 0){\n bytes32 hash = getPackageNameHash(cursor);\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n /*\n * Hash Functions\n */\n /// @dev Returns name hash for a given package name.\n /// @param name Package name\n function hashName(string name)\n public\n pure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(name));\n }\n}","./PackageRegistry.sol":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n\nimport {PackageDB} from \"./PackageDB.sol\";\nimport {ReleaseDB} from \"./ReleaseDB.sol\";\nimport {ReleaseValidator} from \"./ReleaseValidator.sol\";\nimport {PackageRegistryInterface} from \"./PackageRegistryInterface.sol\";\nimport {Authorized} from \"./Authority.sol\";\n\n\n/// @title Database contract for a package index.\n/// @author Tim Coulter , Piper Merriam \ncontract PackageRegistry is Authorized, PackageRegistryInterface {\n PackageDB private packageDb;\n ReleaseDB private releaseDb;\n ReleaseValidator private releaseValidator;\n\n // Events\n event VersionRelease(string packageName, string version, string manifestURI);\n event PackageTransfer(address indexed oldOwner, address indexed newOwner);\n\n //\n // Administrative API\n //\n /// @dev Sets the address of the PackageDb contract.\n /// @param newPackageDb The address to set for the PackageDb.\n function setPackageDb(address newPackageDb)\n public\n auth\n returns (bool)\n {\n packageDb = PackageDB(newPackageDb);\n return true;\n }\n\n /// @dev Sets the address of the ReleaseDb contract.\n /// @param newReleaseDb The address to set for the ReleaseDb.\n function setReleaseDb(address newReleaseDb)\n public\n auth\n returns (bool)\n {\n releaseDb = ReleaseDB(newReleaseDb);\n return true;\n }\n\n /// @dev Sets the address of the ReleaseValidator contract.\n /// @param newReleaseValidator The address to set for the ReleaseValidator.\n function setReleaseValidator(address newReleaseValidator)\n public\n auth\n returns (bool)\n {\n releaseValidator = ReleaseValidator(newReleaseValidator);\n return true;\n }\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n /// @dev Creates a a new release for the named package. If this is the first release for the given package then this will also assign msg.sender as the owner of the package. Returns success.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: '1.0.0')\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string packageName,\n string version,\n string manifestURI\n )\n public\n auth\n returns (bytes32 releaseId)\n {\n require(address(packageDb) != 0x0, \"escape:PackageIndex:package-db-not-set\");\n require(address(releaseDb) != 0x0, \"escape:PackageIndex:release-db-not-set\");\n require(address(releaseValidator) != 0x0, \"escape:PackageIndex:release-validator-not-set\");\n\n bytes32 versionHash = releaseDb.hashVersion(version);\n\n // If the version for this release is not in the version database, populate\n // it. This must happen prior to validation to ensure that the version is\n // present in the releaseDb.\n if (!releaseDb.versionExists(versionHash)) {\n releaseDb.setVersion(version);\n }\n\n // Run release validator. This method reverts with an error message string\n // on failure.\n releaseValidator.validateRelease(\n packageDb,\n releaseDb,\n msg.sender,\n packageName,\n version,\n manifestURI\n );\n\n // Compute hashes\n bool _packageExists = packageExists(packageName);\n\n // Both creates the package if it is new as well as updating the updatedAt\n // timestamp on the package.\n packageDb.setPackage(packageName);\n\n bytes32 nameHash = packageDb.hashName(packageName);\n\n // If the package does not yet exist create it and set the owner\n if (!_packageExists) {\n packageDb.setPackageOwner(nameHash, msg.sender);\n }\n\n // Create the release and add it to the list of package release hashes.\n releaseDb.setRelease(nameHash, versionHash, manifestURI);\n\n // Log the release.\n releaseId = releaseDb.hashRelease(nameHash, versionHash);\n emit VersionRelease(packageName, version, manifestURI);\n\n return releaseId;\n }\n\n /// @dev Transfers package ownership to the provider new owner address.\n /// @notice Will transfer ownership of this package to the provided new owner address.\n /// @param name Package name\n /// @param newPackageOwner The address of the new owner.\n function transferPackageOwner(string name, address newPackageOwner)\n public\n auth\n returns (bool)\n {\n if (isPackageOwner(name, msg.sender)) {\n // Only the package owner may transfer package ownership.\n return false;\n }\n\n // Lookup the current owner\n address packageOwner;\n (packageOwner,,,) = getPackageData(name);\n\n // Log the transfer\n emit PackageTransfer(packageOwner, newPackageOwner);\n\n // Update the owner.\n packageDb.setPackageOwner(packageDb.hashName(name), newPackageOwner);\n\n return true;\n }\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Returns the address of the packageDb\n function getPackageDb()\n public\n view\n returns (address)\n {\n return address(packageDb);\n }\n\n /// @dev Returns the address of the releaseDb\n function getReleaseDb()\n public\n view\n returns (address)\n {\n return address(releaseDb);\n }\n\n /// @dev Returns the address of the releaseValidator\n function getReleaseValidator()\n public\n view\n returns (address)\n {\n return address(releaseValidator);\n }\n\n /// @dev Query the existence of a package with the given name. Returns boolean indicating whether the package exists.\n /// @param name Package name\n function packageExists(string name)\n public\n view\n returns (bool)\n {\n return packageDb.packageExists(packageDb.hashName(name));\n }\n\n /// @dev Query the existence of a release at the provided version for the named package. Returns boolean indicating whether such a release exists.\n /// @param name Package name\n /// @param version Version string (ex: '1.0.0')\n function releaseExists(\n string name,\n string version\n )\n public\n view\n returns (bool)\n {\n bytes32 nameHash = packageDb.hashName(name);\n bytes32 versionHash = releaseDb.hashVersion(version);\n return releaseDb.releaseExists(releaseDb.hashRelease(nameHash, versionHash));\n }\n\n /// @dev Returns a slice of the array of all package hashes for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns(\n bytes32[] packageIds,\n uint pointer\n )\n {\n return packageDb.getAllPackageIds(offset, limit);\n }\n\n /// @dev Retrieves the name for the given name hash.\n /// @param packageId The name hash of package to lookup the name for.\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string packageName)\n {\n return packageDb.getPackageName(packageId);\n }\n\n /// @dev Returns the package data.\n /// @param name Package name\n function getPackageData(string name)\n public\n view\n returns (\n address packageOwner,\n uint createdAt,\n uint numReleases,\n uint updatedAt\n )\n {\n bytes32 nameHash = packageDb.hashName(name);\n (packageOwner, createdAt, updatedAt) = packageDb.getPackageData(nameHash);\n numReleases = releaseDb.getNumReleasesForNameHash(nameHash);\n return (packageOwner, createdAt, numReleases, updatedAt);\n }\n\n /// @dev Returns the release data for the release associated with the given release hash.\n /// @param releaseId The release hash.\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string packageName,\n string version,\n string manifestURI\n )\n {\n bytes32 versionHash;\n bytes32 nameHash;\n (nameHash,versionHash, ,) = releaseDb.getReleaseData(releaseId);\n\n packageName = packageDb.getPackageName(nameHash);\n version = releaseDb.getVersion(versionHash);\n manifestURI = releaseDb.getManifestURI(releaseId);\n\n return (packageName, version, manifestURI);\n }\n\n /// @dev Returns a slice of the array of all package hashes for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string packageName, uint offset, uint limit)\n public\n view\n returns (\n bytes32[] releaseIds,\n uint pointer\n )\n {\n bytes32 nameHash = packageDb.hashName(packageName);\n return releaseDb.getAllReleaseIds(nameHash, offset, limit);\n }\n\n /// @dev Returns release id that *would* be generated for a name and version pair on `release`.\n /// @param packageName Package name\n /// @param version Version string (ex: '1.0.0')\n function generateReleaseId(string packageName, string version)\n public\n view\n returns (bytes32 releaseId)\n {\n bytes32 nameHash = packageDb.hashName(packageName);\n bytes32 versionHash = releaseDb.hashVersion(version);\n return keccak256(abi.encodePacked(nameHash, versionHash));\n }\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string packageName, string version)\n public\n view\n returns (bytes32 releaseId)\n {\n releaseId = generateReleaseId(packageName, version);\n bool _releaseExists = releaseDb.releaseExists(releaseId);\n if (!_releaseExists) {\n return 0;\n }\n return releaseId;\n }\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds()\n public\n view\n returns (uint totalCount)\n {\n return packageDb.getNumPackages();\n }\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string packageName)\n public\n view\n returns (uint totalCount)\n {\n bool _packageExists = packageExists(packageName);\n if (!_packageExists) {\n return 0;\n }\n bytes32 nameHash = packageDb.hashName(packageName);\n return releaseDb.getNumReleasesForNameHash(nameHash);\n }\n\n //\n // +----------------+\n // | Internal API |\n // +----------------+\n //\n /// @dev Returns boolean whether the provided address is the package owner\n /// @param name The name of the package\n /// @param _address The address to check\n function isPackageOwner(string name, address _address)\n internal\n view\n returns (bool)\n {\n address packageOwner;\n (packageOwner,,,) = getPackageData(name);\n return (packageOwner != _address);\n }\n}","./PackageRegistryInterface.sol":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n\n/// @title EIP 1319 Smart Contract Package Registry Interface\n/// @author Piper Merriam , Christopher Gewecke \ncontract PackageRegistryInterface {\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n\n /// @dev Creates a a new release for the named package.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: 1.0.0)\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string packageName,\n string version,\n string manifestURI\n )\n public\n returns (bytes32 releaseId);\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Returns the string name of the package associated with a package id\n /// @param packageId The package id to look up\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string packageName);\n\n /// @dev Returns a slice of the array of all package ids for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns (\n bytes32[] packageIds,\n uint pointer\n );\n\n /// @dev Returns a slice of the array of all release hashes for the named package.\n /// @param packageName Package name\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string packageName, uint offset, uint limit)\n public\n view\n returns (\n bytes32[] releaseIds,\n uint pointer\n );\n\n /// @dev Returns the package data for a release.\n /// @param releaseId Release id\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string packageName,\n string version,\n string manifestURI\n );\n\n // @dev Returns release id that *would* be generated for a name and version pair on `release`.\n // @param packageName Package name\n // @param version Version string (ex: '1.0.0')\n function generateReleaseId(string packageName, string version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string packageName, string version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds() public view returns (uint totalCount);\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string packageName) public view returns (uint totalCount);\n}","./ReleaseDB.sol":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n\nimport {IndexedOrderedSetLib} from \"./IndexedOrderedSetLib.sol\";\nimport {Authorized} from \"./Authority.sol\";\n\n\n/// @title Database contract for a package index.\n/// @author Tim Coulter , Piper Merriam \ncontract ReleaseDB is Authorized {\n using IndexedOrderedSetLib for IndexedOrderedSetLib.IndexedOrderedSet;\n\n struct Release {\n bool exists;\n uint createdAt;\n uint updatedAt;\n bytes32 nameHash;\n bytes32 versionHash;\n string manifestURI;\n }\n\n // Release Data: (releaseId => value)\n mapping (bytes32 => Release) _recordedReleases;\n mapping (bytes32 => bool) _removedReleases;\n IndexedOrderedSetLib.IndexedOrderedSet _allReleaseIds;\n mapping (bytes32 => IndexedOrderedSetLib.IndexedOrderedSet) _releaseIdsByNameHash;\n\n // Version Data: (versionHash => value)\n mapping (bytes32 => string) _recordedVersions;\n mapping (bytes32 => bool) _versionExists;\n\n // Events\n event ReleaseCreate(bytes32 indexed releaseId);\n event ReleaseUpdate(bytes32 indexed releaseId);\n event ReleaseDelete(bytes32 indexed releaseId, string reason);\n\n /*\n * Modifiers\n */\n modifier onlyIfVersionExists(bytes32 versionHash) {\n require(versionExists(versionHash), \"escape:ReleaseDB:version-not-found\");\n _;\n }\n\n modifier onlyIfReleaseExists(bytes32 releaseId) {\n require(releaseExists(releaseId), \"escape:ReleaseDB:release-not-found\");\n _;\n }\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n\n /// @dev Creates or updates a release for a package. Returns success.\n /// @param nameHash The name hash of the package.\n /// @param versionHash The version hash for the release version.\n /// @param manifestURI The URI for the release manifest for this release.\n function setRelease(\n bytes32 nameHash,\n bytes32 versionHash,\n string manifestURI\n )\n public\n auth\n returns (bool)\n {\n bytes32 releaseId = hashRelease(nameHash, versionHash);\n\n Release storage release = _recordedReleases[releaseId];\n\n // If this is a new version push it onto the array of version hashes for\n // this package.\n if (release.exists) {\n emit ReleaseUpdate(releaseId);\n } else {\n // Populate the basic release data.\n release.exists = true;\n release.createdAt = block.timestamp; // solium-disable-line security/no-block-members\n release.nameHash = nameHash;\n release.versionHash = versionHash;\n\n // Push the release hash into the array of all release hashes.\n _allReleaseIds.add(releaseId);\n _releaseIdsByNameHash[nameHash].add(releaseId);\n\n emit ReleaseCreate(releaseId);\n }\n\n // Record the last time the release was updated.\n release.updatedAt = block.timestamp; // solium-disable-line security/no-block-members\n\n // Save the release manifest URI\n release.manifestURI = manifestURI;\n\n return true;\n }\n\n /// @dev Removes a release from a package. Returns success.\n /// @param releaseId The release hash to be removed\n /// @param reason Explanation for why the removal happened.\n function removeRelease(bytes32 releaseId, string reason)\n public\n auth\n onlyIfReleaseExists(releaseId)\n returns (bool)\n {\n bytes32 nameHash;\n bytes32 versionHash;\n\n (nameHash, versionHash,,) = getReleaseData(releaseId);\n\n // Zero out the release data.\n delete _recordedReleases[releaseId];\n delete _recordedVersions[versionHash];\n\n // Remove the release hash from the list of all release hashes\n _allReleaseIds.remove(releaseId);\n _releaseIdsByNameHash[nameHash].remove(releaseId);\n\n // Add the release hash to the map of removed releases\n _removedReleases[releaseId] = true;\n\n // Log the removal.\n emit ReleaseDelete(releaseId, reason);\n\n return true;\n }\n\n\n /// @dev Adds the given version to the local version database. Returns the versionHash for the provided version.\n /// @param version Version string (ex: '1.0.0')\n function setVersion(string version)\n public\n auth\n returns (bytes32)\n {\n bytes32 versionHash = hashVersion(version);\n\n if (!_versionExists[versionHash]) {\n _recordedVersions[versionHash] = version;\n _versionExists[versionHash] = true;\n }\n return versionHash;\n }\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Returns a slice of the array of all releases hashes for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(bytes32 nameHash, uint _offset, uint limit)\n public\n view\n returns (\n bytes32[] releaseIds,\n uint offset\n )\n {\n bytes32[] memory hashes; // Release ids to return\n uint cursor = _offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n uint totalReleases = getNumReleasesForNameHash(nameHash); // Total number of packages in registry\n\n // Is request within range?\n if (cursor < totalReleases){\n\n // Get total remaining records\n remaining = totalReleases - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records. (IndexedOrderedSet manages deletions.)\n while(remaining > 0){\n bytes32 hash = getReleaseIdForNameHash(nameHash, cursor);\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n /// @dev Get the total number of releases\n /// @param nameHash the name hash to lookup.\n function getNumReleasesForNameHash(bytes32 nameHash)\n public\n view\n returns (uint)\n {\n return _releaseIdsByNameHash[nameHash].size();\n }\n\n /// @dev Release hash for a Package at a given index\n /// @param nameHash the name hash to lookup.\n /// @param idx The index of the release hash to retrieve.\n function getReleaseIdForNameHash(bytes32 nameHash, uint idx)\n public\n view\n returns (bytes32)\n {\n return _releaseIdsByNameHash[nameHash].get(idx);\n }\n\n /// @dev Query the existence of a release at the provided version for a package. Returns boolean indicating whether such a release exists.\n /// @param releaseId The release hash to query.\n function releaseExists(bytes32 releaseId)\n public\n view\n returns (bool)\n {\n return _recordedReleases[releaseId].exists;\n }\n\n /// @dev Query the past existence of a release at the provided version for a package. Returns boolean indicating whether such a release ever existed.\n /// @param releaseHash The release hash to query.\n function releaseExisted(bytes32 releaseHash)\n public\n view\n returns (bool)\n {\n return _removedReleases[releaseHash];\n }\n\n /// @dev Query the existence of the provided version in the recorded versions. Returns boolean indicating whether such a version exists.\n /// @param versionHash the version hash to check.\n function versionExists(bytes32 versionHash)\n public\n view\n returns (bool)\n {\n return _versionExists[versionHash];\n }\n\n /// @dev Returns the releaseData for the given release has a package.\n /// @param releaseId The release hash.\n function getReleaseData(bytes32 releaseId)\n public\n view\n onlyIfReleaseExists(releaseId)\n returns (\n bytes32 nameHash,\n bytes32 versionHash,\n uint createdAt,\n uint updatedAt\n )\n {\n Release storage release = _recordedReleases[releaseId];\n return (release.nameHash, release.versionHash, release.createdAt, release.updatedAt);\n }\n\n /// @dev Returns string version identifier from the version of the given release hash.\n /// @param versionHash the version hash\n function getVersion(bytes32 versionHash)\n public\n view\n onlyIfVersionExists(versionHash)\n returns (string)\n {\n return _recordedVersions[versionHash];\n }\n\n /// @dev Returns the URI of the release manifest for the given release hash.\n /// @param releaseId Release hash\n function getManifestURI(bytes32 releaseId)\n public\n view\n onlyIfReleaseExists(releaseId)\n returns (string)\n {\n return _recordedReleases[releaseId].manifestURI;\n }\n\n /*\n * Hash Functions\n */\n /// @dev Returns version hash for the given semver version.\n /// @param version Version string\n function hashVersion(string version)\n public\n pure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(version));\n }\n\n /// @dev Returns release hash for the given release\n /// @param nameHash The name hash of the package name.\n /// @param versionHash The version hash for the release version.\n function hashRelease(bytes32 nameHash, bytes32 versionHash)\n public\n pure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(nameHash, versionHash));\n }\n}","./ReleaseValidator.sol":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\nimport {PackageDB} from \"./PackageDB.sol\";\nimport {ReleaseDB} from \"./ReleaseDB.sol\";\n\n/// @title Database contract for a package index.\n/// @author Piper Merriam \ncontract ReleaseValidator {\n /// @dev Runs validation on all of the data needed for releasing a package. Returns success.\n /// @param packageDb The address of the PackageDB\n /// @param releaseDb The address of the ReleaseDB\n /// @param callerAddress The address which is attempting to create the release.\n /// @param name The name of the package.\n /// @param version The version string of the package (ex: `1.0.0`)\n /// @param manifestURI The URI of the release manifest.\n function validateRelease(\n PackageDB packageDb,\n ReleaseDB releaseDb,\n address callerAddress,\n string name,\n string version,\n string manifestURI\n )\n public\n view\n returns (bool)\n {\n if (address(packageDb) == 0x0){\n // packageDb address is null\n revert(\"escape:ReleaseValidator:package-db-not-set\");\n } else if (address(releaseDb) == 0x0){\n // releaseDb address is null\n revert(\"escape:ReleaseValidator:release-db-not-set\");\n } else if (!validateAuthorization(packageDb, callerAddress, name)) {\n // package exists and msg.sender is not the owner not the package owner.\n revert(\"escape:ReleaseValidator:caller-not-authorized\");\n } else if (!validateIsNewRelease(packageDb, releaseDb, name, version)) {\n // this version has already been released.\n revert(\"escape:ReleaseValidator:version-previously-published\");\n } else if (!validatePackageName(packageDb, name)) {\n // invalid package name.\n revert(\"escape:ReleaseValidator:invalid-package-name\");\n } else if (!validateStringIdentifier(manifestURI)) {\n // disallow empty release manifest URI\n revert(\"escape:ReleaseValidator:invalid-manifest-uri\");\n } else if (!validateStringIdentifier(version)) {\n // disallow version 0.0.0\n revert(\"escape:ReleaseValidator:invalid-release-version\");\n }\n return true;\n }\n\n /// @dev Validate whether the callerAddress is authorized to make this release.\n /// @param packageDb The address of the PackageDB\n /// @param callerAddress The address which is attempting to create the release.\n /// @param name The name of the package.\n function validateAuthorization(\n PackageDB packageDb,\n address callerAddress,\n string name\n )\n public\n view\n returns (bool)\n {\n bytes32 nameHash = packageDb.hashName(name);\n if (!packageDb.packageExists(nameHash)) {\n return true;\n }\n address packageOwner;\n\n (packageOwner,,) = packageDb.getPackageData(nameHash);\n\n if (packageOwner == callerAddress) {\n return true;\n }\n return false;\n }\n\n /// @dev Validate that the version being released has not already been released.\n /// @param packageDb The address of the PackageDB\n /// @param releaseDb The address of the ReleaseDB\n /// @param name The name of the package.\n /// @param version The version string for the release\n function validateIsNewRelease(\n PackageDB packageDb,\n ReleaseDB releaseDb,\n string name,\n string version\n )\n public\n view\n returns (bool)\n {\n bytes32 nameHash = packageDb.hashName(name);\n bytes32 versionHash = releaseDb.hashVersion(version);\n bytes32 releaseHash = releaseDb.hashRelease(nameHash, versionHash);\n return !releaseDb.releaseExists(releaseHash) && !releaseDb.releaseExisted(releaseHash);\n }\n\n uint constant DIGIT_0 = uint(bytes1(\"0\"));\n uint constant DIGIT_9 = uint(bytes1(\"9\"));\n uint constant LETTER_a = uint(bytes1(\"a\"));\n uint constant LETTER_z = uint(bytes1(\"z\"));\n bytes1 constant DASH = bytes1(\"-\");\n\n /// @dev Returns boolean whether the provided package name is valid.\n /// @param packageDb The address of the PackageDB\n /// @param name The name of the package.\n function validatePackageName(PackageDB packageDb, string name)\n public\n view\n returns (bool)\n {\n bytes32 nameHash = packageDb.hashName(name);\n\n if (packageDb.packageExists(nameHash)) {\n // existing names are always valid.\n return true;\n }\n\n if (bytes(name).length < 2 || bytes(name).length > 255) {\n return false;\n }\n for (uint i = 0; i < bytes(name).length; i++) {\n if (bytes(name)[i] == DASH && i > 0) {\n continue;\n } else if (i > 0 && uint(bytes(name)[i]) >= DIGIT_0 && uint(bytes(name)[i]) <= DIGIT_9) {\n continue;\n } else if (uint(bytes(name)[i]) >= LETTER_a && uint(bytes(name)[i]) <= LETTER_z) {\n continue;\n } else {\n return false;\n }\n }\n return true;\n }\n\n /// @dev Returns boolean whether the input string has a length\n /// @param value The string to validate.\n function validateStringIdentifier(string value)\n public\n pure\n returns (bool)\n {\n if (bytes(value).length == 0) {\n return false;\n }\n return true;\n }\n}"},"version":"2.0.0"} \ No newline at end of file diff --git a/ethpm/assets/registry/2.0.0a1.json b/ethpm/assets/registry/2.0.0a1.json deleted file mode 100644 index 3d0a43d71c..0000000000 --- a/ethpm/assets/registry/2.0.0a1.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"Ownable":{"abi":[{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.5.10+commit.5a6ea5b1"},"deployment_bytecode":{"bytecode":"0x"},"natspec":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","methods":{"constructor":{"details":"Initializes the contract setting the deployer as the initial owner."},"isOwner()":{"details":"Returns true if the caller is the current owner."},"owner()":{"details":"Returns the address of the current owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}}},"runtime_bytecode":{"bytecode":"0x"}},"PackageRegistry":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"packages","outputs":[{"name":"exists","type":"bool"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"},{"name":"releaseCount","type":"uint256"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"value","type":"string"}],"name":"validateStringIdentifier","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"validatePackageName","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"generatePackageId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"releaseCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"packageCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"releases","outputs":[{"name":"exists","type":"bool"},{"name":"createdAt","type":"uint256"},{"name":"packageId","type":"bytes32"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"packageName","type":"string"},{"indexed":false,"name":"version","type":"string"},{"indexed":false,"name":"manifestURI","type":"string"}],"name":"VersionRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.5.10+commit.5a6ea5b1"},"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3612a21806100cf6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063938b056e116100b8578063c999a3b21161007c578063c999a3b214610d76578063eb8cc47c14610ea1578063ee0ebe0c14610f70578063efae87d714610f8e578063f2fde38b146110f8578063f491a84c1461113c57610137565b8063938b056e14610a32578063a54fb68514610b05578063abe827f214610b23578063b4b42e3514610bf2578063b8d08db214610d5857610137565b806371102819116100ff578063711028191461075957806382ee976f1461082057806383ea0620146108f35780638da5cb5b146109c65780638f32d59b14610a1057610137565b806306fe1fd71461013c5780631fb1c6c0146101e3578063379037dc1461034957806343212cf1146105465780634c4aea87146105da575b600080fd5b6101686004803603602081101561015257600080fd5b8101908080359060200190929190505050611268565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a857808201518184015260208101905061018d565b50505050905090810190601f1680156101d55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610333600480360360408110156101f957600080fd5b810190808035906020019064010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156102ad57600080fd5b8201836020820111156102bf57600080fd5b803590602001918460018302840111640100000000831117156102e157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113f8565b6040518082815260200191505060405180910390f35b6105306004803603606081101561035f57600080fd5b810190808035906020019064010000000081111561037c57600080fd5b82018360208201111561038e57600080fd5b803590602001918460018302840111640100000000831117156103b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561041357600080fd5b82018360208201111561042557600080fd5b8035906020019184600183028401116401000000008311171561044757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104aa57600080fd5b8201836020820111156104bc57600080fd5b803590602001918460018302840111640100000000831117156104de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611509565b6040518082815260200191505060405180910390f35b61057c6004803603604081101561055c57600080fd5b81019080803590602001909291908035906020019092919050505061169a565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105c55780820151818401526020810190506105aa565b50505050905001935050505060405180910390f35b610606600480360360208110156105f057600080fd5b810190808035906020019092919050505061175c565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561064e578082015181840152602081019050610633565b50505050905090810190601f16801561067b5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106b4578082015181840152602081019050610699565b50505050905090810190601f1680156106e15780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561071a5780820151818401526020810190506106ff565b50505050905090810190601f1680156107475780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6107856004803603602081101561076f57600080fd5b8101908080359060200190929190505050611a2a565b604051808615151515815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107e15780820151818401526020810190506107c6565b50505050905090810190601f16801561080e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6108d96004803603602081101561083657600080fd5b810190808035906020019064010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b05565b604051808215151515815260200191505060405180910390f35b6109ac6004803603602081101561090957600080fd5b810190808035906020019064010000000081111561092657600080fd5b82018360208201111561093857600080fd5b8035906020019184600183028401116401000000008311171561095a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b83565b604051808215151515815260200191505060405180910390f35b6109ce611bbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a18611be6565b604051808215151515815260200191505060405180910390f35b610aeb60048036036020811015610a4857600080fd5b8101908080359060200190640100000000811115610a6557600080fd5b820183602082011115610a7757600080fd5b80359060200191846001830284011164010000000083111715610a9957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c3d565b604051808215151515815260200191505060405180910390f35b610b0d611cc8565b6040518082815260200191505060405180910390f35b610bdc60048036036020811015610b3957600080fd5b8101908080359060200190640100000000811115610b5657600080fd5b820183602082011115610b6857600080fd5b80359060200191846001830284011164010000000083111715610b8a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cd2565b6040518082815260200191505060405180910390f35b610d4260048036036040811015610c0857600080fd5b8101908080359060200190640100000000811115610c2557600080fd5b820183602082011115610c3757600080fd5b80359060200191846001830284011164010000000083111715610c5957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610cbc57600080fd5b820183602082011115610cce57600080fd5b80359060200191846001830284011164010000000083111715610cf057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4d565b6040518082815260200191505060405180910390f35b610d60611e1c565b6040518082815260200191505060405180910390f35b610e4360048036036060811015610d8c57600080fd5b8101908080359060200190640100000000811115610da957600080fd5b820183602082011115610dbb57600080fd5b80359060200191846001830284011164010000000083111715610ddd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050611e22565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e8c578082015181840152602081019050610e71565b50505050905001935050505060405180910390f35b610f5a60048036036020811015610eb757600080fd5b8101908080359060200190640100000000811115610ed457600080fd5b820183602082011115610ee657600080fd5b80359060200191846001830284011164010000000083111715610f0857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f9c565b6040518082815260200191505060405180910390f35b610f7861204d565b6040518082815260200191505060405180910390f35b6110de60048036036040811015610fa457600080fd5b8101908080359060200190640100000000811115610fc157600080fd5b820183602082011115610fd357600080fd5b80359060200191846001830284011164010000000083111715610ff557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561105857600080fd5b82018360208201111561106a57600080fd5b8035906020019184600183028401116401000000008311171561108c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612053565b604051808215151515815260200191505060405180910390f35b61113a6004803603602081101561110e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612113565b005b6111686004803603602081101561115257600080fd5b8101908080359060200190929190505050612199565b60405180861515151581526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111c25780820151818401526020810190506111a7565b50505050905090810190601f1680156111ef5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561122857808201518184015260208101905061120d565b50505050905090810190601f1680156112555780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6060611272612835565b600160008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113625780601f1061133757610100808354040283529160200191611362565b820191906000526020600020905b81548152906001019060200180831161134557829003601f168201915b50505050508152505090506001151581600001511515146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b8060800151915050919050565b60008261140481611b83565b611476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b83836114828282612053565b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6114fe8686611d4d565b935050505092915050565b6000611513611be6565b611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61158e84611c3d565b5061159883611b05565b506115a282611b05565b5060006115ae85611cd2565b905060006115bc8686611d4d565b90506000600160008481526020019081526020016000209050600015158160000160009054906101000a900460ff16151514156116765760018160000160006101000a81548160ff0219169083151502179055504281600101819055504281600201819055508681600401908051906020019061163a929190612866565b50600081600301819055508260046000600654815260200190815260200160002081905550600660008154809291906001019190505550611680565b4281600201819055505b61168d838389898961230c565b8193505050509392505050565b6060600060606000859050600060065482101561174c5781600654039050858111156116c4578590505b806040519080825280602002602001820160405280156116f35781602001602082028038833980820191505090505b5092505b600081111561174b576000600460008481526020019081526020016000205490508084600184038151811061172857fe5b6020026020010181815250508180600190039250508280600101935050506116f7565b5b8282945094505050509250929050565b60608060606117696128e6565b600260008681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201548152602001600382018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561184f5780601f106118245761010080835404028352916020019161184f565b820191906000526020600020905b81548152906001019060200180831161183257829003601f168201915b50505050508152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050815250509050611904612835565b60016000836040015181526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b505050505081525050905080608001518260600151836080015182925081915080905094509450945050509193909250565b60016020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003015490806004018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b5050505050905085565b60008082511415611b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f696e76616c69642d737472696e672d6964656e7469666965720000000000000081525060200191505060405180910390fd5b919050565b600080611b8f83611cd2565b90506001600082815260200190815260200160002060000160009054906101000a900460ff16915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600060028251118015611c51575060ff8251105b611cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e76616c69642d7061636b6167652d6e616d6500000000000000000000000081525060200191505060405180910390fd5b919050565b6000600654905090565b6000816040516020018082805190602001908083835b60208310611d0b5780518252602082019150602081019050602083039250611ce8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050919050565b600082826040516020018083805190602001908083835b60208310611d875780518252602082019150602081019050602083039250611d64565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310611dd85780518252602082019150602081019050602083039250611db5565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120905092915050565b60075481565b6060600084611e3081611b83565b611ea2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6000611ead87611cd2565b90506000600160008381526020019081526020016000209050606060008890506000808460030154905080831015611f8757828103915089821115611ef0578991505b81604051908082528060200260200182016040528015611f1f5781602001602082028038833980820191505090505b5093505b6000821115611f86576000611f3887856126b8565b905060006003600083815260200190815260200160002054905080866001860381518110611f6257fe5b60200260200101818152505083806001900394505084806001019550505050611f23565b5b83839850985050505050505050935093915050565b600081611fa881611b83565b61201a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b600061202584611cd2565b9050600060016000838152602001908152602001600020905080600301549350505050919050565b60065481565b60008261205f81611b83565b6120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b60006120dd8585611d4d565b905060006002600083815260200190815260200160002090508060000160009054906101000a900460ff16935050505092915050565b61211b611be6565b61218d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612196816126f1565b50565b60026020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b505050505090806004018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123025780601f106122d757610100808354040283529160200191612302565b820191906000526020600020905b8154815290600101906020018083116122e557829003601f168201915b5050505050905085565b6000600260008681526020019081526020016000209050600015158160000160009054906101000a900460ff161515146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d616c72656164792d6578697374730000000000000000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160020181905550828160030190805190602001906123f5929190612866565b508181600401908051906020019061240e929190612866565b5080600260008781526020019081526020016000206000820160009054906101000a900460ff168160000160006101000a81548160ff02191690831515021790555060018201548160010155600282015481600201556003820181600301908054600181600116156101000203166002900461248b92919061291a565b50600482018160040190805460018160011615610100020316600290046124b392919061291a565b5090505084600560006007548152602001908152602001600020819055506007600081548092919060010191905055506000600160008881526020019081526020016000209050600061250a8883600301546126b8565b905086600360008381526020019081526020016000208190555081600301600081548092919060010191905055507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c386868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156125a4578082015181840152602081019050612589565b50505050905090810190601f1680156125d15780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b8381101561260a5780820151818401526020810190506125ef565b50505050905090810190601f1680156126375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612670578082015181840152602081019050612655565b50505050905090810190601f16801561269d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a15050505050505050565b60008282604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129c76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060a00160405280600015158152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128a757805160ff19168380011785556128d5565b828001600101855582156128d5579182015b828111156128d45782518255916020019190600101906128b9565b5b5090506128e291906129a1565b5090565b6040518060a00160405280600015158152602001600081526020016000801916815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129535780548555612990565b8280016001018555821561299057600052602060002091601f016020900482015b8281111561298f578254825591600101919060010190612974565b5b50905061299d91906129a1565b5090565b6129c391905b808211156129bf5760008160009055506001016129a7565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a723058203303a3448bda11fd26ce9bcffb213dfc2b3f1a692632415c26340a9162d15e9c64736f6c634300050a0032"},"natspec":{"author":"Nick Gheorghita ","methods":{"generatePackageId(string)":{"details":"Returns name hash for a given package name.","params":{"name":"Package name"}},"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package ids for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all release hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice.","packageName":"Package name"}},"getPackageName(bytes32)":{"details":"Returns the string name of the package associated with a package id","params":{"packageId":"The package id to look up"}},"getReleaseData(bytes32)":{"details":"Returns the package data for a release.","params":{"releaseId":"Release id"}},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"isOwner()":{"details":"Returns true if the caller is the current owner."},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"owner()":{"details":"Returns the address of the current owner."},"packageExists(string)":{"details":"Returns a bool indicating whether the given package exists in this registry.","params":{"packageName":"Package Name"}},"release(string,string,string)":{"details":"Creates a new release for the named package. If this is the first release for the given package then this will also create and store the package. Returns releaseID if successful.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: '1.0.0')"}},"releaseExists(string,string)":{"details":"Returns a bool indicating whether the given release exists in this registry.","params":{"packageName":"Package Name","version":"version"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"validatePackageName(string)":{"details":"Returns boolean whether the provided package name is valid.","params":{"name":"The name of the package."}},"validateStringIdentifier(string)":{"details":"Returns boolean whether the input string has a length","params":{"value":"The string to validate."}}},"title":"Contract for an ERC1319 Registry, adapted from ethpm/escape-truffle"},"runtime_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063938b056e116100b8578063c999a3b21161007c578063c999a3b214610d76578063eb8cc47c14610ea1578063ee0ebe0c14610f70578063efae87d714610f8e578063f2fde38b146110f8578063f491a84c1461113c57610137565b8063938b056e14610a32578063a54fb68514610b05578063abe827f214610b23578063b4b42e3514610bf2578063b8d08db214610d5857610137565b806371102819116100ff578063711028191461075957806382ee976f1461082057806383ea0620146108f35780638da5cb5b146109c65780638f32d59b14610a1057610137565b806306fe1fd71461013c5780631fb1c6c0146101e3578063379037dc1461034957806343212cf1146105465780634c4aea87146105da575b600080fd5b6101686004803603602081101561015257600080fd5b8101908080359060200190929190505050611268565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a857808201518184015260208101905061018d565b50505050905090810190601f1680156101d55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610333600480360360408110156101f957600080fd5b810190808035906020019064010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156102ad57600080fd5b8201836020820111156102bf57600080fd5b803590602001918460018302840111640100000000831117156102e157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113f8565b6040518082815260200191505060405180910390f35b6105306004803603606081101561035f57600080fd5b810190808035906020019064010000000081111561037c57600080fd5b82018360208201111561038e57600080fd5b803590602001918460018302840111640100000000831117156103b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561041357600080fd5b82018360208201111561042557600080fd5b8035906020019184600183028401116401000000008311171561044757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104aa57600080fd5b8201836020820111156104bc57600080fd5b803590602001918460018302840111640100000000831117156104de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611509565b6040518082815260200191505060405180910390f35b61057c6004803603604081101561055c57600080fd5b81019080803590602001909291908035906020019092919050505061169a565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105c55780820151818401526020810190506105aa565b50505050905001935050505060405180910390f35b610606600480360360208110156105f057600080fd5b810190808035906020019092919050505061175c565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561064e578082015181840152602081019050610633565b50505050905090810190601f16801561067b5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106b4578082015181840152602081019050610699565b50505050905090810190601f1680156106e15780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561071a5780820151818401526020810190506106ff565b50505050905090810190601f1680156107475780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6107856004803603602081101561076f57600080fd5b8101908080359060200190929190505050611a2a565b604051808615151515815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107e15780820151818401526020810190506107c6565b50505050905090810190601f16801561080e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6108d96004803603602081101561083657600080fd5b810190808035906020019064010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b05565b604051808215151515815260200191505060405180910390f35b6109ac6004803603602081101561090957600080fd5b810190808035906020019064010000000081111561092657600080fd5b82018360208201111561093857600080fd5b8035906020019184600183028401116401000000008311171561095a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b83565b604051808215151515815260200191505060405180910390f35b6109ce611bbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a18611be6565b604051808215151515815260200191505060405180910390f35b610aeb60048036036020811015610a4857600080fd5b8101908080359060200190640100000000811115610a6557600080fd5b820183602082011115610a7757600080fd5b80359060200191846001830284011164010000000083111715610a9957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c3d565b604051808215151515815260200191505060405180910390f35b610b0d611cc8565b6040518082815260200191505060405180910390f35b610bdc60048036036020811015610b3957600080fd5b8101908080359060200190640100000000811115610b5657600080fd5b820183602082011115610b6857600080fd5b80359060200191846001830284011164010000000083111715610b8a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cd2565b6040518082815260200191505060405180910390f35b610d4260048036036040811015610c0857600080fd5b8101908080359060200190640100000000811115610c2557600080fd5b820183602082011115610c3757600080fd5b80359060200191846001830284011164010000000083111715610c5957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610cbc57600080fd5b820183602082011115610cce57600080fd5b80359060200191846001830284011164010000000083111715610cf057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4d565b6040518082815260200191505060405180910390f35b610d60611e1c565b6040518082815260200191505060405180910390f35b610e4360048036036060811015610d8c57600080fd5b8101908080359060200190640100000000811115610da957600080fd5b820183602082011115610dbb57600080fd5b80359060200191846001830284011164010000000083111715610ddd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050611e22565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e8c578082015181840152602081019050610e71565b50505050905001935050505060405180910390f35b610f5a60048036036020811015610eb757600080fd5b8101908080359060200190640100000000811115610ed457600080fd5b820183602082011115610ee657600080fd5b80359060200191846001830284011164010000000083111715610f0857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f9c565b6040518082815260200191505060405180910390f35b610f7861204d565b6040518082815260200191505060405180910390f35b6110de60048036036040811015610fa457600080fd5b8101908080359060200190640100000000811115610fc157600080fd5b820183602082011115610fd357600080fd5b80359060200191846001830284011164010000000083111715610ff557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561105857600080fd5b82018360208201111561106a57600080fd5b8035906020019184600183028401116401000000008311171561108c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612053565b604051808215151515815260200191505060405180910390f35b61113a6004803603602081101561110e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612113565b005b6111686004803603602081101561115257600080fd5b8101908080359060200190929190505050612199565b60405180861515151581526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111c25780820151818401526020810190506111a7565b50505050905090810190601f1680156111ef5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561122857808201518184015260208101905061120d565b50505050905090810190601f1680156112555780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6060611272612835565b600160008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113625780601f1061133757610100808354040283529160200191611362565b820191906000526020600020905b81548152906001019060200180831161134557829003601f168201915b50505050508152505090506001151581600001511515146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b8060800151915050919050565b60008261140481611b83565b611476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b83836114828282612053565b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6114fe8686611d4d565b935050505092915050565b6000611513611be6565b611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61158e84611c3d565b5061159883611b05565b506115a282611b05565b5060006115ae85611cd2565b905060006115bc8686611d4d565b90506000600160008481526020019081526020016000209050600015158160000160009054906101000a900460ff16151514156116765760018160000160006101000a81548160ff0219169083151502179055504281600101819055504281600201819055508681600401908051906020019061163a929190612866565b50600081600301819055508260046000600654815260200190815260200160002081905550600660008154809291906001019190505550611680565b4281600201819055505b61168d838389898961230c565b8193505050509392505050565b6060600060606000859050600060065482101561174c5781600654039050858111156116c4578590505b806040519080825280602002602001820160405280156116f35781602001602082028038833980820191505090505b5092505b600081111561174b576000600460008481526020019081526020016000205490508084600184038151811061172857fe5b6020026020010181815250508180600190039250508280600101935050506116f7565b5b8282945094505050509250929050565b60608060606117696128e6565b600260008681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201548152602001600382018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561184f5780601f106118245761010080835404028352916020019161184f565b820191906000526020600020905b81548152906001019060200180831161183257829003601f168201915b50505050508152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050815250509050611904612835565b60016000836040015181526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b505050505081525050905080608001518260600151836080015182925081915080905094509450945050509193909250565b60016020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003015490806004018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b5050505050905085565b60008082511415611b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f696e76616c69642d737472696e672d6964656e7469666965720000000000000081525060200191505060405180910390fd5b919050565b600080611b8f83611cd2565b90506001600082815260200190815260200160002060000160009054906101000a900460ff16915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600060028251118015611c51575060ff8251105b611cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e76616c69642d7061636b6167652d6e616d6500000000000000000000000081525060200191505060405180910390fd5b919050565b6000600654905090565b6000816040516020018082805190602001908083835b60208310611d0b5780518252602082019150602081019050602083039250611ce8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050919050565b600082826040516020018083805190602001908083835b60208310611d875780518252602082019150602081019050602083039250611d64565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310611dd85780518252602082019150602081019050602083039250611db5565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120905092915050565b60075481565b6060600084611e3081611b83565b611ea2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6000611ead87611cd2565b90506000600160008381526020019081526020016000209050606060008890506000808460030154905080831015611f8757828103915089821115611ef0578991505b81604051908082528060200260200182016040528015611f1f5781602001602082028038833980820191505090505b5093505b6000821115611f86576000611f3887856126b8565b905060006003600083815260200190815260200160002054905080866001860381518110611f6257fe5b60200260200101818152505083806001900394505084806001019550505050611f23565b5b83839850985050505050505050935093915050565b600081611fa881611b83565b61201a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b600061202584611cd2565b9050600060016000838152602001908152602001600020905080600301549350505050919050565b60065481565b60008261205f81611b83565b6120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b60006120dd8585611d4d565b905060006002600083815260200190815260200160002090508060000160009054906101000a900460ff16935050505092915050565b61211b611be6565b61218d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612196816126f1565b50565b60026020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b505050505090806004018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123025780601f106122d757610100808354040283529160200191612302565b820191906000526020600020905b8154815290600101906020018083116122e557829003601f168201915b5050505050905085565b6000600260008681526020019081526020016000209050600015158160000160009054906101000a900460ff161515146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d616c72656164792d6578697374730000000000000000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160020181905550828160030190805190602001906123f5929190612866565b508181600401908051906020019061240e929190612866565b5080600260008781526020019081526020016000206000820160009054906101000a900460ff168160000160006101000a81548160ff02191690831515021790555060018201548160010155600282015481600201556003820181600301908054600181600116156101000203166002900461248b92919061291a565b50600482018160040190805460018160011615610100020316600290046124b392919061291a565b5090505084600560006007548152602001908152602001600020819055506007600081548092919060010191905055506000600160008881526020019081526020016000209050600061250a8883600301546126b8565b905086600360008381526020019081526020016000208190555081600301600081548092919060010191905055507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c386868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156125a4578082015181840152602081019050612589565b50505050905090810190601f1680156125d15780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b8381101561260a5780820151818401526020810190506125ef565b50505050905090810190601f1680156126375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612670578082015181840152602081019050612655565b50505050905090810190601f16801561269d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a15050505050505050565b60008282604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129c76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060a00160405280600015158152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128a757805160ff19168380011785556128d5565b828001600101855582156128d5579182015b828111156128d45782518255916020019190600101906128b9565b5b5090506128e291906129a1565b5090565b6040518060a00160405280600015158152602001600081526020016000801916815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129535780548555612990565b8280016001018555821561299057600052602060002091601f016020900482015b8281111561298f578254825591600101919060010190612974565b5b50905061299d91906129a1565b5090565b6129c391905b808211156129bf5760008160009055506001016129a7565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a723058203303a3448bda11fd26ce9bcffb213dfc2b3f1a692632415c26340a9162d15e9c64736f6c634300050a0032"}},"PackageRegistryInterface":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.5.10+commit.5a6ea5b1"},"deployment_bytecode":{"bytecode":"0x"},"natspec":{"author":"Piper Merriam , Christopher Gewecke ","methods":{"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package ids for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all release hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice.","packageName":"Package name"}},"getPackageName(bytes32)":{"details":"Returns the string name of the package associated with a package id","params":{"packageId":"The package id to look up"}},"getReleaseData(bytes32)":{"details":"Returns the package data for a release.","params":{"releaseId":"Release id"}},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"release(string,string,string)":{"details":"Creates a a new release for the named package.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: 1.0.0)"}}},"title":"EIP 1319 Smart Contract Package Registry Interface"},"runtime_bytecode":{"bytecode":"0x"}}},"manifest_version":"2","meta":{"authors":["Nick Gheorghita"],"description":"A basic Solidity implementation of ERC1319.","keywords":["ethpm"," erc1319"," solidity"," ethereum"," package registry"],"license":"MIT","links":{"documentation":"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1319.md","repo":"https://github.com/ethpm/solidity-registry/","website":"www.ethpm.com"}},"package_name":"ethpm-registry","sources":{"./Ownable.sol":"pragma solidity ^0.5.0;\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\ncontract Ownable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n _owner = msg.sender;\n emit OwnershipTransferred(address(0), _owner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(isOwner(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Returns true if the caller is the current owner.\n */\n function isOwner() public view returns (bool) {\n return msg.sender == _owner;\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public onlyOwner {\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n */\n function _transferOwnership(address newOwner) internal {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}","./PackageRegistry.sol":"pragma solidity >=0.5.10;\n\nimport {PackageRegistryInterface} from \"./PackageRegistryInterface.sol\";\nimport {Ownable} from \"./Ownable.sol\";\n\n/// @title Contract for an ERC1319 Registry, adapted from ethpm/escape-truffle\n/// @author Nick Gheorghita \ncontract PackageRegistry is PackageRegistryInterface, Ownable {\n struct Package {\n bool exists;\n uint createdAt;\n uint updatedAt;\n uint releaseCount;\n string name;\n }\n\n struct Release {\n bool exists;\n uint createdAt;\n bytes32 packageId;\n string version;\n string manifestURI;\n }\n\n mapping (bytes32 => Package) public packages;\n mapping (bytes32 => Release) public releases;\n\n // package_id#release_count => release_id\n mapping (bytes32 => bytes32) packageReleaseIndex;\n // Total package number (int128) => package_id (bytes32)\n mapping (uint => bytes32) allPackageIds;\n // Total release number (int128) => release_id (bytes32)\n mapping (uint => bytes32) allReleaseIds;\n // Total number of packages in registry\n uint public packageCount;\n // Total number of releases in registry\n uint public releaseCount;\n\n // Events\n event VersionRelease(string packageName, string version, string manifestURI);\n event PackageTransfer(address indexed oldOwner, address indexed newOwner);\n\n // Modifiers\n modifier onlyIfPackageExists(string memory packageName) {\n require(packageExists(packageName), \"package-does-not-exist\");\n _;\n }\n\n modifier onlyIfReleaseExists(string memory packageName, string memory version) {\n require (releaseExists(packageName, version), \"release-does-not-exist\");\n _;\n }\n\n //\n // ===============\n // | Write API |\n // ===============\n //\n\n /// @dev Creates a new release for the named package. If this is the first release for the given\n /// package then this will also create and store the package. Returns releaseID if successful.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: '1.0.0')\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string memory packageName,\n string memory version,\n string memory manifestURI\n )\n public\n onlyOwner\n returns (bytes32)\n {\n validatePackageName(packageName);\n validateStringIdentifier(version);\n validateStringIdentifier(manifestURI);\n\n // Compute hashes\n bytes32 packageId = generatePackageId(packageName);\n bytes32 releaseId = generateReleaseId(packageName, version);\n Package storage package = packages[packageId];\n\n // If the package does not yet exist create it\n if (package.exists == false) {\n package.exists = true;\n package.createdAt = block.timestamp;\n package.updatedAt = block.timestamp;\n package.name = packageName;\n package.releaseCount = 0;\n allPackageIds[packageCount] = packageId;\n packageCount++;\n } else {\n package.updatedAt = block.timestamp;\n }\n cutRelease(packageId, releaseId, packageName, version, manifestURI);\n return releaseId;\n }\n\n function cutRelease(\n bytes32 packageId,\n bytes32 releaseId,\n string memory packageName,\n string memory version,\n string memory manifestURI\n )\n private\n {\n Release storage newRelease = releases[releaseId];\n require(newRelease.exists == false, \"release-already-exists\");\n\n // Store new release data\n newRelease.exists = true;\n newRelease.createdAt = block.timestamp;\n newRelease.packageId = packageId;\n newRelease.version = version;\n newRelease.manifestURI = manifestURI;\n\n releases[releaseId] = newRelease;\n allReleaseIds[releaseCount] = releaseId;\n releaseCount++;\n\n // Update package's release count\n Package storage package = packages[packageId];\n bytes32 packageReleaseId = generatePackageReleaseId(packageId, package.releaseCount);\n packageReleaseIndex[packageReleaseId] = releaseId;\n package.releaseCount++;\n\n // Log the release.\n emit VersionRelease(packageName, version, manifestURI);\n }\n\n //\n // ==============\n // | Read API |\n // ==============\n //\n\n /// @dev Returns the string name of the package associated with a package id\n /// @param packageId The package id to look up\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string memory packageName)\n {\n Package memory targetPackage = packages[packageId];\n require (targetPackage.exists == true, \"package-does-not-exist\");\n return targetPackage.name;\n }\n\n /// @dev Returns a slice of the array of all package ids for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns (\n bytes32[] memory packageIds,\n uint pointer\n )\n {\n bytes32[] memory hashes; // Array of package ids to return\n uint cursor = offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n\n // Is request within range?\n if (cursor < packageCount){\n\n // Get total remaining records\n remaining = packageCount - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records.\n while(remaining > 0){\n bytes32 hash = allPackageIds[cursor];\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n /// @dev Returns a slice of the array of all release hashes for the named package.\n /// @param packageName Package name\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string memory packageName, uint offset, uint limit)\n public\n view\n onlyIfPackageExists(packageName)\n returns (\n bytes32[] memory releaseIds,\n uint pointer\n )\n {\n bytes32 packageId = generatePackageId(packageName);\n Package storage package = packages[packageId];\n bytes32[] memory hashes; // Release ids to return\n uint cursor = offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n uint numPackageReleases = package.releaseCount;\t\t // Total number of packages in registry\n\n // Is request within range?\n if (cursor < numPackageReleases){\n\n // Get total remaining records\n remaining = numPackageReleases - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records.\n while(remaining > 0){\n bytes32 packageReleaseId = generatePackageReleaseId(packageId, cursor);\n bytes32 hash = packageReleaseIndex[packageReleaseId];\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n\n /// @dev Returns the package data for a release.\n /// @param releaseId Release id\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string memory packageName, string memory version,\n string memory manifestURI\n )\n {\n Release memory targetRelease = releases[releaseId];\n Package memory targetPackage = packages[targetRelease.packageId];\n return (targetPackage.name, targetRelease.version, targetRelease.manifestURI);\n }\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string memory packageName, string memory version)\n public\n view\n onlyIfPackageExists(packageName)\n onlyIfReleaseExists(packageName, version)\n returns (bytes32 releaseId)\n {\n return generateReleaseId(packageName, version);\n }\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds() public view returns (uint totalCount)\n {\n return packageCount;\n }\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string memory packageName)\n public\n view\n onlyIfPackageExists(packageName)\n returns (uint totalCount)\n {\n bytes32 packageId = generatePackageId(packageName);\n Package storage package = packages[packageId];\n return package.releaseCount;\n }\n\n /// @dev Returns a bool indicating whether the given release exists in this registry.\n /// @param packageName Package Name\n /// @param version version\n function releaseExists(string memory packageName, string memory version)\n public\n view\n onlyIfPackageExists(packageName)\n returns (bool)\n {\n bytes32 releaseId = generateReleaseId(packageName, version);\n Release storage targetRelease = releases[releaseId];\n return targetRelease.exists;\n }\n\n /// @dev Returns a bool indicating whether the given package exists in this registry.\n /// @param packageName Package Name\n function packageExists(string memory packageName) public view returns (bool) {\n bytes32 packageId = generatePackageId(packageName);\n return packages[packageId].exists;\n }\n\n //\n // ====================\n // | Hash Functions |\n // ====================\n // \n\n /// @dev Returns name hash for a given package name.\n /// @param name Package name\n function generatePackageId(string memory name)\n public\n pure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(name));\n }\n\n // @dev Returns release id that *would* be generated for a name and version pair on `release`.\n // @param packageName Package name\n // @param version Version string (ex: '1.0.0')\n function generateReleaseId(\n string memory packageName,\n string memory version\n )\n public\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(packageName, version));\n }\n\n function generatePackageReleaseId(\n bytes32 packageId,\n uint packageReleaseCount\n )\n private\n\t\tpure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(packageId, packageReleaseCount));\n }\n\n\n //\n // ================\n // | Validation |\n // ================\n //\n\n /// @dev Returns boolean whether the provided package name is valid.\n /// @param name The name of the package.\n function validatePackageName(string memory name)\n public\n pure\n returns (bool)\n {\n require (bytes(name).length > 2 && bytes(name).length < 255, \"invalid-package-name\");\n }\n\n /// @dev Returns boolean whether the input string has a length\n /// @param value The string to validate.\n function validateStringIdentifier(string memory value)\n public\n pure\n returns (bool)\n {\n require (bytes(value).length != 0, \"invalid-string-identifier\");\n }\n}","./PackageRegistryInterface.sol":"pragma solidity >=0.5.10;\n\n\n/// @title EIP 1319 Smart Contract Package Registry Interface\n/// @author Piper Merriam , Christopher Gewecke \ncontract PackageRegistryInterface {\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n\n /// @dev Creates a a new release for the named package.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: 1.0.0)\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string memory packageName,\n string memory version,\n string memory manifestURI\n )\n public\n returns (bytes32 releaseId);\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Returns the string name of the package associated with a package id\n /// @param packageId The package id to look up\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string memory packageName);\n\n /// @dev Returns a slice of the array of all package ids for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns (\n bytes32[] memory packageIds,\n uint pointer\n );\n\n /// @dev Returns a slice of the array of all release hashes for the named package.\n /// @param packageName Package name\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string memory packageName, uint offset, uint limit)\n public\n view\n returns (\n bytes32[] memory releaseIds,\n uint pointer\n );\n\n /// @dev Returns the package data for a release.\n /// @param releaseId Release id\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string memory packageName,\n string memory version,\n string memory manifestURI\n );\n\n // @dev Returns release id that *would* be generated for a name and version pair on `release`.\n // @param packageName Package name\n // @param version Version string (ex: '1.0.0')\n function generateReleaseId(string memory packageName, string memory version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string memory packageName, string memory version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds() public view returns (uint totalCount);\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string memory packageName) public view returns (uint totalCount);\n}"},"version":"2.0.0a1"} \ No newline at end of file diff --git a/ethpm/assets/registry/v3.json b/ethpm/assets/registry/v3.json new file mode 100644 index 0000000000..7f60b4ab40 --- /dev/null +++ b/ethpm/assets/registry/v3.json @@ -0,0 +1 @@ +{"compilers":[{"contractTypes":["Authorized","WhitelistAuthority","IndexedOrderedSetLib","PackageDB","PackageRegistry","ReleaseDB","ReleaseValidator"],"name":"solc","settings":{"optimize":false},"version":"0.4.26+commit.4563c3fc"}],"contractTypes":{"AuthorityInterface":{"abi":[{"constant":true,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"}],"name":"canCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}],"deploymentBytecode":{"bytecode":"0x"},"devdoc":{"methods":{}},"runtimeBytecode":{"bytecode":"0x"},"sourceId":"Authority.sol"},"Authorized":{"abi":[{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deploymentBytecode":{"bytecode":"0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3610758806100c66000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af4035146100675780637a9e5e4b146100c25780638da5cb5b1461011d578063bf7e214f14610174575b600080fd5b34801561007357600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101cb565b604051808215151515815260200191505060405180910390f35b3480156100ce57600080fd5b50610103600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610333565b604051808215151515815260200191505060405180910390f35b34801561012957600080fd5b5061013261049d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018057600080fd5b506101896104c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006101d56104e8565b151561026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061033d6104e8565b15156103d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105485760019050610729565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105925760009050610729565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b1580156106eb57600080fd5b505afa1580156106ff573d6000803e3d6000fd5b505050506040513d602081101561071557600080fd5b810190808051906020019092919050505090505b905600a165627a7a72305820838731e394f7c3b92dfe64eff937235e42de62cc70c037bb46e3d1b0e88868be0029"},"devdoc":{"methods":{}},"runtimeBytecode":{"bytecode":"0x608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af4035146100675780637a9e5e4b146100c25780638da5cb5b1461011d578063bf7e214f14610174575b600080fd5b34801561007357600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101cb565b604051808215151515815260200191505060405180910390f35b3480156100ce57600080fd5b50610103600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610333565b604051808215151515815260200191505060405180910390f35b34801561012957600080fd5b5061013261049d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018057600080fd5b506101896104c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006101d56104e8565b151561026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061033d6104e8565b15156103d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105485760019050610729565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105925760009050610729565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b1580156106eb57600080fd5b505afa1580156106ff573d6000803e3d6000fd5b505050506040513d602081101561071557600080fd5b810190808051906020019092919050505090505b905600a165627a7a72305820838731e394f7c3b92dfe64eff937235e42de62cc70c037bb46e3d1b0e88868be0029"},"sourceId":"Authority.sol"},"AuthorizedInterface":{"abi":[{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deploymentBytecode":{"bytecode":"0x"},"devdoc":{"methods":{}},"runtimeBytecode":{"bytecode":"0x"},"sourceId":"Authority.sol"},"IndexedOrderedSetLib":{"abi":[{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"}],"name":"size","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"indexOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"contains","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"idx","type":"uint256"}],"name":"get","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"add","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"value","type":"bytes32"}],"name":"remove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"IndexedOrderedSetLib.IndexedOrderedSet storage"},{"name":"idx","type":"uint256"}],"name":"pop","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"deploymentBytecode":{"bytecode":"0x6106df610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f300730000000000000000000000000000000000000000301460806040526004361061009a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631aeaa5041461009f57806326966f11146100d35780632a2dbb481461011557806377e91da11461015b57806391d8a284146101a1578063ed05c0c5146101f4578063f78a9f9514610247575b600080fd5b6100bd6004803603810190808035906020019092919050505061029a565b6040518082815260200191505060405180910390f35b6100ff6004803603810190808035906020019092919080356000191690602001909291905050506102ab565b6040518082815260200191505060405180910390f35b61014160048036038101908080359060200190929190803560001916906020019092919050505061037b565b604051808215151515815260200191505060405180910390f35b61018360048036038101908080359060200190929190803590602001909291905050506103b0565b60405180826000191660001916815260200191505060405180910390f35b8180156101ad57600080fd5b506101da6004803603810190808035906020019092919080356000191690602001909291905050506103d6565b604051808215151515815260200191505060405180910390f35b81801561020057600080fd5b5061022d60048036038101908080359060200190929190803560001916906020019092919050505061048e565b604051808215151515815260200191505060405180910390f35b81801561025357600080fd5b5061027c600480360381019080803590602001909291908035906020019092919050505061055b565b60405180826000191660001916815260200191505060405180910390f35b600081600001805490509050919050565b600082826102b9828261037b565b1515610353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b8460010160008560001916600019168152602001908152602001600020549250505092915050565b6000826002016000836000191660001916815260200190815260200160002060009054906101000a900460ff16905092915050565b600082600001828154811015156103c357fe5b9060005260206000200154905092915050565b60006103e2838361037b565b156103f05760019050610488565b8260000180549050836001016000846000191660001916815260200190815260200160002081905550826000018290806001815401808255809150509060018203906000526020600020016000909192909190915090600019169055506001836002016000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600190505b92915050565b600080838361049d828261037b565b1515610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b61054186866102ab565b925061054d868461055b565b506001935050505092915050565b600080600061056a85856103b0565b91506001856000018054905003841415156105ee5784600001600186600001805490500381548110151561059a57fe5b906000526020600020015490508085600001858154811015156105b957fe5b906000526020600020018160001916905550838560010160008360001916600019168152602001908152602001600020819055505b600185600001818180549050039150816106089190610662565b50846001016000836000191660001916815260200190815260200160002060009055846002016000836000191660001916815260200190815260200160002060006101000a81549060ff0219169055819250505092915050565b81548183558181111561068957818360005260206000209182019101610688919061068e565b5b505050565b6106b091905b808211156106ac576000816000905550600101610694565b5090565b905600a165627a7a723058204b968e3ee907ffced1e9a3c8075c0a6d06295f28c6f2625e260444f839e7edaa0029"},"devdoc":{"author":"Piper Merriam ","methods":{"add(IndexedOrderedSetLib.IndexedOrderedSet storage,bytes32)":{"details":"Pushes the new value onto the set","params":{"self":"The set","value":"The value to push."}},"contains(IndexedOrderedSetLib.IndexedOrderedSet storage,bytes32)":{"details":"Returns boolean if the key is in the set","params":{"self":"The set","value":"The value to check"}},"get(IndexedOrderedSetLib.IndexedOrderedSet storage,uint256)":{"details":"Retrieves the element at the provided index.","params":{"idx":"The index to retrieve.","self":"The set"}},"indexOf(IndexedOrderedSetLib.IndexedOrderedSet storage,bytes32)":{"details":"Returns the index of the value in the set.","params":{"self":"The set","value":"The value to look up the index for."}},"pop(IndexedOrderedSetLib.IndexedOrderedSet storage,uint256)":{"details":"Removes the element at index idx from the set and returns it.","params":{"idx":"The index to remove and return.","self":"The set"}},"remove(IndexedOrderedSetLib.IndexedOrderedSet storage,bytes32)":{"details":"Removes the element at index idx from the set","params":{"self":"The set","value":"The value to remove from the set."}},"size(IndexedOrderedSetLib.IndexedOrderedSet storage)":{"details":"Returns the size of the set","params":{"self":"The set"}}},"title":"Library implementing an array type which allows O(1) lookups on values."},"runtimeBytecode":{"bytecode":"0x730000000000000000000000000000000000000000301460806040526004361061009a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631aeaa5041461009f57806326966f11146100d35780632a2dbb481461011557806377e91da11461015b57806391d8a284146101a1578063ed05c0c5146101f4578063f78a9f9514610247575b600080fd5b6100bd6004803603810190808035906020019092919050505061029a565b6040518082815260200191505060405180910390f35b6100ff6004803603810190808035906020019092919080356000191690602001909291905050506102ab565b6040518082815260200191505060405180910390f35b61014160048036038101908080359060200190929190803560001916906020019092919050505061037b565b604051808215151515815260200191505060405180910390f35b61018360048036038101908080359060200190929190803590602001909291905050506103b0565b60405180826000191660001916815260200191505060405180910390f35b8180156101ad57600080fd5b506101da6004803603810190808035906020019092919080356000191690602001909291905050506103d6565b604051808215151515815260200191505060405180910390f35b81801561020057600080fd5b5061022d60048036038101908080359060200190929190803560001916906020019092919050505061048e565b604051808215151515815260200191505060405180910390f35b81801561025357600080fd5b5061027c600480360381019080803590602001909291908035906020019092919050505061055b565b60405180826000191660001916815260200191505060405180910390f35b600081600001805490509050919050565b600082826102b9828261037b565b1515610353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b8460010160008560001916600019168152602001908152602001600020549250505092915050565b6000826002016000836000191660001916815260200190815260200160002060009054906101000a900460ff16905092915050565b600082600001828154811015156103c357fe5b9060005260206000200154905092915050565b60006103e2838361037b565b156103f05760019050610488565b8260000180549050836001016000846000191660001916815260200190815260200160002081905550826000018290806001815401808255809150509060018203906000526020600020016000909192909190915090600019169055506001836002016000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600190505b92915050565b600080838361049d828261037b565b1515610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f6573636170653a496e64657865644f7264657265645365744c69623a76616c7581526020017f652d6e6f742d666f756e6400000000000000000000000000000000000000000081525060400191505060405180910390fd5b61054186866102ab565b925061054d868461055b565b506001935050505092915050565b600080600061056a85856103b0565b91506001856000018054905003841415156105ee5784600001600186600001805490500381548110151561059a57fe5b906000526020600020015490508085600001858154811015156105b957fe5b906000526020600020018160001916905550838560010160008360001916600019168152602001908152602001600020819055505b600185600001818180549050039150816106089190610662565b50846001016000836000191660001916815260200190815260200160002060009055846002016000836000191660001916815260200190815260200160002060006101000a81549060ff0219169055819250505092915050565b81548183558181111561068957818360005260206000209182019101610688919061068e565b5b505050565b6106b091905b808211156106ac576000816000905550600101610694565b5090565b905600a165627a7a723058204b968e3ee907ffced1e9a3c8075c0a6d06295f28c6f2625e260444f839e7edaa0029"},"sourceId":"IndexedOrderedSetLib.sol"},"PackageDB":{"abi":[{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"reason","type":"string"}],"name":"removePackage","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"}],"name":"setPackage","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"newPackageOwner","type":"address"}],"name":"setPackageOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNumPackages","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getPackageNameHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"hashName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getPackageData","outputs":[{"name":"packageOwner","type":"address"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"releaseHash","type":"bytes32"}],"name":"PackageReleaseAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"releaseHash","type":"bytes32"}],"name":"PackageReleaseRemove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"}],"name":"PackageCreate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":false,"name":"reason","type":"string"}],"name":"PackageDelete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageOwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deploymentBytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3611a8a806100b96000396000f3006080604052600436106100cf576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680621f8d11146100d457806306fe1fd714610163578063083ae1fe1461020d57806313af40351461028e5780632406cedb146102e957806343212cf1146103525780637370a38d146103e55780637a9e5e4b146104105780638da5cb5b1461046b57806395f0684b146104c2578063a9b352401461050b578063af9a3f9b14610554578063b4d6d4c7146105d9578063bf7e214f14610658575b600080fd5b3480156100e057600080fd5b506101496004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506106af565b604051808215151515815260200191505060405180910390f35b34801561016f57600080fd5b5061019260048036038101908080356000191690602001909291905050506109d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d25780820151818401526020810190506101b7565b50505050905090810190601f1680156101ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021957600080fd5b50610274600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610b3b565b604051808215151515815260200191505060405180910390f35b34801561029a57600080fd5b506102cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b604051808215151515815260200191505060405180910390f35b3480156102f557600080fd5b506103386004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ec0565b604051808215151515815260200191505060405180910390f35b34801561035e57600080fd5b506103876004803603810190808035906020019092919080359060200190929190505050611130565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156103d05780820151818401526020810190506103b5565b50505050905001935050505060405180910390f35b3480156103f157600080fd5b506103fa6111fc565b6040518082815260200191505060405180910390f35b34801561041c57600080fd5b50610451600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ac565b604051808215151515815260200191505060405180910390f35b34801561047757600080fd5b50610480611416565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ce57600080fd5b506104ed6004803603810190808035906020019092919050505061143b565b60405180826000191660001916815260200191505060405180910390f35b34801561051757600080fd5b5061053a60048036038101908080356000191690602001909291905050506114f5565b604051808215151515815260200191505060405180910390f35b34801561056057600080fd5b506105bb600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061152a565b60405180826000191660001916815260200191505060405180910390f35b3480156105e557600080fd5b506106086004803603810190808035600019169060200190929190505050611602565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34801561066457600080fd5b5061066d611707565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006106b961172d565b1515610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8261075d816114f5565b15156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b83600019167f188d63b2c009063a155fbcf0c8121b521638675d3d54561c1955bbec5b9ea6bb846040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085e578082015181840152602081019050610843565b50505050905090810190601f16801561088b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2600260008560001916600019168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905560028201600090556003820160006108e89190611971565b6004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600373000000000000000000000000000000000000000063ed05c0c59091866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b15801561098f57600080fd5b505af41580156109a3573d6000803e3d6000fd5b505050506040513d60208110156109b957600080fd5b810190808051906020019092919050505050600191505092915050565b6060816109e2816114f5565b1515610a7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050915050919050565b6000806000610b4861172d565b1515610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610beb8461152a565b91506002600083600019166000191681526020019081526020016000209050610c13826114f5565b1515610d445760018160000160006101000a81548160ff02191690831515021790555042816001018190555083816003019080519060200190610c579291906119b9565b5060037300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610cd657600080fd5b505af4158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b81019080805190602001909291905050505081600019167f94d68ac0a5dee0e8dd504e7e82e1fb1eb122682ceb9fc6aa6647f203fee26f1e60405160405180910390a25b428160020181905550600192505050919050565b6000610d6261172d565b1515610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610eca61172d565b1515610f64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82610f6e816114f5565b1515611008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660026000866000191660001916815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685600019167ffe2ec6b3a2236fea1f48069f386e0daac1b7b56b918998a3c3a282159461881760405160405180910390a48260026000866000191660001916815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260026000866000191660001916815260200190815260200160002060020181905550600191505092915050565b6060600060606000806000808893506111476111fc565b9150818410156111ea57838203925087831115611162578792505b826040519080825280602002602001820160405280156111915781602001602082028038833980820191505090505b5094505b60008311156111e9576111a78461143b565b90508085600185038151811015156111bb57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611195565b5b84849650965050505050509250929050565b60006003730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561126c57600080fd5b505af4158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b8101908080519060200190929190505050905090565b60006112b661172d565b1515611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060037300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b1580156114b357600080fd5b505af41580156114c7573d6000803e3d6000fd5b505050506040513d60208110156114dd57600080fd5b81019080805190602001909291905050509050919050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000816040516020018082805190602001908083835b6020831015156115655780518252602082019150602081019050602083039250611540565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831015156115ce57805182526020820191506020810190506020830392506115a9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b60008060008084611612816114f5565b15156116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000876000191660001916815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260010154836002015494509450945050509193909250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561178d576001905061196e565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117d7576000905061196e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561193057600080fd5b505afa158015611944573d6000803e3d6000fd5b505050506040513d602081101561195a57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f1061199757506119b6565b601f0160209004906000526020600020908101906119b59190611a39565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119fa57805160ff1916838001178555611a28565b82800160010185558215611a28579182015b82811115611a27578251825591602001919060010190611a0c565b5b509050611a359190611a39565b5090565b611a5b91905b80821115611a57576000816000905550600101611a3f565b5090565b905600a165627a7a72305820ecfb139e8113ac5c198045a9e69defd4b24c145a1cd07ec5fa3174c2f674d8790029","linkReferences":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2510,3349,4795,5370]}]},"devdoc":{"author":"Tim Coulter , Piper Merriam ","methods":{"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getNumPackages()":{"details":"Return the total number of packages"},"getPackageData(bytes32)":{"details":"Returns information about the package.","params":{"nameHash":"The name hash to look up."}},"getPackageName(bytes32)":{"details":"Returns the package name for the given namehash","params":{"nameHash":"The name hash to look up."}},"getPackageNameHash(uint256)":{"details":"Returns package namehash at the provided index from the set of all known name hashes.","params":{"idx":"The index of the package name hash to retrieve."}},"hashName(string)":{"details":"Returns name hash for a given package name.","params":{"name":"Package name"}},"packageExists(bytes32)":{"details":"Query the existence of a package with the given name. Returns boolean indicating whether the package exists.","params":{"nameHash":"The name hash of a package."}},"removePackage(bytes32,string)":{"details":"Removes a package from the package db. Packages with existing releases may not be removed. Returns success.","params":{"nameHash":"The name hash of a package."}},"setPackage(string)":{"details":"Creates or updates a release for a package. Returns success.","params":{"name":"Package name"}},"setPackageOwner(bytes32,address)":{"details":"Sets the owner of a package to the provided address. Returns success.","params":{"nameHash":"The name hash of a package.","newPackageOwner":"The address of the new owner."}}},"title":"Database contract for a package index package data."},"runtimeBytecode":{"bytecode":"0x6080604052600436106100cf576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680621f8d11146100d457806306fe1fd714610163578063083ae1fe1461020d57806313af40351461028e5780632406cedb146102e957806343212cf1146103525780637370a38d146103e55780637a9e5e4b146104105780638da5cb5b1461046b57806395f0684b146104c2578063a9b352401461050b578063af9a3f9b14610554578063b4d6d4c7146105d9578063bf7e214f14610658575b600080fd5b3480156100e057600080fd5b506101496004803603810190808035600019169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506106af565b604051808215151515815260200191505060405180910390f35b34801561016f57600080fd5b5061019260048036038101908080356000191690602001909291905050506109d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d25780820151818401526020810190506101b7565b50505050905090810190601f1680156101ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021957600080fd5b50610274600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610b3b565b604051808215151515815260200191505060405180910390f35b34801561029a57600080fd5b506102cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b604051808215151515815260200191505060405180910390f35b3480156102f557600080fd5b506103386004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ec0565b604051808215151515815260200191505060405180910390f35b34801561035e57600080fd5b506103876004803603810190808035906020019092919080359060200190929190505050611130565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156103d05780820151818401526020810190506103b5565b50505050905001935050505060405180910390f35b3480156103f157600080fd5b506103fa6111fc565b6040518082815260200191505060405180910390f35b34801561041c57600080fd5b50610451600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ac565b604051808215151515815260200191505060405180910390f35b34801561047757600080fd5b50610480611416565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ce57600080fd5b506104ed6004803603810190808035906020019092919050505061143b565b60405180826000191660001916815260200191505060405180910390f35b34801561051757600080fd5b5061053a60048036038101908080356000191690602001909291905050506114f5565b604051808215151515815260200191505060405180910390f35b34801561056057600080fd5b506105bb600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061152a565b60405180826000191660001916815260200191505060405180910390f35b3480156105e557600080fd5b506106086004803603810190808035600019169060200190929190505050611602565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b34801561066457600080fd5b5061066d611707565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006106b961172d565b1515610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8261075d816114f5565b15156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b83600019167f188d63b2c009063a155fbcf0c8121b521638675d3d54561c1955bbec5b9ea6bb846040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085e578082015181840152602081019050610843565b50505050905090810190601f16801561088b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2600260008560001916600019168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905560028201600090556003820160006108e89190611971565b6004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600373000000000000000000000000000000000000000063ed05c0c59091866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b15801561098f57600080fd5b505af41580156109a3573d6000803e3d6000fd5b505050506040513d60208110156109b957600080fd5b810190808051906020019092919050505050600191505092915050565b6060816109e2816114f5565b1515610a7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050915050919050565b6000806000610b4861172d565b1515610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610beb8461152a565b91506002600083600019166000191681526020019081526020016000209050610c13826114f5565b1515610d445760018160000160006101000a81548160ff02191690831515021790555042816001018190555083816003019080519060200190610c579291906119b9565b5060037300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610cd657600080fd5b505af4158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b81019080805190602001909291905050505081600019167f94d68ac0a5dee0e8dd504e7e82e1fb1eb122682ceb9fc6aa6647f203fee26f1e60405160405180910390a25b428160020181905550600192505050919050565b6000610d6261172d565b1515610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610eca61172d565b1515610f64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82610f6e816114f5565b1515611008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660026000866000191660001916815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685600019167ffe2ec6b3a2236fea1f48069f386e0daac1b7b56b918998a3c3a282159461881760405160405180910390a48260026000866000191660001916815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260026000866000191660001916815260200190815260200160002060020181905550600191505092915050565b6060600060606000806000808893506111476111fc565b9150818410156111ea57838203925087831115611162578792505b826040519080825280602002602001820160405280156111915781602001602082028038833980820191505090505b5094505b60008311156111e9576111a78461143b565b90508085600185038151811015156111bb57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611195565b5b84849650965050505050509250929050565b60006003730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561126c57600080fd5b505af4158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b8101908080519060200190929190505050905090565b60006112b661172d565b1515611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060037300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b1580156114b357600080fd5b505af41580156114c7573d6000803e3d6000fd5b505050506040513d60208110156114dd57600080fd5b81019080805190602001909291905050509050919050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000816040516020018082805190602001908083835b6020831015156115655780518252602082019150602081019050602083039250611540565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831015156115ce57805182526020820191506020810190506020830392506115a9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b60008060008084611612816114f5565b15156116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a5061636b61676544423a7061636b6167652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000876000191660001916815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260010154836002015494509450945050509193909250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561178d576001905061196e565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117d7576000905061196e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561193057600080fd5b505afa158015611944573d6000803e3d6000fd5b505050506040513d602081101561195a57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f1061199757506119b6565b601f0160209004906000526020600020908101906119b59190611a39565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119fa57805160ff1916838001178555611a28565b82800160010185558215611a28579182015b82811115611a27578251825591602001919060010190611a0c565b5b509050611a359190611a39565b5090565b611a5b91905b80821115611a57576000816000905550600101611a3f565b5090565b905600a165627a7a72305820ecfb139e8113ac5c198045a9e69defd4b24c145a1cd07ec5fa3174c2f674d8790029","linkReferences":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2325,3164,4610,5185]}]},"sourceId":"PackageDB.sol"},"PackageRegistry":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReleaseValidator","type":"address"}],"name":"setReleaseValidator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPackageDb","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPackageDb","type":"address"}],"name":"setPackageDb","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReleaseValidator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"newPackageOwner","type":"address"}],"name":"transferPackageOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"getPackageData","outputs":[{"name":"packageOwner","type":"address"},{"name":"createdAt","type":"uint256"},{"name":"numReleases","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"version","type":"string"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReleaseDb","type":"address"}],"name":"setReleaseDb","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getReleaseDb","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"packageName","type":"string"},{"indexed":false,"name":"version","type":"string"},{"indexed":false,"name":"manifestURI","type":"string"}],"name":"VersionRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deploymentBytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a361452b806100b96000396000f300608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fe1fd71461013857806310ae4ce2146101e257806313af40351461023d5780631fb1c6c014610298578063271cd7601461036357806334c0d654146103ba578063379037dc1461041557806343212cf1146105265780634961b40c146105b95780634c4aea87146106105780634f197ee7146107925780637a9e5e4b1461083357806383ea06201461088e5780638da5cb5b1461090f578063a54fb68514610966578063b4b42e3514610991578063bf7e214f14610a5c578063c2ba5b4014610ab3578063c999a3b214610b71578063eb8cc47c14610c4a578063efae87d714610cc7578063f314bf4614610d8e578063fb3a1fb214610de9575b600080fd5b34801561014457600080fd5b506101676004803603810190808035600019169060200190929190505050610e40565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a757808201518184015260208101905061018c565b50505050905090810190601f1680156101d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ee57600080fd5b50610223600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f71565b604051808215151515815260200191505060405180910390f35b34801561024957600080fd5b5061027e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105f565b604051808215151515815260200191505060405180910390f35b3480156102a457600080fd5b50610345600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111c7565b60405180826000191660001916815260200191505060405180910390f35b34801561036f57600080fd5b506103786112c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f2565b604051808215151515815260200191505060405180910390f35b34801561042157600080fd5b50610508600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506113e0565b60405180826000191660001916815260200191505060405180910390f35b34801561053257600080fd5b5061055b600480360381019080803590602001909291908035906020019092919050505061246b565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105a4578082015181840152602081019050610589565b50505050905001935050505060405180910390f35b3480156105c557600080fd5b506105ce6125af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061c57600080fd5b5061063f60048036038101908080356000191690602001909291905050506125d9565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561068757808201518184015260208101905061066c565b50505050905090810190601f1680156106b45780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106ed5780820151818401526020810190506106d2565b50505050905090810190601f16801561071a5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610753578082015181840152602081019050610738565b50505050905090810190601f1680156107805780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561079e57600080fd5b50610819600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a6c565b604051808215151515815260200191505060405180910390f35b34801561083f57600080fd5b50610874600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dd9565b604051808215151515815260200191505060405180910390f35b34801561089a57600080fd5b506108f5600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612f43565b604051808215151515815260200191505060405180910390f35b34801561091b57600080fd5b5061092461314c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561097257600080fd5b5061097b613171565b6040518082815260200191505060405180910390f35b34801561099d57600080fd5b50610a3e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613237565b60405180826000191660001916815260200191505060405180910390f35b348015610a6857600080fd5b50610a71613542565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610abf57600080fd5b50610b1a600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613568565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b348015610b7d57600080fd5b50610bec600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001909291908035906020019092919050505061387b565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610c35578082015181840152602081019050610c1a565b50505050905001935050505060405180910390f35b348015610c5657600080fd5b50610cb1600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b03565b6040518082815260200191505060405180910390f35b348015610cd357600080fd5b50610d74600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613d30565b604051808215151515815260200191505060405180910390f35b348015610d9a57600080fd5b50610dcf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614154565b604051808215151515815260200191505060405180910390f35b348015610df557600080fd5b50610dfe614242565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b158015610ed957600080fd5b505afa158015610eed573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610f1757600080fd5b810190808051640100000000811115610f2f57600080fd5b82810190506020810184811115610f4557600080fd5b8151856001820283011164010000000082111715610f6257600080fd5b50509291905050509050919050565b6000610f7b61426c565b1515611015576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061106961426c565b1515611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806111d48484613237565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561126d57600080fd5b505afa158015611281573d6000803e3d6000fd5b505050506040513d602081101561129757600080fd5b810190808051906020019092919050505090508015156112bd57600060010291506112c1565b8191505b5092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006112fc61426c565b1515611396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000806113ee61426c565b1515611488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561155f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a7061636b6167652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611636576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d76616c6981526020017f6461746f722d6e6f742d7365740000000000000000000000000000000000000081525060400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117b757808201518184015260208101905061179c565b50505050905090810190601f1680156117e45780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561180157600080fd5b505afa158015611815573d6000803e3d6000fd5b505050506040513d602081101561182b57600080fd5b81019080805190602001909291905050509250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb814e9e846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b1580156118d557600080fd5b505afa1580156118e9573d6000803e3d6000fd5b505050506040513d60208110156118ff57600080fd5b81019080805190602001909291905050501515611a4957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788bc78c876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119c05780820151818401526020810190506119a5565b50505050905090810190601f1680156119ed5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b505050506040513d6020811015611a3657600080fd5b8101908080519060200190929190505050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028fe498600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338b8b8b6040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611bda578082015181840152602081019050611bbf565b50505050905090810190601f168015611c075780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015611c40578082015181840152602081019050611c25565b50505050905090810190601f168015611c6d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015611ca6578082015181840152602081019050611c8b565b50505050905090810190601f168015611cd35780820380516001836020036101000a031916815260200191505b50995050505050505050505060206040518083038186803b158015611cf757600080fd5b505afa158015611d0b573d6000803e3d6000fd5b505050506040513d6020811015611d2157600080fd5b810190808051906020019092919050505050611d3c87612f43565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663083ae1fe886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611de8578082015181840152602081019050611dcd565b50505050905090810190601f168015611e155780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b505050506040513d6020811015611e5e57600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f1a578082015181840152602081019050611eff565b50505050905090810190601f168015611f475780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611f6457600080fd5b505afa158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b810190808051906020019092919050505090508115156120b257600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb82336040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561207557600080fd5b505af1158015612089573d6000803e3d6000fd5b505050506040513d602081101561209f57600080fd5b8101908080519060200190929190505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b8594098285886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561217a57808201518184015260208101905061215f565b50505050905090810190601f1680156121a75780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156121c857600080fd5b505af11580156121dc573d6000803e3d6000fd5b505050506040513d60208110156121f257600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910582856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b1580156122ab57600080fd5b505afa1580156122bf573d6000803e3d6000fd5b505050506040513d60208110156122d557600080fd5b810190808051906020019092919050505093507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c387878760405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015612354578082015181840152602081019050612339565b50505050905090810190601f1680156123815780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156123ba57808201518184015260208101905061239f565b50505050905090810190601f1680156123e75780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612420578082015181840152602081019050612405565b50505050905090810190601f16801561244d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a18393505050509392505050565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343212cf185856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060006040518083038186803b15801561250657600080fd5b505afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561254457600080fd5b81019080805164010000000081111561255c57600080fd5b8281019050602081018481111561257257600080fd5b815185602082028301116401000000008211171561258f57600080fd5b505092919060200180519060200190929190505050915091509250929050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060806060600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c4aea87876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060806040518083038186803b15801561267857600080fd5b505afa15801561268c573d6000803e3d6000fd5b505050506040513d60808110156126a257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509050508093508192505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156127b157600080fd5b8101908080516401000000008111156127c957600080fd5b828101905060208101848111156127df57600080fd5b81518560018202830111640100000000821117156127fc57600080fd5b50509291905050509450600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aaf9f08836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561289d57600080fd5b505afa1580156128b1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156128db57600080fd5b8101908080516401000000008111156128f357600080fd5b8281019050602081018481111561290957600080fd5b815185600182028301116401000000008211171561292657600080fd5b50509291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d672640d876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b1580156129c757600080fd5b505afa1580156129db573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015612a0557600080fd5b810190808051640100000000811115612a1d57600080fd5b82810190506020810184811115612a3357600080fd5b8151856001820283011164010000000082111715612a5057600080fd5b5050929190505050925084848494509450945050509193909250565b600080612a7761426c565b1515612b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b612b1b84336144b0565b15612b295760009150612dd2565b612b3284613568565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa99a0b26852fc94fb40663ad64c63bac913f2e345ff098ea82209694879cb95e60405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c7e578082015181840152602081019050612c63565b50505050905090810190601f168015612cab5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015612cc857600080fd5b505afa158015612cdc573d6000803e3d6000fd5b505050506040513d6020811015612cf257600080fd5b8101908080519060200190929190505050856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015612d9157600080fd5b505af1158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b810190808051906020019092919050505050600191505b5092915050565b6000612de361426c565b1515612e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9b35240600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561302d578082015181840152602081019050613012565b50505050905090810190601f16801561305a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561307757600080fd5b505afa15801561308b573d6000803e3d6000fd5b505050506040513d60208110156130a157600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561310a57600080fd5b505afa15801561311e573d6000803e3d6000fd5b505050506040513d602081101561313457600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637370a38d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156131f757600080fd5b505afa15801561320b573d6000803e3d6000fd5b505050506040513d602081101561322157600080fd5b8101908080519060200190929190505050905090565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132e65780820151818401526020810190506132cb565b50505050905090810190601f1680156133135780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561333057600080fd5b505afa158015613344573d6000803e3d6000fd5b505050506040513d602081101561335a57600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134175780820151818401526020810190506133fc565b50505050905090810190601f1680156134445780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561346157600080fd5b505afa158015613475573d6000803e3d6000fd5b505050506040513d602081101561348b57600080fd5b8101908080519060200190929190505050905081816040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561350b57805182526020820191506020810190506020830392506134e6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209250505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561361a5780820151818401526020810190506135ff565b50505050905090810190601f1680156136475780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561366457600080fd5b505afa158015613678573d6000803e3d6000fd5b505050506040513d602081101561368e57600080fd5b81019080805190602001909291905050509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561373857600080fd5b505afa15801561374c573d6000803e3d6000fd5b505050506040513d606081101561376257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809450819650829750505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561382a57600080fd5b505afa15801561383e573d6000803e3d6000fd5b505050506040513d602081101561385457600080fd5b81019080805190602001909291905050509250848484849450945094509450509193509193565b6060600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561392a57808201518184015260208101905061390f565b50505050905090810190601f1680156139575780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561397457600080fd5b505afa158015613988573d6000803e3d6000fd5b505050506040513d602081101561399e57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa6bf4da8287876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001838152602001828152602001935050505060006040518083038186803b158015613a5857600080fd5b505afa158015613a6c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506040811015613a9657600080fd5b810190808051640100000000811115613aae57600080fd5b82810190506020810184811115613ac457600080fd5b8151856020820283011164010000000082111715613ae157600080fd5b5050929190602001805190602001909291905050509250925050935093915050565b6000806000613b1184612f43565b9150811515613b235760009250613d29565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bcd578082015181840152602081019050613bb2565b50505050905090810190601f168015613bfa5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613c1757600080fd5b505afa158015613c2b573d6000803e3d6000fd5b505050506040513d6020811015613c4157600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015613ceb57600080fd5b505afa158015613cff573d6000803e3d6000fd5b505050506040513d6020811015613d1557600080fd5b810190808051906020019092919050505092505b5050919050565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ddf578082015181840152602081019050613dc4565b50505050905090810190601f168015613e0c5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613e2957600080fd5b505afa158015613e3d573d6000803e3d6000fd5b505050506040513d6020811015613e5357600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f10578082015181840152602081019050613ef5565b50505050905090810190601f168015613f3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613f5a57600080fd5b505afa158015613f6e573d6000803e3d6000fd5b505050506040513d6020811015613f8457600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910585856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b15801561407c57600080fd5b505afa158015614090573d6000803e3d6000fd5b505050506040513d60208110156140a657600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561410f57600080fd5b505afa158015614123573d6000803e3d6000fd5b505050506040513d602081101561413957600080fd5b81019080805190602001909291905050509250505092915050565b600061415e61426c565b15156141f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156142cc57600190506144ad565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561431657600090506144ad565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561446f57600080fd5b505afa158015614483573d6000803e3d6000fd5b505050506040513d602081101561449957600080fd5b810190808051906020019092919050505090505b90565b6000806144bc84613568565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050929150505600a165627a7a723058201e88c2626a458a31cbd8a0ddb0353fc5252c30948d2e4eda22e499e5fe88d9d40029"},"devdoc":{"author":"Tim Coulter , Piper Merriam ","methods":{"generateReleaseId(string,string)":{"details":"Returns release id that *would* be generated for a name and version pair on `release`.","params":{"packageName":"Package name","version":"Version string (ex: '1.0.0')"}},"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all package hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getPackageData(string)":{"details":"Returns the package data.","params":{"name":"Package name"}},"getPackageDb()":{"details":"Returns the address of the packageDb"},"getPackageName(bytes32)":{"details":"Retrieves the name for the given name hash.","params":{"packageId":"The name hash of package to lookup the name for."}},"getReleaseData(bytes32)":{"details":"Returns the release data for the release associated with the given release hash.","params":{"releaseId":"The release hash."}},"getReleaseDb()":{"details":"Returns the address of the releaseDb"},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"getReleaseValidator()":{"details":"Returns the address of the releaseValidator"},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"packageExists(string)":{"details":"Query the existence of a package with the given name. Returns boolean indicating whether the package exists.","params":{"name":"Package name"}},"release(string,string,string)":{"details":"Creates a a new release for the named package. If this is the first release for the given package then this will also assign msg.sender as the owner of the package. Returns success.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: '1.0.0')"}},"releaseExists(string,string)":{"details":"Query the existence of a release at the provided version for the named package. Returns boolean indicating whether such a release exists.","params":{"name":"Package name","version":"Version string (ex: '1.0.0')"}},"setPackageDb(address)":{"details":"Sets the address of the PackageDb contract.","params":{"newPackageDb":"The address to set for the PackageDb."}},"setReleaseDb(address)":{"details":"Sets the address of the ReleaseDb contract.","params":{"newReleaseDb":"The address to set for the ReleaseDb."}},"setReleaseValidator(address)":{"details":"Sets the address of the ReleaseValidator contract.","params":{"newReleaseValidator":"The address to set for the ReleaseValidator."}},"transferPackageOwner(string,address)":{"details":"Transfers package ownership to the provider new owner address.","params":{"name":"Package name","newPackageOwner":"The address of the new owner."}}},"title":"Database contract for a package index."},"runtimeBytecode":{"bytecode":"0x608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fe1fd71461013857806310ae4ce2146101e257806313af40351461023d5780631fb1c6c014610298578063271cd7601461036357806334c0d654146103ba578063379037dc1461041557806343212cf1146105265780634961b40c146105b95780634c4aea87146106105780634f197ee7146107925780637a9e5e4b1461083357806383ea06201461088e5780638da5cb5b1461090f578063a54fb68514610966578063b4b42e3514610991578063bf7e214f14610a5c578063c2ba5b4014610ab3578063c999a3b214610b71578063eb8cc47c14610c4a578063efae87d714610cc7578063f314bf4614610d8e578063fb3a1fb214610de9575b600080fd5b34801561014457600080fd5b506101676004803603810190808035600019169060200190929190505050610e40565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a757808201518184015260208101905061018c565b50505050905090810190601f1680156101d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ee57600080fd5b50610223600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f71565b604051808215151515815260200191505060405180910390f35b34801561024957600080fd5b5061027e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105f565b604051808215151515815260200191505060405180910390f35b3480156102a457600080fd5b50610345600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111c7565b60405180826000191660001916815260200191505060405180910390f35b34801561036f57600080fd5b506103786112c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f2565b604051808215151515815260200191505060405180910390f35b34801561042157600080fd5b50610508600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506113e0565b60405180826000191660001916815260200191505060405180910390f35b34801561053257600080fd5b5061055b600480360381019080803590602001909291908035906020019092919050505061246b565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105a4578082015181840152602081019050610589565b50505050905001935050505060405180910390f35b3480156105c557600080fd5b506105ce6125af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061c57600080fd5b5061063f60048036038101908080356000191690602001909291905050506125d9565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561068757808201518184015260208101905061066c565b50505050905090810190601f1680156106b45780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106ed5780820151818401526020810190506106d2565b50505050905090810190601f16801561071a5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015610753578082015181840152602081019050610738565b50505050905090810190601f1680156107805780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561079e57600080fd5b50610819600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a6c565b604051808215151515815260200191505060405180910390f35b34801561083f57600080fd5b50610874600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dd9565b604051808215151515815260200191505060405180910390f35b34801561089a57600080fd5b506108f5600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612f43565b604051808215151515815260200191505060405180910390f35b34801561091b57600080fd5b5061092461314c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561097257600080fd5b5061097b613171565b6040518082815260200191505060405180910390f35b34801561099d57600080fd5b50610a3e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613237565b60405180826000191660001916815260200191505060405180910390f35b348015610a6857600080fd5b50610a71613542565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610abf57600080fd5b50610b1a600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613568565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b348015610b7d57600080fd5b50610bec600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001909291908035906020019092919050505061387b565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610c35578082015181840152602081019050610c1a565b50505050905001935050505060405180910390f35b348015610c5657600080fd5b50610cb1600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b03565b6040518082815260200191505060405180910390f35b348015610cd357600080fd5b50610d74600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613d30565b604051808215151515815260200191505060405180910390f35b348015610d9a57600080fd5b50610dcf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614154565b604051808215151515815260200191505060405180910390f35b348015610df557600080fd5b50610dfe614242565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b158015610ed957600080fd5b505afa158015610eed573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610f1757600080fd5b810190808051640100000000811115610f2f57600080fd5b82810190506020810184811115610f4557600080fd5b8151856001820283011164010000000082111715610f6257600080fd5b50509291905050509050919050565b6000610f7b61426c565b1515611015576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061106961426c565b1515611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806111d48484613237565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561126d57600080fd5b505afa158015611281573d6000803e3d6000fd5b505050506040513d602081101561129757600080fd5b810190808051906020019092919050505090508015156112bd57600060010291506112c1565b8191505b5092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006112fc61426c565b1515611396576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000806113ee61426c565b1515611488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561155f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a7061636b6167652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611636576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d64622d6e81526020017f6f742d736574000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a5061636b616765496e6465783a72656c656173652d76616c6981526020017f6461746f722d6e6f742d7365740000000000000000000000000000000000000081525060400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117b757808201518184015260208101905061179c565b50505050905090810190601f1680156117e45780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561180157600080fd5b505afa158015611815573d6000803e3d6000fd5b505050506040513d602081101561182b57600080fd5b81019080805190602001909291905050509250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb814e9e846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b1580156118d557600080fd5b505afa1580156118e9573d6000803e3d6000fd5b505050506040513d60208110156118ff57600080fd5b81019080805190602001909291905050501515611a4957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788bc78c876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119c05780820151818401526020810190506119a5565b50505050905090810190601f1680156119ed5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b505050506040513d6020811015611a3657600080fd5b8101908080519060200190929190505050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028fe498600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338b8b8b6040518763ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611bda578082015181840152602081019050611bbf565b50505050905090810190601f168015611c075780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015611c40578082015181840152602081019050611c25565b50505050905090810190601f168015611c6d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015611ca6578082015181840152602081019050611c8b565b50505050905090810190601f168015611cd35780820380516001836020036101000a031916815260200191505b50995050505050505050505060206040518083038186803b158015611cf757600080fd5b505afa158015611d0b573d6000803e3d6000fd5b505050506040513d6020811015611d2157600080fd5b810190808051906020019092919050505050611d3c87612f43565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663083ae1fe886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611de8578082015181840152602081019050611dcd565b50505050905090810190601f168015611e155780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b505050506040513d6020811015611e5e57600080fd5b810190808051906020019092919050505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f1a578082015181840152602081019050611eff565b50505050905090810190601f168015611f475780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611f6457600080fd5b505afa158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b810190808051906020019092919050505090508115156120b257600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb82336040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561207557600080fd5b505af1158015612089573d6000803e3d6000fd5b505050506040513d602081101561209f57600080fd5b8101908080519060200190929190505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b8594098285886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561217a57808201518184015260208101905061215f565b50505050905090810190601f1680156121a75780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156121c857600080fd5b505af11580156121dc573d6000803e3d6000fd5b505050506040513d60208110156121f257600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910582856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b1580156122ab57600080fd5b505afa1580156122bf573d6000803e3d6000fd5b505050506040513d60208110156122d557600080fd5b810190808051906020019092919050505093507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c387878760405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015612354578082015181840152602081019050612339565b50505050905090810190601f1680156123815780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156123ba57808201518184015260208101905061239f565b50505050905090810190601f1680156123e75780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612420578082015181840152602081019050612405565b50505050905090810190601f16801561244d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a18393505050509392505050565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343212cf185856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060006040518083038186803b15801561250657600080fd5b505afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561254457600080fd5b81019080805164010000000081111561255c57600080fd5b8281019050602081018481111561257257600080fd5b815185602082028301116401000000008211171561258f57600080fd5b505092919060200180519060200190929190505050915091509250929050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060806060600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c4aea87876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060806040518083038186803b15801561267857600080fd5b505afa15801561268c573d6000803e3d6000fd5b505050506040513d60808110156126a257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509050508093508192505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fe1fd7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156127b157600080fd5b8101908080516401000000008111156127c957600080fd5b828101905060208101848111156127df57600080fd5b81518560018202830111640100000000821117156127fc57600080fd5b50509291905050509450600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aaf9f08836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b15801561289d57600080fd5b505afa1580156128b1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156128db57600080fd5b8101908080516401000000008111156128f357600080fd5b8281019050602081018481111561290957600080fd5b815185600182028301116401000000008211171561292657600080fd5b50509291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d672640d876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060006040518083038186803b1580156129c757600080fd5b505afa1580156129db573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015612a0557600080fd5b810190808051640100000000811115612a1d57600080fd5b82810190506020810184811115612a3357600080fd5b8151856001820283011164010000000082111715612a5057600080fd5b5050929190505050925084848494509450945050509193909250565b600080612a7761426c565b1515612b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b612b1b84336144b0565b15612b295760009150612dd2565b612b3284613568565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa99a0b26852fc94fb40663ad64c63bac913f2e345ff098ea82209694879cb95e60405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632406cedb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c7e578082015181840152602081019050612c63565b50505050905090810190601f168015612cab5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015612cc857600080fd5b505afa158015612cdc573d6000803e3d6000fd5b505050506040513d6020811015612cf257600080fd5b8101908080519060200190929190505050856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015612d9157600080fd5b505af1158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b810190808051906020019092919050505050600191505b5092915050565b6000612de361426c565b1515612e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9b35240600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561302d578082015181840152602081019050613012565b50505050905090810190601f16801561305a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561307757600080fd5b505afa15801561308b573d6000803e3d6000fd5b505050506040513d60208110156130a157600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561310a57600080fd5b505afa15801561311e573d6000803e3d6000fd5b505050506040513d602081101561313457600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637370a38d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156131f757600080fd5b505afa15801561320b573d6000803e3d6000fd5b505050506040513d602081101561322157600080fd5b8101908080519060200190929190505050905090565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132e65780820151818401526020810190506132cb565b50505050905090810190601f1680156133135780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561333057600080fd5b505afa158015613344573d6000803e3d6000fd5b505050506040513d602081101561335a57600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134175780820151818401526020810190506133fc565b50505050905090810190601f1680156134445780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561346157600080fd5b505afa158015613475573d6000803e3d6000fd5b505050506040513d602081101561348b57600080fd5b8101908080519060200190929190505050905081816040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561350b57805182526020820191506020810190506020830392506134e6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209250505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561361a5780820151818401526020810190506135ff565b50505050905090810190601f1680156136475780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561366457600080fd5b505afa158015613678573d6000803e3d6000fd5b505050506040513d602081101561368e57600080fd5b81019080805190602001909291905050509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561373857600080fd5b505afa15801561374c573d6000803e3d6000fd5b505050506040513d606081101561376257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809450819650829750505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561382a57600080fd5b505afa15801561383e573d6000803e3d6000fd5b505050506040513d602081101561385457600080fd5b81019080805190602001909291905050509250848484849450945094509450509193509193565b6060600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561392a57808201518184015260208101905061390f565b50505050905090810190601f1680156139575780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561397457600080fd5b505afa158015613988573d6000803e3d6000fd5b505050506040513d602081101561399e57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa6bf4da8287876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808460001916600019168152602001838152602001828152602001935050505060006040518083038186803b158015613a5857600080fd5b505afa158015613a6c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506040811015613a9657600080fd5b810190808051640100000000811115613aae57600080fd5b82810190506020810184811115613ac457600080fd5b8151856020820283011164010000000082111715613ae157600080fd5b5050929190602001805190602001909291905050509250925050935093915050565b6000806000613b1184612f43565b9150811515613b235760009250613d29565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bcd578082015181840152602081019050613bb2565b50505050905090810190601f168015613bfa5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613c1757600080fd5b505afa158015613c2b573d6000803e3d6000fd5b505050506040513d6020811015613c4157600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663173cb7de826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015613ceb57600080fd5b505afa158015613cff573d6000803e3d6000fd5b505050506040513d6020811015613d1557600080fd5b810190808051906020019092919050505092505b5050919050565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ddf578082015181840152602081019050613dc4565b50505050905090810190601f168015613e0c5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613e2957600080fd5b505afa158015613e3d573d6000803e3d6000fd5b505050506040513d6020811015613e5357600080fd5b81019080805190602001909291905050509150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f10578082015181840152602081019050613ef5565b50505050905090810190601f168015613f3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015613f5a57600080fd5b505afa158015613f6e573d6000803e3d6000fd5b505050506040513d6020811015613f8457600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f415772600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393d7910585856040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b15801561407c57600080fd5b505afa158015614090573d6000803e3d6000fd5b505050506040513d60208110156140a657600080fd5b81019080805190602001909291905050506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561410f57600080fd5b505afa158015614123573d6000803e3d6000fd5b505050506040513d602081101561413957600080fd5b81019080805190602001909291905050509250505092915050565b600061415e61426c565b15156141f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156142cc57600190506144ad565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561431657600090506144ad565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561446f57600080fd5b505afa158015614483573d6000803e3d6000fd5b505050506040513d602081101561449957600080fd5b810190808051906020019092919050505090505b90565b6000806144bc84613568565b909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050929150505600a165627a7a723058201e88c2626a458a31cbd8a0ddb0353fc5252c30948d2e4eda22e499e5fe88d9d40029"},"sourceId":"PackageRegistry.sol"},"PackageRegistryInterface":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"deploymentBytecode":{"bytecode":"0x"},"devdoc":{"author":"Piper Merriam , Christopher Gewecke ","methods":{"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package ids for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all release hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice.","packageName":"Package name"}},"getPackageName(bytes32)":{"details":"Returns the string name of the package associated with a package id","params":{"packageId":"The package id to look up"}},"getReleaseData(bytes32)":{"details":"Returns the package data for a release.","params":{"releaseId":"Release id"}},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"release(string,string,string)":{"details":"Creates a a new release for the named package.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: 1.0.0)"}}},"title":"EIP 1319 Smart Contract Package Registry Interface"},"runtimeBytecode":{"bytecode":"0x"},"sourceId":"PackageRegistryInterface.sol"},"ReleaseDB":{"abi":[{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getNumReleasesForNameHash","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"version","type":"string"}],"name":"hashVersion","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"releaseId","type":"bytes32"},{"name":"reason","type":"string"}],"name":"removeRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"version","type":"string"}],"name":"setVersion","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"},{"name":"manifestURI","type":"string"}],"name":"setRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"}],"name":"hashRelease","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"versionHash","type":"bytes32"}],"name":"getVersion","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"versionHash","type":"bytes32"}],"name":"versionExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"releaseExisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"idx","type":"uint256"}],"name":"getReleaseIdForNameHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getManifestURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"_offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"offset","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseId","type":"bytes32"}],"name":"ReleaseCreate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseId","type":"bytes32"}],"name":"ReleaseUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseId","type":"bytes32"},{"indexed":false,"name":"reason","type":"string"}],"name":"ReleaseDelete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deploymentBytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a361206d806100b96000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af403514610101578063173cb7de1461015c5780631a2b3f62146101a1578063244fcd03146102265780633f415772146102b55780634c4aea87146102fe578063788bc78c146103685780637a9e5e4b146103ed5780638b859409146104485780638da5cb5b146104e557806393d791051461053c5780639aaf9f0814610597578063bb814e9e14610641578063bf7e214f1461068a578063ceef4a12146106e1578063cf6a4d591461072a578063d672640d14610781578063fa6bf4da1461082b575b600080fd5b34801561010d57600080fd5b50610142600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108cc565b604051808215151515815260200191505060405180910390f35b34801561016857600080fd5b5061018b6004803603810190808035600019169060200190929190505050610a34565b6040518082815260200191505060405180910390f35b3480156101ad57600080fd5b50610208600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610aff565b60405180826000191660001916815260200191505060405180910390f35b34801561023257600080fd5b5061029b6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bd7565b604051808215151515815260200191505060405180910390f35b3480156102c157600080fd5b506102e4600480360381019080803560001916906020019092919050505061102e565b604051808215151515815260200191505060405180910390f35b34801561030a57600080fd5b5061032d6004803603810190808035600019169060200190929190505050611063565b604051808560001916600019168152602001846000191660001916815260200183815260200182815260200194505050505060405180910390f35b34801561037457600080fd5b506103cf600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611151565b60405180826000191660001916815260200191505060405180910390f35b3480156103f957600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129e565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104cb60048036038101908080356000191690602001909291908035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611408565b604051808215151515815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b5061057960048036038101908080356000191690602001909291908035600019169060200190929190505050611778565b60405180826000191660001916815260200191505060405180910390f35b3480156105a357600080fd5b506105c6600480360381019080803560001916906020019092919050505061181c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106065780820151818401526020810190506105eb565b50505050905090810190601f1680156106335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561064d57600080fd5b50610670600480360381019080803560001916906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561069657600080fd5b5061069f6119b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106ed57600080fd5b5061071060048036038101908080356000191690602001909291905050506119d6565b604051808215151515815260200191505060405180910390f35b34801561073657600080fd5b50610763600480360381019080803560001916906020019092919080359060200190929190505050611a08565b60405180826000191660001916815260200191505060405180910390f35b34801561078d57600080fd5b506107b06004803603810190808035600019169060200190929190505050611adc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107f05780820151818401526020810190506107d5565b50505050905090810190601f16801561081d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561083757600080fd5b5061086e60048036038101908080356000191690602001909291908035906020019092919080359060200190929190505050611c41565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156108b757808201518184015260208101905061089c565b50505050905001935050505060405180910390f35b60006108d6611d10565b1515610970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600760008360001916600019168152602001908152602001600020730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610abd57600080fd5b505af4158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b81019080805190602001909291905050509050919050565b6000816040516020018082805190602001908083835b602083101515610b3a5780518252602082019150602081019050602083039250610b15565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515610ba35780518252602082019150602081019050602083039250610b7e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000610be4611d10565b1515610c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84610c888161102e565b1515610d22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610d2b86611063565b9050508093508194505050600260008760001916600019168152602001908152602001600020600080820160006101000a81549060ff02191690556001820160009055600282016000905560038201600090556004820160009055600582016000610d969190611f54565b50506008600083600019166000191681526020019081526020016000206000610dbf9190611f54565b600473000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610e3d57600080fd5b505af4158015610e51573d6000803e3d6000fd5b505050506040513d6020811015610e6757600080fd5b81019080805190602001909291905050505060076000846000191660001916815260200190815260200160002073000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610f1057600080fd5b505af4158015610f24573d6000803e3d6000fd5b505050506040513d6020811015610f3a57600080fd5b810190808051906020019092919050505050600160036000886000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555085600019167f72f61f9276232f7592082903bb275df873e35580890da43e4ff3338f8bcccca6866040518080602001828103825283818151815260200191508051906020019080838360005b83811015610fe7578082015181840152602081019050610fcc565b50505050905090810190601f1680156110145780820380516001836020036101000a031916815260200191505b509250505060405180910390a26001935050505092915050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000806000806000856110758161102e565b151561110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000886000191660001916815260200190815260200160002091508160030154826004015483600101548460020154955095509550955050509193509193565b60008061115c611d10565b15156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6111ff83610aff565b905060096000826000191660001916815260200190815260200160002060009054906101000a900460ff1615156112955782600860008360001916600019168152602001908152602001600020908051906020019061125f929190611f9c565b50600160096000836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80915050919050565b60006112a8611d10565b1515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000611415611d10565b15156114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6114b98686611778565b915060026000836000191660001916815260200190815260200160002090508060000160009054906101000a900460ff16156115255781600019167f421b70585c97d607687082e6736e0da3fc5c2c2ac156dfbe444cf54729d5e02d60405160405180910390a2611724565b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160030181600019169055508481600401816000191690555060047300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156115e357600080fd5b505af41580156115f7573d6000803e3d6000fd5b505050506040513d602081101561160d57600080fd5b8101908080519060200190929190505050506007600087600019166000191681526020019081526020016000207300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156116b657600080fd5b505af41580156116ca573d6000803e3d6000fd5b505050506040513d60208110156116e057600080fd5b81019080805190602001909291905050505081600019167feb3a047e740f5b7dd241cb3412aed51d713354a030f7966fe818d2bf9691b5fc60405160405180910390a25b42816002018190555083816005019080519060200190611745929190611f9c565b506001925050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156117e757805182526020820191506020810190506020830392506117c2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6060816118288161197e565b15156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a76657273696f6e2d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6008600084600019166000191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119715780601f1061194657610100808354040283529160200191611971565b820191906000526020600020905b81548152906001019060200180831161195457829003601f168201915b5050505050915050919050565b600060096000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060036000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b60006007600084600019166000191681526020019081526020016000207300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b158015611a9957600080fd5b505af4158015611aad573d6000803e3d6000fd5b505050506040513d6020811015611ac357600080fd5b8101908080519060200190929190505050905092915050565b606081611ae88161102e565b1515611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206005018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c345780601f10611c0957610100808354040283529160200191611c34565b820191906000526020600020905b815481529060010190602001808311611c1757829003601f168201915b5050505050915050919050565b606060006060600080600080889350611c598a610a34565b915081841015611cfd57838203925087831115611c74578792505b82604051908082528060200260200182016040528015611ca35781602001602082028038833980820191505090505b5094505b6000831115611cfc57611cba8a85611a08565b9050808560018503815181101515611cce57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611ca7565b5b8484965096505050505050935093915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d705760019050611f51565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611dba5760009050611f51565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d6020811015611f3d57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f10611f7a5750611f99565b601f016020900490600052602060002090810190611f98919061201c565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fdd57805160ff191683800117855561200b565b8280016001018555821561200b579182015b8281111561200a578251825591602001919060010190611fef565b5b509050612018919061201c565b5090565b61203e91905b8082111561203a576000816000905550600101612022565b5090565b905600a165627a7a72305820813eea520fe5c1cb0bc50921d9933c2b1eddb160d880bf1ca7444935f05b90df0029","linkReferences":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2828,3708,3919,5666,5877,6880]}]},"devdoc":{"author":"Tim Coulter , Piper Merriam ","methods":{"getAllReleaseIds(bytes32,uint256,uint256)":{"details":"Returns a slice of the array of all releases hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getManifestURI(bytes32)":{"details":"Returns the URI of the release manifest for the given release hash.","params":{"releaseId":"Release hash"}},"getNumReleasesForNameHash(bytes32)":{"details":"Get the total number of releases","params":{"nameHash":"the name hash to lookup."}},"getReleaseData(bytes32)":{"details":"Returns the releaseData for the given release has a package.","params":{"releaseId":"The release hash."}},"getReleaseIdForNameHash(bytes32,uint256)":{"details":"Release hash for a Package at a given index","params":{"idx":"The index of the release hash to retrieve.","nameHash":"the name hash to lookup."}},"getVersion(bytes32)":{"details":"Returns string version identifier from the version of the given release hash.","params":{"versionHash":"the version hash"}},"hashRelease(bytes32,bytes32)":{"details":"Returns release hash for the given release","params":{"nameHash":"The name hash of the package name.","versionHash":"The version hash for the release version."}},"hashVersion(string)":{"details":"Returns version hash for the given semver version.","params":{"version":"Version string"}},"releaseExisted(bytes32)":{"details":"Query the past existence of a release at the provided version for a package. Returns boolean indicating whether such a release ever existed.","params":{"releaseHash":"The release hash to query."}},"releaseExists(bytes32)":{"details":"Query the existence of a release at the provided version for a package. Returns boolean indicating whether such a release exists.","params":{"releaseId":"The release hash to query."}},"removeRelease(bytes32,string)":{"details":"Removes a release from a package. Returns success.","params":{"reason":"Explanation for why the removal happened.","releaseId":"The release hash to be removed"}},"setRelease(bytes32,bytes32,string)":{"details":"Creates or updates a release for a package. Returns success.","params":{"manifestURI":"The URI for the release manifest for this release.","nameHash":"The name hash of the package.","versionHash":"The version hash for the release version."}},"setVersion(string)":{"details":"Adds the given version to the local version database. Returns the versionHash for the provided version.","params":{"version":"Version string (ex: '1.0.0')"}},"versionExists(bytes32)":{"details":"Query the existence of the provided version in the recorded versions. Returns boolean indicating whether such a version exists.","params":{"versionHash":"the version hash to check."}}},"title":"Database contract for a package index."},"runtimeBytecode":{"bytecode":"0x6080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af403514610101578063173cb7de1461015c5780631a2b3f62146101a1578063244fcd03146102265780633f415772146102b55780634c4aea87146102fe578063788bc78c146103685780637a9e5e4b146103ed5780638b859409146104485780638da5cb5b146104e557806393d791051461053c5780639aaf9f0814610597578063bb814e9e14610641578063bf7e214f1461068a578063ceef4a12146106e1578063cf6a4d591461072a578063d672640d14610781578063fa6bf4da1461082b575b600080fd5b34801561010d57600080fd5b50610142600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108cc565b604051808215151515815260200191505060405180910390f35b34801561016857600080fd5b5061018b6004803603810190808035600019169060200190929190505050610a34565b6040518082815260200191505060405180910390f35b3480156101ad57600080fd5b50610208600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610aff565b60405180826000191660001916815260200191505060405180910390f35b34801561023257600080fd5b5061029b6004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610bd7565b604051808215151515815260200191505060405180910390f35b3480156102c157600080fd5b506102e4600480360381019080803560001916906020019092919050505061102e565b604051808215151515815260200191505060405180910390f35b34801561030a57600080fd5b5061032d6004803603810190808035600019169060200190929190505050611063565b604051808560001916600019168152602001846000191660001916815260200183815260200182815260200194505050505060405180910390f35b34801561037457600080fd5b506103cf600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611151565b60405180826000191660001916815260200191505060405180910390f35b3480156103f957600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129e565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104cb60048036038101908080356000191690602001909291908035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611408565b604051808215151515815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b5061057960048036038101908080356000191690602001909291908035600019169060200190929190505050611778565b60405180826000191660001916815260200191505060405180910390f35b3480156105a357600080fd5b506105c6600480360381019080803560001916906020019092919050505061181c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106065780820151818401526020810190506105eb565b50505050905090810190601f1680156106335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561064d57600080fd5b50610670600480360381019080803560001916906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561069657600080fd5b5061069f6119b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106ed57600080fd5b5061071060048036038101908080356000191690602001909291905050506119d6565b604051808215151515815260200191505060405180910390f35b34801561073657600080fd5b50610763600480360381019080803560001916906020019092919080359060200190929190505050611a08565b60405180826000191660001916815260200191505060405180910390f35b34801561078d57600080fd5b506107b06004803603810190808035600019169060200190929190505050611adc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107f05780820151818401526020810190506107d5565b50505050905090810190601f16801561081d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561083757600080fd5b5061086e60048036038101908080356000191690602001909291908035906020019092919080359060200190929190505050611c41565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156108b757808201518184015260208101905061089c565b50505050905001935050505060405180910390f35b60006108d6611d10565b1515610970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600760008360001916600019168152602001908152602001600020730000000000000000000000000000000000000000631aeaa50490916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610abd57600080fd5b505af4158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b81019080805190602001909291905050509050919050565b6000816040516020018082805190602001908083835b602083101515610b3a5780518252602082019150602081019050602083039250610b15565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515610ba35780518252602082019150602081019050602083039250610b7e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000610be4611d10565b1515610c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84610c888161102e565b1515610d22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610d2b86611063565b9050508093508194505050600260008760001916600019168152602001908152602001600020600080820160006101000a81549060ff02191690556001820160009055600282016000905560038201600090556004820160009055600582016000610d969190611f54565b50506008600083600019166000191681526020019081526020016000206000610dbf9190611f54565b600473000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610e3d57600080fd5b505af4158015610e51573d6000803e3d6000fd5b505050506040513d6020811015610e6757600080fd5b81019080805190602001909291905050505060076000846000191660001916815260200190815260200160002073000000000000000000000000000000000000000063ed05c0c59091886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610f1057600080fd5b505af4158015610f24573d6000803e3d6000fd5b505050506040513d6020811015610f3a57600080fd5b810190808051906020019092919050505050600160036000886000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555085600019167f72f61f9276232f7592082903bb275df873e35580890da43e4ff3338f8bcccca6866040518080602001828103825283818151815260200191508051906020019080838360005b83811015610fe7578082015181840152602081019050610fcc565b50505050905090810190601f1680156110145780820380516001836020036101000a031916815260200191505b509250505060405180910390a26001935050505092915050565b600060026000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000806000806000856110758161102e565b151561110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60026000886000191660001916815260200190815260200160002091508160030154826004015483600101548460020154955095509550955050509193509193565b60008061115c611d10565b15156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6111ff83610aff565b905060096000826000191660001916815260200190815260200160002060009054906101000a900460ff1615156112955782600860008360001916600019168152602001908152602001600020908051906020019061125f929190611f9c565b50600160096000836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80915050919050565b60006112a8611d10565b1515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000611415611d10565b15156114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6114b98686611778565b915060026000836000191660001916815260200190815260200160002090508060000160009054906101000a900460ff16156115255781600019167f421b70585c97d607687082e6736e0da3fc5c2c2ac156dfbe444cf54729d5e02d60405160405180910390a2611724565b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160030181600019169055508481600401816000191690555060047300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156115e357600080fd5b505af41580156115f7573d6000803e3d6000fd5b505050506040513d602081101561160d57600080fd5b8101908080519060200190929190505050506007600087600019166000191681526020019081526020016000207300000000000000000000000000000000000000006391d8a2849091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b1580156116b657600080fd5b505af41580156116ca573d6000803e3d6000fd5b505050506040513d60208110156116e057600080fd5b81019080805190602001909291905050505081600019167feb3a047e740f5b7dd241cb3412aed51d713354a030f7966fe818d2bf9691b5fc60405160405180910390a25b42816002018190555083816005019080519060200190611745929190611f9c565b506001925050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156117e757805182526020820191506020810190506020830392506117c2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6060816118288161197e565b15156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a76657273696f6e2d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6008600084600019166000191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119715780601f1061194657610100808354040283529160200191611971565b820191906000526020600020905b81548152906001019060200180831161195457829003601f168201915b5050505050915050919050565b600060096000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060036000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b60006007600084600019166000191681526020019081526020016000207300000000000000000000000000000000000000006377e91da19091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b158015611a9957600080fd5b505af4158015611aad573d6000803e3d6000fd5b505050506040513d6020811015611ac357600080fd5b8101908080519060200190929190505050905092915050565b606081611ae88161102e565b1515611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6573636170653a52656c6561736544423a72656c656173652d6e6f742d666f7581526020017f6e6400000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600084600019166000191681526020019081526020016000206005018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c345780601f10611c0957610100808354040283529160200191611c34565b820191906000526020600020905b815481529060010190602001808311611c1757829003601f168201915b5050505050915050919050565b606060006060600080600080889350611c598a610a34565b915081841015611cfd57838203925087831115611c74578792505b82604051908082528060200260200182016040528015611ca35781602001602082028038833980820191505090505b5094505b6000831115611cfc57611cba8a85611a08565b9050808560018503815181101515611cce57fe5b9060200190602002019060001916908160001916815250508280600190039350508380600101945050611ca7565b5b8484965096505050505050935093915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d705760019050611f51565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611dba5760009050611f51565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d6020811015611f3d57600080fd5b810190808051906020019092919050505090505b90565b50805460018160011615610100020316600290046000825580601f10611f7a5750611f99565b601f016020900490600052602060002090810190611f98919061201c565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fdd57805160ff191683800117855561200b565b8280016001018555821561200b579182015b8281111561200a578251825591602001919060010190611fef565b5b509050612018919061201c565b5090565b61203e91905b8082111561203a576000816000905550600101612022565b5090565b905600a165627a7a72305820813eea520fe5c1cb0bc50921d9933c2b1eddb160d880bf1ca7444935f05b90df0029","linkReferences":[{"length":20,"name":"IndexedOrderedSetLib","offsets":[2643,3523,3734,5481,5692,6695]}]},"sourceId":"ReleaseDB.sol"},"ReleaseValidator":{"abi":[{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"releaseDb","type":"address"},{"name":"callerAddress","type":"address"},{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"validateRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"releaseDb","type":"address"},{"name":"name","type":"string"},{"name":"version","type":"string"}],"name":"validateIsNewRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"callerAddress","type":"address"},{"name":"name","type":"string"}],"name":"validateAuthorization","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageDb","type":"address"},{"name":"name","type":"string"}],"name":"validatePackageName","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"value","type":"string"}],"name":"validateStringIdentifier","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"}],"deploymentBytecode":{"bytecode":"0x608060405234801561001057600080fd5b50611732806100206000396000f30060806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063028fe4981461007257806310c8e28f146101df5780632113e91b146102e65780632520a1b8146103a757806382ee976f14610448575b600080fd5b34801561007e57600080fd5b506101c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506104c9565b604051808215151515815260200191505060405180910390f35b3480156101eb57600080fd5b506102cc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610973565b604051808215151515815260200191505060405180910390f35b3480156102f257600080fd5b5061038d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610dd0565b604051808215151515815260200191505060405180910390f35b3480156103b357600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506110b9565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104af600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506116e8565b604051808215151515815260200191505060405180910390f35b6000808773ffffffffffffffffffffffffffffffffffffffff16141561057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a7061636b6167652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff161415610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a72656c656173652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61063b878686610dd0565b15156106d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a52656c6561736556616c696461746f723a63616c6c65722d6e81526020017f6f742d617574686f72697a65640000000000000000000000000000000000000081525060400191505060405180910390fd5b6106e187878686610973565b151561077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f6573636170653a52656c6561736556616c696461746f723a76657273696f6e2d81526020017f70726576696f75736c792d7075626c697368656400000000000000000000000081525060400191505060405180910390fd5b61078587856110b9565b151561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f7061636b6167652d6e616d65000000000000000000000000000000000000000081525060400191505060405180910390fd5b610828826116e8565b15156108c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f6d616e69666573742d757269000000000000000000000000000000000000000081525060400191505060405180910390fd5b6108cb836116e8565b1515610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f72656c656173652d76657273696f6e000000000000000000000000000000000081525060400191505060405180910390fd5b600190509695505050505050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a015780820151818401526020810190506109e6565b50505050905090810190601f168015610a2e5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610a4b57600080fd5b505afa158015610a5f573d6000803e3d6000fd5b505050506040513d6020811015610a7557600080fd5b810190808051906020019092919050505092508673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b10578082015181840152602081019050610af5565b50505050905090810190601f168015610b3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d6020811015610b8457600080fd5b810190808051906020019092919050505091508673ffffffffffffffffffffffffffffffffffffffff166393d7910584846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d6020811015610c4657600080fd5b810190808051906020019092919050505090508673ffffffffffffffffffffffffffffffffffffffff16633f415772826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610cce57600080fd5b505afa158015610ce2573d6000803e3d6000fd5b505050506040513d6020811015610cf857600080fd5b8101908080519060200190929190505050158015610dc357508673ffffffffffffffffffffffffffffffffffffffff1663ceef4a12826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610d8657600080fd5b505afa158015610d9a573d6000803e3d6000fd5b505050506040513d6020811015610db057600080fd5b8101908080519060200190929190505050155b9350505050949350505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e5d578082015181840152602081019050610e42565b50505050905090810190601f168015610e8a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610ea757600080fd5b505afa158015610ebb573d6000803e3d6000fd5b505050506040513d6020811015610ed157600080fd5b810190808051906020019092919050505091508573ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610f5957600080fd5b505afa158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b81019080805190602001909291905050501515610fa357600192506110b0565b8573ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561101857600080fd5b505afa15801561102c573d6000803e3d6000fd5b505050506040513d606081101561104257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050905050809150508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ab57600192506110b0565b600092505b50509392505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561114657808201518184015260208101905061112b565b50505050905090810190601f1680156111735780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561119057600080fd5b505afa1580156111a4573d6000803e3d6000fd5b505050506040513d60208110156111ba57600080fd5b810190808051906020019092919050505091508473ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561124257600080fd5b505afa158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b81019080805190602001909291905050501561128b57600192506116e0565b60028451108061129c575060ff8451115b156112aa57600092506116e0565b600090505b83518110156116db577f2d000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561130957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156113835750600081115b1561138d576116ce565b60008111801561145b57507f30000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156113ea57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900410155b801561152557507f39000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156114b457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b1561152f576116ce565b7f61000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561158157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004101580156116bb57507f7a000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561164a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b156116c5576116ce565b600092506116e0565b80806001019150506112af565b600192505b505092915050565b600080825114156116fc5760009050611701565b600190505b9190505600a165627a7a72305820c6631590e704be0dfc5bd89bbc410fd70472a41eae562ca6230bd34c1fa328650029"},"devdoc":{"author":"Piper Merriam ","methods":{"validateAuthorization(address,address,string)":{"details":"Validate whether the callerAddress is authorized to make this release.","params":{"callerAddress":"The address which is attempting to create the release.","name":"The name of the package.","packageDb":"The address of the PackageDB"}},"validateIsNewRelease(address,address,string,string)":{"details":"Validate that the version being released has not already been released.","params":{"name":"The name of the package.","packageDb":"The address of the PackageDB","releaseDb":"The address of the ReleaseDB","version":"The version string for the release"}},"validatePackageName(address,string)":{"details":"Returns boolean whether the provided package name is valid.","params":{"name":"The name of the package.","packageDb":"The address of the PackageDB"}},"validateRelease(address,address,address,string,string,string)":{"details":"Runs validation on all of the data needed for releasing a package. Returns success.","params":{"callerAddress":"The address which is attempting to create the release.","manifestURI":"The URI of the release manifest.","name":"The name of the package.","packageDb":"The address of the PackageDB","releaseDb":"The address of the ReleaseDB","version":"The version string of the package (ex: `1.0.0`)"}},"validateStringIdentifier(string)":{"details":"Returns boolean whether the input string has a length","params":{"value":"The string to validate."}}},"title":"Database contract for a package index."},"runtimeBytecode":{"bytecode":"0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063028fe4981461007257806310c8e28f146101df5780632113e91b146102e65780632520a1b8146103a757806382ee976f14610448575b600080fd5b34801561007e57600080fd5b506101c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506104c9565b604051808215151515815260200191505060405180910390f35b3480156101eb57600080fd5b506102cc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610973565b604051808215151515815260200191505060405180910390f35b3480156102f257600080fd5b5061038d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610dd0565b604051808215151515815260200191505060405180910390f35b3480156103b357600080fd5b5061042e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506110b9565b604051808215151515815260200191505060405180910390f35b34801561045457600080fd5b506104af600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506116e8565b604051808215151515815260200191505060405180910390f35b6000808773ffffffffffffffffffffffffffffffffffffffff16141561057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a7061636b6167652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff161415610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6573636170653a52656c6561736556616c696461746f723a72656c656173652d81526020017f64622d6e6f742d7365740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61063b878686610dd0565b15156106d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6573636170653a52656c6561736556616c696461746f723a63616c6c65722d6e81526020017f6f742d617574686f72697a65640000000000000000000000000000000000000081525060400191505060405180910390fd5b6106e187878686610973565b151561077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f6573636170653a52656c6561736556616c696461746f723a76657273696f6e2d81526020017f70726576696f75736c792d7075626c697368656400000000000000000000000081525060400191505060405180910390fd5b61078587856110b9565b151561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f7061636b6167652d6e616d65000000000000000000000000000000000000000081525060400191505060405180910390fd5b610828826116e8565b15156108c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f6d616e69666573742d757269000000000000000000000000000000000000000081525060400191505060405180910390fd5b6108cb836116e8565b1515610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6573636170653a52656c6561736556616c696461746f723a696e76616c69642d81526020017f72656c656173652d76657273696f6e000000000000000000000000000000000081525060400191505060405180910390fd5b600190509695505050505050565b6000806000808773ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a015780820151818401526020810190506109e6565b50505050905090810190601f168015610a2e5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610a4b57600080fd5b505afa158015610a5f573d6000803e3d6000fd5b505050506040513d6020811015610a7557600080fd5b810190808051906020019092919050505092508673ffffffffffffffffffffffffffffffffffffffff16631a2b3f62866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b10578082015181840152602081019050610af5565b50505050905090810190601f168015610b3d5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d6020811015610b8457600080fd5b810190808051906020019092919050505091508673ffffffffffffffffffffffffffffffffffffffff166393d7910584846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182600019166000191681526020019250505060206040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d6020811015610c4657600080fd5b810190808051906020019092919050505090508673ffffffffffffffffffffffffffffffffffffffff16633f415772826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610cce57600080fd5b505afa158015610ce2573d6000803e3d6000fd5b505050506040513d6020811015610cf857600080fd5b8101908080519060200190929190505050158015610dc357508673ffffffffffffffffffffffffffffffffffffffff1663ceef4a12826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610d8657600080fd5b505afa158015610d9a573d6000803e3d6000fd5b505050506040513d6020811015610db057600080fd5b8101908080519060200190929190505050155b9350505050949350505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e5d578082015181840152602081019050610e42565b50505050905090810190601f168015610e8a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610ea757600080fd5b505afa158015610ebb573d6000803e3d6000fd5b505050506040513d6020811015610ed157600080fd5b810190808051906020019092919050505091508573ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b158015610f5957600080fd5b505afa158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b81019080805190602001909291905050501515610fa357600192506110b0565b8573ffffffffffffffffffffffffffffffffffffffff1663b4d6d4c7836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060606040518083038186803b15801561101857600080fd5b505afa15801561102c573d6000803e3d6000fd5b505050506040513d606081101561104257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050905050809150508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ab57600192506110b0565b600092505b50509392505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663af9a3f9b856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561114657808201518184015260208101905061112b565b50505050905090810190601f1680156111735780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561119057600080fd5b505afa1580156111a4573d6000803e3d6000fd5b505050506040513d60208110156111ba57600080fd5b810190808051906020019092919050505091508473ffffffffffffffffffffffffffffffffffffffff1663a9b35240836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826000191660001916815260200191505060206040518083038186803b15801561124257600080fd5b505afa158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b81019080805190602001909291905050501561128b57600192506116e0565b60028451108061129c575060ff8451115b156112aa57600092506116e0565b600090505b83518110156116db577f2d000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561130957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156113835750600081115b1561138d576116ce565b60008111801561145b57507f30000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156113ea57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900410155b801561152557507f39000000000000000000000000000000000000000000000000000000000000007f0100000000000000000000000000000000000000000000000000000000000000900484828151811015156114b457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b1561152f576116ce565b7f61000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561158157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004101580156116bb57507f7a000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000009004848281518110151561164a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900411155b156116c5576116ce565b600092506116e0565b80806001019150506112af565b600192505b505092915050565b600080825114156116fc5760009050611701565b600190505b9190505600a165627a7a72305820c6631590e704be0dfc5bd89bbc410fd70472a41eae562ca6230bd34c1fa328650029"},"sourceId":"ReleaseValidator.sol"},"WhitelistAuthority":{"abi":[{"constant":false,"inputs":[{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setAnyoneCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"}],"name":"canCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"callerAddress","type":"address"},{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetAnyoneCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deploymentBytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3610ecf806100b96000396000f300608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302acdb441461008857806313af4035146101185780637a9e5e4b1461017357806387045369146101ce5780638da5cb5b1461027e578063b7009613146102d5578063bf7e214f14610379575b600080fd5b34801561009457600080fd5b506100fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291908035151590602001909291905050506103d0565b604051808215151515815260200191505060405180910390f35b34801561012457600080fd5b50610159600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610597565b604051808215151515815260200191505060405180910390f35b34801561017f57600080fd5b506101b4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106ff565b604051808215151515815260200191505060405180910390f35b3480156101da57600080fd5b50610264600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803515159060200190929190505050610869565b604051808215151515815260200191505060405180910390f35b34801561028a57600080fd5b50610293610a85565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b5061035f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610aaa565b604051808215151515815260200191505060405180910390f35b34801561038557600080fd5b5061038e610c39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006103da610c5f565b1515610474576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff167f2bdcdc8a0588683c308a993fd1243cffdf4da84fc0e91b056dbe7baced0b43b284604051808215151515815260200191505060405180910390a3600190509392505050565b60006105a1610c5f565b151561063b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610709610c5f565b15156107a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610873610c5f565b151561090d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2f92249a3089c63a63689d414f60bbb3cb57484dfac21dd4e39605e6dd845c6285604051808215151515815260200191505060405180910390a460019050949350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615610b565760019050610c32565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690505b9392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610cbf5760019050610ea0565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d095760009050610ea0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610e6257600080fd5b505afa158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b810190808051906020019092919050505090505b905600a165627a7a72305820a9dc2bbff75fb3cb9904c5ecd73b06ba22c1850dd2eda7b2874477e561dbb74e0029"},"devdoc":{"methods":{}},"runtimeBytecode":{"bytecode":"0x608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302acdb441461008857806313af4035146101185780637a9e5e4b1461017357806387045369146101ce5780638da5cb5b1461027e578063b7009613146102d5578063bf7e214f14610379575b600080fd5b34801561009457600080fd5b506100fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291908035151590602001909291905050506103d0565b604051808215151515815260200191505060405180910390f35b34801561012457600080fd5b50610159600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610597565b604051808215151515815260200191505060405180910390f35b34801561017f57600080fd5b506101b4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106ff565b604051808215151515815260200191505060405180910390f35b3480156101da57600080fd5b50610264600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803515159060200190929190505050610869565b604051808215151515815260200191505060405180910390f35b34801561028a57600080fd5b50610293610a85565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b5061035f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610aaa565b604051808215151515815260200191505060405180910390f35b34801561038557600080fd5b5061038e610c39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006103da610c5f565b1515610474576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff167f2bdcdc8a0588683c308a993fd1243cffdf4da84fc0e91b056dbe7baced0b43b284604051808215151515815260200191505060405180910390a3600190509392505050565b60006105a1610c5f565b151561063b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610709610c5f565b15156107a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa1d9e0b26ffdd95159e4605308c755be7b756e3e5dd5c5756b4c77f644a5236460405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610873610c5f565b151561090d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6573636170653a417574686f726974793a63616c6c65722d6e6f742d6175746881526020017f6f72697a6564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2f92249a3089c63a63689d414f60bbb3cb57484dfac21dd4e39605e6dd845c6285604051808215151515815260200191505060405180910390a460019050949350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615610b565760019050610c32565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1690505b9392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610cbf5760019050610ea0565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d095760009050610ea0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b700961333306000357fffffffff00000000000000000000000000000000000000000000000000000000166040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610e6257600080fd5b505afa158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b810190808051906020019092919050505090505b905600a165627a7a72305820a9dc2bbff75fb3cb9904c5ecd73b06ba22c1850dd2eda7b2874477e561dbb74e0029"},"sourceId":"Authority.sol"},"WhitelistAuthorityInterface":{"abi":[{"constant":false,"inputs":[{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setAnyoneCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"},{"name":"can","type":"bool"}],"name":"setCanCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"callerAddress","type":"address"},{"name":"codeAddress","type":"address"},{"name":"sig","type":"bytes4"}],"name":"canCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"callerAddress","type":"address"},{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"codeAddress","type":"address"},{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":false,"name":"can","type":"bool"}],"name":"SetAnyoneCanCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"deploymentBytecode":{"bytecode":"0x"},"devdoc":{"methods":{}},"runtimeBytecode":{"bytecode":"0x"},"sourceId":"Authority.sol"}},"manifest":"ethpm/3","name":"solidity-registry","sources":{"./Authority.sol":{"content":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n\ncontract AuthorityInterface {\n function canCall(\n address callerAddress,\n address codeAddress,\n bytes4 sig\n )\n public\n view\n returns (bool);\n}\n\n\ncontract AuthorizedInterface {\n address public owner;\n AuthorityInterface public authority;\n\n modifier auth {\n require(isAuthorized(),\"escape:Authority:caller-not-authorized\");\n _;\n }\n\n event OwnerUpdate(address indexed oldOwner, address indexed newOwner);\n event AuthorityUpdate(address indexed oldAuthority, address indexed newAuthority);\n\n function setOwner(address newOwner) public returns (bool);\n\n function setAuthority(AuthorityInterface newAuthority) public returns (bool);\n\n function isAuthorized() internal returns (bool);\n}\n\n\ncontract Authorized is AuthorizedInterface {\n constructor() public {\n owner = msg.sender;\n emit OwnerUpdate(0x0, owner);\n }\n\n function setOwner(address newOwner)\n public\n auth\n returns (bool)\n {\n emit OwnerUpdate(owner, newOwner);\n owner = newOwner;\n return true;\n }\n\n function setAuthority(AuthorityInterface newAuthority)\n public\n auth\n returns (bool)\n {\n emit AuthorityUpdate(authority, newAuthority);\n authority = newAuthority;\n return true;\n }\n\n function isAuthorized() internal returns (bool) {\n if (msg.sender == owner) {\n return true;\n } else if (address(authority) == (0)) {\n return false;\n } else {\n return authority.canCall(msg.sender, this, msg.sig);\n }\n }\n}\n\n\ncontract WhitelistAuthorityInterface is AuthorityInterface, AuthorizedInterface {\n event SetCanCall(\n address indexed callerAddress,\n address indexed codeAddress,\n bytes4 indexed sig,\n bool can\n );\n\n event SetAnyoneCanCall(\n address indexed codeAddress,\n bytes4 indexed sig,\n bool can\n );\n\n function setCanCall(\n address callerAddress,\n address codeAddress,\n bytes4 sig,\n bool can\n )\n public\n returns (bool);\n\n function setAnyoneCanCall(\n address codeAddress,\n bytes4 sig,\n bool can\n )\n public\n returns (bool);\n}\n\n\ncontract WhitelistAuthority is WhitelistAuthorityInterface, Authorized {\n mapping (address => mapping (address => mapping (bytes4 => bool))) _canCall;\n mapping (address => mapping (bytes4 => bool)) _anyoneCanCall;\n\n function canCall(\n address callerAddress,\n address codeAddress,\n bytes4 sig\n )\n public\n view\n returns (bool)\n {\n if (_anyoneCanCall[codeAddress][sig]) {\n return true;\n } else {\n return _canCall[callerAddress][codeAddress][sig];\n }\n }\n\n function setCanCall(\n address callerAddress,\n address codeAddress,\n bytes4 sig,\n bool can\n )\n public\n auth\n returns (bool)\n {\n _canCall[callerAddress][codeAddress][sig] = can;\n emit SetCanCall(callerAddress, codeAddress, sig, can);\n return true;\n }\n\n function setAnyoneCanCall(\n address codeAddress,\n bytes4 sig,\n bool can\n )\n public\n auth\n returns (bool)\n {\n _anyoneCanCall[codeAddress][sig] = can;\n emit SetAnyoneCanCall(codeAddress, sig, can);\n return true;\n }\n}","installPath":"./Authority.sol","type":"solidity"},"./IndexedOrderedSetLib.sol":{"content":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n/// @title Library implementing an array type which allows O(1) lookups on values.\n/// @author Piper Merriam \nlibrary IndexedOrderedSetLib {\n struct IndexedOrderedSet {\n bytes32[] _values;\n mapping (bytes32 => uint) _valueIndices;\n mapping (bytes32 => bool) _exists;\n }\n\n modifier requireValue(IndexedOrderedSet storage self, bytes32 value) {\n require(contains(self, value), \"escape:IndexedOrderedSetLib:value-not-found\");\n _;\n }\n\n /// @dev Returns the size of the set\n /// @param self The set\n function size(IndexedOrderedSet storage self)\n public\n view\n returns (uint)\n {\n return self._values.length;\n }\n\n /// @dev Returns boolean if the key is in the set\n /// @param self The set\n /// @param value The value to check\n function contains(IndexedOrderedSet storage self, bytes32 value)\n public\n view\n returns (bool)\n {\n return self._exists[value];\n }\n\n /// @dev Returns the index of the value in the set.\n /// @param self The set\n /// @param value The value to look up the index for.\n function indexOf(IndexedOrderedSet storage self, bytes32 value)\n public\n view\n requireValue(self, value)\n returns (uint)\n {\n return self._valueIndices[value];\n }\n\n /// @dev Removes the element at index idx from the set and returns it.\n /// @param self The set\n /// @param idx The index to remove and return.\n function pop(IndexedOrderedSet storage self, uint idx) public returns (bytes32) {\n bytes32 value = get(self, idx);\n\n if (idx != self._values.length - 1) {\n bytes32 movedValue = self._values[self._values.length - 1];\n self._values[idx] = movedValue;\n self._valueIndices[movedValue] = idx;\n }\n self._values.length -= 1;\n\n delete self._valueIndices[value];\n delete self._exists[value];\n\n return value;\n }\n\n /// @dev Removes the element at index idx from the set\n /// @param self The set\n /// @param value The value to remove from the set.\n function remove(IndexedOrderedSet storage self, bytes32 value)\n public\n requireValue(self, value)\n returns (bool)\n {\n uint idx = indexOf(self, value);\n pop(self, idx);\n return true;\n }\n\n /// @dev Retrieves the element at the provided index.\n /// @param self The set\n /// @param idx The index to retrieve.\n function get(IndexedOrderedSet storage self, uint idx)\n public\n view\n returns (bytes32)\n {\n return self._values[idx];\n }\n\n /// @dev Pushes the new value onto the set\n /// @param self The set\n /// @param value The value to push.\n function add(IndexedOrderedSet storage self, bytes32 value) public returns (bool) {\n if (contains(self, value)) return true;\n\n self._valueIndices[value] = self._values.length;\n self._values.push(value);\n self._exists[value] = true;\n\n return true;\n }\n}","installPath":"./IndexedOrderedSetLib.sol","type":"solidity"},"./PackageDB.sol":{"content":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\nimport {IndexedOrderedSetLib} from \"./IndexedOrderedSetLib.sol\";\nimport {Authorized} from \"./Authority.sol\";\n\n\n/// @title Database contract for a package index package data.\n/// @author Tim Coulter , Piper Merriam \ncontract PackageDB is Authorized {\n using IndexedOrderedSetLib for IndexedOrderedSetLib.IndexedOrderedSet;\n\n struct Package {\n bool exists;\n uint createdAt;\n uint updatedAt;\n string name;\n address owner;\n }\n\n // Package Data: (nameHash => value)\n mapping (bytes32 => Package) _recordedPackages;\n IndexedOrderedSetLib.IndexedOrderedSet _allPackageNameHashes;\n\n // Events\n event PackageReleaseAdd(bytes32 indexed nameHash, bytes32 indexed releaseHash);\n event PackageReleaseRemove(bytes32 indexed nameHash, bytes32 indexed releaseHash);\n event PackageCreate(bytes32 indexed nameHash);\n event PackageDelete(bytes32 indexed nameHash, string reason);\n event PackageOwnerUpdate(bytes32 indexed nameHash, address indexed oldOwner, address indexed newOwner);\n\n /*\n * Modifiers\n */\n modifier onlyIfPackageExists(bytes32 nameHash) {\n require(packageExists(nameHash), \"escape:PackageDB:package-not-found\");\n _;\n }\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n\n /// @dev Creates or updates a release for a package. Returns success.\n /// @param name Package name\n function setPackage(string name)\n public\n auth\n returns (bool)\n {\n // Hash the name and the version for storing data\n bytes32 nameHash = hashName(name);\n\n Package storage package = _recordedPackages[nameHash];\n\n // Mark the package as existing if it isn't already tracked.\n if (!packageExists(nameHash)) {\n\n // Set package data\n package.exists = true;\n package.createdAt = block.timestamp; // solium-disable-line security/no-block-members\n package.name = name;\n\n // Add the nameHash to the list of all package nameHashes.\n _allPackageNameHashes.add(nameHash);\n\n emit PackageCreate(nameHash);\n }\n\n package.updatedAt = block.timestamp; // solium-disable-line security/no-block-members\n\n return true;\n }\n\n /// @dev Removes a package from the package db. Packages with existing releases may not be removed. Returns success.\n /// @param nameHash The name hash of a package.\n function removePackage(bytes32 nameHash, string reason)\n public\n auth\n onlyIfPackageExists(nameHash)\n returns (bool)\n {\n emit PackageDelete(nameHash, reason);\n\n delete _recordedPackages[nameHash];\n _allPackageNameHashes.remove(nameHash);\n\n return true;\n }\n\n /// @dev Sets the owner of a package to the provided address. Returns success.\n /// @param nameHash The name hash of a package.\n /// @param newPackageOwner The address of the new owner.\n function setPackageOwner(bytes32 nameHash, address newPackageOwner)\n public\n auth\n onlyIfPackageExists(nameHash)\n returns (bool)\n {\n emit PackageOwnerUpdate(nameHash, _recordedPackages[nameHash].owner, newPackageOwner);\n\n _recordedPackages[nameHash].owner = newPackageOwner;\n _recordedPackages[nameHash].updatedAt = block.timestamp; // solium-disable-line security/no-block-members\n\n return true;\n }\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Query the existence of a package with the given name. Returns boolean indicating whether the package exists.\n /// @param nameHash The name hash of a package.\n function packageExists(bytes32 nameHash)\n public\n view\n returns (bool)\n {\n return _recordedPackages[nameHash].exists;\n }\n\n /// @dev Return the total number of packages\n function getNumPackages()\n public\n view\n returns (uint)\n {\n return _allPackageNameHashes.size();\n }\n\n /// @dev Returns package namehash at the provided index from the set of all known name hashes.\n /// @param idx The index of the package name hash to retrieve.\n function getPackageNameHash(uint idx)\n public\n view\n returns (bytes32)\n {\n return _allPackageNameHashes.get(idx);\n }\n\n /// @dev Returns information about the package.\n /// @param nameHash The name hash to look up.\n function getPackageData(bytes32 nameHash)\n public\n view\n onlyIfPackageExists(nameHash)\n returns (\n address packageOwner,\n uint createdAt,\n uint updatedAt\n )\n {\n Package storage package = _recordedPackages[nameHash];\n return (package.owner, package.createdAt, package.updatedAt);\n }\n\n /// @dev Returns the package name for the given namehash\n /// @param nameHash The name hash to look up.\n function getPackageName(bytes32 nameHash)\n public\n view\n onlyIfPackageExists(nameHash)\n returns (string)\n {\n return _recordedPackages[nameHash].name;\n }\n\n /// @dev Returns a slice of the array of all package hashes for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint _offset, uint limit)\n public\n view\n returns (\n bytes32[] packageIds,\n uint offset\n )\n {\n bytes32[] memory hashes; // Array of package ids to return\n uint cursor = _offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n uint totalPackages = getNumPackages(); // Total number of packages in registry\n\n // Is request within range?\n if (cursor < totalPackages){\n\n // Get total remaining records\n remaining = totalPackages - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records. (IndexedOrderedSet manages deletions.)\n while(remaining > 0){\n bytes32 hash = getPackageNameHash(cursor);\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n /*\n * Hash Functions\n */\n /// @dev Returns name hash for a given package name.\n /// @param name Package name\n function hashName(string name)\n public\n pure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(name));\n }\n}","installPath":"./PackageDB.sol","type":"solidity"},"./PackageRegistry.sol":{"content":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n\nimport {PackageDB} from \"./PackageDB.sol\";\nimport {ReleaseDB} from \"./ReleaseDB.sol\";\nimport {ReleaseValidator} from \"./ReleaseValidator.sol\";\nimport {PackageRegistryInterface} from \"./PackageRegistryInterface.sol\";\nimport {Authorized} from \"./Authority.sol\";\n\n\n/// @title Database contract for a package index.\n/// @author Tim Coulter , Piper Merriam \ncontract PackageRegistry is Authorized, PackageRegistryInterface {\n PackageDB private packageDb;\n ReleaseDB private releaseDb;\n ReleaseValidator private releaseValidator;\n\n // Events\n event VersionRelease(string packageName, string version, string manifestURI);\n event PackageTransfer(address indexed oldOwner, address indexed newOwner);\n\n //\n // Administrative API\n //\n /// @dev Sets the address of the PackageDb contract.\n /// @param newPackageDb The address to set for the PackageDb.\n function setPackageDb(address newPackageDb)\n public\n auth\n returns (bool)\n {\n packageDb = PackageDB(newPackageDb);\n return true;\n }\n\n /// @dev Sets the address of the ReleaseDb contract.\n /// @param newReleaseDb The address to set for the ReleaseDb.\n function setReleaseDb(address newReleaseDb)\n public\n auth\n returns (bool)\n {\n releaseDb = ReleaseDB(newReleaseDb);\n return true;\n }\n\n /// @dev Sets the address of the ReleaseValidator contract.\n /// @param newReleaseValidator The address to set for the ReleaseValidator.\n function setReleaseValidator(address newReleaseValidator)\n public\n auth\n returns (bool)\n {\n releaseValidator = ReleaseValidator(newReleaseValidator);\n return true;\n }\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n /// @dev Creates a a new release for the named package. If this is the first release for the given package then this will also assign msg.sender as the owner of the package. Returns success.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: '1.0.0')\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string packageName,\n string version,\n string manifestURI\n )\n public\n auth\n returns (bytes32 releaseId)\n {\n require(address(packageDb) != 0x0, \"escape:PackageIndex:package-db-not-set\");\n require(address(releaseDb) != 0x0, \"escape:PackageIndex:release-db-not-set\");\n require(address(releaseValidator) != 0x0, \"escape:PackageIndex:release-validator-not-set\");\n\n bytes32 versionHash = releaseDb.hashVersion(version);\n\n // If the version for this release is not in the version database, populate\n // it. This must happen prior to validation to ensure that the version is\n // present in the releaseDb.\n if (!releaseDb.versionExists(versionHash)) {\n releaseDb.setVersion(version);\n }\n\n // Run release validator. This method reverts with an error message string\n // on failure.\n releaseValidator.validateRelease(\n packageDb,\n releaseDb,\n msg.sender,\n packageName,\n version,\n manifestURI\n );\n\n // Compute hashes\n bool _packageExists = packageExists(packageName);\n\n // Both creates the package if it is new as well as updating the updatedAt\n // timestamp on the package.\n packageDb.setPackage(packageName);\n\n bytes32 nameHash = packageDb.hashName(packageName);\n\n // If the package does not yet exist create it and set the owner\n if (!_packageExists) {\n packageDb.setPackageOwner(nameHash, msg.sender);\n }\n\n // Create the release and add it to the list of package release hashes.\n releaseDb.setRelease(nameHash, versionHash, manifestURI);\n\n // Log the release.\n releaseId = releaseDb.hashRelease(nameHash, versionHash);\n emit VersionRelease(packageName, version, manifestURI);\n\n return releaseId;\n }\n\n /// @dev Transfers package ownership to the provider new owner address.\n /// @notice Will transfer ownership of this package to the provided new owner address.\n /// @param name Package name\n /// @param newPackageOwner The address of the new owner.\n function transferPackageOwner(string name, address newPackageOwner)\n public\n auth\n returns (bool)\n {\n if (isPackageOwner(name, msg.sender)) {\n // Only the package owner may transfer package ownership.\n return false;\n }\n\n // Lookup the current owner\n address packageOwner;\n (packageOwner,,,) = getPackageData(name);\n\n // Log the transfer\n emit PackageTransfer(packageOwner, newPackageOwner);\n\n // Update the owner.\n packageDb.setPackageOwner(packageDb.hashName(name), newPackageOwner);\n\n return true;\n }\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Returns the address of the packageDb\n function getPackageDb()\n public\n view\n returns (address)\n {\n return address(packageDb);\n }\n\n /// @dev Returns the address of the releaseDb\n function getReleaseDb()\n public\n view\n returns (address)\n {\n return address(releaseDb);\n }\n\n /// @dev Returns the address of the releaseValidator\n function getReleaseValidator()\n public\n view\n returns (address)\n {\n return address(releaseValidator);\n }\n\n /// @dev Query the existence of a package with the given name. Returns boolean indicating whether the package exists.\n /// @param name Package name\n function packageExists(string name)\n public\n view\n returns (bool)\n {\n return packageDb.packageExists(packageDb.hashName(name));\n }\n\n /// @dev Query the existence of a release at the provided version for the named package. Returns boolean indicating whether such a release exists.\n /// @param name Package name\n /// @param version Version string (ex: '1.0.0')\n function releaseExists(\n string name,\n string version\n )\n public\n view\n returns (bool)\n {\n bytes32 nameHash = packageDb.hashName(name);\n bytes32 versionHash = releaseDb.hashVersion(version);\n return releaseDb.releaseExists(releaseDb.hashRelease(nameHash, versionHash));\n }\n\n /// @dev Returns a slice of the array of all package hashes for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns(\n bytes32[] packageIds,\n uint pointer\n )\n {\n return packageDb.getAllPackageIds(offset, limit);\n }\n\n /// @dev Retrieves the name for the given name hash.\n /// @param packageId The name hash of package to lookup the name for.\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string packageName)\n {\n return packageDb.getPackageName(packageId);\n }\n\n /// @dev Returns the package data.\n /// @param name Package name\n function getPackageData(string name)\n public\n view\n returns (\n address packageOwner,\n uint createdAt,\n uint numReleases,\n uint updatedAt\n )\n {\n bytes32 nameHash = packageDb.hashName(name);\n (packageOwner, createdAt, updatedAt) = packageDb.getPackageData(nameHash);\n numReleases = releaseDb.getNumReleasesForNameHash(nameHash);\n return (packageOwner, createdAt, numReleases, updatedAt);\n }\n\n /// @dev Returns the release data for the release associated with the given release hash.\n /// @param releaseId The release hash.\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string packageName,\n string version,\n string manifestURI\n )\n {\n bytes32 versionHash;\n bytes32 nameHash;\n (nameHash,versionHash, ,) = releaseDb.getReleaseData(releaseId);\n\n packageName = packageDb.getPackageName(nameHash);\n version = releaseDb.getVersion(versionHash);\n manifestURI = releaseDb.getManifestURI(releaseId);\n\n return (packageName, version, manifestURI);\n }\n\n /// @dev Returns a slice of the array of all package hashes for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string packageName, uint offset, uint limit)\n public\n view\n returns (\n bytes32[] releaseIds,\n uint pointer\n )\n {\n bytes32 nameHash = packageDb.hashName(packageName);\n return releaseDb.getAllReleaseIds(nameHash, offset, limit);\n }\n\n /// @dev Returns release id that *would* be generated for a name and version pair on `release`.\n /// @param packageName Package name\n /// @param version Version string (ex: '1.0.0')\n function generateReleaseId(string packageName, string version)\n public\n view\n returns (bytes32 releaseId)\n {\n bytes32 nameHash = packageDb.hashName(packageName);\n bytes32 versionHash = releaseDb.hashVersion(version);\n return keccak256(abi.encodePacked(nameHash, versionHash));\n }\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string packageName, string version)\n public\n view\n returns (bytes32 releaseId)\n {\n releaseId = generateReleaseId(packageName, version);\n bool _releaseExists = releaseDb.releaseExists(releaseId);\n if (!_releaseExists) {\n return 0;\n }\n return releaseId;\n }\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds()\n public\n view\n returns (uint totalCount)\n {\n return packageDb.getNumPackages();\n }\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string packageName)\n public\n view\n returns (uint totalCount)\n {\n bool _packageExists = packageExists(packageName);\n if (!_packageExists) {\n return 0;\n }\n bytes32 nameHash = packageDb.hashName(packageName);\n return releaseDb.getNumReleasesForNameHash(nameHash);\n }\n\n //\n // +----------------+\n // | Internal API |\n // +----------------+\n //\n /// @dev Returns boolean whether the provided address is the package owner\n /// @param name The name of the package\n /// @param _address The address to check\n function isPackageOwner(string name, address _address)\n internal\n view\n returns (bool)\n {\n address packageOwner;\n (packageOwner,,,) = getPackageData(name);\n return (packageOwner != _address);\n }\n}","installPath":"./PackageRegistry.sol","type":"solidity"},"./PackageRegistryInterface.sol":{"content":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n\n/// @title EIP 1319 Smart Contract Package Registry Interface\n/// @author Piper Merriam , Christopher Gewecke \ncontract PackageRegistryInterface {\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n\n /// @dev Creates a a new release for the named package.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: 1.0.0)\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string packageName,\n string version,\n string manifestURI\n )\n public\n returns (bytes32 releaseId);\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Returns the string name of the package associated with a package id\n /// @param packageId The package id to look up\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string packageName);\n\n /// @dev Returns a slice of the array of all package ids for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns (\n bytes32[] packageIds,\n uint pointer\n );\n\n /// @dev Returns a slice of the array of all release hashes for the named package.\n /// @param packageName Package name\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string packageName, uint offset, uint limit)\n public\n view\n returns (\n bytes32[] releaseIds,\n uint pointer\n );\n\n /// @dev Returns the package data for a release.\n /// @param releaseId Release id\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string packageName,\n string version,\n string manifestURI\n );\n\n // @dev Returns release id that *would* be generated for a name and version pair on `release`.\n // @param packageName Package name\n // @param version Version string (ex: '1.0.0')\n function generateReleaseId(string packageName, string version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string packageName, string version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds() public view returns (uint totalCount);\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string packageName) public view returns (uint totalCount);\n}","installPath":"./PackageRegistryInterface.sol","type":"solidity"},"./ReleaseDB.sol":{"content":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\n\nimport {IndexedOrderedSetLib} from \"./IndexedOrderedSetLib.sol\";\nimport {Authorized} from \"./Authority.sol\";\n\n\n/// @title Database contract for a package index.\n/// @author Tim Coulter , Piper Merriam \ncontract ReleaseDB is Authorized {\n using IndexedOrderedSetLib for IndexedOrderedSetLib.IndexedOrderedSet;\n\n struct Release {\n bool exists;\n uint createdAt;\n uint updatedAt;\n bytes32 nameHash;\n bytes32 versionHash;\n string manifestURI;\n }\n\n // Release Data: (releaseId => value)\n mapping (bytes32 => Release) _recordedReleases;\n mapping (bytes32 => bool) _removedReleases;\n IndexedOrderedSetLib.IndexedOrderedSet _allReleaseIds;\n mapping (bytes32 => IndexedOrderedSetLib.IndexedOrderedSet) _releaseIdsByNameHash;\n\n // Version Data: (versionHash => value)\n mapping (bytes32 => string) _recordedVersions;\n mapping (bytes32 => bool) _versionExists;\n\n // Events\n event ReleaseCreate(bytes32 indexed releaseId);\n event ReleaseUpdate(bytes32 indexed releaseId);\n event ReleaseDelete(bytes32 indexed releaseId, string reason);\n\n /*\n * Modifiers\n */\n modifier onlyIfVersionExists(bytes32 versionHash) {\n require(versionExists(versionHash), \"escape:ReleaseDB:version-not-found\");\n _;\n }\n\n modifier onlyIfReleaseExists(bytes32 releaseId) {\n require(releaseExists(releaseId), \"escape:ReleaseDB:release-not-found\");\n _;\n }\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n\n /// @dev Creates or updates a release for a package. Returns success.\n /// @param nameHash The name hash of the package.\n /// @param versionHash The version hash for the release version.\n /// @param manifestURI The URI for the release manifest for this release.\n function setRelease(\n bytes32 nameHash,\n bytes32 versionHash,\n string manifestURI\n )\n public\n auth\n returns (bool)\n {\n bytes32 releaseId = hashRelease(nameHash, versionHash);\n\n Release storage release = _recordedReleases[releaseId];\n\n // If this is a new version push it onto the array of version hashes for\n // this package.\n if (release.exists) {\n emit ReleaseUpdate(releaseId);\n } else {\n // Populate the basic release data.\n release.exists = true;\n release.createdAt = block.timestamp; // solium-disable-line security/no-block-members\n release.nameHash = nameHash;\n release.versionHash = versionHash;\n\n // Push the release hash into the array of all release hashes.\n _allReleaseIds.add(releaseId);\n _releaseIdsByNameHash[nameHash].add(releaseId);\n\n emit ReleaseCreate(releaseId);\n }\n\n // Record the last time the release was updated.\n release.updatedAt = block.timestamp; // solium-disable-line security/no-block-members\n\n // Save the release manifest URI\n release.manifestURI = manifestURI;\n\n return true;\n }\n\n /// @dev Removes a release from a package. Returns success.\n /// @param releaseId The release hash to be removed\n /// @param reason Explanation for why the removal happened.\n function removeRelease(bytes32 releaseId, string reason)\n public\n auth\n onlyIfReleaseExists(releaseId)\n returns (bool)\n {\n bytes32 nameHash;\n bytes32 versionHash;\n\n (nameHash, versionHash,,) = getReleaseData(releaseId);\n\n // Zero out the release data.\n delete _recordedReleases[releaseId];\n delete _recordedVersions[versionHash];\n\n // Remove the release hash from the list of all release hashes\n _allReleaseIds.remove(releaseId);\n _releaseIdsByNameHash[nameHash].remove(releaseId);\n\n // Add the release hash to the map of removed releases\n _removedReleases[releaseId] = true;\n\n // Log the removal.\n emit ReleaseDelete(releaseId, reason);\n\n return true;\n }\n\n\n /// @dev Adds the given version to the local version database. Returns the versionHash for the provided version.\n /// @param version Version string (ex: '1.0.0')\n function setVersion(string version)\n public\n auth\n returns (bytes32)\n {\n bytes32 versionHash = hashVersion(version);\n\n if (!_versionExists[versionHash]) {\n _recordedVersions[versionHash] = version;\n _versionExists[versionHash] = true;\n }\n return versionHash;\n }\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Returns a slice of the array of all releases hashes for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(bytes32 nameHash, uint _offset, uint limit)\n public\n view\n returns (\n bytes32[] releaseIds,\n uint offset\n )\n {\n bytes32[] memory hashes; // Release ids to return\n uint cursor = _offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n uint totalReleases = getNumReleasesForNameHash(nameHash); // Total number of packages in registry\n\n // Is request within range?\n if (cursor < totalReleases){\n\n // Get total remaining records\n remaining = totalReleases - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records. (IndexedOrderedSet manages deletions.)\n while(remaining > 0){\n bytes32 hash = getReleaseIdForNameHash(nameHash, cursor);\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n /// @dev Get the total number of releases\n /// @param nameHash the name hash to lookup.\n function getNumReleasesForNameHash(bytes32 nameHash)\n public\n view\n returns (uint)\n {\n return _releaseIdsByNameHash[nameHash].size();\n }\n\n /// @dev Release hash for a Package at a given index\n /// @param nameHash the name hash to lookup.\n /// @param idx The index of the release hash to retrieve.\n function getReleaseIdForNameHash(bytes32 nameHash, uint idx)\n public\n view\n returns (bytes32)\n {\n return _releaseIdsByNameHash[nameHash].get(idx);\n }\n\n /// @dev Query the existence of a release at the provided version for a package. Returns boolean indicating whether such a release exists.\n /// @param releaseId The release hash to query.\n function releaseExists(bytes32 releaseId)\n public\n view\n returns (bool)\n {\n return _recordedReleases[releaseId].exists;\n }\n\n /// @dev Query the past existence of a release at the provided version for a package. Returns boolean indicating whether such a release ever existed.\n /// @param releaseHash The release hash to query.\n function releaseExisted(bytes32 releaseHash)\n public\n view\n returns (bool)\n {\n return _removedReleases[releaseHash];\n }\n\n /// @dev Query the existence of the provided version in the recorded versions. Returns boolean indicating whether such a version exists.\n /// @param versionHash the version hash to check.\n function versionExists(bytes32 versionHash)\n public\n view\n returns (bool)\n {\n return _versionExists[versionHash];\n }\n\n /// @dev Returns the releaseData for the given release has a package.\n /// @param releaseId The release hash.\n function getReleaseData(bytes32 releaseId)\n public\n view\n onlyIfReleaseExists(releaseId)\n returns (\n bytes32 nameHash,\n bytes32 versionHash,\n uint createdAt,\n uint updatedAt\n )\n {\n Release storage release = _recordedReleases[releaseId];\n return (release.nameHash, release.versionHash, release.createdAt, release.updatedAt);\n }\n\n /// @dev Returns string version identifier from the version of the given release hash.\n /// @param versionHash the version hash\n function getVersion(bytes32 versionHash)\n public\n view\n onlyIfVersionExists(versionHash)\n returns (string)\n {\n return _recordedVersions[versionHash];\n }\n\n /// @dev Returns the URI of the release manifest for the given release hash.\n /// @param releaseId Release hash\n function getManifestURI(bytes32 releaseId)\n public\n view\n onlyIfReleaseExists(releaseId)\n returns (string)\n {\n return _recordedReleases[releaseId].manifestURI;\n }\n\n /*\n * Hash Functions\n */\n /// @dev Returns version hash for the given semver version.\n /// @param version Version string\n function hashVersion(string version)\n public\n pure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(version));\n }\n\n /// @dev Returns release hash for the given release\n /// @param nameHash The name hash of the package name.\n /// @param versionHash The version hash for the release version.\n function hashRelease(bytes32 nameHash, bytes32 versionHash)\n public\n pure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(nameHash, versionHash));\n }\n}","installPath":"./ReleaseDB.sol","type":"solidity"},"./ReleaseValidator.sol":{"content":"pragma solidity ^0.4.24;\npragma experimental \"v0.5.0\";\n\nimport {PackageDB} from \"./PackageDB.sol\";\nimport {ReleaseDB} from \"./ReleaseDB.sol\";\n\n/// @title Database contract for a package index.\n/// @author Piper Merriam \ncontract ReleaseValidator {\n /// @dev Runs validation on all of the data needed for releasing a package. Returns success.\n /// @param packageDb The address of the PackageDB\n /// @param releaseDb The address of the ReleaseDB\n /// @param callerAddress The address which is attempting to create the release.\n /// @param name The name of the package.\n /// @param version The version string of the package (ex: `1.0.0`)\n /// @param manifestURI The URI of the release manifest.\n function validateRelease(\n PackageDB packageDb,\n ReleaseDB releaseDb,\n address callerAddress,\n string name,\n string version,\n string manifestURI\n )\n public\n view\n returns (bool)\n {\n if (address(packageDb) == 0x0){\n // packageDb address is null\n revert(\"escape:ReleaseValidator:package-db-not-set\");\n } else if (address(releaseDb) == 0x0){\n // releaseDb address is null\n revert(\"escape:ReleaseValidator:release-db-not-set\");\n } else if (!validateAuthorization(packageDb, callerAddress, name)) {\n // package exists and msg.sender is not the owner not the package owner.\n revert(\"escape:ReleaseValidator:caller-not-authorized\");\n } else if (!validateIsNewRelease(packageDb, releaseDb, name, version)) {\n // this version has already been released.\n revert(\"escape:ReleaseValidator:version-previously-published\");\n } else if (!validatePackageName(packageDb, name)) {\n // invalid package name.\n revert(\"escape:ReleaseValidator:invalid-package-name\");\n } else if (!validateStringIdentifier(manifestURI)) {\n // disallow empty release manifest URI\n revert(\"escape:ReleaseValidator:invalid-manifest-uri\");\n } else if (!validateStringIdentifier(version)) {\n // disallow version 0.0.0\n revert(\"escape:ReleaseValidator:invalid-release-version\");\n }\n return true;\n }\n\n /// @dev Validate whether the callerAddress is authorized to make this release.\n /// @param packageDb The address of the PackageDB\n /// @param callerAddress The address which is attempting to create the release.\n /// @param name The name of the package.\n function validateAuthorization(\n PackageDB packageDb,\n address callerAddress,\n string name\n )\n public\n view\n returns (bool)\n {\n bytes32 nameHash = packageDb.hashName(name);\n if (!packageDb.packageExists(nameHash)) {\n return true;\n }\n address packageOwner;\n\n (packageOwner,,) = packageDb.getPackageData(nameHash);\n\n if (packageOwner == callerAddress) {\n return true;\n }\n return false;\n }\n\n /// @dev Validate that the version being released has not already been released.\n /// @param packageDb The address of the PackageDB\n /// @param releaseDb The address of the ReleaseDB\n /// @param name The name of the package.\n /// @param version The version string for the release\n function validateIsNewRelease(\n PackageDB packageDb,\n ReleaseDB releaseDb,\n string name,\n string version\n )\n public\n view\n returns (bool)\n {\n bytes32 nameHash = packageDb.hashName(name);\n bytes32 versionHash = releaseDb.hashVersion(version);\n bytes32 releaseHash = releaseDb.hashRelease(nameHash, versionHash);\n return !releaseDb.releaseExists(releaseHash) && !releaseDb.releaseExisted(releaseHash);\n }\n\n uint constant DIGIT_0 = uint(bytes1(\"0\"));\n uint constant DIGIT_9 = uint(bytes1(\"9\"));\n uint constant LETTER_a = uint(bytes1(\"a\"));\n uint constant LETTER_z = uint(bytes1(\"z\"));\n bytes1 constant DASH = bytes1(\"-\");\n\n /// @dev Returns boolean whether the provided package name is valid.\n /// @param packageDb The address of the PackageDB\n /// @param name The name of the package.\n function validatePackageName(PackageDB packageDb, string name)\n public\n view\n returns (bool)\n {\n bytes32 nameHash = packageDb.hashName(name);\n\n if (packageDb.packageExists(nameHash)) {\n // existing names are always valid.\n return true;\n }\n\n if (bytes(name).length < 2 || bytes(name).length > 255) {\n return false;\n }\n for (uint i = 0; i < bytes(name).length; i++) {\n if (bytes(name)[i] == DASH && i > 0) {\n continue;\n } else if (i > 0 && uint(bytes(name)[i]) >= DIGIT_0 && uint(bytes(name)[i]) <= DIGIT_9) {\n continue;\n } else if (uint(bytes(name)[i]) >= LETTER_a && uint(bytes(name)[i]) <= LETTER_z) {\n continue;\n } else {\n return false;\n }\n }\n return true;\n }\n\n /// @dev Returns boolean whether the input string has a length\n /// @param value The string to validate.\n function validateStringIdentifier(string value)\n public\n pure\n returns (bool)\n {\n if (bytes(value).length == 0) {\n return false;\n }\n return true;\n }\n}","installPath":"./ReleaseValidator.sol","type":"solidity"}},"version":"2.0.0"} diff --git a/ethpm/assets/safe-math-lib/1.0.0-pretty.json b/ethpm/assets/safe-math-lib/1.0.0-pretty.json deleted file mode 100644 index 55d8d269b5..0000000000 --- a/ethpm/assets/safe-math-lib/1.0.0-pretty.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "manifest_version": "2", - "version": "1.0.0", - "package_name": "safe-math-lib", - "sources": { - "./contracts/SafeMathLib.sol": "ipfs://QmNQeuwMDGJ7UiLaRjwzAoekcaKLp9TjiqeFdovj3syN1n" - }, - "contract_types": { - "SafeMathLib": { - "deployment_bytecode": { - "bytecode": "0x610145610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f3007300000000000000000000000000000000000000003014608060405260043610610063576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a293d1e814610068578063e6cb9013146100a6575b600080fd5b61009060048036038101908080359060200190929190803590602001909291905050506100e4565b6040518082815260200191505060405180910390f35b6100ce60048036038101908080359060200190929190803590602001909291905050506100fd565b6040518082815260200191505060405180910390f35b60008282111515156100f257fe5b818303905092915050565b6000818301905082811015151561011057fe5b809050929150505600a165627a7a72305820ac19b530c9fab4716b26d7706467f9a30d5542de1ac898dc56c67ff65ebe9bd50029" - }, - "runtime_bytecode": { - "bytecode": "0x73a66a05d6ab5c1c955f4d2c3fcc166ae6300b452b3014608060405260043610610063576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a293d1e814610068578063e6cb9013146100a6575b600080fd5b61009060048036038101908080359060200190929190803590602001909291905050506100e4565b6040518082815260200191505060405180910390f35b6100ce60048036038101908080359060200190929190803590602001909291905050506100fd565b6040518082815260200191505060405180910390f35b60008282111515156100f257fe5b818303905092915050565b6000818301905082811015151561011057fe5b809050929150505600a165627a7a72305820ac19b530c9fab4716b26d7706467f9a30d5542de1ac898dc56c67ff65ebe9bd50029" - }, - "abi": [ - { - "constant": true, - "inputs": [ - {"name": "a","type": "uint256"}, - {"name": "b","type": "uint256"} - ], - "name": "safeSub", - "outputs": [ - {"name": "","type": "uint256"} - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - {"name": "a","type": "uint256"}, - {"name": "b","type": "uint256"} - ], - "name": "safeAdd", - "outputs": [ - {"name": "c","type": "uint256"} - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - } - ], - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang", - "settings": { - "optimize": false - } - }, - "natspec": { - "author": "Piper Merriam ", - "methods": { - "safeAdd(uint256,uint256)": { - "details": "Adds a and b, throwing an error if the operation would cause an overflow.", - "params": { - "a": "The first number to add", - "b": "The second number to add" - } - }, - "safeSub(uint256,uint256)": { - "details": "Subtracts b from a, throwing an error if the operation would cause an underflow.", - "params": { - "a": "The number to be subtracted from", - "b": "The amount that should be subtracted" - } - } - }, - "title": "Safe Math Library" - } - } - }, - "deployments": { - "blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/cf1fe2fc56f116e30ee6f6de77c1bfe9304231414fa8c7e0c98075e93f618368": { - "SafeMathLib": { - "contract_type": "SafeMathLib", - "address": "0xa66A05D6AB5c1c955F4D2c3FCC166AE6300b452B", - "transaction": "0x7ee011d3e2e5aef3be0ab5853666aa8e0427bcb19b3da6411c90768090bc5517", - "block": "0xe11241bf8d2862026db775ee3e9c85cc2ae99ea8938b795d77d9f2f277271b2a" - } - } - } -} diff --git a/ethpm/assets/safe-math-lib/1.0.0.json b/ethpm/assets/safe-math-lib/1.0.0.json deleted file mode 100644 index 6f864a7aaa..0000000000 --- a/ethpm/assets/safe-math-lib/1.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"SafeMathLib":{"abi":[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeSub","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeAdd","outputs":[{"name":"c","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.4.24+commit.e67f0147.Emscripten.clang"},"deployment_bytecode":{"bytecode":"0x610145610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f3007300000000000000000000000000000000000000003014608060405260043610610063576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a293d1e814610068578063e6cb9013146100a6575b600080fd5b61009060048036038101908080359060200190929190803590602001909291905050506100e4565b6040518082815260200191505060405180910390f35b6100ce60048036038101908080359060200190929190803590602001909291905050506100fd565b6040518082815260200191505060405180910390f35b60008282111515156100f257fe5b818303905092915050565b6000818301905082811015151561011057fe5b809050929150505600a165627a7a72305820ac19b530c9fab4716b26d7706467f9a30d5542de1ac898dc56c67ff65ebe9bd50029"},"natspec":{"author":"Piper Merriam ","methods":{"safeAdd(uint256,uint256)":{"details":"Adds a and b, throwing an error if the operation would cause an overflow.","params":{"a":"The first number to add","b":"The second number to add"}},"safeSub(uint256,uint256)":{"details":"Subtracts b from a, throwing an error if the operation would cause an underflow.","params":{"a":"The number to be subtracted from","b":"The amount that should be subtracted"}}},"title":"Safe Math Library"},"runtime_bytecode":{"bytecode":"0x73a66a05d6ab5c1c955f4d2c3fcc166ae6300b452b3014608060405260043610610063576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a293d1e814610068578063e6cb9013146100a6575b600080fd5b61009060048036038101908080359060200190929190803590602001909291905050506100e4565b6040518082815260200191505060405180910390f35b6100ce60048036038101908080359060200190929190803590602001909291905050506100fd565b6040518082815260200191505060405180910390f35b60008282111515156100f257fe5b818303905092915050565b6000818301905082811015151561011057fe5b809050929150505600a165627a7a72305820ac19b530c9fab4716b26d7706467f9a30d5542de1ac898dc56c67ff65ebe9bd50029"}}},"deployments":{"blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/cf1fe2fc56f116e30ee6f6de77c1bfe9304231414fa8c7e0c98075e93f618368":{"SafeMathLib":{"address":"0xa66A05D6AB5c1c955F4D2c3FCC166AE6300b452B","block":"0xe11241bf8d2862026db775ee3e9c85cc2ae99ea8938b795d77d9f2f277271b2a","contract_type":"SafeMathLib","transaction":"0x7ee011d3e2e5aef3be0ab5853666aa8e0427bcb19b3da6411c90768090bc5517"}}},"manifest_version":"2","package_name":"safe-math-lib","sources":{"./contracts/SafeMathLib.sol":"ipfs://QmNQeuwMDGJ7UiLaRjwzAoekcaKLp9TjiqeFdovj3syN1n"},"version":"1.0.0"} \ No newline at end of file diff --git a/ethpm/assets/safe-math-lib/1.0.1.json b/ethpm/assets/safe-math-lib/1.0.1.json deleted file mode 100644 index c14a610080..0000000000 --- a/ethpm/assets/safe-math-lib/1.0.1.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"SafeMathLib":{"abi":[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeSub","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeAdd","outputs":[{"name":"c","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}],"deployment_bytecode":{"bytecode":"0x610145610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f3007300000000000000000000000000000000000000003014608060405260043610610063576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a293d1e814610068578063e6cb9013146100a6575b600080fd5b61009060048036038101908080359060200190929190803590602001909291905050506100e4565b6040518082815260200191505060405180910390f35b6100ce60048036038101908080359060200190929190803590602001909291905050506100fd565b6040518082815260200191505060405180910390f35b60008282111515156100f257fe5b818303905092915050565b6000818301905082811015151561011057fe5b809050929150505600a165627a7a723058208ed58612a9253fc5a42bbc1db7cd34115c2012ec52b0c6dab50d3c1e77d23d6f0029"}}},"manifest_version":"2","package_name":"safe-math-lib","sources":{"SafeMathLib.sol":"ipfs://QmNQeuwMDGJ7UiLaRjwzAoekcaKLp9TjiqeFdovj3syN1n"},"version":"1.0.1"} \ No newline at end of file diff --git a/ethpm/assets/safe-math-lib/v3-strict-no-deployments.json b/ethpm/assets/safe-math-lib/v3-strict-no-deployments.json new file mode 100644 index 0000000000..3c5ac344d1 --- /dev/null +++ b/ethpm/assets/safe-math-lib/v3-strict-no-deployments.json @@ -0,0 +1 @@ +{"compilers":[{"contractTypes":["SafeMathLib"],"name":"solc","settings":{"optimize":false},"version":"0.4.24+commit.e67f0147.Emscripten.clang"}],"contractTypes":{"SafeMathLib":{"abi":[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeSub","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeAdd","outputs":[{"name":"c","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}],"deploymentBytecode":{"bytecode":"0x610145610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f3007300000000000000000000000000000000000000003014608060405260043610610063576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a293d1e814610068578063e6cb9013146100a6575b600080fd5b61009060048036038101908080359060200190929190803590602001909291905050506100e4565b6040518082815260200191505060405180910390f35b6100ce60048036038101908080359060200190929190803590602001909291905050506100fd565b6040518082815260200191505060405180910390f35b60008282111515156100f257fe5b818303905092915050565b6000818301905082811015151561011057fe5b809050929150505600a165627a7a72305820ac19b530c9fab4716b26d7706467f9a30d5542de1ac898dc56c67ff65ebe9bd50029"},"devdoc":{"author":"Piper Merriam ","methods":{"safeAdd(uint256,uint256)":{"details":"Adds a and b, throwing an error if the operation would cause an overflow.","params":{"a":"The first number to add","b":"The second number to add"}},"safeSub(uint256,uint256)":{"details":"Subtracts b from a, throwing an error if the operation would cause an underflow.","params":{"a":"The number to be subtracted from","b":"The amount that should be subtracted"}}},"title":"Safe Math Library"},"runtimeBytecode":{"bytecode":"0x73a66a05d6ab5c1c955f4d2c3fcc166ae6300b452b3014608060405260043610610063576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a293d1e814610068578063e6cb9013146100a6575b600080fd5b61009060048036038101908080359060200190929190803590602001909291905050506100e4565b6040518082815260200191505060405180910390f35b6100ce60048036038101908080359060200190929190803590602001909291905050506100fd565b6040518082815260200191505060405180910390f35b60008282111515156100f257fe5b818303905092915050565b6000818301905082811015151561011057fe5b809050929150505600a165627a7a72305820ac19b530c9fab4716b26d7706467f9a30d5542de1ac898dc56c67ff65ebe9bd50029"},"sourceId":"contracts/SafeMathLib.sol"}},"manifest":"ethpm/3","name":"safe-math-lib","sources":{"contracts/SafeMathLib.sol":{"installPath":"./contracts/SafeMathLib.sol","type":"solidity","urls":["ipfs://QmNQeuwMDGJ7UiLaRjwzAoekcaKLp9TjiqeFdovj3syN1n"]}},"version":"1.0.0"} diff --git a/ethpm/assets/simple-registry/2.0.0a1.json b/ethpm/assets/simple-registry/2.0.0a1.json deleted file mode 100644 index 3d0a43d71c..0000000000 --- a/ethpm/assets/simple-registry/2.0.0a1.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"Ownable":{"abi":[{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.5.10+commit.5a6ea5b1"},"deployment_bytecode":{"bytecode":"0x"},"natspec":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","methods":{"constructor":{"details":"Initializes the contract setting the deployer as the initial owner."},"isOwner()":{"details":"Returns true if the caller is the current owner."},"owner()":{"details":"Returns the address of the current owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}}},"runtime_bytecode":{"bytecode":"0x"}},"PackageRegistry":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"packages","outputs":[{"name":"exists","type":"bool"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"},{"name":"releaseCount","type":"uint256"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"value","type":"string"}],"name":"validateStringIdentifier","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"validatePackageName","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"generatePackageId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"releaseCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"packageCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"releases","outputs":[{"name":"exists","type":"bool"},{"name":"createdAt","type":"uint256"},{"name":"packageId","type":"bytes32"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"packageName","type":"string"},{"indexed":false,"name":"version","type":"string"},{"indexed":false,"name":"manifestURI","type":"string"}],"name":"VersionRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.5.10+commit.5a6ea5b1"},"deployment_bytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3612a21806100cf6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063938b056e116100b8578063c999a3b21161007c578063c999a3b214610d76578063eb8cc47c14610ea1578063ee0ebe0c14610f70578063efae87d714610f8e578063f2fde38b146110f8578063f491a84c1461113c57610137565b8063938b056e14610a32578063a54fb68514610b05578063abe827f214610b23578063b4b42e3514610bf2578063b8d08db214610d5857610137565b806371102819116100ff578063711028191461075957806382ee976f1461082057806383ea0620146108f35780638da5cb5b146109c65780638f32d59b14610a1057610137565b806306fe1fd71461013c5780631fb1c6c0146101e3578063379037dc1461034957806343212cf1146105465780634c4aea87146105da575b600080fd5b6101686004803603602081101561015257600080fd5b8101908080359060200190929190505050611268565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a857808201518184015260208101905061018d565b50505050905090810190601f1680156101d55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610333600480360360408110156101f957600080fd5b810190808035906020019064010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156102ad57600080fd5b8201836020820111156102bf57600080fd5b803590602001918460018302840111640100000000831117156102e157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113f8565b6040518082815260200191505060405180910390f35b6105306004803603606081101561035f57600080fd5b810190808035906020019064010000000081111561037c57600080fd5b82018360208201111561038e57600080fd5b803590602001918460018302840111640100000000831117156103b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561041357600080fd5b82018360208201111561042557600080fd5b8035906020019184600183028401116401000000008311171561044757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104aa57600080fd5b8201836020820111156104bc57600080fd5b803590602001918460018302840111640100000000831117156104de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611509565b6040518082815260200191505060405180910390f35b61057c6004803603604081101561055c57600080fd5b81019080803590602001909291908035906020019092919050505061169a565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105c55780820151818401526020810190506105aa565b50505050905001935050505060405180910390f35b610606600480360360208110156105f057600080fd5b810190808035906020019092919050505061175c565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561064e578082015181840152602081019050610633565b50505050905090810190601f16801561067b5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106b4578082015181840152602081019050610699565b50505050905090810190601f1680156106e15780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561071a5780820151818401526020810190506106ff565b50505050905090810190601f1680156107475780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6107856004803603602081101561076f57600080fd5b8101908080359060200190929190505050611a2a565b604051808615151515815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107e15780820151818401526020810190506107c6565b50505050905090810190601f16801561080e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6108d96004803603602081101561083657600080fd5b810190808035906020019064010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b05565b604051808215151515815260200191505060405180910390f35b6109ac6004803603602081101561090957600080fd5b810190808035906020019064010000000081111561092657600080fd5b82018360208201111561093857600080fd5b8035906020019184600183028401116401000000008311171561095a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b83565b604051808215151515815260200191505060405180910390f35b6109ce611bbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a18611be6565b604051808215151515815260200191505060405180910390f35b610aeb60048036036020811015610a4857600080fd5b8101908080359060200190640100000000811115610a6557600080fd5b820183602082011115610a7757600080fd5b80359060200191846001830284011164010000000083111715610a9957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c3d565b604051808215151515815260200191505060405180910390f35b610b0d611cc8565b6040518082815260200191505060405180910390f35b610bdc60048036036020811015610b3957600080fd5b8101908080359060200190640100000000811115610b5657600080fd5b820183602082011115610b6857600080fd5b80359060200191846001830284011164010000000083111715610b8a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cd2565b6040518082815260200191505060405180910390f35b610d4260048036036040811015610c0857600080fd5b8101908080359060200190640100000000811115610c2557600080fd5b820183602082011115610c3757600080fd5b80359060200191846001830284011164010000000083111715610c5957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610cbc57600080fd5b820183602082011115610cce57600080fd5b80359060200191846001830284011164010000000083111715610cf057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4d565b6040518082815260200191505060405180910390f35b610d60611e1c565b6040518082815260200191505060405180910390f35b610e4360048036036060811015610d8c57600080fd5b8101908080359060200190640100000000811115610da957600080fd5b820183602082011115610dbb57600080fd5b80359060200191846001830284011164010000000083111715610ddd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050611e22565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e8c578082015181840152602081019050610e71565b50505050905001935050505060405180910390f35b610f5a60048036036020811015610eb757600080fd5b8101908080359060200190640100000000811115610ed457600080fd5b820183602082011115610ee657600080fd5b80359060200191846001830284011164010000000083111715610f0857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f9c565b6040518082815260200191505060405180910390f35b610f7861204d565b6040518082815260200191505060405180910390f35b6110de60048036036040811015610fa457600080fd5b8101908080359060200190640100000000811115610fc157600080fd5b820183602082011115610fd357600080fd5b80359060200191846001830284011164010000000083111715610ff557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561105857600080fd5b82018360208201111561106a57600080fd5b8035906020019184600183028401116401000000008311171561108c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612053565b604051808215151515815260200191505060405180910390f35b61113a6004803603602081101561110e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612113565b005b6111686004803603602081101561115257600080fd5b8101908080359060200190929190505050612199565b60405180861515151581526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111c25780820151818401526020810190506111a7565b50505050905090810190601f1680156111ef5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561122857808201518184015260208101905061120d565b50505050905090810190601f1680156112555780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6060611272612835565b600160008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113625780601f1061133757610100808354040283529160200191611362565b820191906000526020600020905b81548152906001019060200180831161134557829003601f168201915b50505050508152505090506001151581600001511515146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b8060800151915050919050565b60008261140481611b83565b611476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b83836114828282612053565b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6114fe8686611d4d565b935050505092915050565b6000611513611be6565b611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61158e84611c3d565b5061159883611b05565b506115a282611b05565b5060006115ae85611cd2565b905060006115bc8686611d4d565b90506000600160008481526020019081526020016000209050600015158160000160009054906101000a900460ff16151514156116765760018160000160006101000a81548160ff0219169083151502179055504281600101819055504281600201819055508681600401908051906020019061163a929190612866565b50600081600301819055508260046000600654815260200190815260200160002081905550600660008154809291906001019190505550611680565b4281600201819055505b61168d838389898961230c565b8193505050509392505050565b6060600060606000859050600060065482101561174c5781600654039050858111156116c4578590505b806040519080825280602002602001820160405280156116f35781602001602082028038833980820191505090505b5092505b600081111561174b576000600460008481526020019081526020016000205490508084600184038151811061172857fe5b6020026020010181815250508180600190039250508280600101935050506116f7565b5b8282945094505050509250929050565b60608060606117696128e6565b600260008681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201548152602001600382018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561184f5780601f106118245761010080835404028352916020019161184f565b820191906000526020600020905b81548152906001019060200180831161183257829003601f168201915b50505050508152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050815250509050611904612835565b60016000836040015181526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b505050505081525050905080608001518260600151836080015182925081915080905094509450945050509193909250565b60016020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003015490806004018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b5050505050905085565b60008082511415611b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f696e76616c69642d737472696e672d6964656e7469666965720000000000000081525060200191505060405180910390fd5b919050565b600080611b8f83611cd2565b90506001600082815260200190815260200160002060000160009054906101000a900460ff16915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600060028251118015611c51575060ff8251105b611cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e76616c69642d7061636b6167652d6e616d6500000000000000000000000081525060200191505060405180910390fd5b919050565b6000600654905090565b6000816040516020018082805190602001908083835b60208310611d0b5780518252602082019150602081019050602083039250611ce8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050919050565b600082826040516020018083805190602001908083835b60208310611d875780518252602082019150602081019050602083039250611d64565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310611dd85780518252602082019150602081019050602083039250611db5565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120905092915050565b60075481565b6060600084611e3081611b83565b611ea2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6000611ead87611cd2565b90506000600160008381526020019081526020016000209050606060008890506000808460030154905080831015611f8757828103915089821115611ef0578991505b81604051908082528060200260200182016040528015611f1f5781602001602082028038833980820191505090505b5093505b6000821115611f86576000611f3887856126b8565b905060006003600083815260200190815260200160002054905080866001860381518110611f6257fe5b60200260200101818152505083806001900394505084806001019550505050611f23565b5b83839850985050505050505050935093915050565b600081611fa881611b83565b61201a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b600061202584611cd2565b9050600060016000838152602001908152602001600020905080600301549350505050919050565b60065481565b60008261205f81611b83565b6120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b60006120dd8585611d4d565b905060006002600083815260200190815260200160002090508060000160009054906101000a900460ff16935050505092915050565b61211b611be6565b61218d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612196816126f1565b50565b60026020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b505050505090806004018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123025780601f106122d757610100808354040283529160200191612302565b820191906000526020600020905b8154815290600101906020018083116122e557829003601f168201915b5050505050905085565b6000600260008681526020019081526020016000209050600015158160000160009054906101000a900460ff161515146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d616c72656164792d6578697374730000000000000000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160020181905550828160030190805190602001906123f5929190612866565b508181600401908051906020019061240e929190612866565b5080600260008781526020019081526020016000206000820160009054906101000a900460ff168160000160006101000a81548160ff02191690831515021790555060018201548160010155600282015481600201556003820181600301908054600181600116156101000203166002900461248b92919061291a565b50600482018160040190805460018160011615610100020316600290046124b392919061291a565b5090505084600560006007548152602001908152602001600020819055506007600081548092919060010191905055506000600160008881526020019081526020016000209050600061250a8883600301546126b8565b905086600360008381526020019081526020016000208190555081600301600081548092919060010191905055507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c386868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156125a4578082015181840152602081019050612589565b50505050905090810190601f1680156125d15780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b8381101561260a5780820151818401526020810190506125ef565b50505050905090810190601f1680156126375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612670578082015181840152602081019050612655565b50505050905090810190601f16801561269d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a15050505050505050565b60008282604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129c76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060a00160405280600015158152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128a757805160ff19168380011785556128d5565b828001600101855582156128d5579182015b828111156128d45782518255916020019190600101906128b9565b5b5090506128e291906129a1565b5090565b6040518060a00160405280600015158152602001600081526020016000801916815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129535780548555612990565b8280016001018555821561299057600052602060002091601f016020900482015b8281111561298f578254825591600101919060010190612974565b5b50905061299d91906129a1565b5090565b6129c391905b808211156129bf5760008160009055506001016129a7565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a723058203303a3448bda11fd26ce9bcffb213dfc2b3f1a692632415c26340a9162d15e9c64736f6c634300050a0032"},"natspec":{"author":"Nick Gheorghita ","methods":{"generatePackageId(string)":{"details":"Returns name hash for a given package name.","params":{"name":"Package name"}},"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package ids for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all release hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice.","packageName":"Package name"}},"getPackageName(bytes32)":{"details":"Returns the string name of the package associated with a package id","params":{"packageId":"The package id to look up"}},"getReleaseData(bytes32)":{"details":"Returns the package data for a release.","params":{"releaseId":"Release id"}},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"isOwner()":{"details":"Returns true if the caller is the current owner."},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"owner()":{"details":"Returns the address of the current owner."},"packageExists(string)":{"details":"Returns a bool indicating whether the given package exists in this registry.","params":{"packageName":"Package Name"}},"release(string,string,string)":{"details":"Creates a new release for the named package. If this is the first release for the given package then this will also create and store the package. Returns releaseID if successful.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: '1.0.0')"}},"releaseExists(string,string)":{"details":"Returns a bool indicating whether the given release exists in this registry.","params":{"packageName":"Package Name","version":"version"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"validatePackageName(string)":{"details":"Returns boolean whether the provided package name is valid.","params":{"name":"The name of the package."}},"validateStringIdentifier(string)":{"details":"Returns boolean whether the input string has a length","params":{"value":"The string to validate."}}},"title":"Contract for an ERC1319 Registry, adapted from ethpm/escape-truffle"},"runtime_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063938b056e116100b8578063c999a3b21161007c578063c999a3b214610d76578063eb8cc47c14610ea1578063ee0ebe0c14610f70578063efae87d714610f8e578063f2fde38b146110f8578063f491a84c1461113c57610137565b8063938b056e14610a32578063a54fb68514610b05578063abe827f214610b23578063b4b42e3514610bf2578063b8d08db214610d5857610137565b806371102819116100ff578063711028191461075957806382ee976f1461082057806383ea0620146108f35780638da5cb5b146109c65780638f32d59b14610a1057610137565b806306fe1fd71461013c5780631fb1c6c0146101e3578063379037dc1461034957806343212cf1146105465780634c4aea87146105da575b600080fd5b6101686004803603602081101561015257600080fd5b8101908080359060200190929190505050611268565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a857808201518184015260208101905061018d565b50505050905090810190601f1680156101d55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610333600480360360408110156101f957600080fd5b810190808035906020019064010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156102ad57600080fd5b8201836020820111156102bf57600080fd5b803590602001918460018302840111640100000000831117156102e157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113f8565b6040518082815260200191505060405180910390f35b6105306004803603606081101561035f57600080fd5b810190808035906020019064010000000081111561037c57600080fd5b82018360208201111561038e57600080fd5b803590602001918460018302840111640100000000831117156103b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561041357600080fd5b82018360208201111561042557600080fd5b8035906020019184600183028401116401000000008311171561044757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104aa57600080fd5b8201836020820111156104bc57600080fd5b803590602001918460018302840111640100000000831117156104de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611509565b6040518082815260200191505060405180910390f35b61057c6004803603604081101561055c57600080fd5b81019080803590602001909291908035906020019092919050505061169a565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105c55780820151818401526020810190506105aa565b50505050905001935050505060405180910390f35b610606600480360360208110156105f057600080fd5b810190808035906020019092919050505061175c565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561064e578082015181840152602081019050610633565b50505050905090810190601f16801561067b5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106b4578082015181840152602081019050610699565b50505050905090810190601f1680156106e15780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561071a5780820151818401526020810190506106ff565b50505050905090810190601f1680156107475780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6107856004803603602081101561076f57600080fd5b8101908080359060200190929190505050611a2a565b604051808615151515815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107e15780820151818401526020810190506107c6565b50505050905090810190601f16801561080e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6108d96004803603602081101561083657600080fd5b810190808035906020019064010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b05565b604051808215151515815260200191505060405180910390f35b6109ac6004803603602081101561090957600080fd5b810190808035906020019064010000000081111561092657600080fd5b82018360208201111561093857600080fd5b8035906020019184600183028401116401000000008311171561095a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b83565b604051808215151515815260200191505060405180910390f35b6109ce611bbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a18611be6565b604051808215151515815260200191505060405180910390f35b610aeb60048036036020811015610a4857600080fd5b8101908080359060200190640100000000811115610a6557600080fd5b820183602082011115610a7757600080fd5b80359060200191846001830284011164010000000083111715610a9957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c3d565b604051808215151515815260200191505060405180910390f35b610b0d611cc8565b6040518082815260200191505060405180910390f35b610bdc60048036036020811015610b3957600080fd5b8101908080359060200190640100000000811115610b5657600080fd5b820183602082011115610b6857600080fd5b80359060200191846001830284011164010000000083111715610b8a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cd2565b6040518082815260200191505060405180910390f35b610d4260048036036040811015610c0857600080fd5b8101908080359060200190640100000000811115610c2557600080fd5b820183602082011115610c3757600080fd5b80359060200191846001830284011164010000000083111715610c5957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610cbc57600080fd5b820183602082011115610cce57600080fd5b80359060200191846001830284011164010000000083111715610cf057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4d565b6040518082815260200191505060405180910390f35b610d60611e1c565b6040518082815260200191505060405180910390f35b610e4360048036036060811015610d8c57600080fd5b8101908080359060200190640100000000811115610da957600080fd5b820183602082011115610dbb57600080fd5b80359060200191846001830284011164010000000083111715610ddd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050611e22565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e8c578082015181840152602081019050610e71565b50505050905001935050505060405180910390f35b610f5a60048036036020811015610eb757600080fd5b8101908080359060200190640100000000811115610ed457600080fd5b820183602082011115610ee657600080fd5b80359060200191846001830284011164010000000083111715610f0857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f9c565b6040518082815260200191505060405180910390f35b610f7861204d565b6040518082815260200191505060405180910390f35b6110de60048036036040811015610fa457600080fd5b8101908080359060200190640100000000811115610fc157600080fd5b820183602082011115610fd357600080fd5b80359060200191846001830284011164010000000083111715610ff557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561105857600080fd5b82018360208201111561106a57600080fd5b8035906020019184600183028401116401000000008311171561108c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612053565b604051808215151515815260200191505060405180910390f35b61113a6004803603602081101561110e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612113565b005b6111686004803603602081101561115257600080fd5b8101908080359060200190929190505050612199565b60405180861515151581526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111c25780820151818401526020810190506111a7565b50505050905090810190601f1680156111ef5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561122857808201518184015260208101905061120d565b50505050905090810190601f1680156112555780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6060611272612835565b600160008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113625780601f1061133757610100808354040283529160200191611362565b820191906000526020600020905b81548152906001019060200180831161134557829003601f168201915b50505050508152505090506001151581600001511515146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b8060800151915050919050565b60008261140481611b83565b611476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b83836114828282612053565b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6114fe8686611d4d565b935050505092915050565b6000611513611be6565b611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61158e84611c3d565b5061159883611b05565b506115a282611b05565b5060006115ae85611cd2565b905060006115bc8686611d4d565b90506000600160008481526020019081526020016000209050600015158160000160009054906101000a900460ff16151514156116765760018160000160006101000a81548160ff0219169083151502179055504281600101819055504281600201819055508681600401908051906020019061163a929190612866565b50600081600301819055508260046000600654815260200190815260200160002081905550600660008154809291906001019190505550611680565b4281600201819055505b61168d838389898961230c565b8193505050509392505050565b6060600060606000859050600060065482101561174c5781600654039050858111156116c4578590505b806040519080825280602002602001820160405280156116f35781602001602082028038833980820191505090505b5092505b600081111561174b576000600460008481526020019081526020016000205490508084600184038151811061172857fe5b6020026020010181815250508180600190039250508280600101935050506116f7565b5b8282945094505050509250929050565b60608060606117696128e6565b600260008681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201548152602001600382018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561184f5780601f106118245761010080835404028352916020019161184f565b820191906000526020600020905b81548152906001019060200180831161183257829003601f168201915b50505050508152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050815250509050611904612835565b60016000836040015181526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b505050505081525050905080608001518260600151836080015182925081915080905094509450945050509193909250565b60016020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003015490806004018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b5050505050905085565b60008082511415611b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f696e76616c69642d737472696e672d6964656e7469666965720000000000000081525060200191505060405180910390fd5b919050565b600080611b8f83611cd2565b90506001600082815260200190815260200160002060000160009054906101000a900460ff16915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600060028251118015611c51575060ff8251105b611cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e76616c69642d7061636b6167652d6e616d6500000000000000000000000081525060200191505060405180910390fd5b919050565b6000600654905090565b6000816040516020018082805190602001908083835b60208310611d0b5780518252602082019150602081019050602083039250611ce8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050919050565b600082826040516020018083805190602001908083835b60208310611d875780518252602082019150602081019050602083039250611d64565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310611dd85780518252602082019150602081019050602083039250611db5565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120905092915050565b60075481565b6060600084611e3081611b83565b611ea2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6000611ead87611cd2565b90506000600160008381526020019081526020016000209050606060008890506000808460030154905080831015611f8757828103915089821115611ef0578991505b81604051908082528060200260200182016040528015611f1f5781602001602082028038833980820191505090505b5093505b6000821115611f86576000611f3887856126b8565b905060006003600083815260200190815260200160002054905080866001860381518110611f6257fe5b60200260200101818152505083806001900394505084806001019550505050611f23565b5b83839850985050505050505050935093915050565b600081611fa881611b83565b61201a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b600061202584611cd2565b9050600060016000838152602001908152602001600020905080600301549350505050919050565b60065481565b60008261205f81611b83565b6120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b60006120dd8585611d4d565b905060006002600083815260200190815260200160002090508060000160009054906101000a900460ff16935050505092915050565b61211b611be6565b61218d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612196816126f1565b50565b60026020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b505050505090806004018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123025780601f106122d757610100808354040283529160200191612302565b820191906000526020600020905b8154815290600101906020018083116122e557829003601f168201915b5050505050905085565b6000600260008681526020019081526020016000209050600015158160000160009054906101000a900460ff161515146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d616c72656164792d6578697374730000000000000000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160020181905550828160030190805190602001906123f5929190612866565b508181600401908051906020019061240e929190612866565b5080600260008781526020019081526020016000206000820160009054906101000a900460ff168160000160006101000a81548160ff02191690831515021790555060018201548160010155600282015481600201556003820181600301908054600181600116156101000203166002900461248b92919061291a565b50600482018160040190805460018160011615610100020316600290046124b392919061291a565b5090505084600560006007548152602001908152602001600020819055506007600081548092919060010191905055506000600160008881526020019081526020016000209050600061250a8883600301546126b8565b905086600360008381526020019081526020016000208190555081600301600081548092919060010191905055507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c386868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156125a4578082015181840152602081019050612589565b50505050905090810190601f1680156125d15780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b8381101561260a5780820151818401526020810190506125ef565b50505050905090810190601f1680156126375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612670578082015181840152602081019050612655565b50505050905090810190601f16801561269d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a15050505050505050565b60008282604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129c76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060a00160405280600015158152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128a757805160ff19168380011785556128d5565b828001600101855582156128d5579182015b828111156128d45782518255916020019190600101906128b9565b5b5090506128e291906129a1565b5090565b6040518060a00160405280600015158152602001600081526020016000801916815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129535780548555612990565b8280016001018555821561299057600052602060002091601f016020900482015b8281111561298f578254825591600101919060010190612974565b5b50905061299d91906129a1565b5090565b6129c391905b808211156129bf5760008160009055506001016129a7565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a723058203303a3448bda11fd26ce9bcffb213dfc2b3f1a692632415c26340a9162d15e9c64736f6c634300050a0032"}},"PackageRegistryInterface":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"compiler":{"name":"solc","settings":{"optimize":false},"version":"0.5.10+commit.5a6ea5b1"},"deployment_bytecode":{"bytecode":"0x"},"natspec":{"author":"Piper Merriam , Christopher Gewecke ","methods":{"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package ids for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all release hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice.","packageName":"Package name"}},"getPackageName(bytes32)":{"details":"Returns the string name of the package associated with a package id","params":{"packageId":"The package id to look up"}},"getReleaseData(bytes32)":{"details":"Returns the package data for a release.","params":{"releaseId":"Release id"}},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"release(string,string,string)":{"details":"Creates a a new release for the named package.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: 1.0.0)"}}},"title":"EIP 1319 Smart Contract Package Registry Interface"},"runtime_bytecode":{"bytecode":"0x"}}},"manifest_version":"2","meta":{"authors":["Nick Gheorghita"],"description":"A basic Solidity implementation of ERC1319.","keywords":["ethpm"," erc1319"," solidity"," ethereum"," package registry"],"license":"MIT","links":{"documentation":"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1319.md","repo":"https://github.com/ethpm/solidity-registry/","website":"www.ethpm.com"}},"package_name":"ethpm-registry","sources":{"./Ownable.sol":"pragma solidity ^0.5.0;\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\ncontract Ownable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n _owner = msg.sender;\n emit OwnershipTransferred(address(0), _owner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(isOwner(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Returns true if the caller is the current owner.\n */\n function isOwner() public view returns (bool) {\n return msg.sender == _owner;\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public onlyOwner {\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n */\n function _transferOwnership(address newOwner) internal {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}","./PackageRegistry.sol":"pragma solidity >=0.5.10;\n\nimport {PackageRegistryInterface} from \"./PackageRegistryInterface.sol\";\nimport {Ownable} from \"./Ownable.sol\";\n\n/// @title Contract for an ERC1319 Registry, adapted from ethpm/escape-truffle\n/// @author Nick Gheorghita \ncontract PackageRegistry is PackageRegistryInterface, Ownable {\n struct Package {\n bool exists;\n uint createdAt;\n uint updatedAt;\n uint releaseCount;\n string name;\n }\n\n struct Release {\n bool exists;\n uint createdAt;\n bytes32 packageId;\n string version;\n string manifestURI;\n }\n\n mapping (bytes32 => Package) public packages;\n mapping (bytes32 => Release) public releases;\n\n // package_id#release_count => release_id\n mapping (bytes32 => bytes32) packageReleaseIndex;\n // Total package number (int128) => package_id (bytes32)\n mapping (uint => bytes32) allPackageIds;\n // Total release number (int128) => release_id (bytes32)\n mapping (uint => bytes32) allReleaseIds;\n // Total number of packages in registry\n uint public packageCount;\n // Total number of releases in registry\n uint public releaseCount;\n\n // Events\n event VersionRelease(string packageName, string version, string manifestURI);\n event PackageTransfer(address indexed oldOwner, address indexed newOwner);\n\n // Modifiers\n modifier onlyIfPackageExists(string memory packageName) {\n require(packageExists(packageName), \"package-does-not-exist\");\n _;\n }\n\n modifier onlyIfReleaseExists(string memory packageName, string memory version) {\n require (releaseExists(packageName, version), \"release-does-not-exist\");\n _;\n }\n\n //\n // ===============\n // | Write API |\n // ===============\n //\n\n /// @dev Creates a new release for the named package. If this is the first release for the given\n /// package then this will also create and store the package. Returns releaseID if successful.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: '1.0.0')\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string memory packageName,\n string memory version,\n string memory manifestURI\n )\n public\n onlyOwner\n returns (bytes32)\n {\n validatePackageName(packageName);\n validateStringIdentifier(version);\n validateStringIdentifier(manifestURI);\n\n // Compute hashes\n bytes32 packageId = generatePackageId(packageName);\n bytes32 releaseId = generateReleaseId(packageName, version);\n Package storage package = packages[packageId];\n\n // If the package does not yet exist create it\n if (package.exists == false) {\n package.exists = true;\n package.createdAt = block.timestamp;\n package.updatedAt = block.timestamp;\n package.name = packageName;\n package.releaseCount = 0;\n allPackageIds[packageCount] = packageId;\n packageCount++;\n } else {\n package.updatedAt = block.timestamp;\n }\n cutRelease(packageId, releaseId, packageName, version, manifestURI);\n return releaseId;\n }\n\n function cutRelease(\n bytes32 packageId,\n bytes32 releaseId,\n string memory packageName,\n string memory version,\n string memory manifestURI\n )\n private\n {\n Release storage newRelease = releases[releaseId];\n require(newRelease.exists == false, \"release-already-exists\");\n\n // Store new release data\n newRelease.exists = true;\n newRelease.createdAt = block.timestamp;\n newRelease.packageId = packageId;\n newRelease.version = version;\n newRelease.manifestURI = manifestURI;\n\n releases[releaseId] = newRelease;\n allReleaseIds[releaseCount] = releaseId;\n releaseCount++;\n\n // Update package's release count\n Package storage package = packages[packageId];\n bytes32 packageReleaseId = generatePackageReleaseId(packageId, package.releaseCount);\n packageReleaseIndex[packageReleaseId] = releaseId;\n package.releaseCount++;\n\n // Log the release.\n emit VersionRelease(packageName, version, manifestURI);\n }\n\n //\n // ==============\n // | Read API |\n // ==============\n //\n\n /// @dev Returns the string name of the package associated with a package id\n /// @param packageId The package id to look up\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string memory packageName)\n {\n Package memory targetPackage = packages[packageId];\n require (targetPackage.exists == true, \"package-does-not-exist\");\n return targetPackage.name;\n }\n\n /// @dev Returns a slice of the array of all package ids for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns (\n bytes32[] memory packageIds,\n uint pointer\n )\n {\n bytes32[] memory hashes; // Array of package ids to return\n uint cursor = offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n\n // Is request within range?\n if (cursor < packageCount){\n\n // Get total remaining records\n remaining = packageCount - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records.\n while(remaining > 0){\n bytes32 hash = allPackageIds[cursor];\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n /// @dev Returns a slice of the array of all release hashes for the named package.\n /// @param packageName Package name\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string memory packageName, uint offset, uint limit)\n public\n view\n onlyIfPackageExists(packageName)\n returns (\n bytes32[] memory releaseIds,\n uint pointer\n )\n {\n bytes32 packageId = generatePackageId(packageName);\n Package storage package = packages[packageId];\n bytes32[] memory hashes; // Release ids to return\n uint cursor = offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n uint numPackageReleases = package.releaseCount;\t\t // Total number of packages in registry\n\n // Is request within range?\n if (cursor < numPackageReleases){\n\n // Get total remaining records\n remaining = numPackageReleases - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records.\n while(remaining > 0){\n bytes32 packageReleaseId = generatePackageReleaseId(packageId, cursor);\n bytes32 hash = packageReleaseIndex[packageReleaseId];\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n\n /// @dev Returns the package data for a release.\n /// @param releaseId Release id\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string memory packageName, string memory version,\n string memory manifestURI\n )\n {\n Release memory targetRelease = releases[releaseId];\n Package memory targetPackage = packages[targetRelease.packageId];\n return (targetPackage.name, targetRelease.version, targetRelease.manifestURI);\n }\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string memory packageName, string memory version)\n public\n view\n onlyIfPackageExists(packageName)\n onlyIfReleaseExists(packageName, version)\n returns (bytes32 releaseId)\n {\n return generateReleaseId(packageName, version);\n }\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds() public view returns (uint totalCount)\n {\n return packageCount;\n }\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string memory packageName)\n public\n view\n onlyIfPackageExists(packageName)\n returns (uint totalCount)\n {\n bytes32 packageId = generatePackageId(packageName);\n Package storage package = packages[packageId];\n return package.releaseCount;\n }\n\n /// @dev Returns a bool indicating whether the given release exists in this registry.\n /// @param packageName Package Name\n /// @param version version\n function releaseExists(string memory packageName, string memory version)\n public\n view\n onlyIfPackageExists(packageName)\n returns (bool)\n {\n bytes32 releaseId = generateReleaseId(packageName, version);\n Release storage targetRelease = releases[releaseId];\n return targetRelease.exists;\n }\n\n /// @dev Returns a bool indicating whether the given package exists in this registry.\n /// @param packageName Package Name\n function packageExists(string memory packageName) public view returns (bool) {\n bytes32 packageId = generatePackageId(packageName);\n return packages[packageId].exists;\n }\n\n //\n // ====================\n // | Hash Functions |\n // ====================\n // \n\n /// @dev Returns name hash for a given package name.\n /// @param name Package name\n function generatePackageId(string memory name)\n public\n pure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(name));\n }\n\n // @dev Returns release id that *would* be generated for a name and version pair on `release`.\n // @param packageName Package name\n // @param version Version string (ex: '1.0.0')\n function generateReleaseId(\n string memory packageName,\n string memory version\n )\n public\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(packageName, version));\n }\n\n function generatePackageReleaseId(\n bytes32 packageId,\n uint packageReleaseCount\n )\n private\n\t\tpure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(packageId, packageReleaseCount));\n }\n\n\n //\n // ================\n // | Validation |\n // ================\n //\n\n /// @dev Returns boolean whether the provided package name is valid.\n /// @param name The name of the package.\n function validatePackageName(string memory name)\n public\n pure\n returns (bool)\n {\n require (bytes(name).length > 2 && bytes(name).length < 255, \"invalid-package-name\");\n }\n\n /// @dev Returns boolean whether the input string has a length\n /// @param value The string to validate.\n function validateStringIdentifier(string memory value)\n public\n pure\n returns (bool)\n {\n require (bytes(value).length != 0, \"invalid-string-identifier\");\n }\n}","./PackageRegistryInterface.sol":"pragma solidity >=0.5.10;\n\n\n/// @title EIP 1319 Smart Contract Package Registry Interface\n/// @author Piper Merriam , Christopher Gewecke \ncontract PackageRegistryInterface {\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n\n /// @dev Creates a a new release for the named package.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: 1.0.0)\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string memory packageName,\n string memory version,\n string memory manifestURI\n )\n public\n returns (bytes32 releaseId);\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Returns the string name of the package associated with a package id\n /// @param packageId The package id to look up\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string memory packageName);\n\n /// @dev Returns a slice of the array of all package ids for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns (\n bytes32[] memory packageIds,\n uint pointer\n );\n\n /// @dev Returns a slice of the array of all release hashes for the named package.\n /// @param packageName Package name\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string memory packageName, uint offset, uint limit)\n public\n view\n returns (\n bytes32[] memory releaseIds,\n uint pointer\n );\n\n /// @dev Returns the package data for a release.\n /// @param releaseId Release id\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string memory packageName,\n string memory version,\n string memory manifestURI\n );\n\n // @dev Returns release id that *would* be generated for a name and version pair on `release`.\n // @param packageName Package name\n // @param version Version string (ex: '1.0.0')\n function generateReleaseId(string memory packageName, string memory version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string memory packageName, string memory version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds() public view returns (uint totalCount);\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string memory packageName) public view returns (uint totalCount);\n}"},"version":"2.0.0a1"} \ No newline at end of file diff --git a/ethpm/assets/simple-registry/v3.json b/ethpm/assets/simple-registry/v3.json new file mode 100644 index 0000000000..e22c29157c --- /dev/null +++ b/ethpm/assets/simple-registry/v3.json @@ -0,0 +1 @@ +{"compilers":[{"contractTypes":["Ownable","PackageRegistry","PackageRegistryInterface"],"name":"solc","settings":{"optimize":false},"version":"0.5.10+commit.5a6ea5b1"}],"contractTypes":{"Ownable":{"abi":[{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}],"deploymentBytecode":{"bytecode":"0x"},"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","methods":{"constructor":{"details":"Initializes the contract setting the deployer as the initial owner."},"isOwner()":{"details":"Returns true if the caller is the current owner."},"owner()":{"details":"Returns the address of the current owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}}},"runtimeBytecode":{"bytecode":"0x"},"sourceId":"Ownable.sol"},"PackageRegistry":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"packages","outputs":[{"name":"exists","type":"bool"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"},{"name":"releaseCount","type":"uint256"},{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"value","type":"string"}],"name":"validateStringIdentifier","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"validatePackageName","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"generatePackageId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"releaseCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"packageCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"releases","outputs":[{"name":"exists","type":"bool"},{"name":"createdAt","type":"uint256"},{"name":"packageId","type":"bytes32"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"packageName","type":"string"},{"indexed":false,"name":"version","type":"string"},{"indexed":false,"name":"manifestURI","type":"string"}],"name":"VersionRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}],"deploymentBytecode":{"bytecode":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3612a21806100cf6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063938b056e116100b8578063c999a3b21161007c578063c999a3b214610d76578063eb8cc47c14610ea1578063ee0ebe0c14610f70578063efae87d714610f8e578063f2fde38b146110f8578063f491a84c1461113c57610137565b8063938b056e14610a32578063a54fb68514610b05578063abe827f214610b23578063b4b42e3514610bf2578063b8d08db214610d5857610137565b806371102819116100ff578063711028191461075957806382ee976f1461082057806383ea0620146108f35780638da5cb5b146109c65780638f32d59b14610a1057610137565b806306fe1fd71461013c5780631fb1c6c0146101e3578063379037dc1461034957806343212cf1146105465780634c4aea87146105da575b600080fd5b6101686004803603602081101561015257600080fd5b8101908080359060200190929190505050611268565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a857808201518184015260208101905061018d565b50505050905090810190601f1680156101d55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610333600480360360408110156101f957600080fd5b810190808035906020019064010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156102ad57600080fd5b8201836020820111156102bf57600080fd5b803590602001918460018302840111640100000000831117156102e157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113f8565b6040518082815260200191505060405180910390f35b6105306004803603606081101561035f57600080fd5b810190808035906020019064010000000081111561037c57600080fd5b82018360208201111561038e57600080fd5b803590602001918460018302840111640100000000831117156103b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561041357600080fd5b82018360208201111561042557600080fd5b8035906020019184600183028401116401000000008311171561044757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104aa57600080fd5b8201836020820111156104bc57600080fd5b803590602001918460018302840111640100000000831117156104de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611509565b6040518082815260200191505060405180910390f35b61057c6004803603604081101561055c57600080fd5b81019080803590602001909291908035906020019092919050505061169a565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105c55780820151818401526020810190506105aa565b50505050905001935050505060405180910390f35b610606600480360360208110156105f057600080fd5b810190808035906020019092919050505061175c565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561064e578082015181840152602081019050610633565b50505050905090810190601f16801561067b5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106b4578082015181840152602081019050610699565b50505050905090810190601f1680156106e15780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561071a5780820151818401526020810190506106ff565b50505050905090810190601f1680156107475780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6107856004803603602081101561076f57600080fd5b8101908080359060200190929190505050611a2a565b604051808615151515815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107e15780820151818401526020810190506107c6565b50505050905090810190601f16801561080e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6108d96004803603602081101561083657600080fd5b810190808035906020019064010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b05565b604051808215151515815260200191505060405180910390f35b6109ac6004803603602081101561090957600080fd5b810190808035906020019064010000000081111561092657600080fd5b82018360208201111561093857600080fd5b8035906020019184600183028401116401000000008311171561095a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b83565b604051808215151515815260200191505060405180910390f35b6109ce611bbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a18611be6565b604051808215151515815260200191505060405180910390f35b610aeb60048036036020811015610a4857600080fd5b8101908080359060200190640100000000811115610a6557600080fd5b820183602082011115610a7757600080fd5b80359060200191846001830284011164010000000083111715610a9957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c3d565b604051808215151515815260200191505060405180910390f35b610b0d611cc8565b6040518082815260200191505060405180910390f35b610bdc60048036036020811015610b3957600080fd5b8101908080359060200190640100000000811115610b5657600080fd5b820183602082011115610b6857600080fd5b80359060200191846001830284011164010000000083111715610b8a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cd2565b6040518082815260200191505060405180910390f35b610d4260048036036040811015610c0857600080fd5b8101908080359060200190640100000000811115610c2557600080fd5b820183602082011115610c3757600080fd5b80359060200191846001830284011164010000000083111715610c5957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610cbc57600080fd5b820183602082011115610cce57600080fd5b80359060200191846001830284011164010000000083111715610cf057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4d565b6040518082815260200191505060405180910390f35b610d60611e1c565b6040518082815260200191505060405180910390f35b610e4360048036036060811015610d8c57600080fd5b8101908080359060200190640100000000811115610da957600080fd5b820183602082011115610dbb57600080fd5b80359060200191846001830284011164010000000083111715610ddd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050611e22565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e8c578082015181840152602081019050610e71565b50505050905001935050505060405180910390f35b610f5a60048036036020811015610eb757600080fd5b8101908080359060200190640100000000811115610ed457600080fd5b820183602082011115610ee657600080fd5b80359060200191846001830284011164010000000083111715610f0857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f9c565b6040518082815260200191505060405180910390f35b610f7861204d565b6040518082815260200191505060405180910390f35b6110de60048036036040811015610fa457600080fd5b8101908080359060200190640100000000811115610fc157600080fd5b820183602082011115610fd357600080fd5b80359060200191846001830284011164010000000083111715610ff557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561105857600080fd5b82018360208201111561106a57600080fd5b8035906020019184600183028401116401000000008311171561108c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612053565b604051808215151515815260200191505060405180910390f35b61113a6004803603602081101561110e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612113565b005b6111686004803603602081101561115257600080fd5b8101908080359060200190929190505050612199565b60405180861515151581526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111c25780820151818401526020810190506111a7565b50505050905090810190601f1680156111ef5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561122857808201518184015260208101905061120d565b50505050905090810190601f1680156112555780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6060611272612835565b600160008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113625780601f1061133757610100808354040283529160200191611362565b820191906000526020600020905b81548152906001019060200180831161134557829003601f168201915b50505050508152505090506001151581600001511515146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b8060800151915050919050565b60008261140481611b83565b611476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b83836114828282612053565b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6114fe8686611d4d565b935050505092915050565b6000611513611be6565b611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61158e84611c3d565b5061159883611b05565b506115a282611b05565b5060006115ae85611cd2565b905060006115bc8686611d4d565b90506000600160008481526020019081526020016000209050600015158160000160009054906101000a900460ff16151514156116765760018160000160006101000a81548160ff0219169083151502179055504281600101819055504281600201819055508681600401908051906020019061163a929190612866565b50600081600301819055508260046000600654815260200190815260200160002081905550600660008154809291906001019190505550611680565b4281600201819055505b61168d838389898961230c565b8193505050509392505050565b6060600060606000859050600060065482101561174c5781600654039050858111156116c4578590505b806040519080825280602002602001820160405280156116f35781602001602082028038833980820191505090505b5092505b600081111561174b576000600460008481526020019081526020016000205490508084600184038151811061172857fe5b6020026020010181815250508180600190039250508280600101935050506116f7565b5b8282945094505050509250929050565b60608060606117696128e6565b600260008681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201548152602001600382018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561184f5780601f106118245761010080835404028352916020019161184f565b820191906000526020600020905b81548152906001019060200180831161183257829003601f168201915b50505050508152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050815250509050611904612835565b60016000836040015181526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b505050505081525050905080608001518260600151836080015182925081915080905094509450945050509193909250565b60016020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003015490806004018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b5050505050905085565b60008082511415611b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f696e76616c69642d737472696e672d6964656e7469666965720000000000000081525060200191505060405180910390fd5b919050565b600080611b8f83611cd2565b90506001600082815260200190815260200160002060000160009054906101000a900460ff16915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600060028251118015611c51575060ff8251105b611cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e76616c69642d7061636b6167652d6e616d6500000000000000000000000081525060200191505060405180910390fd5b919050565b6000600654905090565b6000816040516020018082805190602001908083835b60208310611d0b5780518252602082019150602081019050602083039250611ce8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050919050565b600082826040516020018083805190602001908083835b60208310611d875780518252602082019150602081019050602083039250611d64565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310611dd85780518252602082019150602081019050602083039250611db5565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120905092915050565b60075481565b6060600084611e3081611b83565b611ea2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6000611ead87611cd2565b90506000600160008381526020019081526020016000209050606060008890506000808460030154905080831015611f8757828103915089821115611ef0578991505b81604051908082528060200260200182016040528015611f1f5781602001602082028038833980820191505090505b5093505b6000821115611f86576000611f3887856126b8565b905060006003600083815260200190815260200160002054905080866001860381518110611f6257fe5b60200260200101818152505083806001900394505084806001019550505050611f23565b5b83839850985050505050505050935093915050565b600081611fa881611b83565b61201a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b600061202584611cd2565b9050600060016000838152602001908152602001600020905080600301549350505050919050565b60065481565b60008261205f81611b83565b6120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b60006120dd8585611d4d565b905060006002600083815260200190815260200160002090508060000160009054906101000a900460ff16935050505092915050565b61211b611be6565b61218d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612196816126f1565b50565b60026020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b505050505090806004018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123025780601f106122d757610100808354040283529160200191612302565b820191906000526020600020905b8154815290600101906020018083116122e557829003601f168201915b5050505050905085565b6000600260008681526020019081526020016000209050600015158160000160009054906101000a900460ff161515146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d616c72656164792d6578697374730000000000000000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160020181905550828160030190805190602001906123f5929190612866565b508181600401908051906020019061240e929190612866565b5080600260008781526020019081526020016000206000820160009054906101000a900460ff168160000160006101000a81548160ff02191690831515021790555060018201548160010155600282015481600201556003820181600301908054600181600116156101000203166002900461248b92919061291a565b50600482018160040190805460018160011615610100020316600290046124b392919061291a565b5090505084600560006007548152602001908152602001600020819055506007600081548092919060010191905055506000600160008881526020019081526020016000209050600061250a8883600301546126b8565b905086600360008381526020019081526020016000208190555081600301600081548092919060010191905055507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c386868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156125a4578082015181840152602081019050612589565b50505050905090810190601f1680156125d15780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b8381101561260a5780820151818401526020810190506125ef565b50505050905090810190601f1680156126375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612670578082015181840152602081019050612655565b50505050905090810190601f16801561269d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a15050505050505050565b60008282604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129c76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060a00160405280600015158152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128a757805160ff19168380011785556128d5565b828001600101855582156128d5579182015b828111156128d45782518255916020019190600101906128b9565b5b5090506128e291906129a1565b5090565b6040518060a00160405280600015158152602001600081526020016000801916815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129535780548555612990565b8280016001018555821561299057600052602060002091601f016020900482015b8281111561298f578254825591600101919060010190612974565b5b50905061299d91906129a1565b5090565b6129c391905b808211156129bf5760008160009055506001016129a7565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a723058203303a3448bda11fd26ce9bcffb213dfc2b3f1a692632415c26340a9162d15e9c64736f6c634300050a0032"},"devdoc":{"author":"Nick Gheorghita ","methods":{"generatePackageId(string)":{"details":"Returns name hash for a given package name.","params":{"name":"Package name"}},"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package ids for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all release hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice.","packageName":"Package name"}},"getPackageName(bytes32)":{"details":"Returns the string name of the package associated with a package id","params":{"packageId":"The package id to look up"}},"getReleaseData(bytes32)":{"details":"Returns the package data for a release.","params":{"releaseId":"Release id"}},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"isOwner()":{"details":"Returns true if the caller is the current owner."},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"owner()":{"details":"Returns the address of the current owner."},"packageExists(string)":{"details":"Returns a bool indicating whether the given package exists in this registry.","params":{"packageName":"Package Name"}},"release(string,string,string)":{"details":"Creates a new release for the named package. If this is the first release for the given package then this will also create and store the package. Returns releaseID if successful.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: '1.0.0')"}},"releaseExists(string,string)":{"details":"Returns a bool indicating whether the given release exists in this registry.","params":{"packageName":"Package Name","version":"version"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"validatePackageName(string)":{"details":"Returns boolean whether the provided package name is valid.","params":{"name":"The name of the package."}},"validateStringIdentifier(string)":{"details":"Returns boolean whether the input string has a length","params":{"value":"The string to validate."}}},"title":"Contract for an ERC1319 Registry, adapted from ethpm/escape-truffle"},"runtimeBytecode":{"bytecode":"0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063938b056e116100b8578063c999a3b21161007c578063c999a3b214610d76578063eb8cc47c14610ea1578063ee0ebe0c14610f70578063efae87d714610f8e578063f2fde38b146110f8578063f491a84c1461113c57610137565b8063938b056e14610a32578063a54fb68514610b05578063abe827f214610b23578063b4b42e3514610bf2578063b8d08db214610d5857610137565b806371102819116100ff578063711028191461075957806382ee976f1461082057806383ea0620146108f35780638da5cb5b146109c65780638f32d59b14610a1057610137565b806306fe1fd71461013c5780631fb1c6c0146101e3578063379037dc1461034957806343212cf1146105465780634c4aea87146105da575b600080fd5b6101686004803603602081101561015257600080fd5b8101908080359060200190929190505050611268565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a857808201518184015260208101905061018d565b50505050905090810190601f1680156101d55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610333600480360360408110156101f957600080fd5b810190808035906020019064010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156102ad57600080fd5b8201836020820111156102bf57600080fd5b803590602001918460018302840111640100000000831117156102e157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113f8565b6040518082815260200191505060405180910390f35b6105306004803603606081101561035f57600080fd5b810190808035906020019064010000000081111561037c57600080fd5b82018360208201111561038e57600080fd5b803590602001918460018302840111640100000000831117156103b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561041357600080fd5b82018360208201111561042557600080fd5b8035906020019184600183028401116401000000008311171561044757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104aa57600080fd5b8201836020820111156104bc57600080fd5b803590602001918460018302840111640100000000831117156104de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611509565b6040518082815260200191505060405180910390f35b61057c6004803603604081101561055c57600080fd5b81019080803590602001909291908035906020019092919050505061169a565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156105c55780820151818401526020810190506105aa565b50505050905001935050505060405180910390f35b610606600480360360208110156105f057600080fd5b810190808035906020019092919050505061175c565b60405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561064e578082015181840152602081019050610633565b50505050905090810190601f16801561067b5780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b838110156106b4578082015181840152602081019050610699565b50505050905090810190601f1680156106e15780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b8381101561071a5780820151818401526020810190506106ff565b50505050905090810190601f1680156107475780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6107856004803603602081101561076f57600080fd5b8101908080359060200190929190505050611a2a565b604051808615151515815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107e15780820151818401526020810190506107c6565b50505050905090810190601f16801561080e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6108d96004803603602081101561083657600080fd5b810190808035906020019064010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b05565b604051808215151515815260200191505060405180910390f35b6109ac6004803603602081101561090957600080fd5b810190808035906020019064010000000081111561092657600080fd5b82018360208201111561093857600080fd5b8035906020019184600183028401116401000000008311171561095a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b83565b604051808215151515815260200191505060405180910390f35b6109ce611bbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a18611be6565b604051808215151515815260200191505060405180910390f35b610aeb60048036036020811015610a4857600080fd5b8101908080359060200190640100000000811115610a6557600080fd5b820183602082011115610a7757600080fd5b80359060200191846001830284011164010000000083111715610a9957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c3d565b604051808215151515815260200191505060405180910390f35b610b0d611cc8565b6040518082815260200191505060405180910390f35b610bdc60048036036020811015610b3957600080fd5b8101908080359060200190640100000000811115610b5657600080fd5b820183602082011115610b6857600080fd5b80359060200191846001830284011164010000000083111715610b8a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cd2565b6040518082815260200191505060405180910390f35b610d4260048036036040811015610c0857600080fd5b8101908080359060200190640100000000811115610c2557600080fd5b820183602082011115610c3757600080fd5b80359060200191846001830284011164010000000083111715610c5957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610cbc57600080fd5b820183602082011115610cce57600080fd5b80359060200191846001830284011164010000000083111715610cf057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4d565b6040518082815260200191505060405180910390f35b610d60611e1c565b6040518082815260200191505060405180910390f35b610e4360048036036060811015610d8c57600080fd5b8101908080359060200190640100000000811115610da957600080fd5b820183602082011115610dbb57600080fd5b80359060200191846001830284011164010000000083111715610ddd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050611e22565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e8c578082015181840152602081019050610e71565b50505050905001935050505060405180910390f35b610f5a60048036036020811015610eb757600080fd5b8101908080359060200190640100000000811115610ed457600080fd5b820183602082011115610ee657600080fd5b80359060200191846001830284011164010000000083111715610f0857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f9c565b6040518082815260200191505060405180910390f35b610f7861204d565b6040518082815260200191505060405180910390f35b6110de60048036036040811015610fa457600080fd5b8101908080359060200190640100000000811115610fc157600080fd5b820183602082011115610fd357600080fd5b80359060200191846001830284011164010000000083111715610ff557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561105857600080fd5b82018360208201111561106a57600080fd5b8035906020019184600183028401116401000000008311171561108c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612053565b604051808215151515815260200191505060405180910390f35b61113a6004803603602081101561110e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612113565b005b6111686004803603602081101561115257600080fd5b8101908080359060200190929190505050612199565b60405180861515151581526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111c25780820151818401526020810190506111a7565b50505050905090810190601f1680156111ef5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561122857808201518184015260208101905061120d565b50505050905090810190601f1680156112555780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6060611272612835565b600160008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113625780601f1061133757610100808354040283529160200191611362565b820191906000526020600020905b81548152906001019060200180831161134557829003601f168201915b50505050508152505090506001151581600001511515146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b8060800151915050919050565b60008261140481611b83565b611476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b83836114828282612053565b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6114fe8686611d4d565b935050505092915050565b6000611513611be6565b611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61158e84611c3d565b5061159883611b05565b506115a282611b05565b5060006115ae85611cd2565b905060006115bc8686611d4d565b90506000600160008481526020019081526020016000209050600015158160000160009054906101000a900460ff16151514156116765760018160000160006101000a81548160ff0219169083151502179055504281600101819055504281600201819055508681600401908051906020019061163a929190612866565b50600081600301819055508260046000600654815260200190815260200160002081905550600660008154809291906001019190505550611680565b4281600201819055505b61168d838389898961230c565b8193505050509392505050565b6060600060606000859050600060065482101561174c5781600654039050858111156116c4578590505b806040519080825280602002602001820160405280156116f35781602001602082028038833980820191505090505b5092505b600081111561174b576000600460008481526020019081526020016000205490508084600184038151811061172857fe5b6020026020010181815250508180600190039250508280600101935050506116f7565b5b8282945094505050509250929050565b60608060606117696128e6565b600260008681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201548152602001600382018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561184f5780601f106118245761010080835404028352916020019161184f565b820191906000526020600020905b81548152906001019060200180831161183257829003601f168201915b50505050508152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050815250509050611904612835565b60016000836040015181526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820154815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b505050505081525050905080608001518260600151836080015182925081915080905094509450945050509193909250565b60016020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003015490806004018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b5050505050905085565b60008082511415611b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f696e76616c69642d737472696e672d6964656e7469666965720000000000000081525060200191505060405180910390fd5b919050565b600080611b8f83611cd2565b90506001600082815260200190815260200160002060000160009054906101000a900460ff16915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600060028251118015611c51575060ff8251105b611cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e76616c69642d7061636b6167652d6e616d6500000000000000000000000081525060200191505060405180910390fd5b919050565b6000600654905090565b6000816040516020018082805190602001908083835b60208310611d0b5780518252602082019150602081019050602083039250611ce8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050919050565b600082826040516020018083805190602001908083835b60208310611d875780518252602082019150602081019050602083039250611d64565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310611dd85780518252602082019150602081019050602083039250611db5565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120905092915050565b60075481565b6060600084611e3081611b83565b611ea2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b6000611ead87611cd2565b90506000600160008381526020019081526020016000209050606060008890506000808460030154905080831015611f8757828103915089821115611ef0578991505b81604051908082528060200260200182016040528015611f1f5781602001602082028038833980820191505090505b5093505b6000821115611f86576000611f3887856126b8565b905060006003600083815260200190815260200160002054905080866001860381518110611f6257fe5b60200260200101818152505083806001900394505084806001019550505050611f23565b5b83839850985050505050505050935093915050565b600081611fa881611b83565b61201a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b600061202584611cd2565b9050600060016000838152602001908152602001600020905080600301549350505050919050565b60065481565b60008261205f81611b83565b6120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7061636b6167652d646f65732d6e6f742d65786973740000000000000000000081525060200191505060405180910390fd5b60006120dd8585611d4d565b905060006002600083815260200190815260200160002090508060000160009054906101000a900460ff16935050505092915050565b61211b611be6565b61218d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612196816126f1565b50565b60026020528060005260406000206000915090508060000160009054906101000a900460ff1690806001015490806002015490806003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b505050505090806004018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123025780601f106122d757610100808354040283529160200191612302565b820191906000526020600020905b8154815290600101906020018083116122e557829003601f168201915b5050505050905085565b6000600260008681526020019081526020016000209050600015158160000160009054906101000a900460ff161515146123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656c656173652d616c72656164792d6578697374730000000000000000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550428160010181905550858160020181905550828160030190805190602001906123f5929190612866565b508181600401908051906020019061240e929190612866565b5080600260008781526020019081526020016000206000820160009054906101000a900460ff168160000160006101000a81548160ff02191690831515021790555060018201548160010155600282015481600201556003820181600301908054600181600116156101000203166002900461248b92919061291a565b50600482018160040190805460018160011615610100020316600290046124b392919061291a565b5090505084600560006007548152602001908152602001600020819055506007600081548092919060010191905055506000600160008881526020019081526020016000209050600061250a8883600301546126b8565b905086600360008381526020019081526020016000208190555081600301600081548092919060010191905055507f489d8cf08b449d77a8953441a8d402a675aef55ac2fe367ca5b6b587737341c386868660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156125a4578082015181840152602081019050612589565b50505050905090810190601f1680156125d15780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b8381101561260a5780820151818401526020810190506125ef565b50505050905090810190601f1680156126375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612670578082015181840152602081019050612655565b50505050905090810190601f16801561269d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a15050505050505050565b60008282604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129c76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060a00160405280600015158152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128a757805160ff19168380011785556128d5565b828001600101855582156128d5579182015b828111156128d45782518255916020019190600101906128b9565b5b5090506128e291906129a1565b5090565b6040518060a00160405280600015158152602001600081526020016000801916815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129535780548555612990565b8280016001018555821561299057600052602060002091601f016020900482015b8281111561298f578254825591600101919060010190612974565b5b50905061299d91906129a1565b5090565b6129c391905b808211156129bf5760008160009055506001016129a7565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a723058203303a3448bda11fd26ce9bcffb213dfc2b3f1a692632415c26340a9162d15e9c64736f6c634300050a0032"},"sourceId":"PackageRegistry.sol"},"PackageRegistryInterface":{"abi":[{"constant":true,"inputs":[{"name":"packageId","type":"bytes32"}],"name":"getPackageName","outputs":[{"name":"packageName","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"getReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"name":"release","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllPackageIds","outputs":[{"name":"packageIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"},{"name":"manifestURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPackageIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"version","type":"string"}],"name":"generateReleaseId","outputs":[{"name":"releaseId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"},{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"getAllReleaseIds","outputs":[{"name":"releaseIds","type":"bytes32[]"},{"name":"pointer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packageName","type":"string"}],"name":"numReleaseIds","outputs":[{"name":"totalCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"deploymentBytecode":{"bytecode":"0x"},"devdoc":{"author":"Piper Merriam , Christopher Gewecke ","methods":{"getAllPackageIds(uint256,uint256)":{"details":"Returns a slice of the array of all package ids for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice."}},"getAllReleaseIds(string,uint256,uint256)":{"details":"Returns a slice of the array of all release hashes for the named package.","params":{"limit":"The length of the slice","offset":"The starting index for the slice.","packageName":"Package name"}},"getPackageName(bytes32)":{"details":"Returns the string name of the package associated with a package id","params":{"packageId":"The package id to look up"}},"getReleaseData(bytes32)":{"details":"Returns the package data for a release.","params":{"releaseId":"Release id"}},"getReleaseId(string,string)":{"details":"Returns the release id for a given name and version pair if present on registry.","params":{"packageName":"Package name","version":"Version string(ex: '1.0.0')"}},"numPackageIds()":{"details":"Returns the number of packages stored on the registry"},"numReleaseIds(string)":{"details":"Returns the number of releases for a given package name on the registry","params":{"packageName":"Package name"}},"release(string,string,string)":{"details":"Creates a a new release for the named package.","params":{"manifestURI":"The URI for the release manifest for this release.","packageName":"Package name","version":"Version string (ex: 1.0.0)"}}},"title":"EIP 1319 Smart Contract Package Registry Interface"},"runtimeBytecode":{"bytecode":"0x"},"sourceId":"PackageRegistryInterface.sol"}},"manifest":"ethpm/3","name":"simple-registry","sources":{"./Ownable.sol":{"content":"pragma solidity ^0.5.0;\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\ncontract Ownable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n _owner = msg.sender;\n emit OwnershipTransferred(address(0), _owner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(isOwner(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Returns true if the caller is the current owner.\n */\n function isOwner() public view returns (bool) {\n return msg.sender == _owner;\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public onlyOwner {\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n */\n function _transferOwnership(address newOwner) internal {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}","installPath":"./Ownable.sol","type":"solidity"},"./PackageRegistry.sol":{"content":"pragma solidity >=0.5.10;\n\nimport {PackageRegistryInterface} from \"./PackageRegistryInterface.sol\";\nimport {Ownable} from \"./Ownable.sol\";\n\n/// @title Contract for an ERC1319 Registry, adapted from ethpm/escape-truffle\n/// @author Nick Gheorghita \ncontract PackageRegistry is PackageRegistryInterface, Ownable {\n struct Package {\n bool exists;\n uint createdAt;\n uint updatedAt;\n uint releaseCount;\n string name;\n }\n\n struct Release {\n bool exists;\n uint createdAt;\n bytes32 packageId;\n string version;\n string manifestURI;\n }\n\n mapping (bytes32 => Package) public packages;\n mapping (bytes32 => Release) public releases;\n\n // package_id#release_count => release_id\n mapping (bytes32 => bytes32) packageReleaseIndex;\n // Total package number (int128) => package_id (bytes32)\n mapping (uint => bytes32) allPackageIds;\n // Total release number (int128) => release_id (bytes32)\n mapping (uint => bytes32) allReleaseIds;\n // Total number of packages in registry\n uint public packageCount;\n // Total number of releases in registry\n uint public releaseCount;\n\n // Events\n event VersionRelease(string packageName, string version, string manifestURI);\n event PackageTransfer(address indexed oldOwner, address indexed newOwner);\n\n // Modifiers\n modifier onlyIfPackageExists(string memory packageName) {\n require(packageExists(packageName), \"package-does-not-exist\");\n _;\n }\n\n modifier onlyIfReleaseExists(string memory packageName, string memory version) {\n require (releaseExists(packageName, version), \"release-does-not-exist\");\n _;\n }\n\n //\n // ===============\n // | Write API |\n // ===============\n //\n\n /// @dev Creates a new release for the named package. If this is the first release for the given\n /// package then this will also create and store the package. Returns releaseID if successful.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: '1.0.0')\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string memory packageName,\n string memory version,\n string memory manifestURI\n )\n public\n onlyOwner\n returns (bytes32)\n {\n validatePackageName(packageName);\n validateStringIdentifier(version);\n validateStringIdentifier(manifestURI);\n\n // Compute hashes\n bytes32 packageId = generatePackageId(packageName);\n bytes32 releaseId = generateReleaseId(packageName, version);\n Package storage package = packages[packageId];\n\n // If the package does not yet exist create it\n if (package.exists == false) {\n package.exists = true;\n package.createdAt = block.timestamp;\n package.updatedAt = block.timestamp;\n package.name = packageName;\n package.releaseCount = 0;\n allPackageIds[packageCount] = packageId;\n packageCount++;\n } else {\n package.updatedAt = block.timestamp;\n }\n cutRelease(packageId, releaseId, packageName, version, manifestURI);\n return releaseId;\n }\n\n function cutRelease(\n bytes32 packageId,\n bytes32 releaseId,\n string memory packageName,\n string memory version,\n string memory manifestURI\n )\n private\n {\n Release storage newRelease = releases[releaseId];\n require(newRelease.exists == false, \"release-already-exists\");\n\n // Store new release data\n newRelease.exists = true;\n newRelease.createdAt = block.timestamp;\n newRelease.packageId = packageId;\n newRelease.version = version;\n newRelease.manifestURI = manifestURI;\n\n releases[releaseId] = newRelease;\n allReleaseIds[releaseCount] = releaseId;\n releaseCount++;\n\n // Update package's release count\n Package storage package = packages[packageId];\n bytes32 packageReleaseId = generatePackageReleaseId(packageId, package.releaseCount);\n packageReleaseIndex[packageReleaseId] = releaseId;\n package.releaseCount++;\n\n // Log the release.\n emit VersionRelease(packageName, version, manifestURI);\n }\n\n //\n // ==============\n // | Read API |\n // ==============\n //\n\n /// @dev Returns the string name of the package associated with a package id\n /// @param packageId The package id to look up\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string memory packageName)\n {\n Package memory targetPackage = packages[packageId];\n require (targetPackage.exists == true, \"package-does-not-exist\");\n return targetPackage.name;\n }\n\n /// @dev Returns a slice of the array of all package ids for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns (\n bytes32[] memory packageIds,\n uint pointer\n )\n {\n bytes32[] memory hashes; // Array of package ids to return\n uint cursor = offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n\n // Is request within range?\n if (cursor < packageCount){\n\n // Get total remaining records\n remaining = packageCount - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records.\n while(remaining > 0){\n bytes32 hash = allPackageIds[cursor];\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n /// @dev Returns a slice of the array of all release hashes for the named package.\n /// @param packageName Package name\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string memory packageName, uint offset, uint limit)\n public\n view\n onlyIfPackageExists(packageName)\n returns (\n bytes32[] memory releaseIds,\n uint pointer\n )\n {\n bytes32 packageId = generatePackageId(packageName);\n Package storage package = packages[packageId];\n bytes32[] memory hashes; // Release ids to return\n uint cursor = offset; // Index counter to traverse DB array\n uint remaining; // Counter to collect `limit` packages\n uint numPackageReleases = package.releaseCount;\t\t // Total number of packages in registry\n\n // Is request within range?\n if (cursor < numPackageReleases){\n\n // Get total remaining records\n remaining = numPackageReleases - cursor;\n\n // Number of records to collect is lesser of `remaining` and `limit`\n if (remaining > limit ){\n remaining = limit;\n }\n\n // Allocate return array\n hashes = new bytes32[](remaining);\n\n // Collect records.\n while(remaining > 0){\n bytes32 packageReleaseId = generatePackageReleaseId(packageId, cursor);\n bytes32 hash = packageReleaseIndex[packageReleaseId];\n hashes[remaining - 1] = hash;\n remaining--;\n cursor++;\n }\n }\n return (hashes, cursor);\n }\n\n\n /// @dev Returns the package data for a release.\n /// @param releaseId Release id\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string memory packageName, string memory version,\n string memory manifestURI\n )\n {\n Release memory targetRelease = releases[releaseId];\n Package memory targetPackage = packages[targetRelease.packageId];\n return (targetPackage.name, targetRelease.version, targetRelease.manifestURI);\n }\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string memory packageName, string memory version)\n public\n view\n onlyIfPackageExists(packageName)\n onlyIfReleaseExists(packageName, version)\n returns (bytes32 releaseId)\n {\n return generateReleaseId(packageName, version);\n }\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds() public view returns (uint totalCount)\n {\n return packageCount;\n }\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string memory packageName)\n public\n view\n onlyIfPackageExists(packageName)\n returns (uint totalCount)\n {\n bytes32 packageId = generatePackageId(packageName);\n Package storage package = packages[packageId];\n return package.releaseCount;\n }\n\n /// @dev Returns a bool indicating whether the given release exists in this registry.\n /// @param packageName Package Name\n /// @param version version\n function releaseExists(string memory packageName, string memory version)\n public\n view\n onlyIfPackageExists(packageName)\n returns (bool)\n {\n bytes32 releaseId = generateReleaseId(packageName, version);\n Release storage targetRelease = releases[releaseId];\n return targetRelease.exists;\n }\n\n /// @dev Returns a bool indicating whether the given package exists in this registry.\n /// @param packageName Package Name\n function packageExists(string memory packageName) public view returns (bool) {\n bytes32 packageId = generatePackageId(packageName);\n return packages[packageId].exists;\n }\n\n //\n // ====================\n // | Hash Functions |\n // ====================\n // \n\n /// @dev Returns name hash for a given package name.\n /// @param name Package name\n function generatePackageId(string memory name)\n public\n pure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(name));\n }\n\n // @dev Returns release id that *would* be generated for a name and version pair on `release`.\n // @param packageName Package name\n // @param version Version string (ex: '1.0.0')\n function generateReleaseId(\n string memory packageName,\n string memory version\n )\n public\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(packageName, version));\n }\n\n function generatePackageReleaseId(\n bytes32 packageId,\n uint packageReleaseCount\n )\n private\n\t\tpure\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(packageId, packageReleaseCount));\n }\n\n\n //\n // ================\n // | Validation |\n // ================\n //\n\n /// @dev Returns boolean whether the provided package name is valid.\n /// @param name The name of the package.\n function validatePackageName(string memory name)\n public\n pure\n returns (bool)\n {\n require (bytes(name).length > 2 && bytes(name).length < 255, \"invalid-package-name\");\n }\n\n /// @dev Returns boolean whether the input string has a length\n /// @param value The string to validate.\n function validateStringIdentifier(string memory value)\n public\n pure\n returns (bool)\n {\n require (bytes(value).length != 0, \"invalid-string-identifier\");\n }\n}","installPath":"./PackageRegistry.sol","type":"solidity"},"./PackageRegistryInterface.sol":{"content":"pragma solidity >=0.5.10;\n\n\n/// @title EIP 1319 Smart Contract Package Registry Interface\n/// @author Piper Merriam , Christopher Gewecke \ncontract PackageRegistryInterface {\n\n //\n // +-------------+\n // | Write API |\n // +-------------+\n //\n\n /// @dev Creates a a new release for the named package.\n /// @notice Will create a new release the given package with the given release information.\n /// @param packageName Package name\n /// @param version Version string (ex: 1.0.0)\n /// @param manifestURI The URI for the release manifest for this release.\n function release(\n string memory packageName,\n string memory version,\n string memory manifestURI\n )\n public\n returns (bytes32 releaseId);\n\n //\n // +------------+\n // | Read API |\n // +------------+\n //\n\n /// @dev Returns the string name of the package associated with a package id\n /// @param packageId The package id to look up\n function getPackageName(bytes32 packageId)\n public\n view\n returns (string memory packageName);\n\n /// @dev Returns a slice of the array of all package ids for the named package.\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllPackageIds(uint offset, uint limit)\n public\n view\n returns (\n bytes32[] memory packageIds,\n uint pointer\n );\n\n /// @dev Returns a slice of the array of all release hashes for the named package.\n /// @param packageName Package name\n /// @param offset The starting index for the slice.\n /// @param limit The length of the slice\n function getAllReleaseIds(string memory packageName, uint offset, uint limit)\n public\n view\n returns (\n bytes32[] memory releaseIds,\n uint pointer\n );\n\n /// @dev Returns the package data for a release.\n /// @param releaseId Release id\n function getReleaseData(bytes32 releaseId)\n public\n view\n returns (\n string memory packageName,\n string memory version,\n string memory manifestURI\n );\n\n // @dev Returns release id that *would* be generated for a name and version pair on `release`.\n // @param packageName Package name\n // @param version Version string (ex: '1.0.0')\n function generateReleaseId(string memory packageName, string memory version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the release id for a given name and version pair if present on registry.\n /// @param packageName Package name\n /// @param version Version string(ex: '1.0.0')\n function getReleaseId(string memory packageName, string memory version)\n public\n view\n returns (bytes32 releaseId);\n\n /// @dev Returns the number of packages stored on the registry\n function numPackageIds() public view returns (uint totalCount);\n\n /// @dev Returns the number of releases for a given package name on the registry\n /// @param packageName Package name\n function numReleaseIds(string memory packageName) public view returns (uint totalCount);\n}","installPath":"./PackageRegistryInterface.sol","type":"solidity"}},"version":"1.0.0"} \ No newline at end of file diff --git a/ethpm/assets/spec/package.spec.json b/ethpm/assets/spec/package.spec.json deleted file mode 100644 index 401f6463de..0000000000 --- a/ethpm/assets/spec/package.spec.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "title": "EthPM Manifest Specification", - "type": "object", - "required": [ - "manifest_version", - "package_name", - "version" - ], - "version": "2", - "properties": { - "manifest_version": { - "type": "string", - "title": "EthPM Manifest Version", - "default": "2", - "enum": ["2"] - }, - "package_name": { - "title": "The name of the package that this release is for", - "type": "string", - "pattern": "^[a-z][-a-z0-9]{0,255}$" - }, - "meta": { - "$ref": "#/definitions/PackageMeta" - }, - "version": { - "title": "Version", - "type": "string" - }, - "sources": { - "title": "Sources", - "type": "object", - "patternProperties": { - "\\.\\/.*": { - "anyOf": [ - { - "title": "Source code", - "type": "string" - }, - { - "$ref": "#/definitions/ContentURI" - } - ] - } - } - }, - "contract_types": { - "title": "The contract types included in this release", - "type": "object", - "patternProperties": { - "[a-zA-Z][-a-zA-Z0-9_]{0,255}(?:\\[[-a-zA-Z0-9]{1,256}\\])?$": { - "$ref": "#/definitions/ContractType" - } - } - }, - "deployments": { - "title": "The deployed contract instances in this release", - "type": "object", - "patternProperties": { - "^blockchain\\://[0-9a-zA-Z]{64}/block/[0-9a-zA-Z]{64}$": { - "type": "object", - "patternProperties": { - "^[a-zA-Z][a-zA-Z0-9_]{0,255}$": { - "$ref": "#/definitions/ContractInstance" - } - } - } - } - }, - "build_dependencies": { - "title": "Build Dependencies", - "type": "object", - "patternProperties": { - "^[a-z][-a-z0-9]{0,255}$": { - "$ref": "#/definitions/ContentURI" - } - } - } - }, - "definitions": { - "PackageMeta": { - "title": "Metadata about the package", - "type": "object", - "properties": { - "authors": { - "title": "Package authors", - "type": "array", - "items": { - "type": "string" - } - }, - "license": { - "title": "The license that this package and it's source are released under", - "type": "string" - }, - "description": { - "title": "Description of this package", - "type": "string" - }, - "keywords": { - "title": "Keywords that apply to this package", - "type": "array", - "items": { - "type": "string" - } - }, - "links": { - "title": "URIs for resources related to this package", - "type": "object", - "additionalProperties": { - "type": "string", - "format": "URI" - } - } - } - }, - "ContractType": { - "title": "Data for a contract type included in this package", - "type": "object", - "properties":{ - "contract_name": { - "title": "The name for this contract type as found in the project source code.", - "type": "string", - "pattern": "[a-zA-Z][a-zA-Z0-9_]{0,255}" - }, - "deployment_bytecode": { - "$ref": "#/definitions/BytecodeObject" - }, - "runtime_bytecode": { - "$ref": "#/definitions/BytecodeObject" - }, - "abi": { - "title": "The ABI for this contract type", - "type": "array" - }, - "natspec": { - "title": "The combined user-doc and dev-doc for this contract", - "type": "object" - }, - "compiler": { - "$ref": "#/definitions/CompilerInformation" - } - } - }, - "ContractInstance": { - "title": "Data for a deployed instance of a contract", - "type": "object", - "required": [ - "contract_type" - ], - "properties": { - "contract_type": { - "title": "The contract type of this contract instance", - "type": "string", - "pattern": "^(?:[a-z][-a-z0-9]{0,255}\\:)?[a-zA-Z][-a-zA-Z0-9_]{0,255}(?:\\[[-a-zA-Z0-9]{1,256}\\])?$" - }, - "address": { - "$ref": "#/definitions/Address" - }, - "transaction": { - "$ref": "#/definitions/TransactionHash" - }, - "block": { - "$ref": "#/definitions/BlockHash" - }, - "runtime_bytecode": { - "$ref": "#/definitions/BytecodeObject" - }, - "compiler": { - "$ref": "#/definitions/CompilerInformation" - }, - "link_dependencies": { - "title": "The values for the link references found within this contract instances runtime bytecode", - "type": "array", - "items": { - "$ref": "#/definitions/LinkValue" - } - } - } - }, - "ByteString": { - "title": "Byte String", - "description": "0x-prefixed hexadecimal string representing bytes", - "type": "string", - "pattern": "^0x([0-9a-fA-F]{2})*$" - }, - "BytecodeObject": { - "title": "Contract bytecode", - "type": "object", - "anyOf": [ - {"required": ["bytecode"]}, - {"required": ["link_dependencies"]} - ], - "properties": { - "bytecode": { - "$ref": "#/definitions/ByteString" - }, - "link_references": { - "type": "array", - "items": { - "$ref": "#/definitions/LinkReference" - } - }, - "link_dependencies": { - "type": "array", - "items": { - "$ref": "#/definitions/LinkValue" - } - } - } - }, - "LinkReference": { - "title": "A defined location in some bytecode which requires linking", - "type": "object", - "required": [ - "offsets", - "length", - "name" - ], - "properties": { - "offsets": { - "type": "array", - "items": { - "type": "integer", - "minimum": 0 - } - }, - "length": { - "type": "integer", - "minimum": 1 - }, - "name": { - "$ref": "#/definitions/Identifier" - } - } - }, - "LinkValue": { - "title": "A value for an individual link reference in a contract's bytecode", - "type": "object", - "required": [ - "offsets", - "type", - "value" - ], - "properties": { - "offsets": { - "type": "array", - "items": { - "type": "integer", - "minimum": 0 - } - }, - "type": { - "title": "The type of link value", - "type": "string" - }, - "value": { - "title": "The value for the link reference" - } - }, - "oneOf": [{ - "properties": { - "type": { - "enum": ["literal"] - }, - "value": { - "$ref": "#/definitions/ByteString" - } - } - }, { - "properties": { - "type": { - "enum": ["reference"] - }, - "value": { - "anyOf": [ - {"$ref": "#/definitions/ContractInstanceName"}, - {"$ref": "#/definitions/PackageContractInstanceName"} - ] - } - } - }] - }, - "Identifier": { - "title": "Identifier", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9_]{0,255}$" - }, - "ContractInstanceName": { - "title": "The name of the deployed contract instance", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9_]{0,255}$" - }, - "PackageContractInstanceName": { - "title": "The path to a deployed contract instance somewhere down the dependency tree", - "type": "string", - "pattern": "^([a-z][-a-z0-9]{0,255}\\:)+[a-zA-Z][a-zA-Z0-9_]{0,255}$" - }, - "CompilerInformation": { - "title": "Information about the software that was used to compile a contract type or instance", - "type": "object", - "required": [ - "name", - "version" - ], - "properties": { - "name": { - "title": "The name of the compiler", - "type": "string" - }, - "version": { - "title": "The version string for the compiler", - "type": "string" - }, - "settings": { - "title": "The settings used for compilation", - "type": "object" - } - } - }, - "Address": { - "title": "An Ethereum address", - "allOf": [ - { "$ref": "#/definitions/ByteString" }, - { "minLength": 42, "maxLength": 42 } - ] - }, - "TransactionHash": { - "title": "An Ethereum transaction hash", - "allOf": [ - { "$ref": "#/definitions/ByteString" }, - { "minLength": 66, "maxLength": 66 } - ] - }, - "BlockHash": { - "title": "An Ethereum block hash", - "allOf": [ - { "$ref": "#/definitions/ByteString" }, - { "minLength": 66, "maxLength": 66 } - ] - }, - "ContentURI": { - "title": "An content addressable URI", - "type": "string", - "format": "uri" - } - } -} diff --git a/ethpm/assets/standard-token/1.0.0-pretty.json b/ethpm/assets/standard-token/1.0.0-pretty.json deleted file mode 100644 index 7ad60fe7f0..0000000000 --- a/ethpm/assets/standard-token/1.0.0-pretty.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "manifest_version":"2", - "version":"1.0.0", - "package_name":"standard-token", - "sources":{ - "./contracts/AbstractToken.sol":"ipfs://Qma8tiYLSYGSjbLVn4RbTHBt2LBUXe2ADb37NVsG5UgXea", - "./contracts/StandardToken.sol":"ipfs://QmRJHLmPVct2rbBpdGjP3xkXbF7romQigtmcs8TRfV1yC7" - }, - "contract_types":{ - "StandardToken":{ - "abi": [{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}], - "natspec":{ - "author":"Stefan George - ", - "methods":{ - "allowance(address,address)":{ - "details":"Returns number of allowed tokens for given address.", - "params":{ - "_owner":"Address of token owner.", - "_spender":"Address of token spender." - } - }, - "approve(address,uint256)":{ - "details":"Sets approved amount of tokens for spender. Returns success.", - "params":{ - "_spender":"Address of allowed account.", - "_value":"Number of approved tokens." - } - }, - "balanceOf(address)":{ - "details":"Returns number of tokens owned by given address.", - "params":{ - "_owner":"Address of token owner." - } - }, - "transfer(address,uint256)":{ - "details":"Transfers sender's tokens to a given address. Returns success.", - "params":{ - "_to":"Address of token receiver.", - "_value":"Number of tokens to transfer." - } - }, - "transferFrom(address,address,uint256)":{ - "details":"Allows allowed third party to transfer tokens from one address to another. Returns success.", - "params":{ - "_from":"Address from where tokens are withdrawn.", - "_to":"Address to where tokens are sent.", - "_value":"Number of tokens to transfer." - } - } - }, - "title":"Standard token contract" - } - } - } -} diff --git a/ethpm/assets/standard-token/1.0.0.json b/ethpm/assets/standard-token/1.0.0.json deleted file mode 100644 index 6a188dc8e3..0000000000 --- a/ethpm/assets/standard-token/1.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"StandardToken":{"abi":[{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}],"natspec":{"author":"Stefan George - ","methods":{"allowance(address,address)":{"details":"Returns number of allowed tokens for given address.","params":{"_owner":"Address of token owner.","_spender":"Address of token spender."}},"approve(address,uint256)":{"details":"Sets approved amount of tokens for spender. Returns success.","params":{"_spender":"Address of allowed account.","_value":"Number of approved tokens."}},"balanceOf(address)":{"details":"Returns number of tokens owned by given address.","params":{"_owner":"Address of token owner."}},"transfer(address,uint256)":{"details":"Transfers sender's tokens to a given address. Returns success.","params":{"_to":"Address of token receiver.","_value":"Number of tokens to transfer."}},"transferFrom(address,address,uint256)":{"details":"Allows allowed third party to transfer tokens from one address to another. Returns success.","params":{"_from":"Address from where tokens are withdrawn.","_to":"Address to where tokens are sent.","_value":"Number of tokens to transfer."}}},"title":"Standard token contract"}}},"manifest_version":"2","package_name":"standard-token","sources":{"./AbstractToken.sol":"ipfs://QmPhSGPNTXaan32P9hZGVFSuzDZkto1H9LNdESZMMF6R3m","./StandardToken.sol":"ipfs://QmRJHLmPVct2rbBpdGjP3xkXbF7romQigtmcs8TRfV1yC7"},"version":"1.0.0"} diff --git a/ethpm/assets/standard-token/1.0.1.json b/ethpm/assets/standard-token/1.0.1.json deleted file mode 100644 index 5600ccd14d..0000000000 --- a/ethpm/assets/standard-token/1.0.1.json +++ /dev/null @@ -1 +0,0 @@ -{"contract_types":{"StandardToken":{"abi":[{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}],"deployment_bytecode":{"bytecode":"0x608060405234801561001057600080fd5b506040516020806109748339810180604052810190808051906020019092919050505080600281905550806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350610897806100dd6000396000f300608060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007d57806318160ddd146100e257806323b872dd1461010d57806370a0823114610192578063a9059cbb146101e9578063dd62ed3e1461024e575b600080fd5b34801561008957600080fd5b506100c8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102c5565b604051808215151515815260200191505060405180910390f35b3480156100ee57600080fd5b506100f76103b7565b6040518082815260200191505060405180910390f35b34801561011957600080fd5b50610178600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103bd565b604051808215151515815260200191505060405180910390f35b34801561019e57600080fd5b506101d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610636565b6040518082815260200191505060405180910390f35b3480156101f557600080fd5b50610234600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061067e565b604051808215151515815260200191505060405180910390f35b34801561025a57600080fd5b506102af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107e4565b6040518082815260200191505060405180910390f35b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60025481565b6000816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610489575081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104955750600082115b1561062a57816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905061062f565b600090505b9392505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106ce5750600082115b156107d957816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506107de565b600090505b92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a72305820ebfb7c06473e53e0f620118e90dbccc2833e70a791699a5c51045f1a377d26ac0029"}},"Token":{"abi":[{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}],"deployment_bytecode":{"bytecode":"0x"}}},"manifest_version":"2","package_name":"standard-token","sources":{"./AbstractToken.sol":"ipfs://QmPhSGPNTXaan32P9hZGVFSuzDZkto1H9LNdESZMMF6R3m","./StandardToken.sol":"ipfs://QmRJHLmPVct2rbBpdGjP3xkXbF7romQigtmcs8TRfV1yC7"},"version":"1.0.1"} \ No newline at end of file diff --git a/ethpm/assets/standard-token/contracts/AbstractToken.sol b/ethpm/assets/standard-token/contracts/AbstractToken.sol deleted file mode 100644 index 967db47a37..0000000000 --- a/ethpm/assets/standard-token/contracts/AbstractToken.sol +++ /dev/null @@ -1,19 +0,0 @@ -pragma solidity ^0.4.24; - - -/// Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20 - -/// @title Abstract token contract - Functions to be implemented by token contracts. -/// @author Stefan George - -contract Token { - // This is not an abstract function, because solc won't recognize generated getter functions for public variables as functions - function totalSupply() public pure returns (uint256) {} - function balanceOf(address owner) public view returns (uint256 balance); - function transfer(address to, uint256 value) public returns (bool success); - function transferFrom(address from, address to, uint256 value) public returns (bool success); - function approve(address spender, uint256 value) public returns (bool success); - function allowance(address owner, address spender) public view returns (uint256 remaining); - - event Transfer(address indexed from, address indexed to, uint256 value); - event Approval(address indexed owner, address indexed spender, uint256 value); -} diff --git a/ethpm/assets/standard-token/contracts/StandardToken.sol b/ethpm/assets/standard-token/contracts/StandardToken.sol deleted file mode 100644 index 07f3f3ac69..0000000000 --- a/ethpm/assets/standard-token/contracts/StandardToken.sol +++ /dev/null @@ -1,83 +0,0 @@ -pragma solidity ^0.4.24; - - -import "./AbstractToken.sol"; - - -/// @title Standard token contract -/// @author Stefan George - -contract StandardToken is Token { - /* - * Data structures - */ - mapping (address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; - - constructor (uint _totalSupply) public { - totalSupply = _totalSupply; - balances[msg.sender] = _totalSupply; - emit Transfer(0x0, msg.sender, _totalSupply); - } - - /* - * Read and write storage functions - */ - /// @dev Transfers sender's tokens to a given address. Returns success. - /// @param _to Address of token receiver. - /// @param _value Number of tokens to transfer. - function transfer(address _to, uint256 _value) public returns (bool success) { - if (balances[msg.sender] >= _value && _value > 0) { - balances[msg.sender] -= _value; - balances[_to] += _value; - emit Transfer(msg.sender, _to, _value); - return true; - } - else { - return false; - } - } - - /// @dev Allows allowed third party to transfer tokens from one address to another. Returns success. - /// @param _from Address from where tokens are withdrawn. - /// @param _to Address to where tokens are sent. - /// @param _value Number of tokens to transfer. - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { - balances[_to] += _value; - balances[_from] -= _value; - allowed[_from][msg.sender] -= _value; - emit Transfer(_from, _to, _value); - return true; - } - else { - return false; - } - } - - /// @dev Returns number of tokens owned by given address. - /// @param _owner Address of token owner. - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balances[_owner]; - } - - /// @dev Sets approved amount of tokens for spender. Returns success. - /// @param _spender Address of allowed account. - /// @param _value Number of approved tokens. - function approve(address _spender, uint256 _value) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - - /* - * Read storage functions - */ - /// @dev Returns number of allowed tokens for given address. - /// @param _owner Address of token owner. - /// @param _spender Address of token spender. - function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - -} diff --git a/ethpm/assets/standard-token/output_v3.json b/ethpm/assets/standard-token/output_v3.json new file mode 100644 index 0000000000..d5c729d02a --- /dev/null +++ b/ethpm/assets/standard-token/output_v3.json @@ -0,0 +1 @@ +{"contracts":{"AbstractToken.sol":{"Token":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Stefan George - ","methods":{},"title":"Abstract token contract - Functions to be implemented by token contracts."},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""}},"metadata":"{\"compiler\":{\"version\":\"0.6.8+commit.0bbfe453\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Stefan George - \",\"methods\":{},\"title\":\"Abstract token contract - Functions to be implemented by token contracts.\"},\"userdoc\":{\"methods\":{},\"notice\":\"Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20\"}},\"settings\":{\"compilationTarget\":{\"AbstractToken.sol\":\"Token\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"AbstractToken.sol\":{\"keccak256\":\"0x55bdbe74194dd5060d7ad06fc3ad21f7eddee9a2eca40fa69e949ccb13daf0fd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5f917468d2d1e99ef7fe60eb3f706f3073e8e3ab4e23136f50efc60a23a4943\",\"dweb:/ipfs/QmXhHfLcnDTK6bnYj8xGKoJeDpyWqvGK4a1BENPrQvDJwj\"]}},\"version\":1}","userdoc":{"methods":{},"notice":"Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20"}}},"StandardToken.sol":{"StandardToken":{"abi":[{"inputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Stefan George - ","methods":{"allowance(address,address)":{"details":"Returns number of allowed tokens for given address.","params":{"_owner":"Address of token owner.","_spender":"Address of token spender."}},"approve(address,uint256)":{"details":"Sets approved amount of tokens for spender. Returns success.","params":{"_spender":"Address of allowed account.","_value":"Number of approved tokens."}},"balanceOf(address)":{"details":"Returns number of tokens owned by given address.","params":{"_owner":"Address of token owner."}},"transfer(address,uint256)":{"details":"Transfers sender's tokens to a given address. Returns success.","params":{"_to":"Address of token receiver.","_value":"Number of tokens to transfer."}},"transferFrom(address,address,uint256)":{"details":"Allows allowed third party to transfer tokens from one address to another. Returns success.","params":{"_from":"Address from where tokens are withdrawn.","_to":"Address to where tokens are sent.","_value":"Number of tokens to transfer."}}},"title":"Standard token contract"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b506040516104713803806104718339818101604052602081101561003357600080fd5b5051600281905533600081815260208181526040808320859055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506103e28061008f6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063095ea7b31461006757806318160ddd146100a757806323b872dd146100c157806370a08231146100f7578063a9059cbb1461011d578063dd62ed3e14610149575b600080fd5b6100936004803603604081101561007d57600080fd5b506001600160a01b038135169060200135610177565b604080519115158252519081900360200190f35b6100af6101de565b60408051918252519081900360200190f35b610093600480360360608110156100d757600080fd5b506001600160a01b038135811691602081013590911690604001356101e4565b6100af6004803603602081101561010d57600080fd5b50356001600160a01b03166102cf565b6100936004803603604081101561013357600080fd5b506001600160a01b0381351690602001356102ea565b6100af6004803603604081101561015f57600080fd5b506001600160a01b0381358116916020013516610381565b3360008181526001602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60025481565b6001600160a01b038316600090815260208190526040812054821180159061022f57506001600160a01b03841660009081526001602090815260408083203384529091529020548211155b801561023b5750600082115b156102c4576001600160a01b0380841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060016102c8565b5060005b9392505050565b6001600160a01b031660009081526020819052604090205490565b3360009081526020819052604081205482118015906103095750600082115b156103795733600081815260208181526040808320805487900390556001600160a01b03871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060016101d8565b5060006101d8565b6001600160a01b0391821660009081526001602090815260408083209390941682529190915220549056fea26469706673582212201ef3e86e50930613493a96a0bf1506fd0a0722a20b7070971329129410e1d80e64736f6c63430006080033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x471 CODESIZE SUB DUP1 PUSH2 0x471 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 DUP2 SWAP1 SSTORE CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH2 0x3E2 DUP1 PUSH2 0x8F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0xF7 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x149 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x93 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x177 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xAF PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x93 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1E4 JUMP JUMPDEST PUSH2 0xAF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2CF JUMP JUMPDEST PUSH2 0x93 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x2EA JUMP JUMPDEST PUSH2 0xAF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x15F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x381 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT DUP1 ISZERO SWAP1 PUSH2 0x22F JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x23B JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 ADD SWAP1 SSTORE SWAP4 DUP9 AND DUP1 DUP4 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE PUSH1 0x1 DUP3 MSTORE DUP5 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 PUSH2 0x2C8 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT DUP1 ISZERO SWAP1 PUSH2 0x309 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST ISZERO PUSH2 0x379 JUMPI CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP5 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 PUSH2 0x1D8 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1E RETURN 0xE8 PUSH15 0x50930613493A96A0BF1506FD0A0722 LOG2 SIGNEXTEND PUSH17 0x70971329129410E1D80E64736F6C634300 MOD ADDMOD STOP CALLER ","sourceMap":"183:2765:1:-:0;;;408:188;5:9:-1;2:2;;;27:1;24;17:12;2:2;408:188:1;;;;;;;;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;408:188:1;457:11;:26;;;502:10;493:8;:20;;;408:188;493:20;;;;;;;:35;;;543:46;;;;;;;;;;;;;;;;;;408:188;183:2765;;;;;;"}},"metadata":"{\"compiler\":{\"version\":\"0.6.8+commit.0bbfe453\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Stefan George - \",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns number of allowed tokens for given address.\",\"params\":{\"_owner\":\"Address of token owner.\",\"_spender\":\"Address of token spender.\"}},\"approve(address,uint256)\":{\"details\":\"Sets approved amount of tokens for spender. Returns success.\",\"params\":{\"_spender\":\"Address of allowed account.\",\"_value\":\"Number of approved tokens.\"}},\"balanceOf(address)\":{\"details\":\"Returns number of tokens owned by given address.\",\"params\":{\"_owner\":\"Address of token owner.\"}},\"transfer(address,uint256)\":{\"details\":\"Transfers sender's tokens to a given address. Returns success.\",\"params\":{\"_to\":\"Address of token receiver.\",\"_value\":\"Number of tokens to transfer.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Allows allowed third party to transfer tokens from one address to another. Returns success.\",\"params\":{\"_from\":\"Address from where tokens are withdrawn.\",\"_to\":\"Address to where tokens are sent.\",\"_value\":\"Number of tokens to transfer.\"}}},\"title\":\"Standard token contract\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"StandardToken.sol\":\"StandardToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"AbstractToken.sol\":{\"keccak256\":\"0x55bdbe74194dd5060d7ad06fc3ad21f7eddee9a2eca40fa69e949ccb13daf0fd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5f917468d2d1e99ef7fe60eb3f706f3073e8e3ab4e23136f50efc60a23a4943\",\"dweb:/ipfs/QmXhHfLcnDTK6bnYj8xGKoJeDpyWqvGK4a1BENPrQvDJwj\"]},\"StandardToken.sol\":{\"keccak256\":\"0xff79ded4ad8e86320abfe51b9b98aba598ff6b071bc84cf45f4b74ec028063ca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f428e1fdb75ab6b33f76241a113d8cfd473a272ed7c194a6d405fbf2d835ea33\",\"dweb:/ipfs/QmUofKBtNJVaqoSAtnHfrarJyyLm1oMUTAK4yCtnmYMJVy\"]}},\"version\":1}","userdoc":{"methods":{}}}}},"sources":{"AbstractToken.sol":{"id":0},"StandardToken.sol":{"id":1}}} diff --git a/ethpm/assets/standard-token/standard_token_compiler_output.json b/ethpm/assets/standard-token/standard_token_compiler_output.json deleted file mode 100644 index 9d6a547609..0000000000 --- a/ethpm/assets/standard-token/standard_token_compiler_output.json +++ /dev/null @@ -1 +0,0 @@ -{"contracts":{"./AbstractToken.sol":{"Token":{"abi":[{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}],"devdoc":{"author":"Stefan George - ","methods":{},"title":"Abstract token contract - Functions to be implemented by token contracts."},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""}},"userdoc":{"methods":{}}}},"./StandardToken.sol":{"StandardToken":{"abi":[{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}],"devdoc":{"author":"Stefan George - ","methods":{"allowance(address,address)":{"details":"Returns number of allowed tokens for given address.","params":{"_owner":"Address of token owner.","_spender":"Address of token spender."}},"approve(address,uint256)":{"details":"Sets approved amount of tokens for spender. Returns success.","params":{"_spender":"Address of allowed account.","_value":"Number of approved tokens."}},"balanceOf(address)":{"details":"Returns number of tokens owned by given address.","params":{"_owner":"Address of token owner."}},"transfer(address,uint256)":{"details":"Transfers sender's tokens to a given address. Returns success.","params":{"_to":"Address of token receiver.","_value":"Number of tokens to transfer."}},"transferFrom(address,address,uint256)":{"details":"Allows allowed third party to transfer tokens from one address to another. Returns success.","params":{"_from":"Address from where tokens are withdrawn.","_to":"Address to where tokens are sent.","_value":"Number of tokens to transfer."}}},"title":"Standard token contract"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b506040516020806109748339810180604052810190808051906020019092919050505080600281905550806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350610897806100dd6000396000f300608060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007d57806318160ddd146100e257806323b872dd1461010d57806370a0823114610192578063a9059cbb146101e9578063dd62ed3e1461024e575b600080fd5b34801561008957600080fd5b506100c8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102c5565b604051808215151515815260200191505060405180910390f35b3480156100ee57600080fd5b506100f76103b7565b6040518082815260200191505060405180910390f35b34801561011957600080fd5b50610178600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103bd565b604051808215151515815260200191505060405180910390f35b34801561019e57600080fd5b506101d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610636565b6040518082815260200191505060405180910390f35b3480156101f557600080fd5b50610234600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061067e565b604051808215151515815260200191505060405180910390f35b34801561025a57600080fd5b506102af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107e4565b6040518082815260200191505060405180910390f35b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60025481565b6000816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610489575081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104955750600082115b1561062a57816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905061062f565b600090505b9392505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106ce5750600082115b156107d957816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506107de565b600090505b92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a72305820ebfb7c06473e53e0f620118e90dbccc2833e70a791699a5c51045f1a377d26ac0029","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH2 0x974 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP1 PUSH1 0x2 DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x897 DUP1 PUSH2 0xDD PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x78 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x24E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF7 PUSH2 0x3B7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x178 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3BD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D3 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x636 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x67E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x7E4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD LT ISZERO DUP1 ISZERO PUSH2 0x489 JUMPI POP DUP2 PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD LT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x495 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST ISZERO PUSH2 0x62A JUMPI DUP2 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP1 POP PUSH2 0x62F JUMP JUMPDEST PUSH1 0x0 SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD LT ISZERO DUP1 ISZERO PUSH2 0x6CE JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST ISZERO PUSH2 0x7D9 JUMPI DUP2 PUSH1 0x0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP1 POP PUSH2 0x7DE JUMP JUMPDEST PUSH1 0x0 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xeb CREATE2 PUSH29 0x6473E53E0F620118E90DBCCC2833E70A791699A5C51045F1A377D26AC STOP 0x29 ","sourceMap":"152:2712:1:-;;;368:181;8:9:-1;5:2;;;30:1;27;20:12;5:2;368:181:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;431:12;417:11;:26;;;;476:12;453:8;:20;462:10;453:20;;;;;;;;;;;;;;;:35;;;;517:10;503:39;;512:3;503:39;529:12;503:39;;;;;;;;;;;;;;;;;;368:181;152:2712;;;;;;"}},"userdoc":{"methods":{}}}}},"sources":{"./AbstractToken.sol":{"id":0},"./StandardToken.sol":{"id":1}}} diff --git a/ethpm/assets/standard-token/with_bytecode_v3.json b/ethpm/assets/standard-token/with_bytecode_v3.json new file mode 100644 index 0000000000..9cb75f9cb9 --- /dev/null +++ b/ethpm/assets/standard-token/with_bytecode_v3.json @@ -0,0 +1 @@ +{"contractTypes":{"StandardToken":{"abi":[{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}],"deploymentBytecode":{"bytecode":"0x608060405234801561001057600080fd5b506040516020806109748339810180604052810190808051906020019092919050505080600281905550806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350610897806100dd6000396000f300608060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007d57806318160ddd146100e257806323b872dd1461010d57806370a0823114610192578063a9059cbb146101e9578063dd62ed3e1461024e575b600080fd5b34801561008957600080fd5b506100c8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102c5565b604051808215151515815260200191505060405180910390f35b3480156100ee57600080fd5b506100f76103b7565b6040518082815260200191505060405180910390f35b34801561011957600080fd5b50610178600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103bd565b604051808215151515815260200191505060405180910390f35b34801561019e57600080fd5b506101d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610636565b6040518082815260200191505060405180910390f35b3480156101f557600080fd5b50610234600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061067e565b604051808215151515815260200191505060405180910390f35b34801561025a57600080fd5b506102af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107e4565b6040518082815260200191505060405180910390f35b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60025481565b6000816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610489575081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104955750600082115b1561062a57816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905061062f565b600090505b9392505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106ce5750600082115b156107d957816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506107de565b600090505b92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a72305820ebfb7c06473e53e0f620118e90dbccc2833e70a791699a5c51045f1a377d26ac0029"}},"Token":{"abi":[{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}],"deploymentBytecode":{"bytecode":"0x"}}},"manifest":"ethpm/3","name":"standard-token","sources":{"./AbstractToken.sol":{"urls":["ipfs://QmPhSGPNTXaan32P9hZGVFSuzDZkto1H9LNdESZMMF6R3m"]},"./StandardToken.sol":{"urls":["ipfs://QmRJHLmPVct2rbBpdGjP3xkXbF7romQigtmcs8TRfV1yC7"]}},"version":"1.0.1"} diff --git a/ethpm/assets/transferable/1.0.0-pretty.json b/ethpm/assets/transferable/1.0.0-pretty.json deleted file mode 100644 index d09e7670e8..0000000000 --- a/ethpm/assets/transferable/1.0.0-pretty.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "manifest_version":"2", - "version":"1.0.0", - "package_name":"transferable", - "meta":{ - "license":"MIT", - "authors":[ - "Piper Merriam " - ], - "description":"Reusable contracts which implement a privileged 'owner' model for authorization with functionality for transfering ownership.", - "keywords":[ - "authorization" - ] - }, - "sources":{ - "./contracts/Transferable.sol":"ipfs://QmZYkdUUTwREjfy4vQc3enzu6WKk8eNyvGERqy1cNNVkAD" - }, - "build_dependencies":{ - "owned":"ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW" - } -} diff --git a/ethpm/assets/transferable/1.0.0.json b/ethpm/assets/transferable/1.0.0.json deleted file mode 100644 index 3629a80402..0000000000 --- a/ethpm/assets/transferable/1.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"build_dependencies":{"owned":"ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW"},"manifest_version":"2","meta":{"authors":["Piper Merriam "],"description":"Reusable contracts which implement a privileged 'owner' model for authorization with functionality for transfering ownership.","keywords":["authorization"],"license":"MIT"},"package_name":"transferable","sources":{"./contracts/Transferable.sol":"ipfs://QmZYkdUUTwREjfy4vQc3enzu6WKk8eNyvGERqy1cNNVkAD"},"version":"1.0.0"} diff --git a/ethpm/assets/wallet-with-send/1.0.0-pretty.json b/ethpm/assets/wallet-with-send/1.0.0-pretty.json deleted file mode 100644 index 752517dc01..0000000000 --- a/ethpm/assets/wallet-with-send/1.0.0-pretty.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "manifest_version": "2", - "version": "1.0.0", - "package_name": "wallet-with-send", - "sources": { - "./contracts/WalletWithSend.sol": "ipfs://QmRvVRn6USxJu1H4L51KyzxbQFVmCFqdzB4RAG9VeJ2s4W" - }, - "contract_types": { - "WalletWithSend": { - "deployment_bytecode": { - "bytecode": "0x608060405260008054600160a060020a03191633179055610395806100256000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b381146100705780632e1a7d4d146100a8578063c577ff8b146100c0578063d0679d34146100e6575b34801561006d57600080fd5b50005b34801561007c57600080fd5b50610094600160a060020a036004351660243561010a565b604080519115158252519081900360200190f35b3480156100b457600080fd5b50610094600435610147565b3480156100cc57600080fd5b506100e4600435600160a060020a0360243516610233565b005b3480156100f257600080fd5b50610094600160a060020a0360043516602435610326565b60008054600160a060020a0316331461012257600080fd5b50600160a060020a038216600090815260016020819052604090912082905592915050565b3360009081526001602090815260408083205481517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905290517300000000000000000000000000000000000000009263a293d1e89260448082019391829003018186803b1580156101c757600080fd5b505af41580156101db573d6000803e3d6000fd5b505050506040513d60208110156101f157600080fd5b505133600081815260016020526040808220939093559151909184156108fc02918591818181858888f19350505050151561022b57600080fd5b506001919050565b336000908152600160209081526040918290205482517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905291517300000000000000000000000000000000000000009263a293d1e8926044808301939192829003018186803b1580156102b557600080fd5b505af41580156102c9573d6000803e3d6000fd5b505050506040513d60208110156102df57600080fd5b505133600090815260016020526040808220929092559051600160a060020a0383169184156108fc02918591818181858888f19350505050151561032257600080fd5b5050565b60008054600160a060020a0316331461033e57600080fd5b604051600160a060020a0384169083156108fc029084906000818181858888f19796505050505050505600a165627a7a72305820127a404b857b83aa26a51d55d8283bff1dfb5c18217a999c5fbd2862d240fb760029", - "link_references": [{ - "offsets": [439, 676], - "length": 20, - "name": "SafeSendLib" - }] - }, - "runtime_bytecode": { - "bytecode": "0x6080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b381146100705780632e1a7d4d146100a8578063c577ff8b146100c0578063d0679d34146100e6575b34801561006d57600080fd5b50005b34801561007c57600080fd5b50610094600160a060020a036004351660243561010a565b604080519115158252519081900360200190f35b3480156100b457600080fd5b50610094600435610147565b3480156100cc57600080fd5b506100e4600435600160a060020a0360243516610233565b005b3480156100f257600080fd5b50610094600160a060020a0360043516602435610326565b60008054600160a060020a0316331461012257600080fd5b50600160a060020a038216600090815260016020819052604090912082905592915050565b3360009081526001602090815260408083205481517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905290517300000000000000000000000000000000000000009263a293d1e89260448082019391829003018186803b1580156101c757600080fd5b505af41580156101db573d6000803e3d6000fd5b505050506040513d60208110156101f157600080fd5b505133600081815260016020526040808220939093559151909184156108fc02918591818181858888f19350505050151561022b57600080fd5b506001919050565b336000908152600160209081526040918290205482517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905291517300000000000000000000000000000000000000009263a293d1e8926044808301939192829003018186803b1580156102b557600080fd5b505af41580156102c9573d6000803e3d6000fd5b505050506040513d60208110156102df57600080fd5b505133600090815260016020526040808220929092559051600160a060020a0383169184156108fc02918591818181858888f19350505050151561032257600080fd5b5050565b60008054600160a060020a0316331461033e57600080fd5b604051600160a060020a0384169083156108fc029084906000818181858888f19796505050505050505600a165627a7a72305820127a404b857b83aa26a51d55d8283bff1dfb5c18217a999c5fbd2862d240fb760029", - "link_references": [{ - "offsets": [402, 639], - "length": 20, - "name": "SafeSendLib" - }] - }, - "abi": [ - { - "constant": false, - "inputs": [ - {"name": "recipient", "type": "address"}, - {"name": "value", "type": "uint256"} - ], - "name": "approve", - "outputs": [ - {"name": "", "type": "bool"} - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - {"name": "value", "type": "uint256"} - ], - "name": "withdraw", - "outputs": [ - {"name": "", "type": "bool"} - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - {"name": "value", "type": "uint256"}, - {"name": "to", "type": "address"} - ], - "name": "approvedSend", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - {"name": "recipient", "type": "address"}, - {"name": "value", "type": "uint256"} - ], - "name": "send", - "outputs": [ - {"name": "","type": "bool"} - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "payable": false, - "stateMutability": "nonpayable", - "type": "fallback" - } - ], - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang", - "settings": { - "optimize": true - } - }, - "natspec": { - "author": "Piper Merriam ", - "methods": { - "approve(address,uint256)": { - "details": "Sets recipient to be approved to withdraw the specified amount", - "notice": "This will set the recipient to be approved to withdraw the specified amount." - }, - "send(address,uint256)": { - "details": "Sends the recipient the specified amount", - "notice": "This will send the reciepient the specified amount." - }, - "approvedSend(uint256,address)" : { - "details" : "Sends funds that have been approved to the specified address", - "notice" : "This will send the reciepient the specified amount." - }, - "withdraw(uint256)": { - "details": "Lets caller withdraw up to their approved amount", - "notice": "This will withdraw provided value, deducting it from your total allowance." - } - }, - "title" : "Wallet contract with simple send and approval spending functionality" - } - } - }, - "deployments": { - "blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/32a617527c183587710e28a6b66eb709a34e3cbc5ae5e3f1ed564ba1b46ab00c": { - "Wallet": { - "contract_type": "WalletWithSend", - "address": "0xae97b967ae51e50f80aaed254b3190dd2d8520ca", - "transaction": "0xb44bb94b553c8c63c6a2f0b3b5bea92c69621e65af56069254b36f6b5272e7d0", - "block": "0xb44bb94b553c8c63c6a2f0b3b5bea92c69621e65af56069254b36f6b5272e7d0", - "runtime_bytecode": { - "link_dependencies": [ - {"offsets": [402, 639], "type": "reference", "value": "wallet:safe-math-lib:SafeMathLib"} - ] - } - } - } - }, - "build_dependencies": { - "wallet": "ipfs://QmRMSm4k37mr2T3A2MGxAj2eAHGR5veibVt1t9Leh5waV1" - } -} diff --git a/ethpm/assets/wallet-with-send/1.0.0.json b/ethpm/assets/wallet-with-send/1.0.0.json deleted file mode 100644 index 1b08716974..0000000000 --- a/ethpm/assets/wallet-with-send/1.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"build_dependencies":{"wallet":"ipfs://QmRMSm4k37mr2T3A2MGxAj2eAHGR5veibVt1t9Leh5waV1"},"contract_types":{"WalletWithSend":{"abi":[{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"withdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"},{"name":"to","type":"address"}],"name":"approvedSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"}],"name":"send","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"}],"compiler":{"name":"solc","settings":{"optimize":true},"version":"0.4.24+commit.e67f0147.Emscripten.clang"},"deployment_bytecode":{"bytecode":"0x608060405260008054600160a060020a03191633179055610395806100256000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b381146100705780632e1a7d4d146100a8578063c577ff8b146100c0578063d0679d34146100e6575b34801561006d57600080fd5b50005b34801561007c57600080fd5b50610094600160a060020a036004351660243561010a565b604080519115158252519081900360200190f35b3480156100b457600080fd5b50610094600435610147565b3480156100cc57600080fd5b506100e4600435600160a060020a0360243516610233565b005b3480156100f257600080fd5b50610094600160a060020a0360043516602435610326565b60008054600160a060020a0316331461012257600080fd5b50600160a060020a038216600090815260016020819052604090912082905592915050565b3360009081526001602090815260408083205481517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905290517300000000000000000000000000000000000000009263a293d1e89260448082019391829003018186803b1580156101c757600080fd5b505af41580156101db573d6000803e3d6000fd5b505050506040513d60208110156101f157600080fd5b505133600081815260016020526040808220939093559151909184156108fc02918591818181858888f19350505050151561022b57600080fd5b506001919050565b336000908152600160209081526040918290205482517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905291517300000000000000000000000000000000000000009263a293d1e8926044808301939192829003018186803b1580156102b557600080fd5b505af41580156102c9573d6000803e3d6000fd5b505050506040513d60208110156102df57600080fd5b505133600090815260016020526040808220929092559051600160a060020a0383169184156108fc02918591818181858888f19350505050151561032257600080fd5b5050565b60008054600160a060020a0316331461033e57600080fd5b604051600160a060020a0384169083156108fc029084906000818181858888f19796505050505050505600a165627a7a72305820127a404b857b83aa26a51d55d8283bff1dfb5c18217a999c5fbd2862d240fb760029","link_references":[{"length":20,"name":"SafeSendLib","offsets":[439,676]}]},"natspec":{"author":"Piper Merriam ","methods":{"approve(address,uint256)":{"details":"Sets recipient to be approved to withdraw the specified amount","notice":"This will set the recipient to be approved to withdraw the specified amount."},"approvedSend(uint256,address)":{"details":"Sends funds that have been approved to the specified address","notice":"This will send the reciepient the specified amount."},"send(address,uint256)":{"details":"Sends the recipient the specified amount","notice":"This will send the reciepient the specified amount."},"withdraw(uint256)":{"details":"Lets caller withdraw up to their approved amount","notice":"This will withdraw provided value, deducting it from your total allowance."}},"title":"Wallet contract with simple send and approval spending functionality"},"runtime_bytecode":{"bytecode":"0x6080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b381146100705780632e1a7d4d146100a8578063c577ff8b146100c0578063d0679d34146100e6575b34801561006d57600080fd5b50005b34801561007c57600080fd5b50610094600160a060020a036004351660243561010a565b604080519115158252519081900360200190f35b3480156100b457600080fd5b50610094600435610147565b3480156100cc57600080fd5b506100e4600435600160a060020a0360243516610233565b005b3480156100f257600080fd5b50610094600160a060020a0360043516602435610326565b60008054600160a060020a0316331461012257600080fd5b50600160a060020a038216600090815260016020819052604090912082905592915050565b3360009081526001602090815260408083205481517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905290517300000000000000000000000000000000000000009263a293d1e89260448082019391829003018186803b1580156101c757600080fd5b505af41580156101db573d6000803e3d6000fd5b505050506040513d60208110156101f157600080fd5b505133600081815260016020526040808220939093559151909184156108fc02918591818181858888f19350505050151561022b57600080fd5b506001919050565b336000908152600160209081526040918290205482517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905291517300000000000000000000000000000000000000009263a293d1e8926044808301939192829003018186803b1580156102b557600080fd5b505af41580156102c9573d6000803e3d6000fd5b505050506040513d60208110156102df57600080fd5b505133600090815260016020526040808220929092559051600160a060020a0383169184156108fc02918591818181858888f19350505050151561032257600080fd5b5050565b60008054600160a060020a0316331461033e57600080fd5b604051600160a060020a0384169083156108fc029084906000818181858888f19796505050505050505600a165627a7a72305820127a404b857b83aa26a51d55d8283bff1dfb5c18217a999c5fbd2862d240fb760029","link_references":[{"length":20,"name":"SafeSendLib","offsets":[402,639]}]}}},"deployments":{"blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/32a617527c183587710e28a6b66eb709a34e3cbc5ae5e3f1ed564ba1b46ab00c":{"Wallet":{"address":"0xae97b967ae51e50f80aaed254b3190dd2d8520ca","block":"0xb44bb94b553c8c63c6a2f0b3b5bea92c69621e65af56069254b36f6b5272e7d0","contract_type":"WalletWithSend","runtime_bytecode":{"link_dependencies":[{"offsets":[402,639],"type":"reference","value":"wallet:safe-math-lib:SafeMathLib"}]},"transaction":"0xb44bb94b553c8c63c6a2f0b3b5bea92c69621e65af56069254b36f6b5272e7d0"}}},"manifest_version":"2","package_name":"wallet-with-send","sources":{"./contracts/WalletWithSend.sol":"ipfs://QmRvVRn6USxJu1H4L51KyzxbQFVmCFqdzB4RAG9VeJ2s4W"},"version":"1.0.0"} diff --git a/ethpm/assets/wallet/1.0.0-pretty.json b/ethpm/assets/wallet/1.0.0-pretty.json deleted file mode 100644 index 377402e091..0000000000 --- a/ethpm/assets/wallet/1.0.0-pretty.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "manifest_version": "2", - "version": "1.0.0", - "package_name": "wallet", - "sources": { - "./contracts/Wallet.sol": "ipfs://QmdvZEW3AaUntDfFkcbdnYzeLAAeD4YFeixQsdmHF88T6Q" - }, - "contract_types": { - "Wallet": { - "deployment_bytecode": { - "bytecode": "0x608060405260008054600160a060020a031916331790556102bf806100256000396000f3006080604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b381146100655780632e1a7d4d146100aa578063d0679d34146100c2575b34801561006257600080fd5b50005b34801561007157600080fd5b5061009673ffffffffffffffffffffffffffffffffffffffff600435166024356100f3565b604080519115158252519081900360200190f35b3480156100b657600080fd5b5061009660043561014a565b3480156100ce57600080fd5b5061009673ffffffffffffffffffffffffffffffffffffffff60043516602435610236565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461011857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020819052604090912082905592915050565b3360009081526001602090815260408083205481517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905290517300000000000000000000000000000000000000009263a293d1e89260448082019391829003018186803b1580156101ca57600080fd5b505af41580156101de573d6000803e3d6000fd5b505050506040513d60208110156101f457600080fd5b505133600081815260016020526040808220939093559151909184156108fc02918591818181858888f19350505050151561022e57600080fd5b506001919050565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461025b57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19796505050505050505600a165627a7a723058207816bfaab53d55eff94c08cb3e5655a597fb47b8b10256bc7b52b12105f3095e0029", - "link_references": [{ - "offsets": [442], - "length": 20, - "name": "SafeMathLib" - }] - }, - "runtime_bytecode": { - "bytecode": "0x6080604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b381146100655780632e1a7d4d146100aa578063d0679d34146100c2575b34801561006257600080fd5b50005b34801561007157600080fd5b5061009673ffffffffffffffffffffffffffffffffffffffff600435166024356100f3565b604080519115158252519081900360200190f35b3480156100b657600080fd5b5061009660043561014a565b3480156100ce57600080fd5b5061009673ffffffffffffffffffffffffffffffffffffffff60043516602435610236565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461011857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020819052604090912082905592915050565b3360009081526001602090815260408083205481517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905290517300000000000000000000000000000000000000009263a293d1e89260448082019391829003018186803b1580156101ca57600080fd5b505af41580156101de573d6000803e3d6000fd5b505050506040513d60208110156101f457600080fd5b505133600081815260016020526040808220939093559151909184156108fc02918591818181858888f19350505050151561022e57600080fd5b506001919050565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461025b57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19796505050505050505600a165627a7a723058207816bfaab53d55eff94c08cb3e5655a597fb47b8b10256bc7b52b12105f3095e0029", - "link_references": [{ - "offsets": [405], - "length": 20, - "name": "SafeMathLib" - }] - }, - "abi": [ - { - "constant": false, - "inputs": [ - {"name": "recipient", "type": "address"}, - {"name": "value", "type": "uint256"} - ], - "name": "approve", - "outputs": [ - {"name": "", "type": "bool"} - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - {"name": "value", "type": "uint256"} - ], - "name": "withdraw", - "outputs": [ - {"name": "", "type": "bool"} - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - {"name": "recipient", "type": "address"}, - {"name": "value", "type": "uint256"} - ], - "name": "send", - "outputs": [ - {"name": "", "type": "bool"} - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "payable": false, - "stateMutability": "nonpayable", - "type": "fallback" - } - ], - "natspec": { - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang", - "settings": { - "optimize": true - } - }, - "author": "Piper Merriam ", - "methods": { - "approve(address,uint256)": { - "details": "Sets recipient to be approved to withdraw the specified amount", - "notice": "This will set the recipient to be approved to withdraw the specified amount." - }, - "send(address,uint256)": { - "details": "Sends the recipient the specified amount", - "notice": "This will send the reciepient the specified amount." - }, - "withdraw(uint256)": { - "details": "Lets caller withdraw up to their approved amount", - "notice": "This will withdraw provided value, deducting it from your total allowance." - } - }, - "title": "Contract for holding funds in escrow between two semi trusted parties." - } - } - }, - "deployments": { - "blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/0d2426efb30377a18129af05d887f9ba76bff85482000bd19e3630eb09a8bf39": { - "Wallet": { - "contract_type": "Wallet", - "address": "0x79eb62e7a360952670C03676F47a9087c15065B3", - "transaction": "0xaf122c215282dd340d686a662d60239f43700e15127b44e68dd6a00c48b9c88a", - "block": "0x0a2d01614f4dadd0b7eeeb945d5bab534825911a7769a6d2da8adb72e91b2531", - "runtime_bytecode": { - "link_dependencies": [ - {"offsets": [405], "type": "reference", "value": "safe-math-lib:SafeMathLib"} - ] - } - } - } - }, - "build_dependencies": { - "owned": "ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW", - "safe-math-lib": "ipfs://QmWgvM8yXGyHoGWqLFXvareJsoCZVsdrpKNCLMun3RaSJm" - } -} diff --git a/ethpm/assets/wallet/1.0.0.json b/ethpm/assets/wallet/1.0.0.json deleted file mode 100644 index 02e437d45b..0000000000 --- a/ethpm/assets/wallet/1.0.0.json +++ /dev/null @@ -1 +0,0 @@ -{"build_dependencies":{"owned":"ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW","safe-math-lib":"ipfs://QmWgvM8yXGyHoGWqLFXvareJsoCZVsdrpKNCLMun3RaSJm"},"contract_types":{"Wallet":{"abi":[{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"withdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"}],"name":"send","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"}],"deployment_bytecode":{"bytecode":"0x608060405260008054600160a060020a031916331790556102bf806100256000396000f3006080604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b381146100655780632e1a7d4d146100aa578063d0679d34146100c2575b34801561006257600080fd5b50005b34801561007157600080fd5b5061009673ffffffffffffffffffffffffffffffffffffffff600435166024356100f3565b604080519115158252519081900360200190f35b3480156100b657600080fd5b5061009660043561014a565b3480156100ce57600080fd5b5061009673ffffffffffffffffffffffffffffffffffffffff60043516602435610236565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461011857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020819052604090912082905592915050565b3360009081526001602090815260408083205481517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905290517300000000000000000000000000000000000000009263a293d1e89260448082019391829003018186803b1580156101ca57600080fd5b505af41580156101de573d6000803e3d6000fd5b505050506040513d60208110156101f457600080fd5b505133600081815260016020526040808220939093559151909184156108fc02918591818181858888f19350505050151561022e57600080fd5b506001919050565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461025b57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19796505050505050505600a165627a7a723058207816bfaab53d55eff94c08cb3e5655a597fb47b8b10256bc7b52b12105f3095e0029","link_references":[{"length":20,"name":"SafeMathLib","offsets":[442]}]},"natspec":{"author":"Piper Merriam ","compiler":{"name":"solc","settings":{"optimize":true},"version":"0.4.24+commit.e67f0147.Emscripten.clang"},"methods":{"approve(address,uint256)":{"details":"Sets recipient to be approved to withdraw the specified amount","notice":"This will set the recipient to be approved to withdraw the specified amount."},"send(address,uint256)":{"details":"Sends the recipient the specified amount","notice":"This will send the reciepient the specified amount."},"withdraw(uint256)":{"details":"Lets caller withdraw up to their approved amount","notice":"This will withdraw provided value, deducting it from your total allowance."}},"title":"Contract for holding funds in escrow between two semi trusted parties."},"runtime_bytecode":{"bytecode":"0x6080604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b381146100655780632e1a7d4d146100aa578063d0679d34146100c2575b34801561006257600080fd5b50005b34801561007157600080fd5b5061009673ffffffffffffffffffffffffffffffffffffffff600435166024356100f3565b604080519115158252519081900360200190f35b3480156100b657600080fd5b5061009660043561014a565b3480156100ce57600080fd5b5061009673ffffffffffffffffffffffffffffffffffffffff60043516602435610236565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461011857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020819052604090912082905592915050565b3360009081526001602090815260408083205481517fa293d1e800000000000000000000000000000000000000000000000000000000815260048101919091526024810185905290517300000000000000000000000000000000000000009263a293d1e89260448082019391829003018186803b1580156101ca57600080fd5b505af41580156101de573d6000803e3d6000fd5b505050506040513d60208110156101f457600080fd5b505133600081815260016020526040808220939093559151909184156108fc02918591818181858888f19350505050151561022e57600080fd5b506001919050565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461025b57600080fd5b60405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19796505050505050505600a165627a7a723058207816bfaab53d55eff94c08cb3e5655a597fb47b8b10256bc7b52b12105f3095e0029","link_references":[{"length":20,"name":"SafeMathLib","offsets":[405]}]}}},"deployments":{"blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/0d2426efb30377a18129af05d887f9ba76bff85482000bd19e3630eb09a8bf39":{"Wallet":{"address":"0x79eb62e7a360952670C03676F47a9087c15065B3","block":"0x0a2d01614f4dadd0b7eeeb945d5bab534825911a7769a6d2da8adb72e91b2531","contract_type":"Wallet","runtime_bytecode":{"link_dependencies":[{"offsets":[405],"type":"reference","value":"safe-math-lib:SafeMathLib"}]},"transaction":"0xaf122c215282dd340d686a662d60239f43700e15127b44e68dd6a00c48b9c88a"}}},"manifest_version":"2","package_name":"wallet","sources":{"./contracts/Wallet.sol":"ipfs://QmdvZEW3AaUntDfFkcbdnYzeLAAeD4YFeixQsdmHF88T6Q"},"version":"1.0.0"} diff --git a/ethpm/backends/ipfs.py b/ethpm/backends/ipfs.py index 1cf2d4104b..79b6ca2e65 100644 --- a/ethpm/backends/ipfs.py +++ b/ethpm/backends/ipfs.py @@ -18,7 +18,7 @@ import ipfshttpclient from ethpm import ( - ASSETS_DIR, + ETHPM_SPEC_DIR, ) from ethpm._utils.ipfs import ( dummy_ipfs_pin, @@ -152,9 +152,9 @@ def base_uri(self) -> str: MANIFEST_URIS = { - "ipfs://QmVu9zuza5mkJwwcFdh2SXBugm1oSgZVuEKkph9XLsbUwg": "standard-token", - "ipfs://QmeD2s7KaBUoGYTP1eutHBmBkMMMoycdfiyGMx2DKrWXyV": "safe-math-lib", - "ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW": "owned", + "ipfs://QmQNffBrmbB3TuBCtYfYsJWJVLssatWXa3H6CkGeyNUySA": "standard-token", + "ipfs://QmWnPsiS3Xb8GvCDEBFnnKs8Yk4HaAX6rCqJAaQXGbCoPk": "safe-math-lib", + "ipfs://QmcxvhkJJVpbxEAa6cgW3B6XwPJb79w9GpNUv2P2THUzZR": "owned", } @@ -165,13 +165,13 @@ class DummyIPFSBackend(BaseIPFSBackend): --- `ipfs_uri` can either be: - Valid IPFS URI -> safe-math-lib manifest (ALWAYS) - - Path to manifest/contract in ASSETS_DIR -> defined manifest/contract + - Path to manifest/contract in ETHPM_SPEC_DIR -> defined manifest/contract """ def fetch_uri_contents(self, ipfs_uri: str) -> bytes: pkg_name = MANIFEST_URIS[ipfs_uri] - pkg_contents = (ASSETS_DIR / pkg_name / "1.0.0.json").read_text() - return to_bytes(text=pkg_contents.rstrip("\n")) + pkg_contents = (ETHPM_SPEC_DIR / "examples" / pkg_name / "v3.json").read_text() + return to_bytes(text=pkg_contents) def can_resolve_uri(self, uri: str) -> bool: return uri in MANIFEST_URIS diff --git a/ethpm/dependencies.py b/ethpm/dependencies.py index 60a95c3bbd..f1f2eac533 100644 --- a/ethpm/dependencies.py +++ b/ethpm/dependencies.py @@ -11,7 +11,7 @@ class Dependencies: """ - Class to manage the `Package` instances of a Package's `build_dependencies`. + Class to manage the `Package` instances of a Package's `buildDependencies`. """ # ignoring Package type here and below to avoid a circular dependency diff --git a/ethpm/deployments.py b/ethpm/deployments.py index 0688bbd256..7ee501adbd 100644 --- a/ethpm/deployments.py +++ b/ethpm/deployments.py @@ -13,7 +13,6 @@ from ethpm.validation.package import ( validate_contract_name, ) -from web3 import Web3 from web3._utils.compat import ( TypedDict, ) @@ -32,11 +31,9 @@ def __init__( self, deployment_data: Dict[str, Dict[str, str]], contract_instances: Dict[str, Contract], - w3: Web3, ) -> None: self.deployment_data = deployment_data self.contract_instances = contract_instances - self.w3 = w3 def __getitem__(self, key: str) -> Dict[str, str]: return self.get(key) @@ -79,4 +76,4 @@ class DeploymentData(TypedDict): block: HexStr runtime_bytecode: Dict[str, Any] compiler: Dict[str, str] - contract_type: str + contractType: str diff --git a/ethpm/ethpm-spec b/ethpm/ethpm-spec new file mode 160000 index 0000000000..6daa7a466c --- /dev/null +++ b/ethpm/ethpm-spec @@ -0,0 +1 @@ +Subproject commit 6daa7a466c36df5fc78a8abdea6aa0168489e6c7 diff --git a/ethpm/package.py b/ethpm/package.py index 4cec0adf2d..e06457403f 100644 --- a/ethpm/package.py +++ b/ethpm/package.py @@ -101,6 +101,12 @@ def __init__( f"Got {type(manifest)}" ) + if "manifest" not in manifest or manifest["manifest"] != "ethpm/3": + raise EthPMValidationError( + "Py-Ethpm currently only supports v3 ethpm manifests. " + "Please use the CLI to update or re-generate a v3 manifest. " + ) + validate_manifest_against_schema(manifest) validate_manifest_deployments(manifest) validate_w3_instance(w3) @@ -148,7 +154,7 @@ def name(self) -> str: >>> OwnedPackage.name 'owned' """ - return self.manifest["package_name"] + return self.manifest["name"] @property def version(self) -> str: @@ -170,9 +176,9 @@ def manifest_version(self) -> str: .. doctest:: >>> OwnedPackage.manifest_version - '2' + 'ethpm/3' """ - return self.manifest["manifest_version"] + return self.manifest["manifest"] @property def uri(self) -> Optional[str]: @@ -186,8 +192,8 @@ def contract_types(self) -> List[str]: """ All contract types included in this package. """ - if 'contract_types' in self.manifest: - return sorted(self.manifest['contract_types'].keys()) + if 'contractTypes' in self.manifest: + return sorted(self.manifest['contractTypes'].keys()) else: raise ValueError("No contract types found in manifest; {self.__repr__()}.") @@ -215,9 +221,12 @@ def from_uri(cls, uri: URI, w3: Web3) -> "Package": Returns a Package object instantiated by a manifest located at a content-addressed URI. A valid ``Web3`` instance is also required. URI schemes supported: - - IPFS `ipfs://Qm...` - - HTTP `https://api.github.com/repos/:owner/:repo/git/blobs/:file_sha` - - Registry `erc1319://registry.eth:1/greeter?version=1.0.0` + + - IPFS: `ipfs://Qm...` + + - HTTP: `https://api.github.com/repos/:owner/:repo/git/blobs/:file_sha` + + - Registry: `erc1319://registry.eth:1/greeter?version=1.0.0` .. code:: python @@ -257,13 +266,13 @@ def get_contract_factory(self, name: ContractName) -> LinkableContract: """ validate_contract_name(name) - if "contract_types" not in self.manifest: + if "contractTypes" not in self.manifest: raise InsufficientAssetsError( "This package does not contain any contract type data." ) try: - contract_data = self.manifest["contract_types"][name] + contract_data = self.manifest["contractTypes"][name] except KeyError: raise InsufficientAssetsError( "This package does not contain any package data to generate " @@ -285,14 +294,14 @@ def get_contract_instance(self, name: ContractName, address: Address) -> Contrac validate_address(address) validate_contract_name(name) try: - self.manifest["contract_types"][name]["abi"] + self.manifest["contractTypes"][name]["abi"] except KeyError: raise InsufficientAssetsError( "Package does not have the ABI required to generate a contract instance " f"for contract: {name} at address: {address}." ) contract_kwargs = generate_contract_factory_kwargs( - self.manifest["contract_types"][name] + self.manifest["contractTypes"][name] ) contract_instance = self.w3.eth.contract( address=address, **contract_kwargs @@ -316,7 +325,7 @@ def build_dependencies(self) -> "Dependencies": """ validate_build_dependencies_are_present(self.manifest) - dependencies = self.manifest["build_dependencies"] + dependencies = self.manifest["buildDependencies"] dependency_packages = {} for name, uri in dependencies.items(): try: @@ -363,7 +372,7 @@ def deployments(self) -> Union["Deployments", Dict[None, None]]: deployment_data["address"] ) unresolved_linked_refs = normalize_linked_references( - deployment_data["runtime_bytecode"]["link_dependencies"] + deployment_data["runtimeBytecode"]["linkDependencies"] ) resolved_linked_refs = tuple( self._resolve_linked_references(link_ref, deployments) @@ -372,21 +381,21 @@ def deployments(self) -> Union["Deployments", Dict[None, None]]: for linked_ref in resolved_linked_refs: validate_linked_references(linked_ref, on_chain_bytecode) - return Deployments(deployments, all_contract_instances, self.w3) + return Deployments(deployments, all_contract_instances) @to_dict def _get_all_contract_instances( self, deployments: Dict[str, DeploymentData] ) -> Iterable[Tuple[str, Contract]]: for deployment_name, deployment_data in deployments.items(): - if deployment_data['contract_type'] not in self.contract_types: + if deployment_data['contractType'] not in self.contract_types: raise EthPMValidationError( - f"Contract type: {deployment_data['contract_type']} for alias: " + f"Contract type: {deployment_data['contractType']} for alias: " f"{deployment_name} not found. Available contract types include: " f"{self.contract_types}." ) contract_instance = self.get_contract_instance( - ContractName(deployment_data['contract_type']), + ContractName(deployment_data['contractType']), deployment_data['address'], ) yield deployment_name, contract_instance diff --git a/ethpm/tools/__init__.py b/ethpm/tools/__init__.py index 4c38c15b87..c92e448589 100644 --- a/ethpm/tools/__init__.py +++ b/ethpm/tools/__init__.py @@ -1 +1 @@ -from .get_manifest import get_manifest # noqa: F401 +from .get_manifest import get_ethpm_local_manifest, get_ethpm_spec_manifest # noqa: F401 diff --git a/ethpm/tools/builder.py b/ethpm/tools/builder.py index 3bf220300c..a9b1466cb1 100644 --- a/ethpm/tools/builder.py +++ b/ethpm/tools/builder.py @@ -43,9 +43,6 @@ from ethpm._utils.chains import ( is_BIP122_block_uri, ) -from ethpm._utils.mappings import ( - deep_merge_dicts, -) from ethpm.backends.ipfs import ( BaseIPFSBackend, ) @@ -87,17 +84,17 @@ def build(obj: Dict[str, Any], *fns: Callable[..., Any]) -> Dict[str, Any]: @curry def package_name(name: str, manifest: Manifest) -> Manifest: """ - Return a copy of manifest with `name` set to "package_name". + Return a copy of manifest with `name` set to "name". """ - return assoc(manifest, "package_name", name) + return assoc(manifest, "name", name) @curry def manifest_version(manifest_version: str, manifest: Manifest) -> Manifest: """ - Return a copy of manifest with `manifest_version` set to "manifest_version". + Return a copy of manifest with `manifest_version` set to "manifest". """ - return assoc(manifest, "manifest_version", manifest_version) + return assoc(manifest, "manifest", manifest_version) @curry @@ -260,7 +257,12 @@ def _inline_source( ) # rstrip used here since Path.read_text() adds a newline to returned contents - return assoc_in(manifest, ["sources", source_path], source_data.rstrip("\n")) + source_data_object = { + "content": source_data.rstrip("\n"), + "installPath": source_path, + "type": "solidity", + } + return assoc_in(manifest, ["sources", source_path], source_data_object) def source_pinner( @@ -329,7 +331,12 @@ def _pin_source( ) (ipfs_data,) = ipfs_backend.pin_assets(cwd / source_path) - return assoc_in(manifest, ["sources", source_path], f"ipfs://{ipfs_data['Hash']}") + source_data_object = { + "urls": [f"ipfs://{ipfs_data['Hash']}"], + "type": "solidity", + "installPath": source_path, + } + return assoc_in(manifest, ["sources", source_path], source_data_object) # @@ -345,7 +352,9 @@ def contract_type( compiler: Optional[bool] = False, contract_type: Optional[bool] = False, deployment_bytecode: Optional[bool] = False, - natspec: Optional[bool] = False, + devdoc: Optional[bool] = False, + userdoc: Optional[bool] = False, + source_id: Optional[bool] = False, runtime_bytecode: Optional[bool] = False, ) -> Manifest: """ @@ -360,12 +369,14 @@ def contract_type( wants to include them in custom contract_type. """ contract_type_fields = { - "contract_type": contract_type, - "deployment_bytecode": deployment_bytecode, - "runtime_bytecode": runtime_bytecode, + "contractType": contract_type, + "deploymentBytecode": deployment_bytecode, + "runtimeBytecode": runtime_bytecode, "abi": abi, - "natspec": natspec, "compiler": compiler, + "userdoc": userdoc, + "devdoc": devdoc, + "sourceId": source_id, } selected_fields = [k for k, v in contract_type_fields.items() if v] return _contract_type(name, compiler_output, alias, selected_fields) @@ -393,13 +404,64 @@ def _contract_type( else: contract_type_data = all_type_data + if "compiler" in contract_type_data: + compiler_info = contract_type_data.pop('compiler') + contract_type_ref = alias if alias else name + manifest_with_compilers = add_compilers_to_manifest( + compiler_info, contract_type_ref, manifest + ) + else: + manifest_with_compilers = manifest + if alias: return assoc_in( - manifest, - ["contract_types", alias], - assoc(contract_type_data, "contract_type", name), + manifest_with_compilers, + ["contractTypes", alias], + assoc(contract_type_data, "contractType", name), ) - return assoc_in(manifest, ["contract_types", name], contract_type_data) + return assoc_in(manifest_with_compilers, ["contractTypes", name], contract_type_data) + + +def add_compilers_to_manifest( + compiler_info: Dict[str, Any], contract_type: str, manifest: Manifest +) -> Manifest: + """ + Adds a compiler information object to a manifest's top-level `compilers`. + """ + if "compilers" not in manifest: + compiler_info['contractTypes'] = [contract_type] + return assoc_in(manifest, ["compilers"], [compiler_info]) + + updated_compiler_info = update_compilers_object( + compiler_info, contract_type, manifest["compilers"] + ) + return assoc_in(manifest, ["compilers"], updated_compiler_info) + + +@to_list +def update_compilers_object( + new_compiler: Dict[str, Any], contract_type: str, previous_compilers: List[Dict[str, Any]] +) -> Iterable[Dict[str, Any]]: + """ + Updates a manifest's top-level `compilers` with a new compiler information object. + - If compiler version already exists, we just update the compiler's `contractTypes` + """ + recorded_new_contract_type = False + for compiler in previous_compilers: + contract_types = compiler.pop("contractTypes") + if contract_type in contract_types: + raise ManifestBuildingError( + f"Contract type: {contract_type} already referenced in `compilers`." + ) + if compiler == new_compiler: + contract_types.append(contract_type) + recorded_new_contract_type = True + compiler["contractTypes"] = contract_types + yield compiler + + if not recorded_new_contract_type: + new_compiler["contractTypes"] = [contract_type] + yield new_compiler @to_dict @@ -438,36 +500,34 @@ def normalize_compiler_output(compiler_output: Dict[str, Any]) -> Dict[str, Any] f"Duplicate contract types: {duplicates} were found in the compiler output." ) return { - name: normalize_contract_type(compiler_output[path][name]) + name: normalize_contract_type(compiler_output[path][name], path) for path, name in paths_and_names } -NATSPEC_FIELDS = {"devdoc", "userdoc"} - - @to_dict def normalize_contract_type( - contract_type_data: Dict[str, Any] + contract_type_data: Dict[str, Any], + source_id: str, ) -> Iterable[Tuple[str, Any]]: """ Serialize contract_data found in compiler output to the defined fields. """ yield "abi", contract_type_data["abi"] + yield "sourceId", source_id if "evm" in contract_type_data: if "bytecode" in contract_type_data["evm"]: - yield "deployment_bytecode", normalize_bytecode_object( + yield "deploymentBytecode", normalize_bytecode_object( contract_type_data["evm"]["bytecode"] ) if "deployedBytecode" in contract_type_data["evm"]: - yield "runtime_bytecode", normalize_bytecode_object( + yield "runtimeBytecode", normalize_bytecode_object( contract_type_data["evm"]["deployedBytecode"] ) - if any(key in contract_type_data for key in NATSPEC_FIELDS): - natspec = deep_merge_dicts( - contract_type_data.get("userdoc", {}), contract_type_data.get("devdoc", {}) - ) - yield "natspec", natspec + if "devdoc" in contract_type_data: + yield "devdoc", contract_type_data['devdoc'] + if "userdoc" in contract_type_data: + yield "userdoc", contract_type_data['userdoc'] # make sure metadata isn't an empty string in solc output if "metadata" in contract_type_data and contract_type_data["metadata"]: yield "compiler", normalize_compiler_object( @@ -496,7 +556,7 @@ def normalize_bytecode_object(obj: Dict[str, Any]) -> Iterable[Tuple[str, Any]]: "Please make sure your solidity compiler output is valid." ) if link_references: - yield "link_references", process_link_references(link_references, bytecode) + yield "linkReferences", process_link_references(link_references, bytecode) yield "bytecode", process_bytecode(link_references, bytecode) else: yield "bytecode", add_0x_prefix(bytecode) @@ -705,10 +765,10 @@ def _build_deployments_object( """ Returns a dict with properly formatted deployment data. """ - yield "contract_type", contract_type + yield "contractType", contract_type yield "address", to_checksum_address(address) if deployment_bytecode: - yield "deployment_bytecode", deployment_bytecode + yield "deploymentBytecode", deployment_bytecode if compiler: yield "compiler", compiler if tx: @@ -716,7 +776,7 @@ def _build_deployments_object( if block: yield "block", block if runtime_bytecode: - yield "runtime_bytecode", runtime_bytecode + yield "runtimeBytecode", runtime_bytecode # @@ -739,7 +799,7 @@ def _build_dependency(package_name: str, uri: URI, manifest: Manifest) -> Manife f"{uri} is not a supported content-addressed URI. " "Currently only IPFS and Github blob uris are supported." ) - return assoc_in(manifest, ("build_dependencies", package_name), uri) + return assoc_in(manifest, ("buildDependencies", package_name), uri) # @@ -749,16 +809,16 @@ def _build_dependency(package_name: str, uri: URI, manifest: Manifest) -> Manife @curry def init_manifest( - package_name: str, version: str, manifest_version: Optional[str] = "2" + package_name: str, version: str, manifest_version: Optional[str] = "ethpm/3" ) -> Dict[str, Any]: """ Returns an initial dict with the minimal requried fields for a valid manifest. Should only be used as the first fn to be piped into a `build()` pipeline. """ return { - "package_name": package_name, + "name": package_name, "version": version, - "manifest_version": manifest_version, + "manifest": manifest_version, } diff --git a/ethpm/tools/checker.py b/ethpm/tools/checker.py index e88522c6a1..27050cd80c 100644 --- a/ethpm/tools/checker.py +++ b/ethpm/tools/checker.py @@ -23,12 +23,12 @@ # todo: validate no duplicate blockchain uris in deployments, if web3 is available WARNINGS = { - "manifest_version_missing": "Manifest missing a required 'manifest_version' field.", - "manifest_version_invalid": "'manifest_version' is invalid. The only supported version is '2'.", - "package_name_missing": "Manifest missing a required 'package_name' field", - "package_name_invalid": "'package_name' is invalid. " + "manifest_missing": "Manifest missing a required 'manifest' field.", + "manifest_invalid": "'manifest' is invalid. The only supported version is 'ethpm/3'.", + "name_missing": "Manifest missing a suggested 'name' field", + "name_invalid": "'name' is invalid. " f"Doesn't match the regex: {PACKAGE_NAME_REGEX}", - "version_missing": "Manifest missing a required 'version' field.", + "version_missing": "Manifest missing a suggested 'version' field.", "meta_missing": "Manifest missing a suggested 'meta' field.", "authors_missing": "'meta' field missing suggested 'authors' field.", "description_missing": "'meta' field missing suggested 'description' field.", @@ -38,21 +38,22 @@ "sources_missing": """Manifest is missing a sources field, which defines a source tree """ """that should comprise the full source tree necessary to recompile the contracts """ """contained in this release.""", - "contract_type_missing": """Manifest does not contain any 'contract_types'. Packages """ + "contract_type_missing": """Manifest does not contain any 'contractTypes'. Packages """ """should only include contract types that can be found in the source files for this """ """package. Packages should not include contract types from dependencies. Packages """ """should not include abstract contracts in the contract types section of a release.""", "abi_missing": """Contract type: {0} is missing an abi field, which is essential for using """ """this package.""", - "deployment_bytecode_missing": """Contract type: {0} is missing a deployment_bytecode field,""" + "deployment_bytecode_missing": """Contract type: {0} is missing a `deploymentBytecode` field,""" """ which is essential for using this package.""", - "contract_type_subfield_missing": """Contract type: {0} is missing a contract_type field, """ + "contract_type_subfield_missing": """Contract type: {0} is missing a `contractType` field, """ """which is essential if an alias is being used to namespace this contract type.""", - "runtime_bytecode_missing": "Contract type: {0} is missing a runtime_bytecode field.", + "runtime_bytecode_missing": "Contract type: {0} is missing a `runtimeBytecode` field.", "bytecode_subfield_missing": """Contract type: {0} is missing a required bytecode subfield """ """in its {1} bytecode object.""", - "natspec_missing": "Contract type: {0} is missing a natspec field.", - "compiler_missing": "Contract type: {0} is missing a compiler field.", + "devdoc_missing": "Contract type: {0} is missing a devdoc field.", + "userdoc_missing": "Contract type: {0} is missing a userdoc field.", + "compilers_missing": "Manifest is missing a suggested `compilers` field.", } @@ -69,6 +70,7 @@ def check_manifest(manifest: Manifest) -> Dict[str, str]: check_meta(manifest), check_sources(manifest), check_contract_types(manifest), + check_compilers(manifest), ) return build({}, *generate_warnings) @@ -82,19 +84,19 @@ def check_manifest(manifest: Manifest) -> Dict[str, str]: def check_manifest_version( manifest: Manifest, warnings: Dict[str, str] ) -> Dict[str, str]: - if "manifest_version" not in manifest or not manifest["manifest_version"]: - return assoc(warnings, "manifest_version", WARNINGS["manifest_version_missing"]) - if manifest["manifest_version"] != "2": - return assoc(warnings, "manifest_version", WARNINGS["manifest_version_invalid"]) + if "manifest" not in manifest or not manifest["manifest"]: + return assoc(warnings, "manifest", WARNINGS["manifest_missing"]) + if manifest["manifest"] != "ethpm/3": + return assoc(warnings, "manifest", WARNINGS["manifest_invalid"]) return warnings @curry def check_package_name(manifest: Manifest, warnings: Dict[str, str]) -> Dict[str, str]: - if "package_name" not in manifest or not manifest["package_name"]: - return assoc(warnings, "package_name", WARNINGS["package_name_missing"]) - if not bool(re.match(PACKAGE_NAME_REGEX, manifest["package_name"])): - return assoc(warnings, "package_name", WARNINGS["package_name_invalid"]) + if "name" not in manifest or not manifest["name"]: + return assoc(warnings, "name", WARNINGS["name_missing"]) + if not bool(re.match(PACKAGE_NAME_REGEX, manifest["name"])): + return assoc(warnings, "name", WARNINGS["name_invalid"]) return warnings @@ -180,8 +182,8 @@ def check_sources(manifest: Manifest, warnings: Dict[str, str]) -> Dict[str, str def check_contract_types( manifest: Manifest, warnings: Dict[str, str] ) -> Dict[str, str]: - if "contract_types" not in manifest or not manifest["contract_types"]: - return assoc(warnings, "contract_types", WARNINGS["contract_type_missing"]) + if "contractTypes" not in manifest or not manifest["contractTypes"]: + return assoc(warnings, "contractTypes", WARNINGS["contract_type_missing"]) all_contract_type_validations = ( ( @@ -189,10 +191,10 @@ def check_contract_types( check_contract_type(contract_name, data), check_deployment_bytecode(contract_name, data), check_runtime_bytecode(contract_name, data), - check_natspec(contract_name, data), - check_compiler(contract_name, data), + check_devdoc(contract_name, data), + check_userdoc(contract_name, data), ) - for contract_name, data in manifest["contract_types"].items() + for contract_name, data in manifest["contractTypes"].items() ) return build(warnings, *sum(all_contract_type_validations, ())) @@ -204,7 +206,7 @@ def check_abi( if "abi" not in data or not data["abi"]: return assoc_in( warnings, - ["contract_types", contract_name, "abi"], + ["contractTypes", contract_name, "abi"], WARNINGS["abi_missing"].format(contract_name), ) return warnings @@ -214,10 +216,10 @@ def check_abi( def check_contract_type( contract_name: str, data: Dict[str, Any], warnings: Dict[str, str] ) -> Dict[str, str]: - if "contract_type" not in data or not data["contract_type"]: + if "contractType" not in data or not data["contractType"]: return assoc_in( warnings, - ["contract_types", contract_name, "contract_type"], + ["contractTypes", contract_name, "contractType"], WARNINGS["contract_type_subfield_missing"].format(contract_name), ) return warnings @@ -227,15 +229,15 @@ def check_contract_type( def check_deployment_bytecode( contract_name: str, data: Dict[str, Any], warnings: Dict[str, str] ) -> Dict[str, str]: - if "deployment_bytecode" not in data or not data["deployment_bytecode"]: + if "deploymentBytecode" not in data or not data["deploymentBytecode"]: return assoc_in( warnings, - ["contract_types", contract_name, "deployment_bytecode"], + ["contractTypes", contract_name, "deploymentBytecode"], WARNINGS["deployment_bytecode_missing"].format(contract_name), ) return build( warnings, - check_bytecode_object(contract_name, "deployment", data["deployment_bytecode"]), + check_bytecode_object(contract_name, "deployment", data["deploymentBytecode"]), ) @@ -243,15 +245,15 @@ def check_deployment_bytecode( def check_runtime_bytecode( contract_name: str, data: Dict[str, Any], warnings: Dict[str, str] ) -> Dict[str, str]: - if "runtime_bytecode" not in data or not data["runtime_bytecode"]: + if "runtimeBytecode" not in data or not data["runtimeBytecode"]: return assoc_in( warnings, - ["contract_types", contract_name, "runtime_bytecode"], + ["contractTypes", contract_name, "runtimeBytecode"], WARNINGS["runtime_bytecode_missing"].format(contract_name), ) return build( warnings, - check_bytecode_object(contract_name, "runtime", data["runtime_bytecode"]), + check_bytecode_object(contract_name, "runtime", data["runtimeBytecode"]), ) @@ -266,33 +268,40 @@ def check_bytecode_object( if "bytecode" not in bytecode_data or not bytecode_data["bytecode"]: return assoc_in( warnings, - ["contract_types", contract_name, f"{bytecode_type}_bytecode"], + ["contractTypes", contract_name, f"{bytecode_type}Bytecode"], WARNINGS["bytecode_subfield_missing"].format(contract_name, bytecode_type), ) return warnings @curry -def check_natspec( +def check_devdoc( contract_name: str, data: Dict[str, Any], warnings: Dict[str, str] ) -> Dict[str, str]: - if "natspec" not in data or not data["natspec"]: + if "devdoc" not in data or not data["devdoc"]: return assoc_in( warnings, - ["contract_types", contract_name, "natspec"], - WARNINGS["natspec_missing"].format(contract_name), + ["contractTypes", contract_name, "devdoc"], + WARNINGS["devdoc_missing"].format(contract_name), ) return warnings @curry -def check_compiler( +def check_userdoc( contract_name: str, data: Dict[str, Any], warnings: Dict[str, str] ) -> Dict[str, str]: - if "compiler" not in data or not data["compiler"]: + if "userdoc" not in data or not data["userdoc"]: return assoc_in( warnings, - ["contract_types", contract_name, "compiler"], - WARNINGS["compiler_missing"].format(contract_name), + ["contractTypes", contract_name, "userdoc"], + WARNINGS["userdoc_missing"].format(contract_name), ) return warnings + + +@curry +def check_compilers(manifest: Manifest, warnings: Dict[str, str]) -> Dict[str, str]: + if "compilers" not in manifest or not manifest["compilers"]: + return assoc(warnings, "compilers", WARNINGS["compilers_missing"]) + return warnings diff --git a/ethpm/tools/get_manifest.py b/ethpm/tools/get_manifest.py index 00b0e616f9..a5b4cd7c86 100644 --- a/ethpm/tools/get_manifest.py +++ b/ethpm/tools/get_manifest.py @@ -6,8 +6,13 @@ from ethpm import ( ASSETS_DIR, + ETHPM_SPEC_DIR, ) -def get_manifest(use_case: str, filename: str) -> Dict[str, Any]: +def get_ethpm_spec_manifest(use_case: str, filename: str) -> Dict[str, Any]: + return json.loads((ETHPM_SPEC_DIR / 'examples' / use_case / filename).read_text()) + + +def get_ethpm_local_manifest(use_case: str, filename: str) -> Dict[str, Any]: return json.loads((ASSETS_DIR / use_case / filename).read_text()) diff --git a/ethpm/validation/manifest.py b/ethpm/validation/manifest.py index d66df9a21b..df31164004 100644 --- a/ethpm/validation/manifest.py +++ b/ethpm/validation/manifest.py @@ -15,19 +15,18 @@ validate, ) from jsonschema.validators import ( - Draft4Validator, + Draft7Validator, validator_for, ) from ethpm import ( - ASSETS_DIR, - SPEC_DIR, + ETHPM_SPEC_DIR, ) from ethpm.exceptions import ( EthPMValidationError, ) -MANIFEST_SCHEMA_PATH = SPEC_DIR / "package.spec.json" +V3_SCHEMA_PATH = ETHPM_SPEC_DIR / "spec" / "v3.spec.json" META_FIELDS = { "license": str, @@ -63,13 +62,12 @@ def validate_meta_object(meta: Dict[str, Any], allow_extra_meta_fields: bool) -> def _load_schema_data() -> Dict[str, Any]: - with open(MANIFEST_SCHEMA_PATH) as schema: - return json.load(schema) + return json.loads(V3_SCHEMA_PATH.read_text()) def extract_contract_types_from_deployments(deployment_data: List[Any]) -> Set[str]: contract_types = set( - deployment["contract_type"] + deployment["contractType"] for chain_deployments in deployment_data for deployment in chain_deployments.values() ) @@ -79,15 +77,16 @@ def extract_contract_types_from_deployments(deployment_data: List[Any]) -> Set[s def validate_manifest_against_schema(manifest: Dict[str, Any]) -> None: """ Load and validate manifest against schema - located at MANIFEST_SCHEMA_PATH. + located at V3_SCHEMA_PATH. """ schema_data = _load_schema_data() try: - validate(manifest, schema_data, cls=validator_for(schema_data, Draft4Validator)) + validate(manifest, schema_data, cls=validator_for(schema_data, Draft7Validator)) except jsonValidationError as e: raise EthPMValidationError( f"Manifest invalid for schema version {schema_data['version']}. " f"Reason: {e.message}" + f"{e}" ) @@ -98,19 +97,19 @@ def check_for_deployments(manifest: Dict[str, Any]) -> bool: def validate_build_dependencies_are_present(manifest: Dict[str, Any]) -> None: - if "build_dependencies" not in manifest: + if "buildDependencies" not in manifest: raise EthPMValidationError("Manifest doesn't have any build dependencies.") - if not manifest["build_dependencies"]: + if not manifest["buildDependencies"]: raise EthPMValidationError("Manifest's build dependencies key is empty.") def validate_manifest_deployments(manifest: Dict[str, Any]) -> None: """ - Validate that a manifest's deployments contracts reference existing contract_types. + Validate that a manifest's deployments contracts reference existing contractTypes. """ - if set(("contract_types", "deployments")).issubset(manifest): - all_contract_types = list(manifest["contract_types"].keys()) + if set(("contractTypes", "deployments")).issubset(manifest): + all_contract_types = list(manifest["contractTypes"].keys()) all_deployments = list(manifest["deployments"].values()) all_deployment_names = extract_contract_types_from_deployments(all_deployments) missing_contract_types = set(all_deployment_names).difference( @@ -122,16 +121,6 @@ def validate_manifest_deployments(manifest: Dict[str, Any]) -> None: ) -def validate_manifest_exists(manifest_id: str) -> None: - """ - Validate that manifest with manifest_id exists in ASSETS_DIR - """ - if not (ASSETS_DIR / manifest_id).is_file(): - raise EthPMValidationError( - f"Manifest not found in ASSETS_DIR with id: {manifest_id}" - ) - - def validate_raw_manifest_format(raw_manifest: str) -> None: """ Raise a EthPMValidationError if a manifest ... diff --git a/ethpm/validation/package.py b/ethpm/validation/package.py index 46cfdee56a..e3052e4f9e 100644 --- a/ethpm/validation/package.py +++ b/ethpm/validation/package.py @@ -23,12 +23,12 @@ def validate_minimal_contract_factory_data(contract_data: Dict[str, str]) -> None: """ Validate that contract data in a package contains at least an "abi" and - "deployment_bytecode" necessary to generate a deployable contract factory. + "deploymentBytecode" necessary to generate a deployable contract factory. """ - if not all(key in contract_data.keys() for key in ("abi", "deployment_bytecode")): + if not all(key in contract_data.keys() for key in ("abi", "deploymentBytecode")): raise InsufficientAssetsError( "Minimum required contract data to generate a deployable " - "contract factory (abi & deployment_bytecode) not found." + "contract factory (abi & deploymentBytecode) not found." ) @@ -53,9 +53,9 @@ def validate_package_name(pkg_name: str) -> None: def validate_manifest_version(version: str) -> None: """ - Raise an exception if the version is not "2". + Raise an exception if the version is not "ethpm/3". """ - if not version == "2": + if not version == "ethpm/3": raise EthPMValidationError( f"Py-EthPM does not support the provided specification version: {version}" ) diff --git a/newsfragments/1652.feature.rst b/newsfragments/1652.feature.rst new file mode 100644 index 0000000000..9fa517d820 --- /dev/null +++ b/newsfragments/1652.feature.rst @@ -0,0 +1 @@ +Update `web3.pm` and `ethpm` module to EthPM v3 specification. diff --git a/setup.py b/setup.py index 1c88d3e9fc..d9df683ee5 100644 --- a/setup.py +++ b/setup.py @@ -75,8 +75,8 @@ "eth-typing>=2.0.0,<3.0.0", "eth-utils>=1.8.4,<2.0.0", "hexbytes>=0.1.0,<1.0.0", - "ipfshttpclient>=0.4.12,<1", - "jsonschema>=3.0.0,<4.0.0", + "ipfshttpclient>=0.4.13,<1", + "jsonschema>=3.2.0,<4.0.0", "lru-dict>=1.1.6,<2.0.0", "protobuf>=3.10.0,<4", "pypiwin32>=223;platform_system=='Windows'", diff --git a/tests/core/pm-module/conftest.py b/tests/core/pm-module/conftest.py index 4fa13fa90a..491eaf7c18 100644 --- a/tests/core/pm-module/conftest.py +++ b/tests/core/pm-module/conftest.py @@ -1,4 +1,3 @@ -import json import pytest from eth_tester import ( @@ -10,12 +9,14 @@ ) from ethpm import ( - ASSETS_DIR, Package, ) from ethpm.contract import ( LinkableContract, ) +from ethpm.tools import ( + get_ethpm_local_manifest, +) from web3 import Web3 from web3.pm import ( SimpleRegistry, @@ -48,7 +49,7 @@ def setup_w3(): def sol_registry(w3): - manifest = json.loads((ASSETS_DIR / "registry" / "2.0.0a1.json").read_text()) + manifest = get_ethpm_local_manifest("simple-registry", "v3.json") registry_package = Package(manifest, w3) registry_deployer = Deployer(registry_package) deployed_registry_package = registry_deployer.deploy("PackageRegistry") diff --git a/tests/core/pm-module/test_ens_integration.py b/tests/core/pm-module/test_ens_integration.py index 8413f32cd0..98dbaf61de 100644 --- a/tests/core/pm-module/test_ens_integration.py +++ b/tests/core/pm-module/test_ens_integration.py @@ -27,7 +27,7 @@ def bytes32(val): @pytest.fixture def ens_setup(deployer): # todo: move to module level once ethpm alpha stable - ENS_MANIFEST = ASSETS_DIR / 'ens' / '1.0.1.json' + ENS_MANIFEST = ASSETS_DIR / 'ens' / 'v3.json' ens_deployer = deployer(ENS_MANIFEST) w3 = ens_deployer.package.w3 @@ -136,8 +136,8 @@ def test_web3_ens(ens): actual_addr = ens.address('tester.eth') w3.pm.set_registry('tester.eth') assert w3.pm.registry.address == actual_addr - w3.pm.release_package('owned', '1.0.0', 'ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW') + w3.pm.release_package('owned', '1.0.0', 'ipfs://QmcxvhkJJVpbxEAa6cgW3B6XwPJb79w9GpNUv2P2THUzZR') pkg_name, version, manifest_uri = w3.pm.get_release_data('owned', '1.0.0') assert pkg_name == 'owned' assert version == '1.0.0' - assert manifest_uri == 'ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW' + assert manifest_uri == 'ipfs://QmcxvhkJJVpbxEAa6cgW3B6XwPJb79w9GpNUv2P2THUzZR' diff --git a/tests/core/pm-module/test_pm_init.py b/tests/core/pm-module/test_pm_init.py index 93b3c9da8c..3a06f8ba16 100644 --- a/tests/core/pm-module/test_pm_init.py +++ b/tests/core/pm-module/test_pm_init.py @@ -8,7 +8,8 @@ InsufficientAssetsError, ) from ethpm.tools import ( - get_manifest as get_ethpm_manifest, + get_ethpm_local_manifest, + get_ethpm_spec_manifest, ) from web3.exceptions import ( PMError, @@ -16,20 +17,20 @@ def test_pm_init_with_minimal_manifest(w3): - owned_manifest = get_ethpm_manifest('owned', '1.0.1.json') + owned_manifest = get_ethpm_spec_manifest('owned', 'v3.json') pm = w3.pm.get_package_from_manifest(owned_manifest) assert pm.name == 'owned' def test_get_contract_factory_raises_insufficient_assets_error(w3): - insufficient_owned_manifest = get_ethpm_manifest('owned', '1.0.0.json') + insufficient_owned_manifest = get_ethpm_spec_manifest('owned', 'v3.json') owned_package = w3.pm.get_package_from_manifest(insufficient_owned_manifest) with pytest.raises(InsufficientAssetsError): owned_package.get_contract_factory('Owned') def test_get_contract_factory_with_valid_owned_manifest(w3): - owned_manifest = get_ethpm_manifest('owned', '1.0.1.json') + owned_manifest = get_ethpm_local_manifest('owned', 'with_contract_type_v3.json') owned_package = w3.pm.get_package_from_manifest(owned_manifest) owned_factory = owned_package.get_contract_factory('Owned') tx_hash = owned_factory.constructor().transact() @@ -40,7 +41,7 @@ def test_get_contract_factory_with_valid_owned_manifest(w3): def test_get_contract_factory_with_valid_safe_math_lib_manifest(w3): - safe_math_lib_manifest = get_ethpm_manifest('safe-math-lib', '1.0.1.json') + safe_math_lib_manifest = get_ethpm_spec_manifest('safe-math-lib', 'v3.json') safe_math_package = w3.pm.get_package_from_manifest(safe_math_lib_manifest) safe_math_factory = safe_math_package.get_contract_factory("SafeMathLib") tx_hash = safe_math_factory.constructor().transact() @@ -51,7 +52,7 @@ def test_get_contract_factory_with_valid_safe_math_lib_manifest(w3): def test_get_contract_factory_with_valid_escrow_manifest(w3): - escrow_manifest = get_ethpm_manifest("escrow", "1.0.2.json") + escrow_manifest = get_ethpm_spec_manifest("escrow", "v3.json") escrow_package = w3.pm.get_package_from_manifest(escrow_manifest) escrow_factory = escrow_package.get_contract_factory('Escrow') assert escrow_factory.needs_bytecode_linking @@ -69,7 +70,7 @@ def test_get_contract_factory_with_valid_escrow_manifest(w3): def test_deploy_a_standalone_package_integration(w3): - standard_token_manifest = get_ethpm_manifest("standard-token", "1.0.1.json") + standard_token_manifest = get_ethpm_local_manifest("standard-token", "with_bytecode_v3.json") token_package = w3.pm.get_package_from_manifest(standard_token_manifest) # Added deployment bytecode to manifest to be able to generate factory ERC20 = token_package.get_contract_factory('StandardToken') @@ -86,7 +87,7 @@ def test_pm_init_with_manifest_uri(w3, monkeypatch): monkeypatch.setenv( "ETHPM_IPFS_BACKEND_CLASS", "ethpm.backends.ipfs.DummyIPFSBackend" ) - dummy_standard_token_uri = "ipfs://QmVu9zuza5mkJwwcFdh2SXBugm1oSgZVuEKkph9XLsbUwg" + dummy_standard_token_uri = "ipfs://QmQNffBrmbB3TuBCtYfYsJWJVLssatWXa3H6CkGeyNUySA" pkg = w3.pm.get_package_from_uri(dummy_standard_token_uri) assert isinstance(pkg, Package) assert pkg.name == "standard-token" @@ -94,7 +95,7 @@ def test_pm_init_with_manifest_uri(w3, monkeypatch): @pytest.fixture def tmp_ethpmdir(tmp_path): - owned_manifest = get_ethpm_manifest("owned", "1.0.0.json") + owned_manifest = get_ethpm_spec_manifest("owned", "v3.json") ethpmdir = tmp_path / '_ethpm_packages' ethpmdir.mkdir() owned_dir = ethpmdir / 'owned' diff --git a/tests/core/pm-module/test_registry_integration.py b/tests/core/pm-module/test_registry_integration.py index 4535a2be92..1732d3328d 100644 --- a/tests/core/pm-module/test_registry_integration.py +++ b/tests/core/pm-module/test_registry_integration.py @@ -34,7 +34,7 @@ def test_pm_get_package_from_manifest(w3): manifest = get_simple_registry_manifest() package = w3.pm.get_package_from_manifest(manifest) assert isinstance(package, Package) - assert package.name == "ethpm-registry" + assert package.name == "simple-registry" def test_pm_deploy_and_set_registry(fresh_w3): @@ -61,7 +61,7 @@ def test_pm_set_custom_registry(empty_sol_registry, fresh_w3): def test_pm_must_set_registry_before_all_registry_interaction_functions(fresh_w3): with pytest.raises(PMError): fresh_w3.pm.release_package( - "package", "1.0.0", "ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW" + "package", "1.0.0", "ipfs://QmcxvhkJJVpbxEAa6cgW3B6XwPJb79w9GpNUv2P2THUzZR" ) with pytest.raises(PMError): fresh_w3.pm.get_release_id_data(b"invalid_release_id") @@ -84,10 +84,10 @@ def test_pm_must_set_registry_before_all_registry_interaction_functions(fresh_w3 def test_pm_release_package(empty_sol_registry, w3): w3.pm.registry = empty_sol_registry w3.pm.release_package( - "escrow", "1.0.0", "ipfs://QmPDwMHk8e1aMEZg3iKsUiPSkhHkywpGB3KHKM52RtGrkv" + "escrow", "1.0.0", "ipfs://QmTpYHEog4yfmgx5GgvNCRQyDeQyBD4FWxTkiUP64AH1QC" ) w3.pm.release_package( - "owned", "1.0.0", "ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW" + "owned", "1.0.0", "ipfs://QmcxvhkJJVpbxEAa6cgW3B6XwPJb79w9GpNUv2P2THUzZR" ) release_id_1 = w3.pm.get_release_id("escrow", "1.0.0") release_id_2 = w3.pm.get_release_id("owned", "1.0.0") @@ -95,10 +95,10 @@ def test_pm_release_package(empty_sol_registry, w3): package_data_2 = w3.pm.get_release_id_data(release_id_2) assert package_data_1[0] == "escrow" assert package_data_1[1] == "1.0.0" - assert package_data_1[2] == "ipfs://QmPDwMHk8e1aMEZg3iKsUiPSkhHkywpGB3KHKM52RtGrkv" + assert package_data_1[2] == "ipfs://QmTpYHEog4yfmgx5GgvNCRQyDeQyBD4FWxTkiUP64AH1QC" assert package_data_2[0] == "owned" assert package_data_2[1] == "1.0.0" - assert package_data_2[2] == "ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW" + assert package_data_2[2] == "ipfs://QmcxvhkJJVpbxEAa6cgW3B6XwPJb79w9GpNUv2P2THUzZR" def test_pm_get_release_data(loaded_sol_registry, w3): @@ -171,7 +171,7 @@ def test_pm_get_package(loaded_sol_registry, w3, monkeypatch): ) w3.pm.deploy_and_set_registry() w3.pm.release_package( - "owned", "1.0.0", "ipfs://QmbeVyFLSuEUxiXKwSsEjef6icpdTdA4kGG9BcrJXKNKUW" + "owned", "1.0.0", "ipfs://QmcxvhkJJVpbxEAa6cgW3B6XwPJb79w9GpNUv2P2THUzZR" ) pkg = w3.pm.get_package("owned", "1.0.0") assert isinstance(pkg, Package) diff --git a/tests/core/tools/pytest_ethereum/assets/greeter.json b/tests/core/tools/pytest_ethereum/assets/greeter.json index e08abd2610..355d8e657e 100644 --- a/tests/core/tools/pytest_ethereum/assets/greeter.json +++ b/tests/core/tools/pytest_ethereum/assets/greeter.json @@ -1 +1 @@ -{"contract_types":{"greeter":{"abi":[{"constant":false,"inputs":[],"name":"__init__","outputs":[],"payable":false,"type":"constructor"},{"constant":false,"gas":70954,"inputs":[{"name":"x","type":"bytes"}],"name":"setGreeting","outputs":[],"payable":false,"type":"function"},{"constant":false,"gas":4486,"inputs":[],"name":"greet","outputs":[{"name":"out","type":"bytes"}],"payable":false,"type":"function"}],"deployment_bytecode":{"bytecode":"0x600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052341561009e57600080fd5b6005610140527f48656c6c6f0000000000000000000000000000000000000000000000000000006101605261014080600060c052602060c020602082510161012060006002818352015b826101205160200211156100fb5761011d565b61012051602002850151610120518501555b81516001018083528114156100e8575b50505050505061032f56600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05263b8e46d3a600051141561013057602060046101403734156100b457600080fd5b60346004356004016101603760146004356004013511156100d457600080fd5b61016080600060c052602060c020602082510161012060006002818352015b8261012051602002111561010657610128565b61012051602002850151610120518501555b81516001018083528114156100f3575b505050505050005b63cfae3217600051141561020157341561014957600080fd5b60008060c052602060c020610180602082540161012060006002818352015b8261012051602002111561017b5761019d565b61012051850154610120516020028501525b8151600101808352811415610168575b5050505050506101e0610180516014818352015b60146101e05111156101c2576101de565b60006101e0516101a001535b81516001018083528114156101b1575b50506020610160526040610180510160206001820306601f8201039050610160f3005b60006000fd5b61012861032f0361012860003961012861032f036000f3"}}},"deployments":{"blockchain://0817570684a8b349c2e15aa1a5ba48d269335d487bcf0d7a2f3ef1f9f764d5e4/block/03d7c71f9f8d8c29a17c00a0d5ce262ad243a575ce5023c430e58dbb02342901":{"greeter":{"address":"0xf2e246bb76df876cef8b38ae84130f4f55de395b","block":"0x03d7c71f9f8d8c29a17c00a0d5ce262ad243a575ce5023c430e58dbb02342901","contract_type":"greeter","transaction":"0x56e0b0d02c8f11e62937101ec419899b4f4a8be8ceec825eb9afb797f79e7262"}}},"manifest_version":"2","package_name":"greeter","sources":{"./contracts/greeter.vy":"# Vyper Greeter Contract\n\ngreeting: bytes[20]\n\n\n@public\ndef __init__():\n self.greeting = \"Hello\"\n\n\n@public\ndef setGreeting(x: bytes[20]):\n self.greeting = x\n\n\n@public\ndef greet() -> bytes[40]:\n return self.greeting\n"},"version":"1.0.0"} +{"contractTypes":{"greeter":{"abi":[{"constant":false,"inputs":[],"name":"__init__","outputs":[],"payable":false,"type":"constructor"},{"constant":false,"gas":70954,"inputs":[{"name":"x","type":"bytes"}],"name":"setGreeting","outputs":[],"payable":false,"type":"function"},{"constant":false,"gas":4486,"inputs":[],"name":"greet","outputs":[{"name":"out","type":"bytes"}],"payable":false,"type":"function"}],"deploymentBytecode":{"bytecode":"0x600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052341561009e57600080fd5b6005610140527f48656c6c6f0000000000000000000000000000000000000000000000000000006101605261014080600060c052602060c020602082510161012060006002818352015b826101205160200211156100fb5761011d565b61012051602002850151610120518501555b81516001018083528114156100e8575b50505050505061032f56600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05263b8e46d3a600051141561013057602060046101403734156100b457600080fd5b60346004356004016101603760146004356004013511156100d457600080fd5b61016080600060c052602060c020602082510161012060006002818352015b8261012051602002111561010657610128565b61012051602002850151610120518501555b81516001018083528114156100f3575b505050505050005b63cfae3217600051141561020157341561014957600080fd5b60008060c052602060c020610180602082540161012060006002818352015b8261012051602002111561017b5761019d565b61012051850154610120516020028501525b8151600101808352811415610168575b5050505050506101e0610180516014818352015b60146101e05111156101c2576101de565b60006101e0516101a001535b81516001018083528114156101b1575b50506020610160526040610180510160206001820306601f8201039050610160f3005b60006000fd5b61012861032f0361012860003961012861032f036000f3"}}},"deployments":{"blockchain://0817570684a8b349c2e15aa1a5ba48d269335d487bcf0d7a2f3ef1f9f764d5e4/block/03d7c71f9f8d8c29a17c00a0d5ce262ad243a575ce5023c430e58dbb02342901":{"greeter":{"address":"0xf2e246bb76df876cef8b38ae84130f4f55de395b","block":"0x03d7c71f9f8d8c29a17c00a0d5ce262ad243a575ce5023c430e58dbb02342901","contractType":"greeter","transaction":"0x56e0b0d02c8f11e62937101ec419899b4f4a8be8ceec825eb9afb797f79e7262"}}},"manifest":"ethpm/3","name":"greeter","sources":{"./contracts/greeter.vy":{"content":"# Vyper Greeter Contract\n\ngreeting: bytes[20]\n\n\n@public\ndef __init__():\n self.greeting = \"Hello\"\n\n\n@public\ndef setGreeting(x: bytes[20]):\n self.greeting = x\n\n\n@public\ndef greet() -> bytes[40]:\n return self.greeting\n"}},"version":"1.0.0"} diff --git a/tests/core/tools/pytest_ethereum/conftest.py b/tests/core/tools/pytest_ethereum/conftest.py index f57be2efe5..23750f1ea8 100644 --- a/tests/core/tools/pytest_ethereum/conftest.py +++ b/tests/core/tools/pytest_ethereum/conftest.py @@ -4,7 +4,7 @@ import pytest from ethpm import ( - ASSETS_DIR, + ETHPM_SPEC_DIR, ) from web3 import Web3 @@ -23,5 +23,5 @@ def w3(): @pytest.fixture def escrow_deployer(deployer): - escrow_manifest_path = ASSETS_DIR / "escrow" / "1.0.2.json" + escrow_manifest_path = ETHPM_SPEC_DIR / "examples" / "escrow" / "v3.json" return deployer(escrow_manifest_path) diff --git a/tests/core/tools/pytest_ethereum/test_deployer.py b/tests/core/tools/pytest_ethereum/test_deployer.py index aed86540e7..552b59a4cd 100644 --- a/tests/core/tools/pytest_ethereum/test_deployer.py +++ b/tests/core/tools/pytest_ethereum/test_deployer.py @@ -7,6 +7,7 @@ from ethpm import ( ASSETS_DIR, + ETHPM_SPEC_DIR, ) import web3 from web3.tools.pytest_ethereum.exceptions import ( @@ -42,7 +43,7 @@ def test_user_code_with_fixture(greeter): # SIMPLE @pytest.fixture def owned(deployer): - owned_manifest_path = ASSETS_DIR / "owned" / "1.0.1.json" + owned_manifest_path = ASSETS_DIR / "owned" / "with_contract_type_v3.json" owned_deployer = deployer(path=owned_manifest_path) return owned_deployer.deploy("Owned") @@ -55,7 +56,7 @@ def test_owned_deployer(owned): # CONSTRUCTOR ARGS @pytest.fixture def standard_token(deployer): - standard_token_manifest_path = ASSETS_DIR / "standard-token" / "1.0.1.json" + standard_token_manifest_path = ASSETS_DIR / "standard-token" / "with_bytecode_v3.json" standard_token_deployer = deployer(standard_token_manifest_path) return standard_token_deployer.deploy("StandardToken", 100) @@ -68,7 +69,7 @@ def test_standard_token_deployer(standard_token): # LIBRARY @pytest.fixture def safe_math(deployer): - safe_math_manifest_path = ASSETS_DIR / "safe-math-lib" / "1.0.1.json" + safe_math_manifest_path = ETHPM_SPEC_DIR / "examples" / "safe-math-lib" / "v3.json" safe_math_deployer = deployer(safe_math_manifest_path) return safe_math_deployer.deploy("SafeMathLib") diff --git a/tests/core/tools/pytest_ethereum/test_linker.py b/tests/core/tools/pytest_ethereum/test_linker.py index c0ca1d94ff..3558c32ea3 100644 --- a/tests/core/tools/pytest_ethereum/test_linker.py +++ b/tests/core/tools/pytest_ethereum/test_linker.py @@ -20,7 +20,7 @@ @pytest.fixture def escrow_deployer(deployer): - escrow_manifest_path = ASSETS_DIR / "escrow" / "1.0.3.json" + escrow_manifest_path = ASSETS_DIR / "escrow" / "with_bytecode_v3.json" return deployer(escrow_manifest_path) diff --git a/tests/ethpm/_utils/test_contract_utils.py b/tests/ethpm/_utils/test_contract_utils.py index 7c31c2a715..1ffd417901 100644 --- a/tests/ethpm/_utils/test_contract_utils.py +++ b/tests/ethpm/_utils/test_contract_utils.py @@ -19,11 +19,11 @@ @pytest.mark.parametrize( "contract_data", ( - {"abi": "", "deployment_bytecode": ""}, + {"abi": "", "deploymentBytecode": ""}, { "abi": "", - "deployment_bytecode": {"bytecode": ""}, - "runtime_bytecode": {"bytecode": ""}, + "deploymentBytecode": {"bytecode": ""}, + "runtimeBytecode": {"bytecode": ""}, }, ), ) @@ -35,8 +35,8 @@ def test_validate_minimal_contract_factory_data_validates(contract_data): "contract_data", ( {"abi": ""}, - {"deployment_bytecode": {"bytecode": ""}}, - {"runtime_bytecode": {"bytecode": ""}, "other": ""}, + {"deploymentBytecode": {"bytecode": ""}}, + {"runtimeBytecode": {"bytecode": ""}, "other": ""}, ), ) def test_validate_minimal_contract_factory_data_invalidates(contract_data): @@ -59,17 +59,17 @@ def test_validate_contract_name_invalidates(name): "contract_data,expected_kwargs", ( ({"abi": ""}, ["abi"]), - ({"deployment_bytecode": {"bytecode": ""}}, ["bytecode"]), + ({"deploymentBytecode": {"bytecode": ""}}, ["bytecode"]), ( - {"abi": "", "runtime_bytecode": {"bytecode": ""}}, + {"abi": "", "runtimeBytecode": {"bytecode": ""}}, ["abi", "bytecode_runtime"], ), ( { "abi": "", - "deployment_bytecode": { + "deploymentBytecode": { "bytecode": "", - "link_references": [ + "linkReferences": [ {"offsets": [402, 639], "length": 20, "name": "SafeSendLib"} ], }, diff --git a/tests/ethpm/backends/test_http_backends.py b/tests/ethpm/backends/test_http_backends.py index eb4df32a82..d40db579ac 100644 --- a/tests/ethpm/backends/test_http_backends.py +++ b/tests/ethpm/backends/test_http_backends.py @@ -19,7 +19,7 @@ @pytest.mark.parametrize( "uri", ( - "https://api.github.com/repos/ethpm/py-ethpm/git/blobs/a7232a93f1e9e75d606f6c1da18aa16037e03480", # noqa: E501 + "https://api.github.com/repos/ethpm/ethpm-spec/git/blobs/899042f95ad624d5ecf0b96b0926c96cd682522d", # noqa: E501 ), ) @pytest.mark.skipif('WEB3_INFURA_PROJECT_ID' not in os.environ, reason='Infura API key unavailable') diff --git a/tests/ethpm/backends/test_ipfs_backends.py b/tests/ethpm/backends/test_ipfs_backends.py index ba6589e07b..74589737f3 100644 --- a/tests/ethpm/backends/test_ipfs_backends.py +++ b/tests/ethpm/backends/test_ipfs_backends.py @@ -9,7 +9,7 @@ ) from ethpm import ( - ASSETS_DIR, + ETHPM_SPEC_DIR, ) from ethpm.backends.ipfs import ( DummyIPFSBackend, @@ -22,7 +22,7 @@ INFURA_GATEWAY_MULTIADDR, ) -OWNED_MANIFEST_PATH = ASSETS_DIR / "owned" / "1.0.0.json" +OWNED_MANIFEST_PATH = ETHPM_SPEC_DIR / "examples" / "owned" / "v3.json" @pytest.fixture @@ -82,11 +82,10 @@ def test_base_ipfs_gateway_backend_correctly_handles_uri_schemes(uri, expected): def test_dummy_ipfs_backend(): pkg = DummyIPFSBackend().fetch_uri_contents( - "ipfs://QmeD2s7KaBUoGYTP1eutHBmBkMMMoycdfiyGMx2DKrWXyV" + "ipfs://QmQNffBrmbB3TuBCtYfYsJWJVLssatWXa3H6CkGeyNUySA" ) - mnfst = to_text(pkg) - manifest = json.loads(mnfst) - assert manifest["package_name"] == "safe-math-lib" + manifest = json.loads(to_text(pkg)) + assert manifest["name"] == "standard-token" def test_get_ipfs_backend_class_with_default_backend(): @@ -112,15 +111,15 @@ def test_pin_assets_to_dummy_backend(dummy_ipfs_backend): backend = get_ipfs_backend() hashes = backend.pin_assets(OWNED_MANIFEST_PATH) asset_data = hashes[0] - assert asset_data["Name"] == "1.0.0.json" - assert asset_data["Hash"] == "QmYogrz6sKuyMW8NHUdw1kEy9Tn15R3GaF9T14S4zwb4bR" - assert asset_data["Size"] == "433" + assert asset_data["Name"] == "v3.json" + assert asset_data["Hash"] == "QmcxvhkJJVpbxEAa6cgW3B6XwPJb79w9GpNUv2P2THUzZR" + assert asset_data["Size"] == "478" # Test pinning a directory - dir_data = backend.pin_assets(ASSETS_DIR / "standard-token" / "contracts") + dir_data = backend.pin_assets(ETHPM_SPEC_DIR / "examples" / "standard-token" / "contracts") dir_names = [result["Name"] for result in dir_data] dir_hashes = [result["Hash"] for result in dir_data] dir_sizes = [result["Size"] for result in dir_data] assert len(dir_data) == 2 assert "StandardToken.sol" in dir_names - assert "QmRJHLmPVct2rbBpdGjP3xkXbF7romQigtmcs8TRfV1yC7" in dir_hashes - assert "2865" in dir_sizes + assert "QmUofKBtNJVaqoSAtnHfrarJyyLm1oMUTAK4yCtnmYMJVy" in dir_hashes + assert "2949" in dir_sizes diff --git a/tests/ethpm/conftest.py b/tests/ethpm/conftest.py index cd5323f539..e21a84a627 100644 --- a/tests/ethpm/conftest.py +++ b/tests/ethpm/conftest.py @@ -1,5 +1,4 @@ import copy -import json import pytest from eth_utils.toolz import ( @@ -8,13 +7,14 @@ from ethpm import ( ASSETS_DIR, + ETHPM_SPEC_DIR, Package, ) from ethpm._utils.chains import ( create_block_uri, ) from ethpm.tools import ( - get_manifest as get_manifest_tool, + get_ethpm_spec_manifest, ) from ethpm.uri import ( create_latest_block_uri, @@ -24,15 +24,15 @@ linker as l, ) -PACKAGE_NAMES = [ - ("escrow", "1.0.3.json"), - ("owned", "1.0.0.json"), - ("piper-coin", "1.0.0.json"), - ("safe-math-lib", "1.0.0.json"), - ("standard-token", "1.0.0.json"), - ("transferable", "1.0.0.json"), - ("wallet-with-send", "1.0.0.json"), - ("wallet", "1.0.0.json"), +V3_PACKAGE_NAMES = [ + ("escrow", "v3.json"), + ("owned", "v3.json"), + ("piper-coin", "v3.json"), + ("safe-math-lib", "v3.json"), + ("standard-token", "v3.json"), + ("transferable", "v3.json"), + ("wallet-with-send", "v3.json"), + ("wallet", "v3.json"), ] @@ -40,30 +40,33 @@ def pytest_addoption(parser): parser.addoption("--integration", action="store_true", default=False) -@pytest.fixture -def package_names(): - return PACKAGE_NAMES - - -@pytest.fixture(params=PACKAGE_NAMES) +@pytest.fixture(params=V3_PACKAGE_NAMES) def all_strict_manifests(request): - return (ASSETS_DIR / request.param[0] / "1.0.0.json").read_text().rstrip("\n") + return ( + (fetch_manifest_path(request.param[0], "v3.json")) + .read_text() + .rstrip("\n") + ) -@pytest.fixture(params=PACKAGE_NAMES) +@pytest.fixture(params=V3_PACKAGE_NAMES) def all_pretty_manifests(request): return ( - (ASSETS_DIR / request.param[0] / "1.0.0-pretty.json") + (fetch_manifest_path(request.param[0], "v3-pretty.json")) .read_text() .rstrip("\n") ) def fetch_manifest(name, version): - return get_manifest_tool(name, version) + return get_ethpm_spec_manifest(name, version) + +def fetch_manifest_path(name, version): + return ETHPM_SPEC_DIR / 'examples' / name / version -MANIFESTS = {name: fetch_manifest(name, version) for name, version in PACKAGE_NAMES} + +MANIFESTS_V3 = {name: fetch_manifest(name, version) for name, version in V3_PACKAGE_NAMES} @pytest.fixture @@ -83,12 +86,12 @@ def dummy_ipfs_backend(monkeypatch): @pytest.fixture def get_manifest(): def _get_manifest(name): - return copy.deepcopy(MANIFESTS[name]) + return copy.deepcopy(MANIFESTS_V3[name]) return _get_manifest -@pytest.fixture(params=PACKAGE_NAMES) +@pytest.fixture(params=V3_PACKAGE_NAMES) def all_manifests(request, get_manifest): return get_manifest(request.param[0]) @@ -102,23 +105,21 @@ def safe_math_manifest(get_manifest): @pytest.fixture def piper_coin_manifest(): - return json.loads( - (ASSETS_DIR / "piper-coin" / "1.0.0-pretty.json").read_text() - ) + return get_ethpm_spec_manifest("piper-coin", "v3.json") -ESCROW_DEPLOYMENT_BYTECODE = { +ESCROW_DEPLOYMENT_BYTECODE_V3 = { "bytecode": "0x60806040526040516020806102a8833981016040525160008054600160a060020a0319908116331790915560018054600160a060020a0390931692909116919091179055610256806100526000396000f3006080604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166366d003ac811461005b57806367e404ce1461008c57806369d89575146100a1575b600080fd5b34801561006757600080fd5b506100706100b8565b60408051600160a060020a039092168252519081900360200190f35b34801561009857600080fd5b506100706100c7565b3480156100ad57600080fd5b506100b66100d6565b005b600154600160a060020a031681565b600054600160a060020a031681565b600054600160a060020a031633141561019857600154604080517f9341231c000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152303160248301525173000000000000000000000000000000000000000091639341231c916044808301926020929190829003018186803b15801561016657600080fd5b505af415801561017a573d6000803e3d6000fd5b505050506040513d602081101561019057600080fd5b506102289050565b600154600160a060020a031633141561005657600054604080517f9341231c000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152303160248301525173000000000000000000000000000000000000000091639341231c916044808301926020929190829003018186803b15801561016657600080fd5b5600a165627a7a723058201766d3411ff91d047cf900369478c682a497a6e560cd1b2fe4d9f2d6fe13b4210029", # noqa: E501 - "link_references": [{"offsets": [383, 577], "length": 20, "name": "SafeSendLib"}], + "linkReferences": [{"offsets": [383, 577], "length": 20, "name": "SafeSendLib"}], } @pytest.fixture def escrow_manifest(get_manifest): escrow_manifest = get_manifest("escrow") - escrow_manifest["contract_types"]["Escrow"][ - "deployment_bytecode" - ] = ESCROW_DEPLOYMENT_BYTECODE + escrow_manifest["contractTypes"]["Escrow"][ + "deploymentBytecode" + ] = ESCROW_DEPLOYMENT_BYTECODE_V3 return escrow_manifest @@ -138,12 +139,12 @@ def _get_factory(package, factory_name): @pytest.fixture def owned_contract(): - return (ASSETS_DIR / "owned" / "contracts" / "Owned.sol").read_text() + return (ETHPM_SPEC_DIR / "examples" / "owned" / "contracts" / "Owned.sol").read_text() @pytest.fixture def invalid_manifest(safe_math_manifest): - safe_math_manifest["manifest_version"] = 1 + safe_math_manifest["manifest"] = 1 return safe_math_manifest @@ -163,7 +164,7 @@ def manifest_with_empty_deployments(tmpdir, safe_math_manifest): @pytest.fixture def escrow_package(deployer, w3): - escrow_manifest = ASSETS_DIR / "escrow" / "1.0.3.json" + escrow_manifest = ETHPM_SPEC_DIR / "examples" / "escrow" / "v3.json" escrow_deployer = deployer(escrow_manifest) escrow_strategy = l.linker( l.deploy("SafeSendLib"), @@ -176,14 +177,14 @@ def escrow_package(deployer, w3): @pytest.fixture def safe_math_lib_package(deployer, w3): - safe_math_lib_manifest = ASSETS_DIR / "safe-math-lib" / "1.0.1.json" + safe_math_lib_manifest = fetch_manifest_path("safe-math-lib", "v3.json") safe_math_deployer = deployer(safe_math_lib_manifest) return safe_math_deployer.deploy("SafeMathLib") @pytest.fixture def safe_math_lib_package_with_alias(deployer, w3): - safe_math_lib_manifest = ASSETS_DIR / "safe-math-lib" / "1.0.1.json" + safe_math_lib_manifest = ASSETS_DIR / "safe-math-lib" / "v3-strict-no-deployments.json" safe_math_deployer = deployer(safe_math_lib_manifest) pkg = safe_math_deployer.deploy("SafeMathLib") blockchain_uri = list(pkg.manifest["deployments"].keys())[0] @@ -205,7 +206,7 @@ def manifest_with_no_matching_deployments(w3, tmpdir, safe_math_manifest): manifest = copy.deepcopy(safe_math_manifest) manifest["deployments"][block_uri] = { "SafeMathLib": { - "contract_type": "SafeMathLib", + "contractType": "SafeMathLib", "address": "0x8d2c532d7d211816a2807a411f947b211569b68c", "transaction": "0xaceef751507a79c2dee6aa0e9d8f759aa24aab081f6dcf6835d792770541cb2b", "block": "0x420cb2b2bd634ef42f9082e1ee87a8d4aeeaf506ea5cdeddaa8ff7cbf911810c", @@ -223,7 +224,7 @@ def manifest_with_multiple_matches(w3, tmpdir, safe_math_manifest): manifest = copy.deepcopy(safe_math_manifest) manifest["deployments"][block_uri] = { "SafeMathLib": { - "contract_type": "SafeMathLib", + "contractType": "SafeMathLib", "address": "0x8d2c532d7d211816a2807a411f947b211569b68c", "transaction": "0xaceef751507a79c2dee6aa0e9d8f759aa24aab081f6dcf6835d792770541cb2b", "block": "0x420cb2b2bd634ef42f9082e1ee87a8d4aeeaf506ea5cdeddaa8ff7cbf911810c", @@ -231,7 +232,7 @@ def manifest_with_multiple_matches(w3, tmpdir, safe_math_manifest): } manifest["deployments"][second_block_uri] = { "SafeMathLib": { - "contract_type": "SafeMathLib", + "contractType": "SafeMathLib", "address": "0x8d2c532d7d211816a2807a411f947b211569b68c", "transaction": "0xaceef751507a79c2dee6aa0e9d8f759aa24aab081f6dcf6835d792770541cb2b", "block": "0x420cb2b2bd634ef42f9082e1ee87a8d4aeeaf506ea5cdeddaa8ff7cbf911810c", @@ -248,7 +249,7 @@ def manifest_with_conflicting_deployments(tmpdir, safe_math_manifest): "blockchain://41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d/block/1e96de11320c83cca02e8b9caf3e489497e8e432befe5379f2f08599f8aecede" # noqa: E501 ] = { "WrongNameLib": { - "contract_type": "WrongNameLib", + "contractType": "WrongNameLib", "address": "0x8d2c532d7d211816a2807a411f947b211569b68c", "transaction": "0xaceef751507a79c2dee6aa0e9d8f759aa24aab081f6dcf6835d792770541cb2b", "block": "0x420cb2b2bd634ef42f9082e1ee87a8d4aeeaf506ea5cdeddaa8ff7cbf911810c", diff --git a/tests/ethpm/integration/test_escrow_manifest.py b/tests/ethpm/integration/test_escrow_manifest.py index de10fb18e3..fdad3e776c 100644 --- a/tests/ethpm/integration/test_escrow_manifest.py +++ b/tests/ethpm/integration/test_escrow_manifest.py @@ -1,4 +1,3 @@ -import json import pytest from eth_utils import ( @@ -6,22 +5,24 @@ ) from ethpm import ( - ASSETS_DIR, Package, ) from ethpm.exceptions import ( BytecodeLinkingError, ) +from ethpm.tools import ( + get_ethpm_spec_manifest, +) import web3 def test_deployed_escrow_and_safe_send(escrow_manifest, w3): # Deploy a SafeSendLib - safe_send_manifest = json.loads((ASSETS_DIR / "escrow" / "1.0.3.json").read_text()) - safe_send_contract_type = safe_send_manifest["contract_types"]["SafeSendLib"] + safe_send_manifest = get_ethpm_spec_manifest("escrow", "v3.json") + safe_send_contract_type = safe_send_manifest["contractTypes"]["SafeSendLib"] SafeSend = w3.eth.contract( abi=safe_send_contract_type["abi"], - bytecode=safe_send_contract_type["deployment_bytecode"]["bytecode"], + bytecode=safe_send_contract_type["deploymentBytecode"]["bytecode"], ) tx_hash = SafeSend.constructor().transact() tx_receipt = w3.eth.getTransactionReceipt(tx_hash) diff --git a/tests/ethpm/test_contract.py b/tests/ethpm/test_contract.py index 23bc59fc39..d5693e324c 100644 --- a/tests/ethpm/test_contract.py +++ b/tests/ethpm/test_contract.py @@ -33,7 +33,7 @@ "wallet", "Wallet", { - "SafeMathLib": "0xa66A05D6AB5c1c955F4D2c3FCC166AE6300b452B" + "safe-math-lib:SafeMathLib": "0xa66A05D6AB5c1c955F4D2c3FCC166AE6300b452B" }, ), ), diff --git a/tests/ethpm/test_dependencies.py b/tests/ethpm/test_dependencies.py index b09d18bea1..b7da59f2f0 100644 --- a/tests/ethpm/test_dependencies.py +++ b/tests/ethpm/test_dependencies.py @@ -16,7 +16,7 @@ @pytest.fixture def dependencies(dummy_ipfs_backend, piper_coin_manifest, w3): - deps = piper_coin_manifest["build_dependencies"] + deps = piper_coin_manifest["buildDependencies"] dep_pkgs = {dep: Package.from_uri(uri, w3) for dep, uri in deps.items()} return Dependencies(dep_pkgs) diff --git a/tests/ethpm/test_deployments.py b/tests/ethpm/test_deployments.py index 8a173e3596..495954bc95 100644 --- a/tests/ethpm/test_deployments.py +++ b/tests/ethpm/test_deployments.py @@ -25,7 +25,7 @@ DEPLOYMENT_DATA = { "SafeMathLib": { - "contract_type": "SafeMathLib", + "contractType": "SafeMathLib", "address": "0x8d2c532d7d211816a2807a411f947b211569b68c", "transaction": "0xaceef751507a79c2dee6aa0e9d8f759aa24aab081f6dcf6835d792770541cb2b", "block": "0x420cb2b2bd634ef42f9082e1ee87a8d4aeeaf506ea5cdeddaa8ff7cbf911810c", @@ -43,13 +43,13 @@ def contract_factory(safe_math_lib_package): @pytest.fixture -def deployment(w3): - return Deployments(DEPLOYMENT_DATA, VALID_CONTRACT_TYPES, w3) +def deployment(): + return Deployments(DEPLOYMENT_DATA, VALID_CONTRACT_TYPES) @pytest.fixture -def invalid_deployment(w3): - return Deployments(DEPLOYMENT_DATA, INVALID_CONTRACT_TYPES, w3) +def invalid_deployment(): + return Deployments(DEPLOYMENT_DATA, INVALID_CONTRACT_TYPES) def test_deployment_implements_getitem(deployment): @@ -107,8 +107,8 @@ def test_deployments_get_instance(safe_math_lib_package): safe_math_instance = deps.get_instance("SafeMathLib") assert isinstance(safe_math_instance, Contract) assert safe_math_instance.bytecode == to_bytes( - hexstr=safe_math_lib_package.manifest["contract_types"]["SafeMathLib"][ - "deployment_bytecode" + hexstr=safe_math_lib_package.manifest["contractTypes"]["SafeMathLib"][ + "deploymentBytecode" ]["bytecode"] ) @@ -118,9 +118,9 @@ def test_deployments_get_instance_with_contract_alias(safe_math_lib_package_with safe_math_instance = deps.get_instance("safe-math-lib-alias") assert isinstance(safe_math_instance, Contract) assert safe_math_instance.bytecode == to_bytes( - hexstr=safe_math_lib_package_with_alias.manifest["contract_types"][ + hexstr=safe_math_lib_package_with_alias.manifest["contractTypes"][ "SafeMathLib" - ]["deployment_bytecode"]["bytecode"] + ]["deploymentBytecode"]["bytecode"] ) @@ -147,12 +147,12 @@ def test_get_linked_deployments(escrow_package): ( { "Escrow": { - "contract_type": "Escrow", + "contractType": "Escrow", "address": "0x8c1968deB27251A3f1F4508df32dA4dfD1b7b57f", "transaction": "0xc60e32c63abf34579390ef65d83cc5eb52225de38c3eeca2e5afa961d71c16d0", # noqa: E501 "block": "0x4d1a618802bb87752d95db453dddeea622820424a2f836bedf8769a67ee276b8", - "runtime_bytecode": { - "link_dependencies": [ + "runtimeBytecode": { + "linkDependencies": [ {"offsets": [200], "type": "reference", "value": "filler"}, { "offsets": [301, 495], diff --git a/tests/ethpm/test_get_build_dependencies.py b/tests/ethpm/test_get_build_dependencies.py index bb5902a7b1..e5c577f8aa 100644 --- a/tests/ethpm/test_get_build_dependencies.py +++ b/tests/ethpm/test_get_build_dependencies.py @@ -25,7 +25,7 @@ def test_get_build_dependencies(dummy_ipfs_backend, piper_coin_pkg, w3): def test_get_build_dependencies_with_invalid_uris( dummy_ipfs_backend, piper_coin_pkg, w3 ): - piper_coin_pkg.manifest["build_dependencies"]["standard-token"] = "invalid_ipfs_uri" + piper_coin_pkg.manifest["buildDependencies"]["standard-token"] = "invalid_ipfs_uri" with pytest.raises(FailureToFetchIPFSAssetsError): piper_coin_pkg.build_dependencies @@ -33,16 +33,16 @@ def test_get_build_dependencies_with_invalid_uris( def test_get_build_dependencies_without_dependencies_raises_exception( piper_coin_manifest, w3 ): - piper_coin_manifest.pop("build_dependencies", None) + piper_coin_manifest.pop("buildDependencies", None) pkg = Package(piper_coin_manifest, w3) - with pytest.raises(EthPMValidationError): + with pytest.raises(EthPMValidationError, match="Manifest doesn't have any build dependencies"): pkg.build_dependencies def test_get_build_dependencies_with_empty_dependencies_raises_exception( dummy_ipfs_backend, piper_coin_manifest, w3 ): - piper_coin_manifest["build_dependencies"] = {} + piper_coin_manifest["buildDependencies"] = {} pkg = Package(piper_coin_manifest, w3) - with pytest.raises(EthPMValidationError): + with pytest.raises(EthPMValidationError, match="Manifest's build dependencies key is empty"): pkg.build_dependencies diff --git a/tests/ethpm/test_get_deployments.py b/tests/ethpm/test_get_deployments.py index ca0d9fbf83..bcfae2a20b 100644 --- a/tests/ethpm/test_get_deployments.py +++ b/tests/ethpm/test_get_deployments.py @@ -27,7 +27,7 @@ def test_get_deployments_with_no_match_raises_exception( manifest_with_no_matching_deployments, w3 ): package = Package(manifest_with_no_matching_deployments, w3) - with pytest.raises(EthPMValidationError): + with pytest.raises(EthPMValidationError, match="Package has no matching URIs on chain."): package.deployments @@ -35,7 +35,7 @@ def test_get_deployments_with_multiple_matches_raises_exception( manifest_with_multiple_matches, w3 ): package = Package(manifest_with_multiple_matches, w3) - with pytest.raises(EthPMValidationError): + with pytest.raises(EthPMValidationError, match="Package has too many \\(2\\) matching URIs"): package.deployments diff --git a/tests/ethpm/test_package.py b/tests/ethpm/test_package.py index e119c7d0f3..8dab04a030 100644 --- a/tests/ethpm/test_package.py +++ b/tests/ethpm/test_package.py @@ -54,7 +54,7 @@ def test_get_contract_factory_with_default_web3(safe_math_package, w3): def test_get_contract_factory_with_missing_contract_types(safe_math_package, w3): - safe_math_package.manifest.pop("contract_types", None) + safe_math_package.manifest.pop("contractTypes", None) with pytest.raises(InsufficientAssetsError): assert safe_math_package.get_contract_factory("SafeMathLib") @@ -75,7 +75,7 @@ def test_get_contract_instance_throws_with_insufficient_assets(deployed_safe_mat safe_math_package, address = deployed_safe_math with pytest.raises(InsufficientAssetsError): assert safe_math_package.get_contract_instance("IncorrectLib", address) - safe_math_package.manifest["contract_types"]["SafeMathLib"].pop("abi") + safe_math_package.manifest["contractTypes"]["SafeMathLib"].pop("abi") with pytest.raises(InsufficientAssetsError): assert safe_math_package.get_contract_instance("SafeMathLib", address) @@ -83,7 +83,7 @@ def test_get_contract_instance_throws_with_insufficient_assets(deployed_safe_mat def test_package_object_properties(safe_math_package): assert safe_math_package.name == "safe-math-lib" assert safe_math_package.version == "1.0.0" - assert safe_math_package.manifest_version == "2" + assert safe_math_package.manifest_version == "ethpm/3" assert safe_math_package.uri is None assert safe_math_package.__repr__() == "" assert safe_math_package.contract_types == ["SafeMathLib"] diff --git a/tests/ethpm/test_package_init.py b/tests/ethpm/test_package_init.py index 65a089bbc4..4bf62501b6 100644 --- a/tests/ethpm/test_package_init.py +++ b/tests/ethpm/test_package_init.py @@ -16,7 +16,7 @@ @pytest.fixture def valid_manifest_from_path(tmpdir): - valid_manifest = '{"manifest_version":"2","package_name":"foo","version":"1.0.0"}' + valid_manifest = '{"manifest":"ethpm/3","name":"foo","version":"1.0.0"}' temp_manifest = tmpdir.mkdir("invalid").join("manifest.json") temp_manifest.write(valid_manifest) yield Path(str(temp_manifest)) @@ -25,7 +25,7 @@ def valid_manifest_from_path(tmpdir): @pytest.fixture def invalid_manifest_from_path(tmpdir): invalid_manifest = ( - '{"manifest_version":"xx","package_name":"foo","version":"1.0.0"}' + '{"manifest":"xx","name":"foo","version":"1.0.0"}' ) temp_manifest = tmpdir.mkdir("invalid").join("manifest.json") temp_manifest.write(invalid_manifest) @@ -41,14 +41,24 @@ def non_json_manifest(tmpdir): def test_init_from_minimal_valid_manifest(w3): minimal_manifest = { - "package_name": "foo", - "manifest_version": "2", + "name": "foo", + "manifest": "ethpm/3", "version": "1.0.0", } Package(minimal_manifest, w3) +def test_init_with_outdated_ethpm_manifest(w3): + v2_manifest = { + "package_name": "foo", + "manifest_version": "2", + "version": "1.0.0", + } + with pytest.raises(EthPMValidationError): + Package(v2_manifest, w3) + + def test_package_init_for_all_manifest_use_cases(all_manifests, w3): package = Package(all_manifests, w3) assert isinstance(package, Package) @@ -102,12 +112,12 @@ def test_from_file_raises_type_error_with_invalid_param_type(): # From URI # -VALID_IPFS_PKG = "ipfs://QmeD2s7KaBUoGYTP1eutHBmBkMMMoycdfiyGMx2DKrWXyV" +VALID_IPFS_PKG = "ipfs://QmdQfNxmcfGjeVwsXEBLCh5CDYsr2VyZtXoqdVm6F26JJE" def test_package_from_uri_with_valid_uri(dummy_ipfs_backend, w3): package = Package.from_uri(VALID_IPFS_PKG, w3) - assert package.name == "safe-math-lib" + assert package.name == "standard-token" assert isinstance(package, Package) diff --git a/tests/ethpm/tools/test_builder.py b/tests/ethpm/tools/test_builder.py index 778bc26806..24f7809611 100644 --- a/tests/ethpm/tools/test_builder.py +++ b/tests/ethpm/tools/test_builder.py @@ -14,6 +14,7 @@ from ethpm import ( ASSETS_DIR, + ETHPM_SPEC_DIR, Package, ) from ethpm.backends.ipfs import ( @@ -23,6 +24,10 @@ EthPMValidationError, ManifestBuildingError, ) +from ethpm.tools import ( + get_ethpm_local_manifest, + get_ethpm_spec_manifest, +) from ethpm.tools.builder import ( as_package, authors, @@ -53,29 +58,19 @@ linker, ) -BASE_MANIFEST = {"package_name": "package", "manifest_version": "2", "version": "1.0.0"} +BASE_MANIFEST = {"name": "package", "manifest": "ethpm/3", "version": "1.0.0"} @pytest.fixture def owned_package(): - root = ASSETS_DIR / "owned" - manifest = json.loads((root / "1.0.0.json").read_text()) - compiler = json.loads((root / "owned_compiler_output.json").read_text())[ - "contracts" - ] - contracts_dir = root / "contracts" - return contracts_dir, manifest, compiler - + manifest = get_ethpm_spec_manifest("owned", "v3.json") + # source_id missing `./` prefix in ethpm-spec ("Owned.sol"/"./Owned.sol" though both are valid) + source_obj = manifest['sources'].pop('Owned.sol') + updated_manifest = assoc_in(manifest, ['sources', './Owned.sol'], source_obj) -@pytest.fixture -def owned_package_devdoc(): - root = ASSETS_DIR / "owned" - manifest = json.loads((root / "1.0.0.json").read_text()) - compiler = json.loads((root / "owned_compiler_output_devdoc.json").read_text())[ - "contracts" - ] - contracts_dir = root / "contracts" - return contracts_dir, manifest, compiler + compiler = get_ethpm_local_manifest("owned", "output_v3.json")["contracts"] + contracts_dir = ETHPM_SPEC_DIR / "examples" / "owned" / "contracts" + return contracts_dir, updated_manifest, compiler # todo validate no duplicate contracts in package @@ -83,12 +78,10 @@ def owned_package_devdoc(): @pytest.fixture def standard_token_package(): - root = ASSETS_DIR / "standard-token" - manifest = json.loads((root / "1.0.0.json").read_text().rstrip("\n")) - compiler = json.loads((root / "standard_token_compiler_output.json").read_text())[ - "contracts" - ] - contracts_dir = root / "contracts" + standard_token_dir = ETHPM_SPEC_DIR / "examples" / "standard-token" + manifest = get_ethpm_spec_manifest("standard-token", "v3.json") + compiler = get_ethpm_local_manifest("standard-token", "output_v3.json")["contracts"] + contracts_dir = standard_token_dir / "contracts" return contracts_dir, manifest, compiler @@ -97,7 +90,7 @@ def registry_package(): root = ASSETS_DIR / "registry" compiler = json.loads(Path(root / "solc_output.json").read_text())["contracts"] contracts_dir = root / "contracts" - manifest = json.loads((root / "2.0.0.json").read_text()) + manifest = json.loads((root / "v3.json").read_text()) return contracts_dir, manifest, compiler @@ -110,8 +103,9 @@ def test_builder_simple_with_package(w3): package = build( {}, package_name("package"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), + validate(), as_package(w3), ) assert isinstance(package, Package) @@ -119,22 +113,25 @@ def test_builder_simple_with_package(w3): PRETTY_MANIFEST = """{ - "manifest_version": "2", - "package_name": "package", + "manifest": "ethpm/3", + "name": "package", "version": "1.0.0" }""" MINIFIED_MANIFEST = ( - '{"manifest_version":"2","package_name":"package","version":"1.0.0"}' + '{"manifest":"ethpm/3","name":"package","version":"1.0.0"}' ) +OWNED_CONTRACT = "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.8;\n\ncontract Owned {\n address owner;\n \n modifier onlyOwner { require(msg.sender == owner); _; }\n\n constructor() public {\n owner = msg.sender;\n }\n}" # noqa: E501 + def test_builder_writes_manifest_to_disk(manifest_dir): build( {}, package_name("package"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), + validate(), write_to_disk( manifest_root_dir=manifest_dir, manifest_name="1.0.0.json", prettify=True ), @@ -148,9 +145,10 @@ def test_builder_to_disk_uses_default_cwd(manifest_dir, monkeypatch): build( {}, package_name("package"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), write_to_disk(), + validate(), ) actual_manifest = (manifest_dir / "1.0.0.json").read_text() assert actual_manifest == MINIFIED_MANIFEST @@ -160,9 +158,10 @@ def test_to_disk_writes_minified_manifest_as_default(manifest_dir): build( {}, package_name("package"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), write_to_disk(manifest_root_dir=manifest_dir, manifest_name="1.0.0.json"), + validate(), ) actual_manifest = (manifest_dir / "1.0.0.json").read_text() assert actual_manifest == MINIFIED_MANIFEST @@ -172,9 +171,10 @@ def test_to_disk_uses_default_manifest_name(manifest_dir): build( {}, package_name("package"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), write_to_disk(manifest_root_dir=manifest_dir), + validate(), ) actual_manifest = (manifest_dir / "1.0.0.json").read_text() assert actual_manifest == MINIFIED_MANIFEST @@ -192,7 +192,7 @@ def test_to_disk_with_invalid_args_raises_exception(manifest_dir, write_to_disk_ build( {}, package_name("package"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), write_to_disk_fn, ) @@ -203,7 +203,7 @@ def test_builder_with_manifest_validation(): build( {}, package_name("_invalid_package_name"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), validate(), ) @@ -262,9 +262,11 @@ def test_builder_with_inline_source(owned_package, monkeypatch): BASE_MANIFEST, "sources", { - "./Owned.sol": """pragma solidity ^0.4.24;\n\ncontract Owned {\n address""" - """ owner;\n \n modifier onlyOwner { require(msg.sender == owner); _; }\n\n """ - """constructor() public {\n owner = msg.sender;\n }\n}""" + "./Owned.sol": { + "content": OWNED_CONTRACT, + "installPath": "./Owned.sol", + "type": "solidity", + } }, ) assert manifest == expected @@ -276,14 +278,15 @@ def test_builder_with_source_inliner(owned_package, monkeypatch): monkeypatch.chdir(root) inliner = source_inliner(compiler_output) manifest = build(BASE_MANIFEST, inliner("Owned"), validate()) - expected = assoc( BASE_MANIFEST, "sources", { - "./Owned.sol": """pragma solidity ^0.4.24;\n\ncontract Owned {\n address""" - """ owner;\n \n modifier onlyOwner { require(msg.sender == owner); _; }\n\n """ - """constructor() public {\n owner = msg.sender;\n }\n}""" + "./Owned.sol": { + "content": OWNED_CONTRACT, + "installPath": "./Owned.sol", + "type": "solidity", + } }, ) assert manifest == expected @@ -301,22 +304,27 @@ def test_builder_with_inline_source_with_package_root_dir_arg(owned_package): BASE_MANIFEST, "sources", { - "./Owned.sol": """pragma solidity ^0.4.24;\n\ncontract Owned {\n address""" - """ owner;\n \n modifier onlyOwner { require(msg.sender == owner); _; }\n\n """ - """constructor() public {\n owner = msg.sender;\n }\n}""" + "./Owned.sol": { + "content": OWNED_CONTRACT, + "installPath": "./Owned.sol", + "type": "solidity", + } }, ) + print(manifest) + print('-') + print(expected) assert manifest == expected def test_builder_with_pin_source(owned_package, dummy_ipfs_backend): - root, expected_manifest, compiler_output = owned_package + root, expected, compiler_output = owned_package ipfs_backend = get_ipfs_backend() manifest = build( {}, package_name("owned"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), authors("Piper Merriam "), description( @@ -329,17 +337,17 @@ def test_builder_with_pin_source(owned_package, dummy_ipfs_backend): validate(), ) - assert manifest == expected_manifest + assert manifest == expected def test_builder_with_pinner(owned_package, dummy_ipfs_backend): - root, expected_manifest, compiler_output = owned_package + root, expected, compiler_output = owned_package ipfs_backend = get_ipfs_backend() pinner = source_pinner(compiler_output, ipfs_backend, root) manifest = build( {}, package_name("owned"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), authors("Piper Merriam "), description( @@ -352,11 +360,11 @@ def test_builder_with_pinner(owned_package, dummy_ipfs_backend): validate(), ) - assert manifest == expected_manifest + assert manifest == expected def test_builder_with_init_manifest(owned_package, dummy_ipfs_backend): - root, expected_manifest, compiler_output = owned_package + root, expected, compiler_output = owned_package ipfs_backend = get_ipfs_backend() manifest = build( @@ -372,7 +380,7 @@ def test_builder_with_init_manifest(owned_package, dummy_ipfs_backend): validate(), ) - assert manifest == expected_manifest + assert manifest == expected def test_builder_with_default_contract_types(owned_package): @@ -380,8 +388,13 @@ def test_builder_with_default_contract_types(owned_package): manifest = build(BASE_MANIFEST, contract_type("Owned", compiler_output), validate()) - contract_type_data = normalize_contract_type(compiler_output["Owned.sol"]["Owned"]) - expected = assoc(BASE_MANIFEST, "contract_types", {"Owned": contract_type_data}) + contract_type_data = normalize_contract_type(compiler_output["Owned.sol"]["Owned"], "Owned.sol") + compilers_data = contract_type_data.pop('compiler') + compilers_data["contractTypes"] = ["Owned"] + expected_with_contract_type = assoc( + BASE_MANIFEST, "contractTypes", {"Owned": contract_type_data} + ) + expected = assoc(expected_with_contract_type, "compilers", [compilers_data]) assert manifest == expected @@ -394,12 +407,15 @@ def test_builder_with_single_alias_kwarg(owned_package): validate(), ) - contract_type_data = normalize_contract_type(compiler_output["Owned.sol"]["Owned"]) - expected = assoc( + contract_type_data = normalize_contract_type(compiler_output["Owned.sol"]["Owned"], "Owned.sol") + compilers_data = contract_type_data.pop('compiler') + compilers_data["contractTypes"] = ["OwnedAlias"] + expected_with_contract_type = assoc( BASE_MANIFEST, - "contract_types", - {"OwnedAlias": assoc(contract_type_data, "contract_type", "Owned")}, + "contractTypes", + {"OwnedAlias": assoc(contract_type_data, "contractType", "Owned")}, ) + expected = assoc(expected_with_contract_type, "compilers", [compilers_data]) assert manifest == expected @@ -407,19 +423,20 @@ def test_builder_without_alias_and_with_select_contract_types(owned_package): _, _, compiler_output = owned_package manifest = build( - BASE_MANIFEST, contract_type("Owned", compiler_output, abi=True), validate() + BASE_MANIFEST, contract_type("Owned", compiler_output, abi=True, source_id=True), validate() ) - contract_type_data = normalize_contract_type(compiler_output["Owned.sol"]["Owned"]) + contract_type_data = normalize_contract_type(compiler_output["Owned.sol"]["Owned"], "Owned.sol") + omitted_fields = ("deploymentBytecode", "userdoc", "devdoc", "compiler") selected_data = { - k: v for k, v in contract_type_data.items() if k != "deployment_bytecode" + k: v for k, v in contract_type_data.items() if k not in omitted_fields } - expected = assoc(BASE_MANIFEST, "contract_types", {"Owned": selected_data}) + expected = assoc(BASE_MANIFEST, "contractTypes", {"Owned": selected_data}) assert manifest == expected -def test_builder_with_alias_and_select_contract_types(owned_package_devdoc): - _, _, compiler_output = owned_package_devdoc +def test_builder_with_alias_and_select_contract_types(owned_package): + _, _, compiler_output = owned_package manifest = build( BASE_MANIFEST, @@ -428,20 +445,66 @@ def test_builder_with_alias_and_select_contract_types(owned_package_devdoc): compiler_output, alias="OwnedAlias", abi=True, - natspec=True, + compiler=False, + devdoc=True, + userdoc=True, deployment_bytecode=True, - runtime_bytecode=True, - compiler=True, + runtime_bytecode=False, + source_id=True, ), validate(), ) - contract_type_data = normalize_contract_type(compiler_output["Owned.sol"]["Owned"]) + contract_type_data = normalize_contract_type(compiler_output["Owned.sol"]["Owned"], "Owned.sol") + contract_type_data.pop("compiler") expected = assoc( BASE_MANIFEST, - "contract_types", - {"OwnedAlias": assoc(contract_type_data, "contract_type", "Owned")}, + "contractTypes", + {"OwnedAlias": assoc(contract_type_data, "contractType", "Owned")}, + ) + assert manifest == expected + + +def test_builder_manages_duplicate_compilers(owned_package): + _, _, compiler_output = owned_package + + manifest = build( + BASE_MANIFEST, + contract_type( + "Owned", + compiler_output, + abi=True, + compiler=True, + source_id=True, + ), + contract_type( + "Owned", + compiler_output, + alias="OwnedAlias", + abi=True, + compiler=True, + source_id=True, + ), + validate(), + ) + contract_type_data = normalize_contract_type(compiler_output["Owned.sol"]["Owned"], "Owned.sol") + compiler_data = contract_type_data.pop("compiler") + contract_type_data.pop('deploymentBytecode') + contract_type_data.pop('devdoc') + contract_type_data.pop('userdoc') + compiler_data_with_contract_types = assoc( + compiler_data, 'contractTypes', ['Owned', 'OwnedAlias'] + ) + expected_with_contract_types = assoc( + BASE_MANIFEST, + "contractTypes", + { + "Owned": assoc(contract_type_data, "contractType", "Owned"), + "OwnedAlias": assoc(contract_type_data, "contractType", "Owned"), + }, ) + expected_with_contract_types['contractTypes']['Owned'].pop("contractType") + expected = assoc(expected_with_contract_types, 'compilers', [compiler_data_with_contract_types]) assert manifest == expected @@ -449,10 +512,10 @@ def test_builder_raises_exception_if_selected_contract_type_missing_from_solc( owned_package ): _, _, compiler_output = owned_package - with pytest.raises(ManifestBuildingError): + with pytest.raises(ManifestBuildingError, match="runtimeBytecode not available"): build( BASE_MANIFEST, - contract_type("Owned", compiler_output, abi=True, natspec=True), + contract_type("Owned", compiler_output, abi=True, runtime_bytecode=True), ) @@ -466,11 +529,14 @@ def test_builder_with_standard_token_manifest( manifest = build( {}, package_name("standard-token"), - manifest_version("2"), + manifest_version("ethpm/3"), version("1.0.0"), pin_source("StandardToken", compiler_output, ipfs_backend), pin_source("Token", compiler_output, ipfs_backend), - contract_type("StandardToken", compiler_output, abi=True, natspec=True), + contract_type("StandardToken", compiler_output, abi=True, devdoc=True, source_id=True), + contract_type( + "Token", compiler_output, abi=True, devdoc=True, userdoc=True, source_id=True + ), validate(), ) assert manifest == expected_manifest @@ -485,7 +551,7 @@ def test_builder_with_link_references( manifest = build( {}, package_name("solidity-registry"), - manifest_version("2"), + manifest_version("ethpm/3"), version("2.0.0"), inliner("Authorized"), inliner("IndexedOrderedSetLib"), @@ -500,16 +566,18 @@ def test_builder_with_link_references( abi=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, + devdoc=True, + source_id=True, ), contract_type( "Authorized", compiler_output, abi=True, + compiler=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, - compiler=True, + devdoc=True, + source_id=True, ), contract_type( "AuthorizedInterface", @@ -517,16 +585,18 @@ def test_builder_with_link_references( abi=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, + devdoc=True, + source_id=True, ), contract_type( "WhitelistAuthority", compiler_output, abi=True, + compiler=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, - compiler=True, + devdoc=True, + source_id=True, ), contract_type( "WhitelistAuthorityInterface", @@ -534,34 +604,38 @@ def test_builder_with_link_references( abi=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, + devdoc=True, + source_id=True, ), contract_type( "IndexedOrderedSetLib", compiler_output, abi=True, + compiler=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, - compiler=True, + devdoc=True, + source_id=True, ), contract_type( "PackageDB", compiler_output, abi=True, + compiler=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, - compiler=True, + devdoc=True, + source_id=True, ), contract_type( "PackageRegistry", compiler_output, abi=True, + compiler=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, - compiler=True, + devdoc=True, + source_id=True, ), contract_type( "PackageRegistryInterface", @@ -569,55 +643,44 @@ def test_builder_with_link_references( abi=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, + devdoc=True, + source_id=True, ), contract_type( "ReleaseDB", compiler_output, abi=True, + compiler=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, - compiler=True, + devdoc=True, + source_id=True, ), contract_type( "ReleaseValidator", compiler_output, abi=True, + compiler=True, deployment_bytecode=True, runtime_bytecode=True, - natspec=True, - compiler=True, + devdoc=True, + source_id=True, ), validate(), ) assert manifest == expected_manifest -@pytest.fixture -def escrow_package(w3, deployer): - manifest = ASSETS_DIR / "escrow" / "1.0.3.json" - escrow_deployer = deployer(manifest) - escrow_strategy = linker( - deploy("SafeSendLib"), - link("Escrow", "SafeSendLib"), - deploy("Escrow", w3.eth.accounts[0]), - ) - escrow_deployer.register_strategy("Escrow", escrow_strategy) - escrow_package = escrow_deployer.deploy("Escrow") - return escrow_package, w3 - - def test_builder_deployment_simple(w3): expected = json.dumps( { - "package_name": "package", + "name": "package", "version": "1.0.0", - "manifest_version": "2", + "manifest": "ethpm/3", "deployments": { "blockchain://1234567890123456789012345678901234567890123456789012345678901234/block/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef": { # noqa: E501 "Owned": { - "contract_type": "Owned", + "contractType": "Owned", "address": "0xd3CdA913deB6f67967B99D67aCDFa1712C293601", } } @@ -632,10 +695,25 @@ def test_builder_deployment_simple(w3): contract_type="Owned", address=to_canonical_address("0xd3cda913deb6f67967b99d67acdfa1712c293601"), ), + validate(), ) assert manifest == json.loads(expected) +@pytest.fixture +def escrow_package(w3, deployer): + manifest = ETHPM_SPEC_DIR / "examples" / "escrow" / "v3.json" + escrow_deployer = deployer(manifest) + escrow_strategy = linker( + deploy("SafeSendLib"), + link("Escrow", "SafeSendLib"), + deploy("Escrow", w3.eth.accounts[0]), + ) + escrow_deployer.register_strategy("Escrow", escrow_strategy) + escrow_package = escrow_deployer.deploy("Escrow") + return escrow_package, w3 + + def test_builder_deployment_type_complex(escrow_package): escrow, w3 = escrow_package escrow_dep_type = deployment_type( @@ -660,7 +738,7 @@ def test_builder_deployment_type_complex(escrow_package): {}, package_name("escrow"), version("1.0.0"), - manifest_version("2"), + manifest_version("ethpm/3"), escrow_dep_type( block_uri="blockchain://1111111111111111111111111111111111111111111111111111111111111111/block/1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", # noqa: E501 address=escrow.deployments.get_instance("Escrow").address, @@ -684,6 +762,7 @@ def test_builder_deployment_type_complex(escrow_package): contract_type="SafeSendLib", address=escrow.deployments.get_instance("SafeSendLib").address, ), + validate(), ) assert len(manifest["deployments"].keys()) == 2 assert len(list(manifest["deployments"].values())[0]) == 2 @@ -694,12 +773,13 @@ def test_builder_with_single_build_dependency(): expected_build_dep = { "package": "ipfs://QmUYcVzTfSwJoigggMxeo2g5STWAgJdisQsqcXHws7b1FW" } - expected = assoc_in(BASE_MANIFEST, ["build_dependencies"], expected_build_dep) + expected = assoc_in(BASE_MANIFEST, ["buildDependencies"], expected_build_dep) actual = build( BASE_MANIFEST, build_dependency( "package", "ipfs://QmUYcVzTfSwJoigggMxeo2g5STWAgJdisQsqcXHws7b1FW" ), + validate(), ) assert actual == expected @@ -709,7 +789,7 @@ def test_builder_with_multiple_build_dependencies(): "escrow": "ipfs://QmPDwMHk8e1aMEZg3iKsUiPSkhHkywpGB3KHKM52RtGrkv", "package": "ipfs://QmUYcVzTfSwJoigggMxeo2g5STWAgJdisQsqcXHws7b1FW", } - expected = assoc_in(BASE_MANIFEST, ["build_dependencies"], expected_build_deps) + expected = assoc_in(BASE_MANIFEST, ["buildDependencies"], expected_build_deps) actual = build( BASE_MANIFEST, build_dependency( @@ -718,6 +798,7 @@ def test_builder_with_multiple_build_dependencies(): build_dependency( "escrow", "ipfs://QmPDwMHk8e1aMEZg3iKsUiPSkhHkywpGB3KHKM52RtGrkv" ), + validate(), ) assert actual == expected @@ -730,6 +811,6 @@ def test_builder_with_invalid_uri(): {}, package_name("package"), version("1.0.0"), - manifest_version("2"), + manifest_version("ethpm/3"), build_dependency("package", "www.google.com"), ) diff --git a/tests/ethpm/tools/test_checker.py b/tests/ethpm/tools/test_checker.py index ddefbcd7cb..a0bf20424f 100644 --- a/tests/ethpm/tools/test_checker.py +++ b/tests/ethpm/tools/test_checker.py @@ -12,25 +12,26 @@ def test_checker_simple(): warnings = check_manifest({}) assert warnings == { - "manifest_version": "Manifest missing a required 'manifest_version' field.", - "package_name": "Manifest missing a required 'package_name' field", - "version": "Manifest missing a required 'version' field.", + "manifest": "Manifest missing a required 'manifest' field.", + "name": "Manifest missing a suggested 'name' field", + "version": "Manifest missing a suggested 'version' field.", "meta": "Manifest missing a suggested 'meta' field.", "sources": """Manifest is missing a sources field, which defines a source tree that """ """should comprise the full source tree necessary to recompile the contracts """ """contained in this release.""", - "contract_types": """Manifest does not contain any 'contract_types'. Packages should """ + "contractTypes": """Manifest does not contain any 'contractTypes'. Packages should """ """only include contract types that can be found in the source files for this """ """package. Packages should not include contract types from dependencies. """ """Packages should not include abstract contracts in the contract types section """ """of a release.""", + "compilers": "Manifest is missing a suggested `compilers` field.", } BASIC_MANIFEST = { - "package_name": "package", + "name": "package", "version": "1.0.0", - "manifest_version": "2", + "manifest": "ethpm/3", } @@ -74,71 +75,71 @@ def test_check_sources(manifest, expected): @pytest.mark.parametrize( "manifest,expected", ( - ({}, {"contract_types": WARNINGS["contract_type_missing"]}), - ({"contract_types": {}}, {"contract_types": WARNINGS["contract_type_missing"]}), + ({}, {"contractTypes": WARNINGS["contract_type_missing"]}), + ({"contractTypes": {}}, {"contractTypes": WARNINGS["contract_type_missing"]}), ( - {"contract_types": {"x": {"runtime_bytecode": {"invalid": "invalid"}}}}, + {"contractTypes": {"x": {"runtimeBytecode": {"invalid": "invalid"}}}}, { - "contract_types": { + "contractTypes": { "x": { "abi": WARNINGS["abi_missing"].format("x"), - "contract_type": WARNINGS[ + "contractType": WARNINGS[ "contract_type_subfield_missing" ].format("x"), - "deployment_bytecode": WARNINGS[ + "deploymentBytecode": WARNINGS[ "deployment_bytecode_missing" ].format("x"), - "runtime_bytecode": WARNINGS[ + "runtimeBytecode": WARNINGS[ "bytecode_subfield_missing" ].format("x", "runtime"), - "natspec": WARNINGS["natspec_missing"].format("x"), - "compiler": WARNINGS["compiler_missing"].format("x"), + "devdoc": WARNINGS["devdoc_missing"].format("x"), + "userdoc": WARNINGS["userdoc_missing"].format("x"), } } }, ), ( { - "contract_types": { + "contractTypes": { "x": { - "deployment_bytecode": [], - "runtime_bytecode": {"bytecode": []}, + "deploymentBytecode": [], + "runtimeBytecode": {"bytecode": []}, }, "y": { "abi": [1], - "deployment_bytecode": [], - "runtime_bytecode": [], + "deploymentBytecode": [], + "runtimeBytecode": [], }, } }, { - "contract_types": { + "contractTypes": { "x": { "abi": WARNINGS["abi_missing"].format("x"), - "contract_type": WARNINGS[ + "contractType": WARNINGS[ "contract_type_subfield_missing" ].format("x"), - "deployment_bytecode": WARNINGS[ + "deploymentBytecode": WARNINGS[ "deployment_bytecode_missing" ].format("x"), - "runtime_bytecode": WARNINGS[ + "runtimeBytecode": WARNINGS[ "bytecode_subfield_missing" ].format("x", "runtime"), - "natspec": WARNINGS["natspec_missing"].format("x"), - "compiler": WARNINGS["compiler_missing"].format("x"), + "devdoc": WARNINGS["devdoc_missing"].format("x"), + "userdoc": WARNINGS["userdoc_missing"].format("x"), }, "y": { - "contract_type": WARNINGS[ + "contractType": WARNINGS[ "contract_type_subfield_missing" ].format("y"), - "deployment_bytecode": WARNINGS[ + "deploymentBytecode": WARNINGS[ "deployment_bytecode_missing" ].format("y"), - "runtime_bytecode": WARNINGS["runtime_bytecode_missing"].format( + "runtimeBytecode": WARNINGS["runtime_bytecode_missing"].format( "y" ), - "natspec": WARNINGS["natspec_missing"].format("y"), - "compiler": WARNINGS["compiler_missing"].format("y"), + "devdoc": WARNINGS["devdoc_missing"].format("y"), + "userdoc": WARNINGS["userdoc_missing"].format("y"), }, } }, diff --git a/tests/ethpm/validation/test_manifest.py b/tests/ethpm/validation/test_manifest.py index 0417f9acec..c68089f7cc 100644 --- a/tests/ethpm/validation/test_manifest.py +++ b/tests/ethpm/validation/test_manifest.py @@ -1,8 +1,5 @@ import pytest -from ethpm import ( - ASSETS_DIR, -) from ethpm.exceptions import ( EthPMValidationError, ) @@ -10,7 +7,6 @@ extract_contract_types_from_deployments, validate_manifest_against_schema, validate_manifest_deployments, - validate_manifest_exists, validate_meta_object, validate_raw_manifest_format, ) @@ -55,51 +51,37 @@ def test_validate_raw_manifest_format_invalidates_invalid_manifests(tmpdir, mani validate_raw_manifest_format(invalid_manifest) -def test_validate_manifest_exists_validates(): - assert ( - validate_manifest_exists(ASSETS_DIR / "safe-math-lib" / "1.0.0.json") - is None - ) - - -def test_validate_manifest_exists_invalidates(): - with pytest.raises(EthPMValidationError): - validate_manifest_exists("DNE") - - def test_validate_manifest_against_all_manifest_types(all_manifests): assert validate_manifest_against_schema(all_manifests) is None def test_validate_manifest_invalidates(invalid_manifest): - with pytest.raises(EthPMValidationError): + with pytest.raises(EthPMValidationError, match="Manifest invalid for schema"): validate_manifest_against_schema(invalid_manifest) -def test_validate_deployed_contracts_present_validates( +def test_validate_manifest_deployments_catches_missing_contract_type_references( manifest_with_conflicting_deployments ): - with pytest.raises(EthPMValidationError): + with pytest.raises(EthPMValidationError, match="Manifest missing references to contracts"): validate_manifest_deployments(manifest_with_conflicting_deployments) -def test_validate_deployments(safe_math_lib_package): - validate = validate_manifest_deployments(safe_math_lib_package.manifest) - assert validate is None +def test_validate_deployments_for_single_deployment(safe_math_lib_package): + assert validate_manifest_deployments(safe_math_lib_package.manifest) is None -def test_validate_deployed_contracts_pr(manifest_with_no_deployments): - validate = validate_manifest_deployments(manifest_with_no_deployments) - assert validate is None +def test_validate_deployments_without_deployment(manifest_with_no_deployments): + assert validate_manifest_deployments(manifest_with_no_deployments) is None @pytest.mark.parametrize( "data,expected", ( ({}, set()), - ([{"some": {"contract_type": "one"}}], set(["one"])), + ([{"some": {"contractType": "one"}}], set(["one"])), ( - [{"some": {"contract_type": "one"}, "other": {"contract_type": "two"}}], + [{"some": {"contractType": "one"}, "other": {"contractType": "two"}}], set(["one", "two"]), ), ), @@ -109,13 +91,11 @@ def test_extract_contract_types_from_deployments(data, expected): assert actual == expected -@pytest.mark.parametrize("version", ("2")) -def test_validate_manifest_version_validates_version_two_string(version): - validate = validate_manifest_version(version) - assert validate is None +def test_validate_manifest_version_validates_version_three_string(): + assert validate_manifest_version("ethpm/3") is None -@pytest.mark.parametrize("version", (1, 2, "1" "3", b"3")) +@pytest.mark.parametrize("version", (2, 3, "2", "3", b"3")) def test_validate_manifest_version_invalidates_incorrect_versions(version): with pytest.raises(EthPMValidationError): validate_manifest_version(version) diff --git a/tests/ethpm/validation/test_manifest_assets_are_valid.py b/tests/ethpm/validation/test_manifest_assets_are_valid.py index 0a4805ca60..404ea1e62d 100644 --- a/tests/ethpm/validation/test_manifest_assets_are_valid.py +++ b/tests/ethpm/validation/test_manifest_assets_are_valid.py @@ -19,15 +19,11 @@ def get_all_manifest_paths(): all_use_case_json = set(ASSETS_DIR.glob(SOURCES_GLOB)) - set( (ASSETS_DIR / "spec").glob(SOURCES_GLOB) ) - solc_outputs = ("solc", "output") - all_manifests = [ - json - for json in all_use_case_json - if all(known not in json.name for known in solc_outputs) - ] + all_manifests = [json for json in all_use_case_json if json.name == "v3.json"] if not all_manifests: raise InsufficientAssetsError( - "Error importing manifests for validation, found no manifests in `ethpm/assets/`" + "Error importing manifests for validation, " + "no v3 manifests found in `ethpm/ethpm-spec` submodule" ) return all_manifests @@ -38,5 +34,4 @@ def manifest(request): def test_manifest_assets_are_valid(manifest): - result = validate_manifest_against_schema(manifest) - assert result is None + assert validate_manifest_against_schema(manifest) is None diff --git a/tox.ini b/tox.ini index ca818978a4..8f66e3c01a 100644 --- a/tox.ini +++ b/tox.ini @@ -17,7 +17,7 @@ known_third_party=lru,eth_tester known_first_party=web3,ens,ethpm line_length=21 multi_line_output=3 -skip=web3/main.py,web3/utils/windows.py +skip=web3/main.py,web3/utils/windows.py,ethpm/ethpm-spec/ use_parentheses=True [flake8] @@ -62,7 +62,7 @@ basepython = basepython=python extras=linter commands= - flake8 {toxinidir}/web3 {toxinidir}/ens {toxinidir}/ethpm {toxinidir}/tests + flake8 {toxinidir}/web3 {toxinidir}/ens {toxinidir}/ethpm {toxinidir}/tests --exclude {toxinidir}/ethpm/ethpm-spec isort --recursive --check-only --diff {toxinidir}/web3/ {toxinidir}/ens/ {toxinidir}/ethpm/ {toxinidir}/tests/ mypy -p web3 -p ethpm -p ens --config-file {toxinidir}/mypy.ini diff --git a/web3/pm.py b/web3/pm.py index 2a334798a7..18ec2c5ab0 100644 --- a/web3/pm.py +++ b/web3/pm.py @@ -239,7 +239,7 @@ class SimpleRegistry(ERC1319Registry): """ def __init__(self, address: ChecksumAddress, w3: Web3) -> None: - abi = get_simple_registry_manifest()["contract_types"]["PackageRegistry"][ + abi = get_simple_registry_manifest()["contractTypes"]["PackageRegistry"][ "abi" ] self.registry = w3.eth.contract(address=address, abi=abi) @@ -432,10 +432,10 @@ def release_package( validate_raw_manifest_format(raw_manifest) manifest = json.loads(raw_manifest) validate_manifest_against_schema(manifest) - if package_name != manifest["package_name"]: + if package_name != manifest["name"]: raise ManifestValidationError( f"Provided package name: {package_name} does not match the package name " - f"found in the manifest: {manifest['package_name']}." + f"found in the manifest: {manifest['name']}." ) if version != manifest["version"]: @@ -565,7 +565,7 @@ def _validate_set_ens(self) -> None: def get_simple_registry_manifest() -> Dict[str, Any]: - return json.loads((ASSETS_DIR / "simple-registry" / "2.0.0a1.json").read_text()) + return json.loads((ASSETS_DIR / "simple-registry" / "v3.json").read_text()) def validate_is_supported_manifest_uri(uri: URI) -> None: diff --git a/web3/tools/pytest_ethereum/_utils.py b/web3/tools/pytest_ethereum/_utils.py index b42b9f495b..5a837a3de2 100644 --- a/web3/tools/pytest_ethereum/_utils.py +++ b/web3/tools/pytest_ethereum/_utils.py @@ -110,12 +110,12 @@ def create_deployment_data( tx_receipt: TxReceipt, link_refs: List[Dict[str, Any]] = None, ) -> Iterable[Tuple[str, Any]]: - yield "contract_type", contract_name + yield "contractType", contract_name yield "address", new_address yield "transaction", to_hex(tx_receipt["transactionHash"]) yield "block", to_hex(tx_receipt["blockHash"]) if link_refs: - yield "runtime_bytecode", {"link_dependencies": create_link_dep(link_refs)} + yield "runtimeBytecode", {"linkDependencies": create_link_dep(link_refs)} @to_list diff --git a/web3/tools/pytest_ethereum/linker.py b/web3/tools/pytest_ethereum/linker.py index 4f5444f15f..99ce97dbb5 100644 --- a/web3/tools/pytest_ethereum/linker.py +++ b/web3/tools/pytest_ethereum/linker.py @@ -103,7 +103,7 @@ def link(contract: ContractName, linked_type: str, package: Package) -> Package: # todo replace runtime_bytecode in manifest manifest = assoc_in( package.manifest, - ("contract_types", contract, "deployment_bytecode", "bytecode"), + ("contractTypes", contract, "deploymentBytecode", "bytecode"), to_hex(linked_factory.bytecode), ) logger.info(