{
  "fileName": "DeprecatedApp.sol",
  "contractName": "DeprecatedApp",
  "source": "pragma solidity ^0.5.0;\n\nimport \"../application/ImplementationProvider.sol\";\nimport \"../application/Package.sol\";\nimport { DeprecatedAdminUpgradeabilityProxy as AdminUpgradeabilityProxy } from \"../mocks/DeprecatedAdminUpgradeabilityProxy.sol\";\nimport \"../ownership/Ownable.sol\";\n\n/**\n * @title App\n * @dev Contract for upgradeable applications.\n * It handles the creation and upgrading of proxies.\n */\ncontract DeprecatedApp is OpenZeppelinUpgradesOwnable {\n  /**\n   * @dev Emitted when a new proxy is created.\n   * @param proxy Address of the created proxy.\n   */\n  event ProxyCreated(address proxy);\n\n  /**\n   * @dev Emitted when a package dependency is changed in the application.\n   * @param providerName Name of the package that changed.\n   * @param package Address of the package associated to the name.\n   * @param version Version of the package in use.\n   */\n  event PackageChanged(string providerName, address package, uint64[3] version);\n\n  /**\n   * @dev Tracks a package in a particular version, used for retrieving implementations\n   */\n  struct ProviderInfo {\n    Package package;\n    uint64[3] version;\n  }\n\n  /**\n   * @dev Maps from dependency name to a tuple of package and version\n   */\n  mapping(string => ProviderInfo) internal providers;\n\n  /**\n   * @dev Constructor function.\n   */\n  constructor() public { }\n\n  /**\n   * @dev Returns the provider for a given package name, or zero if not set.\n   * @param packageName Name of the package to be retrieved.\n   * @return The provider.\n   */\n  function getProvider(string memory packageName) public view returns (ImplementationProvider provider) {\n    ProviderInfo storage info = providers[packageName];\n    if (address(info.package) == address(0)) return ImplementationProvider(0);\n    return ImplementationProvider(info.package.getContract(info.version));\n  }\n\n  /**\n   * @dev Returns information on a package given its name.\n   * @param packageName Name of the package to be queried.\n   * @return A tuple with the package address and pinned version given a package name, or zero if not set\n   */\n  function getPackage(string memory packageName) public view returns (Package, uint64[3] memory) {\n    ProviderInfo storage info = providers[packageName];\n    return (info.package, info.version);\n  }\n\n  /**\n   * @dev Sets a package in a specific version as a dependency for this application.\n   * Requires the version to be present in the package.\n   * @param packageName Name of the package to set or overwrite.\n   * @param package Address of the package to register.\n   * @param version Version of the package to use in this application.\n   */\n  function setPackage(string memory packageName, Package package, uint64[3] memory version) public onlyOwner {\n    require(package.hasVersion(version), \"The requested version must be registered in the given package\");\n    providers[packageName] = ProviderInfo(package, version);\n    emit PackageChanged(packageName, address(package), version);\n  }\n\n  /**\n   * @dev Unsets a package given its name.\n   * Reverts if the package is not set in the application.\n   * @param packageName Name of the package to remove.\n   */\n  function unsetPackage(string memory packageName) public onlyOwner {\n    require(address(providers[packageName].package) != address(0), \"Package to unset not found\");\n    delete providers[packageName];\n    emit PackageChanged(packageName, address(0), [uint64(0), uint64(0), uint64(0)]);\n  }\n\n  /**\n   * @dev Returns the implementation address for a given contract name, provided by the `ImplementationProvider`.\n   * @param packageName Name of the package where the contract is contained.\n   * @param contractName Name of the contract.\n   * @return Address where the contract is implemented.\n   */\n  function getImplementation(string memory packageName, string memory contractName) public view returns (address) {\n    ImplementationProvider provider = getProvider(packageName);\n    if (address(provider) == address(0)) return address(0);\n    return provider.getImplementation(contractName);\n  }\n\n  /**\n   * @dev Returns the current implementation of a proxy.\n   * This is needed because only the proxy admin can query it.\n   * @return The address of the current implementation of the proxy.\n   */\n  function getProxyImplementation(AdminUpgradeabilityProxy proxy) public returns (address) {\n    return proxy.implementation();\n  }\n\n  /**\n   * @dev Returns the admin of a proxy. Only the admin can query it.\n   * @return The address of the current admin of the proxy.\n   */\n  function getProxyAdmin(AdminUpgradeabilityProxy proxy) public view returns (address) {\n    return proxy.admin();\n  }\n\n  /**\n   * @dev Changes the admin of a proxy.\n   * @param proxy Proxy to change admin.\n   * @param newAdmin Address to transfer proxy administration to.\n   */\n  function changeProxyAdmin(AdminUpgradeabilityProxy proxy, address newAdmin) public onlyOwner {\n    proxy.changeAdmin(newAdmin);\n  }\n\n  /**\n   * @dev Creates a new proxy for the given contract and forwards a function call to it.\n   * This is useful to initialize the proxied contract.\n   * @param packageName Name of the package where the contract is contained.\n   * @param contractName Name of the contract.\n   * @param data Data to send as msg.data to the corresponding implementation to initialize the proxied contract.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n   * @return Address of the new proxy.\n   */\n   function create(string memory packageName, string memory contractName, bytes memory data) payable public returns (AdminUpgradeabilityProxy) {\n    address implementation = getImplementation(packageName, contractName);\n     AdminUpgradeabilityProxy proxy = (new AdminUpgradeabilityProxy).value(msg.value)(implementation, data);\n     emit ProxyCreated(address(proxy));\n     return proxy;\n  }\n\n  /**\n   * @dev Upgrades a proxy to the newest implementation of a contract.\n   * @param proxy Proxy to be upgraded.\n   * @param packageName Name of the package where the contract is contained.\n   * @param contractName Name of the contract.\n   */\n  function upgrade(AdminUpgradeabilityProxy proxy, string memory packageName, string memory contractName) public onlyOwner {\n    address implementation = getImplementation(packageName, contractName);\n    proxy.upgradeTo(implementation);\n  }\n\n  /**\n   * @dev Upgrades a proxy to the newest implementation of a contract and forwards a function call to it.\n   * This is useful to initialize the proxied contract.\n   * @param proxy Proxy to be upgraded.\n   * @param packageName Name of the package where the contract is contained.\n   * @param contractName Name of the contract.\n   * @param data Data to send as msg.data in the low level call.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   */\n  function upgradeAndCall(AdminUpgradeabilityProxy proxy, string memory packageName, string memory contractName, bytes memory data) payable public onlyOwner {\n    address implementation = getImplementation(packageName, contractName);\n    proxy.upgradeToAndCall.value(msg.value)(implementation, data);\n  }\n}\n",
  "sourcePath": "contracts/mocks/DeprecatedApp.sol",
  "sourceMap": "402:7062:8:-;;;1305:24;8:9:-1;5:2;;;30:1;27;20:12;5:2;1305:24:8;989:10:33;980:6;;:19;;;;;;;;;;;;;;;;;;1047:6;;;;;;;;;;;1014:40;;1043:1;1014:40;;;;;;;;;;;;402:7062:8;;;;;;",
  "deployedSourceMap": "402:7062:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4229:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4229:129:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4229:129:8;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3730:294;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3730:294:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3730:294:8;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3730:294:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3730:294:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3730:294:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3730:294:8;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3730:294:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3730:294:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3730:294:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3730:294:8;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5671:388;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5671:388:8;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5671:388:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5671:388:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5671:388:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5671:388:8;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5671:388:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5671:388:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5671:388:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5671:388:8;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5671:388:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5671:388:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5671:388:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5671:388:8;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1510:317;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1510:317:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1510:317:8;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1510:317:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1510:317:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1510:317:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1510:317:8;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1812:137:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1812:137:33;;;:::i;:::-;;2613:345:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2613:345:8;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2613:345:8;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2613:345:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2613:345:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2613:345:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2613:345:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2613:345:8;;;;;;;;;;;;;;:::i;:::-;;4782:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4782:131:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4782:131:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6310:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6310:238:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6310:238:8;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6310:238:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6310:238:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6310:238:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6310:238:8;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6310:238:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6310:238:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6310:238:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6310:238:8;;;;;;;;;;;;;;;:::i;:::-;;2067:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2067:197:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2067:197:8;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2067:197:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2067:197:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2067:197:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2067:197:8;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;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;2067:197:8;;;;;;;;;;;;;;;;;1124:77:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1124:77:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1444:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1444:90:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3131:289:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3131:289:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3131:289:8;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3131:289:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3131:289:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3131:289:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3131:289:8;;;;;;;;;;;;;;;:::i;:::-;;7160:302;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7160:302:8;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7160:302:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7160:302:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7160:302:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7160:302:8;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7160:302:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7160:302:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7160:302:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7160:302:8;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7160:302:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7160:302:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7160:302:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7160:302:8;;;;;;;;;;;;;;;:::i;:::-;;2120:107:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2120:107:33;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2120:107:33;;;;;;;;;;;;;;;;;;;:::i;:::-;;4503:116:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4503:116:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4503:116:8;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4229:129;4309:7;4331:5;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4331:22:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4331:22:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4331:22:8;;;;;;;;;;;;;;;;4324:29;;4229:129;;;:::o;3730:294::-;3833:7;3848:31;3882:24;3894:11;3882;:24::i;:::-;3848:58;;3945:1;3916:31;;3924:8;3916:31;;;3912:54;;;3964:1;3949:17;;;;;3912:54;3979:8;:26;;;4006:12;3979:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;3979:40:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3979:40:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3979:40:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3979:40:8;;;;;;;;;;;;;;;;3972:47;;;3730:294;;;;;:::o;5671:388::-;5785:24;5817:22;5842:44;5860:11;5873:12;5842:17;:44::i;:::-;5817:69;;5893:30;5963:9;5974:14;5990:4;5926:69;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;5926:69:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5926:69:8;;;5893:102;;6007:28;6028:5;6007:28;;;;;;;;;;;;;;;;;;;;;;6049:5;6042:12;;;;5671:388;;;;;:::o;1510:317::-;1579:31;1618:25;1646:9;1656:11;1646:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1646:22:8;;;;;;;;;;;;;;;;;;;;;1618:50;;1711:1;1678:35;;1686:4;:12;;;;;;;;;;;;1678:35;;;1674:73;;;1745:1;1715:32;;;;;1674:73;1783:4;:12;;;;;;;;;;;;:24;;;1808:4;:12;;1783:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1783:38:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1783:38:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1783:38:8;;;;;;;;;;;;;;;;1753:69;;;1510:317;;;;:::o;1812:137:33:-;1328:9;:7;:9::i;:::-;1320:18;;;;;;;;1910:1;1873:40;;1894:6;;;;;;;;;;;1873:40;;;;;;;;;;;;1940:1;1923:6;;:19;;;;;;;;;;;;;;;;;;1812:137::o;2613:345:8:-;1328:9:33;:7;:9::i;:::-;1320:18;;;;;;;;2734:7:8;:18;;;2753:7;2734:27;;;;;;;;;;;;;;;;;;;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;2734:27:8;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2734:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2734:27:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2734:27:8;;;;;;;;;;;;;;;;2726:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2858:30;;;;;;;;;2871:7;2858:30;;;;;;2880:7;2858:30;;;2833:9;2843:11;2833:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2833:22:8;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2899:54;2914:11;2935:7;2945;2899:54;;;;;;;;;;;;;;;;;;;;;;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;2899:54:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2899:54:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2613:345;;;:::o;4782:131::-;1328:9:33;:7;:9::i;:::-;1320:18;;;;;;;;4881:5:8;:17;;;4899:8;4881:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4881:27:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4881:27:8;;;;4782:131;;:::o;6310:238::-;1328:9:33;:7;:9::i;:::-;1320:18;;;;;;;;6437:22:8;6462:44;6480:11;6493:12;6462:17;:44::i;:::-;6437:69;;6512:5;:15;;;6528:14;6512:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6512:31:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6512:31:8;;;;1348:1:33;6310:238:8;;;:::o;2067:197::-;2135:7;2144:16;;:::i;:::-;2168:25;2196:9;2206:11;2196:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2196:22:8;;;;;;;;;;;;;;;;;;;;;2168:50;;2232:4;:12;;;;;;;;;;;;2246:4;:12;;2224:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2067:197;;;:::o;1124:77:33:-;1162:7;1188:6;;;;;;;;;;;1181:13;;1124:77;:::o;1444:90::-;1484:4;1521:6;;;;;;;;;;;1507:20;;:10;:20;;;1500:27;;1444:90;:::o;3131:289:8:-;1328:9:33;:7;:9::i;:::-;1320:18;;;;;;;;3262:1:8;3211:53;;3219:9;3229:11;3219:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3219:22:8;;;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;3211:53;;;;3203:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3308:9;3318:11;3308:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3308:22:8;;;;;;;;;;;;;;;;;;;;;;3301:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;3341:74;3356:11;3377:1;3341:74;;;;;;;;;3389:1;3341:74;;;;;;;;3400:1;3341:74;;;;;;;;3411:1;3341:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;3341:74:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;3341:74:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3131:289;:::o;7160:302::-;1328:9:33;:7;:9::i;:::-;1320:18;;;;;;;;7321:22:8;7346:44;7364:11;7377:12;7346:17;:44::i;:::-;7321:69;;7396:5;:22;;;7425:9;7436:14;7452:4;7396:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;7396:61:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7396:61:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7396:61:8;;;;;1348:1:33;7160:302:8;;;;:::o;2120:107:33:-;1328:9;:7;:9::i;:::-;1320:18;;;;;;;;2192:28;2211:8;2192:18;:28::i;:::-;2120:107;:::o;4503:116:8:-;4579:7;4601:5;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4601:13:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4601:13:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4601:13:8;;;;;;;;;;;;;;;;4594:20;;4503:116;;;:::o;2371:183:33:-;2464:1;2444:22;;:8;:22;;;;2436:31;;;;;;;;2511:8;2482:38;;2503:6;;;;;;;;;;;2482:38;;;;;;;;;;;;2539:8;2530:6;;:17;;;;;;;;;;;;;;;;;;2371:183;:::o;402:7062:8:-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;402:7062:8;;;;:::o;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "proxy",
          "type": "address"
        }
      ],
      "name": "getProxyImplementation",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "packageName",
          "type": "string"
        },
        {
          "name": "contractName",
          "type": "string"
        }
      ],
      "name": "getImplementation",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "packageName",
          "type": "string"
        },
        {
          "name": "contractName",
          "type": "string"
        },
        {
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "create",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "packageName",
          "type": "string"
        }
      ],
      "name": "getProvider",
      "outputs": [
        {
          "name": "provider",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "packageName",
          "type": "string"
        },
        {
          "name": "package",
          "type": "address"
        },
        {
          "name": "version",
          "type": "uint64[3]"
        }
      ],
      "name": "setPackage",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "proxy",
          "type": "address"
        },
        {
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "changeProxyAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "proxy",
          "type": "address"
        },
        {
          "name": "packageName",
          "type": "string"
        },
        {
          "name": "contractName",
          "type": "string"
        }
      ],
      "name": "upgrade",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "packageName",
          "type": "string"
        }
      ],
      "name": "getPackage",
      "outputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "uint64[3]"
        }
      ],
      "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": false,
      "inputs": [
        {
          "name": "packageName",
          "type": "string"
        }
      ],
      "name": "unsetPackage",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "proxy",
          "type": "address"
        },
        {
          "name": "packageName",
          "type": "string"
        },
        {
          "name": "contractName",
          "type": "string"
        },
        {
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeAndCall",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "proxy",
          "type": "address"
        }
      ],
      "name": "getProxyAdmin",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "proxy",
          "type": "address"
        }
      ],
      "name": "ProxyCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "providerName",
          "type": "string"
        },
        {
          "indexed": false,
          "name": "package",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "version",
          "type": "uint64[3]"
        }
      ],
      "name": "PackageChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    }
  ],
  "ast": {
    "absolutePath": "contracts/mocks/DeprecatedApp.sol",
    "exportedSymbols": {
      "DeprecatedApp": [
        1425
      ]
    },
    "id": 1426,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1074,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "contracts/application/ImplementationProvider.sol",
        "file": "../application/ImplementationProvider.sol",
        "id": 1075,
        "nodeType": "ImportDirective",
        "scope": 1426,
        "sourceUnit": 453,
        "src": "25:51:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/application/Package.sol",
        "file": "../application/Package.sol",
        "id": 1076,
        "nodeType": "ImportDirective",
        "scope": 1426,
        "sourceUnit": 794,
        "src": "77:36:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/mocks/DeprecatedAdminUpgradeabilityProxy.sol",
        "file": "../mocks/DeprecatedAdminUpgradeabilityProxy.sol",
        "id": 1078,
        "nodeType": "ImportDirective",
        "scope": 1426,
        "sourceUnit": 1073,
        "src": "114:129:8",
        "symbolAliases": [
          {
            "foreign": 1077,
            "local": "AdminUpgradeabilityProxy"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/ownership/Ownable.sol",
        "file": "../ownership/Ownable.sol",
        "id": 1079,
        "nodeType": "ImportDirective",
        "scope": 1426,
        "sourceUnit": 5494,
        "src": "244:34:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1080,
              "name": "OpenZeppelinUpgradesOwnable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5493,
              "src": "428:27:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OpenZeppelinUpgradesOwnable_$5493",
                "typeString": "contract OpenZeppelinUpgradesOwnable"
              }
            },
            "id": 1081,
            "nodeType": "InheritanceSpecifier",
            "src": "428:27:8"
          }
        ],
        "contractDependencies": [
          1072,
          5493
        ],
        "contractKind": "contract",
        "documentation": "@title App\n@dev Contract for upgradeable applications.\nIt handles the creation and upgrading of proxies.",
        "fullyImplemented": true,
        "id": 1425,
        "linearizedBaseContracts": [
          1425,
          5493
        ],
        "name": "DeprecatedApp",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": "@dev Emitted when a new proxy is created.\n@param proxy Address of the created proxy.",
            "id": 1085,
            "name": "ProxyCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1084,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1083,
                  "indexed": false,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1085,
                  "src": "586:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1082,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "586:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "585:15:8"
            },
            "src": "567:34:8"
          },
          {
            "anonymous": false,
            "documentation": "@dev Emitted when a package dependency is changed in the application.\n@param providerName Name of the package that changed.\n@param package Address of the package associated to the name.\n@param version Version of the package in use.",
            "id": 1095,
            "name": "PackageChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1094,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1087,
                  "indexed": false,
                  "name": "providerName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1095,
                  "src": "890:19:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1086,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "890:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1089,
                  "indexed": false,
                  "name": "package",
                  "nodeType": "VariableDeclaration",
                  "scope": 1095,
                  "src": "911:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1088,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "911:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1093,
                  "indexed": false,
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "scope": 1095,
                  "src": "928:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1090,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "928:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 1092,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "935:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "928:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "889:57:8"
            },
            "src": "869:78:8"
          },
          {
            "canonicalName": "DeprecatedApp.ProviderInfo",
            "id": 1102,
            "members": [
              {
                "constant": false,
                "id": 1097,
                "name": "package",
                "nodeType": "VariableDeclaration",
                "scope": 1102,
                "src": "1077:15:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Package_$793",
                  "typeString": "contract Package"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 1096,
                  "name": "Package",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 793,
                  "src": "1077:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Package_$793",
                    "typeString": "contract Package"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1101,
                "name": "version",
                "nodeType": "VariableDeclaration",
                "scope": 1102,
                "src": "1098:17:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                  "typeString": "uint64[3]"
                },
                "typeName": {
                  "baseType": {
                    "id": 1098,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1098:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1100,
                  "length": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 1099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1105:1:8",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": null,
                      "typeString": null
                    },
                    "value": "3"
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "1098:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                    "typeString": "uint64[3]"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "ProviderInfo",
            "nodeType": "StructDefinition",
            "scope": 1425,
            "src": "1051:69:8",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1106,
            "name": "providers",
            "nodeType": "VariableDeclaration",
            "scope": 1425,
            "src": "1206:50:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$1102_storage_$",
              "typeString": "mapping(string => struct DeprecatedApp.ProviderInfo)"
            },
            "typeName": {
              "id": 1105,
              "keyType": {
                "id": 1103,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1214:6:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "1206:31:8",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$1102_storage_$",
                "typeString": "mapping(string => struct DeprecatedApp.ProviderInfo)"
              },
              "valueType": {
                "contractScope": null,
                "id": 1104,
                "name": "ProviderInfo",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1102,
                "src": "1224:12:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                  "typeString": "struct DeprecatedApp.ProviderInfo"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1109,
              "nodeType": "Block",
              "src": "1326:3:8",
              "statements": []
            },
            "documentation": "@dev Constructor function.",
            "id": 1110,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1107,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1316:2:8"
            },
            "returnParameters": {
              "id": 1108,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1326:0:8"
            },
            "scope": 1425,
            "src": "1305:24:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1145,
              "nodeType": "Block",
              "src": "1612:215:8",
              "statements": [
                {
                  "assignments": [
                    1118
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1118,
                      "name": "info",
                      "nodeType": "VariableDeclaration",
                      "scope": 1145,
                      "src": "1618:25:8",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                        "typeString": "struct DeprecatedApp.ProviderInfo"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1117,
                        "name": "ProviderInfo",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1102,
                        "src": "1618:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                          "typeString": "struct DeprecatedApp.ProviderInfo"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1122,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1119,
                      "name": "providers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1106,
                      "src": "1646:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$1102_storage_$",
                        "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                      }
                    },
                    "id": 1121,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1120,
                      "name": "packageName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1112,
                      "src": "1656:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1646:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage",
                      "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1618:50:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1124,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1118,
                            "src": "1686:4:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                              "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                            }
                          },
                          "id": 1125,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "package",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1097,
                          "src": "1686:12:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Package_$793",
                            "typeString": "contract Package"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Package_$793",
                            "typeString": "contract Package"
                          }
                        ],
                        "id": 1123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1678:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1126,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1678:21:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1711:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1703:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1129,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1703:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1678:35:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1135,
                  "nodeType": "IfStatement",
                  "src": "1674:73:8",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1745:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1131,
                        "name": "ImplementationProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 452,
                        "src": "1722:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ImplementationProvider_$452_$",
                          "typeString": "type(contract ImplementationProvider)"
                        }
                      },
                      "id": 1133,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1722:25:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                        "typeString": "contract ImplementationProvider"
                      }
                    },
                    "functionReturnParameters": 1116,
                    "id": 1134,
                    "nodeType": "Return",
                    "src": "1715:32:8"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1140,
                              "name": "info",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1118,
                              "src": "1808:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                                "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                              }
                            },
                            "id": 1141,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "version",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1101,
                            "src": "1808:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage",
                              "typeString": "uint64[3] storage ref"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage",
                              "typeString": "uint64[3] storage ref"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1137,
                              "name": "info",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1118,
                              "src": "1783:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                                "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                              }
                            },
                            "id": 1138,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "package",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1097,
                            "src": "1783:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Package_$793",
                              "typeString": "contract Package"
                            }
                          },
                          "id": 1139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 533,
                          "src": "1783:24:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_address_$",
                            "typeString": "function (uint64[3] memory) view external returns (address)"
                          }
                        },
                        "id": 1142,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1783:38:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1136,
                      "name": "ImplementationProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 452,
                      "src": "1760:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ImplementationProvider_$452_$",
                        "typeString": "type(contract ImplementationProvider)"
                      }
                    },
                    "id": 1143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1760:62:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                      "typeString": "contract ImplementationProvider"
                    }
                  },
                  "functionReturnParameters": 1116,
                  "id": 1144,
                  "nodeType": "Return",
                  "src": "1753:69:8"
                }
              ]
            },
            "documentation": "@dev Returns the provider for a given package name, or zero if not set.\n@param packageName Name of the package to be retrieved.\n@return The provider.",
            "id": 1146,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProvider",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1112,
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1146,
                  "src": "1531:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1111,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1531:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1530:27:8"
            },
            "returnParameters": {
              "id": 1116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1115,
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "scope": 1146,
                  "src": "1579:31:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                    "typeString": "contract ImplementationProvider"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1114,
                    "name": "ImplementationProvider",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 452,
                    "src": "1579:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                      "typeString": "contract ImplementationProvider"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1578:33:8"
            },
            "scope": 1425,
            "src": "1510:317:8",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1169,
              "nodeType": "Block",
              "src": "2162:102:8",
              "statements": [
                {
                  "assignments": [
                    1158
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1158,
                      "name": "info",
                      "nodeType": "VariableDeclaration",
                      "scope": 1169,
                      "src": "2168:25:8",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                        "typeString": "struct DeprecatedApp.ProviderInfo"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1157,
                        "name": "ProviderInfo",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1102,
                        "src": "2168:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                          "typeString": "struct DeprecatedApp.ProviderInfo"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1162,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1159,
                      "name": "providers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1106,
                      "src": "2196:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$1102_storage_$",
                        "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                      }
                    },
                    "id": 1161,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1160,
                      "name": "packageName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1148,
                      "src": "2206:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2196:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage",
                      "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2168:50:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1163,
                          "name": "info",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1158,
                          "src": "2232:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                            "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                          }
                        },
                        "id": 1164,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "package",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1097,
                        "src": "2232:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Package_$793",
                          "typeString": "contract Package"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1165,
                          "name": "info",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1158,
                          "src": "2246:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage_ptr",
                            "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                          }
                        },
                        "id": 1166,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "version",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1101,
                        "src": "2246:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage",
                          "typeString": "uint64[3] storage ref"
                        }
                      }
                    ],
                    "id": 1167,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2231:28:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_contract$_Package_$793_$_t_array$_t_uint64_$3_storage_$",
                      "typeString": "tuple(contract Package,uint64[3] storage ref)"
                    }
                  },
                  "functionReturnParameters": 1156,
                  "id": 1168,
                  "nodeType": "Return",
                  "src": "2224:35:8"
                }
              ]
            },
            "documentation": "@dev Returns information on a package given its name.\n@param packageName Name of the package to be queried.\n@return A tuple with the package address and pinned version given a package name, or zero if not set",
            "id": 1170,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPackage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1149,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1148,
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1170,
                  "src": "2087:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1147,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2087:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2086:27:8"
            },
            "returnParameters": {
              "id": 1156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1151,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1170,
                  "src": "2135:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Package_$793",
                    "typeString": "contract Package"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1150,
                    "name": "Package",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 793,
                    "src": "2135:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Package_$793",
                      "typeString": "contract Package"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1155,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1170,
                  "src": "2144:16:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1152,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "2144:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 1154,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1153,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2151:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2144:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2134:27:8"
            },
            "scope": 1425,
            "src": "2067:197:8",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1208,
              "nodeType": "Block",
              "src": "2720:238:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1186,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1178,
                            "src": "2753:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1184,
                            "name": "package",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1174,
                            "src": "2734:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Package_$793",
                              "typeString": "contract Package"
                            }
                          },
                          "id": 1185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hasVersion",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 693,
                          "src": "2734:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint64[3] memory) view external returns (bool)"
                          }
                        },
                        "id": 1187,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2734:27:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546865207265717565737465642076657273696f6e206d757374206265207265676973746572656420696e2074686520676976656e207061636b616765",
                        "id": 1188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2763:63:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6e9b26c5b88c1d0d268a79a49255a96dbe9152f3c69df83cee9951ea1c032fdb",
                          "typeString": "literal_string \"The requested version must be registered in the given package\""
                        },
                        "value": "The requested version must be registered in the given package"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6e9b26c5b88c1d0d268a79a49255a96dbe9152f3c69df83cee9951ea1c032fdb",
                          "typeString": "literal_string \"The requested version must be registered in the given package\""
                        }
                      ],
                      "id": 1183,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6466,
                        6467
                      ],
                      "referencedDeclaration": 6467,
                      "src": "2726:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2726:101:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1190,
                  "nodeType": "ExpressionStatement",
                  "src": "2726:101:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1191,
                        "name": "providers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1106,
                        "src": "2833:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$1102_storage_$",
                          "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                        }
                      },
                      "id": 1193,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1192,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1172,
                        "src": "2843:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2833:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage",
                        "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1195,
                          "name": "package",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1174,
                          "src": "2871:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Package_$793",
                            "typeString": "contract Package"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1196,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1178,
                          "src": "2880:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Package_$793",
                            "typeString": "contract Package"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 1194,
                        "name": "ProviderInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1102,
                        "src": "2858:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_ProviderInfo_$1102_storage_ptr_$",
                          "typeString": "type(struct DeprecatedApp.ProviderInfo storage pointer)"
                        }
                      },
                      "id": 1197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2858:30:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1102_memory",
                        "typeString": "struct DeprecatedApp.ProviderInfo memory"
                      }
                    },
                    "src": "2833:55:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage",
                      "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                    }
                  },
                  "id": 1199,
                  "nodeType": "ExpressionStatement",
                  "src": "2833:55:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1201,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1172,
                        "src": "2914:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1203,
                            "name": "package",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1174,
                            "src": "2935:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Package_$793",
                              "typeString": "contract Package"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Package_$793",
                              "typeString": "contract Package"
                            }
                          ],
                          "id": 1202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2927:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2927:16:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1205,
                        "name": "version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1178,
                        "src": "2945:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      ],
                      "id": 1200,
                      "name": "PackageChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1095,
                      "src": "2899:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint64_$3_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,address,uint64[3] memory)"
                      }
                    },
                    "id": 1206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2899:54:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1207,
                  "nodeType": "EmitStatement",
                  "src": "2894:59:8"
                }
              ]
            },
            "documentation": "@dev Sets a package in a specific version as a dependency for this application.\nRequires the version to be present in the package.\n@param packageName Name of the package to set or overwrite.\n@param package Address of the package to register.\n@param version Version of the package to use in this application.",
            "id": 1209,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1181,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1180,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5427,
                  "src": "2710:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2710:9:8"
              }
            ],
            "name": "setPackage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1179,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1172,
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1209,
                  "src": "2633:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1171,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2633:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1174,
                  "name": "package",
                  "nodeType": "VariableDeclaration",
                  "scope": 1209,
                  "src": "2660:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Package_$793",
                    "typeString": "contract Package"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1173,
                    "name": "Package",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 793,
                    "src": "2660:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Package_$793",
                      "typeString": "contract Package"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1178,
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "scope": 1209,
                  "src": "2677:24:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1175,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "2677:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 1177,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2684:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2677:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2632:70:8"
            },
            "returnParameters": {
              "id": 1182,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2720:0:8"
            },
            "scope": 1425,
            "src": "2613:345:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1252,
              "nodeType": "Block",
              "src": "3197:223:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1218,
                                  "name": "providers",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1106,
                                  "src": "3219:9:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$1102_storage_$",
                                    "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                                  }
                                },
                                "id": 1220,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1219,
                                  "name": "packageName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1211,
                                  "src": "3229:11:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3219:22:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage",
                                  "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                                }
                              },
                              "id": 1221,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "package",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1097,
                              "src": "3219:30:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Package_$793",
                                "typeString": "contract Package"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Package_$793",
                                "typeString": "contract Package"
                              }
                            ],
                            "id": 1217,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3211:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3211:39:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3262:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3254:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3254:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3211:53:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5061636b61676520746f20756e736574206e6f7420666f756e64",
                        "id": 1227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3266:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3ae493df729b5cccebf4261a82c4432beb82c364d1afb7d58bdfea7fd27d9332",
                          "typeString": "literal_string \"Package to unset not found\""
                        },
                        "value": "Package to unset not found"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3ae493df729b5cccebf4261a82c4432beb82c364d1afb7d58bdfea7fd27d9332",
                          "typeString": "literal_string \"Package to unset not found\""
                        }
                      ],
                      "id": 1216,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6466,
                        6467
                      ],
                      "referencedDeclaration": 6467,
                      "src": "3203:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3203:92:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1229,
                  "nodeType": "ExpressionStatement",
                  "src": "3203:92:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "3301:29:8",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1230,
                        "name": "providers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1106,
                        "src": "3308:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$1102_storage_$",
                          "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                        }
                      },
                      "id": 1232,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1231,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1211,
                        "src": "3318:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3308:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1102_storage",
                        "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1234,
                  "nodeType": "ExpressionStatement",
                  "src": "3301:29:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1236,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1211,
                        "src": "3356:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3377:1:8",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3369:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3369:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1241,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3389:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3382:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": "uint64"
                            },
                            "id": 1242,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3382:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1244,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3400:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3393:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": "uint64"
                            },
                            "id": 1245,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3393:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1247,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3411:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1246,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3404:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": "uint64"
                            },
                            "id": 1248,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3404:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "id": 1249,
                        "isConstant": false,
                        "isInlineArray": true,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3381:33:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      ],
                      "id": 1235,
                      "name": "PackageChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1095,
                      "src": "3341:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint64_$3_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,address,uint64[3] memory)"
                      }
                    },
                    "id": 1250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3341:74:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1251,
                  "nodeType": "EmitStatement",
                  "src": "3336:79:8"
                }
              ]
            },
            "documentation": "@dev Unsets a package given its name.\nReverts if the package is not set in the application.\n@param packageName Name of the package to remove.",
            "id": 1253,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1214,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1213,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5427,
                  "src": "3187:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3187:9:8"
              }
            ],
            "name": "unsetPackage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1211,
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1253,
                  "src": "3153:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1210,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3153:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3152:27:8"
            },
            "returnParameters": {
              "id": 1215,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3197:0:8"
            },
            "scope": 1425,
            "src": "3131:289:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1285,
              "nodeType": "Block",
              "src": "3842:182:8",
              "statements": [
                {
                  "assignments": [
                    1263
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1263,
                      "name": "provider",
                      "nodeType": "VariableDeclaration",
                      "scope": 1285,
                      "src": "3848:31:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                        "typeString": "contract ImplementationProvider"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1262,
                        "name": "ImplementationProvider",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 452,
                        "src": "3848:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                          "typeString": "contract ImplementationProvider"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1267,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1265,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1255,
                        "src": "3894:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1264,
                      "name": "getProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1146,
                      "src": "3882:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_contract$_ImplementationProvider_$452_$",
                        "typeString": "function (string memory) view returns (contract ImplementationProvider)"
                      }
                    },
                    "id": 1266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3882:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                      "typeString": "contract ImplementationProvider"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3848:58:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1269,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1263,
                          "src": "3924:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                            "typeString": "contract ImplementationProvider"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                            "typeString": "contract ImplementationProvider"
                          }
                        ],
                        "id": 1268,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3916:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1270,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3916:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3945:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1271,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3937:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1273,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3937:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "3916:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1279,
                  "nodeType": "IfStatement",
                  "src": "3912:54:8",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3964:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3956:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3956:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 1261,
                    "id": 1278,
                    "nodeType": "Return",
                    "src": "3949:17:8"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1282,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1257,
                        "src": "4006:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1280,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1263,
                        "src": "3979:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ImplementationProvider_$452",
                          "typeString": "contract ImplementationProvider"
                        }
                      },
                      "id": 1281,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getImplementation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 451,
                      "src": "3979:26:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (string memory) view external returns (address)"
                      }
                    },
                    "id": 1283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3979:40:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1261,
                  "id": 1284,
                  "nodeType": "Return",
                  "src": "3972:47:8"
                }
              ]
            },
            "documentation": "@dev Returns the implementation address for a given contract name, provided by the `ImplementationProvider`.\n@param packageName Name of the package where the contract is contained.\n@param contractName Name of the contract.\n@return Address where the contract is implemented.",
            "id": 1286,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getImplementation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1258,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1255,
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1286,
                  "src": "3757:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1254,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3757:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1257,
                  "name": "contractName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1286,
                  "src": "3784:26:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1256,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3784:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3756:55:8"
            },
            "returnParameters": {
              "id": 1261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1260,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1286,
                  "src": "3833:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1259,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3833:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3832:9:8"
            },
            "scope": 1425,
            "src": "3730:294:8",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1297,
              "nodeType": "Block",
              "src": "4318:40:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1293,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1288,
                        "src": "4331:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 1294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "implementation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 967,
                      "src": "4331:20:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_address_$",
                        "typeString": "function () external returns (address)"
                      }
                    },
                    "id": 1295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4331:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1292,
                  "id": 1296,
                  "nodeType": "Return",
                  "src": "4324:29:8"
                }
              ]
            },
            "documentation": "@dev Returns the current implementation of a proxy.\nThis is needed because only the proxy admin can query it.\n@return The address of the current implementation of the proxy.",
            "id": 1298,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProxyImplementation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1288,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1298,
                  "src": "4261:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1287,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1072,
                    "src": "4261:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4260:32:8"
            },
            "returnParameters": {
              "id": 1292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1291,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1298,
                  "src": "4309:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1290,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4309:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4308:9:8"
            },
            "scope": 1425,
            "src": "4229:129:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1309,
              "nodeType": "Block",
              "src": "4588:31:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1305,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1300,
                        "src": "4601:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 1306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "admin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 956,
                      "src": "4601:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                        "typeString": "function () view external returns (address)"
                      }
                    },
                    "id": 1307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4601:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1304,
                  "id": 1308,
                  "nodeType": "Return",
                  "src": "4594:20:8"
                }
              ]
            },
            "documentation": "@dev Returns the admin of a proxy. Only the admin can query it.\n@return The address of the current admin of the proxy.",
            "id": 1310,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProxyAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1300,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1310,
                  "src": "4526:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1299,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1072,
                    "src": "4526:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4525:32:8"
            },
            "returnParameters": {
              "id": 1304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1310,
                  "src": "4579:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1302,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4579:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4578:9:8"
            },
            "scope": 1425,
            "src": "4503:116:8",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1325,
              "nodeType": "Block",
              "src": "4875:38:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1322,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1314,
                        "src": "4899:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1319,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1312,
                        "src": "4881:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 1321,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "changeAdmin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 994,
                      "src": "4881:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 1323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4881:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1324,
                  "nodeType": "ExpressionStatement",
                  "src": "4881:27:8"
                }
              ]
            },
            "documentation": "@dev Changes the admin of a proxy.\n@param proxy Proxy to change admin.\n@param newAdmin Address to transfer proxy administration to.",
            "id": 1326,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1317,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1316,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5427,
                  "src": "4865:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4865:9:8"
              }
            ],
            "name": "changeProxyAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1315,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1312,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1326,
                  "src": "4808:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1311,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1072,
                    "src": "4808:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1314,
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 1326,
                  "src": "4840:16:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1313,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4840:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4807:50:8"
            },
            "returnParameters": {
              "id": 1318,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4875:0:8"
            },
            "scope": 1425,
            "src": "4782:131:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1365,
              "nodeType": "Block",
              "src": "5811:248:8",
              "statements": [
                {
                  "assignments": [
                    1338
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1338,
                      "name": "implementation",
                      "nodeType": "VariableDeclaration",
                      "scope": 1365,
                      "src": "5817:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1337,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5817:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1343,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1340,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1328,
                        "src": "5860:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1341,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1330,
                        "src": "5873:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1339,
                      "name": "getImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1286,
                      "src": "5842:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (string memory,string memory) view returns (address)"
                      }
                    },
                    "id": 1342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5842:44:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5817:69:8"
                },
                {
                  "assignments": [
                    1345
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1345,
                      "name": "proxy",
                      "nodeType": "VariableDeclaration",
                      "scope": 1365,
                      "src": "5893:30:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                        "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1344,
                        "name": "AdminUpgradeabilityProxy",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1072,
                        "src": "5893:24:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1356,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1353,
                        "name": "implementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1338,
                        "src": "5974:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1354,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1332,
                        "src": "5990:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1350,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6463,
                            "src": "5963:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5963:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 1347,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "5927:28:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072_$",
                                "typeString": "function (address,bytes memory) payable returns (contract DeprecatedAdminUpgradeabilityProxy)"
                              },
                              "typeName": {
                                "contractScope": null,
                                "id": 1346,
                                "name": "AdminUpgradeabilityProxy",
                                "nodeType": "UserDefinedTypeName",
                                "referencedDeclaration": 1072,
                                "src": "5931:24:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                                  "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                                }
                              }
                            }
                          ],
                          "id": 1348,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5926:30:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072_$",
                            "typeString": "function (address,bytes memory) payable returns (contract DeprecatedAdminUpgradeabilityProxy)"
                          }
                        },
                        "id": 1349,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5926:36:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072_$value_$",
                          "typeString": "function (uint256) returns (function (address,bytes memory) payable returns (contract DeprecatedAdminUpgradeabilityProxy))"
                        }
                      },
                      "id": 1352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5926:47:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072_$value",
                        "typeString": "function (address,bytes memory) payable returns (contract DeprecatedAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 1355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5926:69:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5893:102:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1359,
                            "name": "proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1345,
                            "src": "6028:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                              "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                              "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                            }
                          ],
                          "id": 1358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6020:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1360,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6020:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1357,
                      "name": "ProxyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1085,
                      "src": "6007:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6007:28:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1362,
                  "nodeType": "EmitStatement",
                  "src": "6002:33:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1363,
                    "name": "proxy",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1345,
                    "src": "6049:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "functionReturnParameters": 1336,
                  "id": 1364,
                  "nodeType": "Return",
                  "src": "6042:12:8"
                }
              ]
            },
            "documentation": "@dev Creates a new proxy for the given contract and forwards a function call to it.\nThis is useful to initialize the proxied contract.\n@param packageName Name of the package where the contract is contained.\n@param contractName Name of the contract.\n@param data Data to send as msg.data to the corresponding implementation to initialize the proxied contract.\nIt should include the signature and the parameters of the function to be called, as described in\nhttps://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\nThis parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n@return Address of the new proxy.",
            "id": 1366,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "create",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1328,
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1366,
                  "src": "5687:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1327,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5687:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1330,
                  "name": "contractName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1366,
                  "src": "5714:26:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1329,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5714:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1332,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1366,
                  "src": "5742:17:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1331,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5742:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5686:74:8"
            },
            "returnParameters": {
              "id": 1336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1335,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1366,
                  "src": "5785:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1334,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1072,
                    "src": "5785:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5784:26:8"
            },
            "scope": 1425,
            "src": "5671:388:8",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1390,
              "nodeType": "Block",
              "src": "6431:117:8",
              "statements": [
                {
                  "assignments": [
                    1378
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1378,
                      "name": "implementation",
                      "nodeType": "VariableDeclaration",
                      "scope": 1390,
                      "src": "6437:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1377,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6437:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1383,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1380,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1370,
                        "src": "6480:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1381,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1372,
                        "src": "6493:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1379,
                      "name": "getImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1286,
                      "src": "6462:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (string memory,string memory) view returns (address)"
                      }
                    },
                    "id": 1382,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6462:44:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6437:69:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1387,
                        "name": "implementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1378,
                        "src": "6528:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1384,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1368,
                        "src": "6512:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 1386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "upgradeTo",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1006,
                      "src": "6512:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 1388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6512:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1389,
                  "nodeType": "ExpressionStatement",
                  "src": "6512:31:8"
                }
              ]
            },
            "documentation": "@dev Upgrades a proxy to the newest implementation of a contract.\n@param proxy Proxy to be upgraded.\n@param packageName Name of the package where the contract is contained.\n@param contractName Name of the contract.",
            "id": 1391,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1375,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1374,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5427,
                  "src": "6421:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6421:9:8"
              }
            ],
            "name": "upgrade",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1368,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "6327:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1367,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1072,
                    "src": "6327:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1370,
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "6359:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1369,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6359:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1372,
                  "name": "contractName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "6386:26:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1371,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6386:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6326:87:8"
            },
            "returnParameters": {
              "id": 1376,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6431:0:8"
            },
            "scope": 1425,
            "src": "6310:238:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1423,
              "nodeType": "Block",
              "src": "7315:147:8",
              "statements": [
                {
                  "assignments": [
                    1405
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1405,
                      "name": "implementation",
                      "nodeType": "VariableDeclaration",
                      "scope": 1423,
                      "src": "7321:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1404,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7321:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1410,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1407,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1395,
                        "src": "7364:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1408,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "7377:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1406,
                      "name": "getImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1286,
                      "src": "7346:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (string memory,string memory) view returns (address)"
                      }
                    },
                    "id": 1409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7346:44:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7321:69:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1419,
                        "name": "implementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1405,
                        "src": "7436:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1420,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1399,
                        "src": "7452:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1416,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6463,
                            "src": "7425:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7425:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1411,
                            "name": "proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1393,
                            "src": "7396:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                              "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                            }
                          },
                          "id": 1414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "upgradeToAndCall",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1031,
                          "src": "7396:22:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                            "typeString": "function (address,bytes memory) payable external"
                          }
                        },
                        "id": 1415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7396:28:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$value_$",
                          "typeString": "function (uint256) returns (function (address,bytes memory) payable external)"
                        }
                      },
                      "id": 1418,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7396:39:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$value",
                        "typeString": "function (address,bytes memory) payable external"
                      }
                    },
                    "id": 1421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7396:61:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1422,
                  "nodeType": "ExpressionStatement",
                  "src": "7396:61:8"
                }
              ]
            },
            "documentation": "@dev Upgrades a proxy to the newest implementation of a contract and forwards a function call to it.\nThis is useful to initialize the proxied contract.\n@param proxy Proxy to be upgraded.\n@param packageName Name of the package where the contract is contained.\n@param contractName Name of the contract.\n@param data Data to send as msg.data in the low level call.\nIt should include the signature and the parameters of the function to be called, as described in\nhttps://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.",
            "id": 1424,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1402,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1401,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5427,
                  "src": "7305:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7305:9:8"
              }
            ],
            "name": "upgradeAndCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1400,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1393,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 1424,
                  "src": "7184:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1392,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1072,
                    "src": "7184:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1072",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1395,
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1424,
                  "src": "7216:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1394,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7216:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1397,
                  "name": "contractName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1424,
                  "src": "7243:26:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1396,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7243:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1399,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1424,
                  "src": "7271:17:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1398,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7271:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7183:106:8"
            },
            "returnParameters": {
              "id": 1403,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7315:0:8"
            },
            "scope": 1425,
            "src": "7160:302:8",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1426,
        "src": "402:7062:8"
      }
    ],
    "src": "0:7465:8"
  },
  "bytecode": "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3612f5e806100dc6000396000f3fe608060405260043610620000fe5760003560e01c806382f751821162000097578063ad358d991162000061578063ad358d991462000b99578063e7e4fc841462000c68578063f2fde38b1462000e7d578063f3b7dead1462000ed257620000fe565b806382f75182146200084457806387c6048314620009cd5780638da5cb5b1462000b0d5780638f32d59b1462000b6757620000fe565b806350cadc8511620000d957806350cadc851462000576578063715018a6146200068557806371eb64cc146200069f5780637eff275e14620007cf57620000fe565b8063204e1c7a146200010357806327a0d66914620001985780632f237e821462000341575b600080fd5b3480156200011057600080fd5b5062000156600480360360208110156200012957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000f67565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620001a557600080fd5b50620002ff60048036036040811015620001be57600080fd5b8101908080359060200190640100000000811115620001dc57600080fd5b820183602082011115620001ef57600080fd5b803590602001918460018302840111640100000000831117156200021257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200027657600080fd5b8201836020820111156200028957600080fd5b80359060200191846001830284011164010000000083111715620002ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062000ff6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000534600480360360608110156200035957600080fd5b81019080803590602001906401000000008111156200037757600080fd5b8201836020820111156200038a57600080fd5b80359060200191846001830284011164010000000083111715620003ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200041157600080fd5b8201836020820111156200042457600080fd5b803590602001918460018302840111640100000000831117156200044757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115620004ab57600080fd5b820183602082011115620004be57600080fd5b80359060200191846001830284011164010000000083111715620004e157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001148565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200058357600080fd5b5062000643600480360360208110156200059c57600080fd5b8101908080359060200190640100000000811115620005ba57600080fd5b820183602082011115620005cd57600080fd5b80359060200191846001830284011164010000000083111715620005f057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050620012a0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200069257600080fd5b506200069d6200148c565b005b348015620006ac57600080fd5b50620007cd600480360360a0811015620006c557600080fd5b8101908080359060200190640100000000811115620006e357600080fd5b820183602082011115620006f657600080fd5b803590602001918460018302840111640100000000831117156200071957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f820116905080830192505050505050919291929050505062001561565b005b348015620007dc57600080fd5b506200084260048036036040811015620007f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200188f565b005b3480156200085157600080fd5b50620009cb600480360360608110156200086a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115620008a857600080fd5b820183602082011115620008bb57600080fd5b80359060200191846001830284011164010000000083111715620008de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200094257600080fd5b8201836020820111156200095557600080fd5b803590602001918460018302840111640100000000831117156200097857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001942565b005b348015620009da57600080fd5b5062000a9a60048036036020811015620009f357600080fd5b810190808035906020019064010000000081111562000a1157600080fd5b82018360208201111562000a2457600080fd5b8035906020019184600183028401116401000000008311171562000a4757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001a07565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600360200280838360005b8381101562000af957808201518184015260208101905062000adc565b505050509050019250505060405180910390f35b34801562000b1a57600080fd5b5062000b2562001b2c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801562000b7457600080fd5b5062000b7f62001b55565b604051808215151515815260200191505060405180910390f35b34801562000ba657600080fd5b5062000c666004803603602081101562000bbf57600080fd5b810190808035906020019064010000000081111562000bdd57600080fd5b82018360208201111562000bf057600080fd5b8035906020019184600183028401116401000000008311171562000c1357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001bac565b005b62000e7b6004803603608081101562000c8057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111562000cbe57600080fd5b82018360208201111562000cd157600080fd5b8035906020019184600183028401116401000000008311171562000cf457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111562000d5857600080fd5b82018360208201111562000d6b57600080fd5b8035906020019184600183028401116401000000008311171562000d8e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111562000df257600080fd5b82018360208201111562000e0557600080fd5b8035906020019184600183028401116401000000008311171562000e2857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001f04565b005b34801562000e8a57600080fd5b5062000ed06004803603602081101562000ea357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200203b565b005b34801562000edf57600080fd5b5062000f256004803603602081101562000ef857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200205f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801562000fb257600080fd5b505af115801562000fc7573d6000803e3d6000fd5b505050506040513d602081101562000fde57600080fd5b81019080805190602001909291905050509050919050565b6000806200100484620012a0565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200104757600091505062001142565b8073ffffffffffffffffffffffffffffffffffffffff16636b683896846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620010b557808201518184015260208101905062001098565b50505050905090810190601f168015620010e35780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156200110157600080fd5b505afa15801562001116573d6000803e3d6000fd5b505050506040513d60208110156200112d57600080fd5b81019080805190602001909291905050509150505b92915050565b60008062001157858562000ff6565b905060003482856040516200116c90620021e7565b808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620011dd578082015181840152602081019050620011c0565b50505050905090810190601f1680156200120b5780820380516001836020036101000a031916815260200191505b5093505050506040518091039082f0801580156200122d573d6000803e3d6000fd5b50905090507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180925050509392505050565b6000806001836040518082805190602001908083835b602083101515620012dd5780518252602082019150602081019050602083039250620012b6565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200137757600091505062001487565b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631df40eaa826001016040518263ffffffff1660e01b815260040180826003801562001428576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411620013e25790505b505091505060206040518083038186803b1580156200144657600080fd5b505afa1580156200145b573d6000803e3d6000fd5b505050506040513d60208110156200147257600080fd5b81019080805190602001909291905050509150505b919050565b6200149662001b55565b1515620014a257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6200156b62001b55565b15156200157757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166335ce4016826040518263ffffffff1660e01b81526004018082600360200280838360005b83811015620015d0578082015181840152602081019050620015b3565b5050505090500191505060206040518083038186803b158015620015f357600080fd5b505afa15801562001608573d6000803e3d6000fd5b505050506040513d60208110156200161f57600080fd5b8101908080519060200190929190505050151562001689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d81526020018062002ef6603d913960400191505060405180910390fd5b60408051908101604052808373ffffffffffffffffffffffffffffffffffffffff168152602001828152506001846040518082805190602001908083835b602083101515620016ee5780518252602082019150602081019050602083039250620016c7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190600362001781929190620021f5565b509050507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab83838360405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b838110156200180c578082015181840152602081019050620017ef565b50505050905001828103825285818151815260200191508051906020019080838360005b838110156200184d57808201518184015260208101905062001830565b50505050905090810190601f1680156200187b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050565b6200189962001b55565b1515620018a557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff16638f283970826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200192557600080fd5b505af11580156200193a573d6000803e3d6000fd5b505050505050565b6200194c62001b55565b15156200195857600080fd5b600062001966838362000ff6565b90508373ffffffffffffffffffffffffffffffffffffffff16633659cfe6826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015620019e857600080fd5b505af1158015620019fd573d6000803e3d6000fd5b5050505050505050565b600062001a13620022aa565b60006001846040518082805190602001908083835b60208310151562001a4f578051825260208201915060208101905060208303925062001a28565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001018060038060200260405190810160405280929190826003801562001b1b576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff168152602001906008019060208260070104928301926001038202915080841162001ad55790505b505050505090509250925050915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b62001bb662001b55565b151562001bc257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166001826040518082805190602001908083835b60208310151562001c14578051825260208201915060208101905060208303925062001bed565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151562001cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5061636b61676520746f20756e736574206e6f7420666f756e6400000000000081525060200191505060405180910390fd5b6001816040518082805190602001908083835b60208310151562001d32578051825260208201915060208101905060208303925062001d0b565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600062001d9f9190620022cd565b50507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab816000606060405190810160405280600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff1681525060405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b8381101562001e8357808201518184015260208101905062001e66565b50505050905001828103825285818151815260200191508051906020019080838360005b8381101562001ec457808201518184015260208101905062001ea7565b50505050905090810190601f16801562001ef25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a150565b62001f0e62001b55565b151562001f1a57600080fd5b600062001f28848462000ff6565b90508473ffffffffffffffffffffffffffffffffffffffff16634f1ef2863483856040518463ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101562001fcc57808201518184015260208101905062001faf565b50505050905090810190601f16801562001ffa5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156200201a57600080fd5b505af11580156200202f573d6000803e3d6000fd5b50505050505050505050565b6200204562001b55565b15156200205157600080fd5b6200205c81620020ec565b50565b60008173ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015620020a857600080fd5b505afa158015620020bd573d6000803e3d6000fd5b505050506040513d6020811015620020d457600080fd5b81019080805190602001909291905050509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200212957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610be7806200230f83390190565b8260038001600490048101928215620022975791602002820160005b838211156200225f57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550926020019260080160208160070104928301926001030262002211565b8015620022955782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026200225f565b505b509050620022a69190620022d4565b5090565b606060405190810160405280600390602082028038833980820191505090505090565b5060009055565b6200230b91905b808211156200230757600081816101000a81549067ffffffffffffffff021916905550600101620022db565b5090565b9056fe6080604052604051610be7380380610be78339810180604052604081101561002657600080fd5b8101908080519060200190929190805164010000000081111561004857600080fd5b8281019050602081018481111561005e57600080fd5b815185600182028301116401000000008211171561007b57600080fd5b50509291905050508181600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1415156100f157fe5b6101008261024b60201b60201c565b6000815111156101d05760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b6020831015156101595780518252602082019150602081019050602083039250610134565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101b9576040519150601f19603f3d011682016040523d82523d6000602084013e6101be565b606091505b505090508015156101ce57600080fd5b505b505060405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815250601a01905060405180910390207f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b14151561023557fe5b610244336102e460201b60201c565b5050610326565b61025e8161031360201b6107951760201c565b15156102b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610bac603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181555050565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b90508181555050565b600080823b905060008111915050919050565b610877806103356000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100a55780635c60da1b1461013e5780638f28397014610195578063f851a440146101e6575b61005261023d565b005b34801561006057600080fd5b506100a36004803603602081101561007757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610257565b005b61013c600480360360408110156100bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b90919293919293905050506102ac565b005b34801561014a57600080fd5b50610153610384565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101a157600080fd5b506101e4600480360360208110156101b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103dc565b005b3480156101f257600080fd5b506101fb610557565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610245610566565b6102556102506105fe565b61062f565b565b61025f610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102a05761029b81610686565b6102a9565b6102a861023d565b5b50565b6102b4610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610376576102f083610686565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d806000811461035b576040519150601f19603f3d011682016040523d82523d6000602084013e610360565b606091505b5050905080151561037057600080fd5b5061037f565b61037e61023d565b5b505050565b600061038e610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103d0576103c96105fe565b90506103d9565b6103d861023d565b5b90565b6103e4610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561054b57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561049f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806107db6036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104c8610655565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1610546816106d5565b610554565b61055361023d565b5b50565b6000610561610655565b905090565b61056e610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806107a96032913960400191505060405180910390fd5b6105fc610704565b565b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050805491505090565b3660008037600080366000845af43d6000803e8060008114610650573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050805491505090565b61068f81610706565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b90508181555050565b565b61070f81610795565b1515610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610811603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181555050565b600080823b90506000811191505091905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a165627a7a7230582043d54e8c86eca6076ab1c3551d02c14dc6e9af4c622a6852d142b22c096f2a1e002943616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373546865207265717565737465642076657273696f6e206d757374206265207265676973746572656420696e2074686520676976656e207061636b616765a165627a7a72305820be825877238c15023bcdca404d933572d774a591fb762d74d4bbe4f3f21f48be0029",
  "deployedBytecode": "0x608060405260043610620000fe5760003560e01c806382f751821162000097578063ad358d991162000061578063ad358d991462000b99578063e7e4fc841462000c68578063f2fde38b1462000e7d578063f3b7dead1462000ed257620000fe565b806382f75182146200084457806387c6048314620009cd5780638da5cb5b1462000b0d5780638f32d59b1462000b6757620000fe565b806350cadc8511620000d957806350cadc851462000576578063715018a6146200068557806371eb64cc146200069f5780637eff275e14620007cf57620000fe565b8063204e1c7a146200010357806327a0d66914620001985780632f237e821462000341575b600080fd5b3480156200011057600080fd5b5062000156600480360360208110156200012957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000f67565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620001a557600080fd5b50620002ff60048036036040811015620001be57600080fd5b8101908080359060200190640100000000811115620001dc57600080fd5b820183602082011115620001ef57600080fd5b803590602001918460018302840111640100000000831117156200021257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200027657600080fd5b8201836020820111156200028957600080fd5b80359060200191846001830284011164010000000083111715620002ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062000ff6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000534600480360360608110156200035957600080fd5b81019080803590602001906401000000008111156200037757600080fd5b8201836020820111156200038a57600080fd5b80359060200191846001830284011164010000000083111715620003ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200041157600080fd5b8201836020820111156200042457600080fd5b803590602001918460018302840111640100000000831117156200044757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115620004ab57600080fd5b820183602082011115620004be57600080fd5b80359060200191846001830284011164010000000083111715620004e157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001148565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200058357600080fd5b5062000643600480360360208110156200059c57600080fd5b8101908080359060200190640100000000811115620005ba57600080fd5b820183602082011115620005cd57600080fd5b80359060200191846001830284011164010000000083111715620005f057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050620012a0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200069257600080fd5b506200069d6200148c565b005b348015620006ac57600080fd5b50620007cd600480360360a0811015620006c557600080fd5b8101908080359060200190640100000000811115620006e357600080fd5b820183602082011115620006f657600080fd5b803590602001918460018302840111640100000000831117156200071957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f820116905080830192505050505050919291929050505062001561565b005b348015620007dc57600080fd5b506200084260048036036040811015620007f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200188f565b005b3480156200085157600080fd5b50620009cb600480360360608110156200086a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115620008a857600080fd5b820183602082011115620008bb57600080fd5b80359060200191846001830284011164010000000083111715620008de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156200094257600080fd5b8201836020820111156200095557600080fd5b803590602001918460018302840111640100000000831117156200097857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001942565b005b348015620009da57600080fd5b5062000a9a60048036036020811015620009f357600080fd5b810190808035906020019064010000000081111562000a1157600080fd5b82018360208201111562000a2457600080fd5b8035906020019184600183028401116401000000008311171562000a4757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001a07565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600360200280838360005b8381101562000af957808201518184015260208101905062000adc565b505050509050019250505060405180910390f35b34801562000b1a57600080fd5b5062000b2562001b2c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801562000b7457600080fd5b5062000b7f62001b55565b604051808215151515815260200191505060405180910390f35b34801562000ba657600080fd5b5062000c666004803603602081101562000bbf57600080fd5b810190808035906020019064010000000081111562000bdd57600080fd5b82018360208201111562000bf057600080fd5b8035906020019184600183028401116401000000008311171562000c1357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001bac565b005b62000e7b6004803603608081101562000c8057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111562000cbe57600080fd5b82018360208201111562000cd157600080fd5b8035906020019184600183028401116401000000008311171562000cf457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111562000d5857600080fd5b82018360208201111562000d6b57600080fd5b8035906020019184600183028401116401000000008311171562000d8e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111562000df257600080fd5b82018360208201111562000e0557600080fd5b8035906020019184600183028401116401000000008311171562000e2857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505062001f04565b005b34801562000e8a57600080fd5b5062000ed06004803603602081101562000ea357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200203b565b005b34801562000edf57600080fd5b5062000f256004803603602081101562000ef857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200205f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801562000fb257600080fd5b505af115801562000fc7573d6000803e3d6000fd5b505050506040513d602081101562000fde57600080fd5b81019080805190602001909291905050509050919050565b6000806200100484620012a0565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200104757600091505062001142565b8073ffffffffffffffffffffffffffffffffffffffff16636b683896846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620010b557808201518184015260208101905062001098565b50505050905090810190601f168015620010e35780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156200110157600080fd5b505afa15801562001116573d6000803e3d6000fd5b505050506040513d60208110156200112d57600080fd5b81019080805190602001909291905050509150505b92915050565b60008062001157858562000ff6565b905060003482856040516200116c90620021e7565b808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620011dd578082015181840152602081019050620011c0565b50505050905090810190601f1680156200120b5780820380516001836020036101000a031916815260200191505b5093505050506040518091039082f0801580156200122d573d6000803e3d6000fd5b50905090507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180925050509392505050565b6000806001836040518082805190602001908083835b602083101515620012dd5780518252602082019150602081019050602083039250620012b6565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200137757600091505062001487565b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631df40eaa826001016040518263ffffffff1660e01b815260040180826003801562001428576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411620013e25790505b505091505060206040518083038186803b1580156200144657600080fd5b505afa1580156200145b573d6000803e3d6000fd5b505050506040513d60208110156200147257600080fd5b81019080805190602001909291905050509150505b919050565b6200149662001b55565b1515620014a257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6200156b62001b55565b15156200157757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166335ce4016826040518263ffffffff1660e01b81526004018082600360200280838360005b83811015620015d0578082015181840152602081019050620015b3565b5050505090500191505060206040518083038186803b158015620015f357600080fd5b505afa15801562001608573d6000803e3d6000fd5b505050506040513d60208110156200161f57600080fd5b8101908080519060200190929190505050151562001689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d81526020018062002ef6603d913960400191505060405180910390fd5b60408051908101604052808373ffffffffffffffffffffffffffffffffffffffff168152602001828152506001846040518082805190602001908083835b602083101515620016ee5780518252602082019150602081019050602083039250620016c7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190600362001781929190620021f5565b509050507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab83838360405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b838110156200180c578082015181840152602081019050620017ef565b50505050905001828103825285818151815260200191508051906020019080838360005b838110156200184d57808201518184015260208101905062001830565b50505050905090810190601f1680156200187b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050565b6200189962001b55565b1515620018a557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff16638f283970826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200192557600080fd5b505af11580156200193a573d6000803e3d6000fd5b505050505050565b6200194c62001b55565b15156200195857600080fd5b600062001966838362000ff6565b90508373ffffffffffffffffffffffffffffffffffffffff16633659cfe6826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015620019e857600080fd5b505af1158015620019fd573d6000803e3d6000fd5b5050505050505050565b600062001a13620022aa565b60006001846040518082805190602001908083835b60208310151562001a4f578051825260208201915060208101905060208303925062001a28565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001018060038060200260405190810160405280929190826003801562001b1b576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff168152602001906008019060208260070104928301926001038202915080841162001ad55790505b505050505090509250925050915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b62001bb662001b55565b151562001bc257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166001826040518082805190602001908083835b60208310151562001c14578051825260208201915060208101905060208303925062001bed565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151562001cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5061636b61676520746f20756e736574206e6f7420666f756e6400000000000081525060200191505060405180910390fd5b6001816040518082805190602001908083835b60208310151562001d32578051825260208201915060208101905060208303925062001d0b565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600062001d9f9190620022cd565b50507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab816000606060405190810160405280600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff1681525060405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b8381101562001e8357808201518184015260208101905062001e66565b50505050905001828103825285818151815260200191508051906020019080838360005b8381101562001ec457808201518184015260208101905062001ea7565b50505050905090810190601f16801562001ef25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a150565b62001f0e62001b55565b151562001f1a57600080fd5b600062001f28848462000ff6565b90508473ffffffffffffffffffffffffffffffffffffffff16634f1ef2863483856040518463ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101562001fcc57808201518184015260208101905062001faf565b50505050905090810190601f16801562001ffa5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156200201a57600080fd5b505af11580156200202f573d6000803e3d6000fd5b50505050505050505050565b6200204562001b55565b15156200205157600080fd5b6200205c81620020ec565b50565b60008173ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015620020a857600080fd5b505afa158015620020bd573d6000803e3d6000fd5b505050506040513d6020811015620020d457600080fd5b81019080805190602001909291905050509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200212957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610be7806200230f83390190565b8260038001600490048101928215620022975791602002820160005b838211156200225f57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550926020019260080160208160070104928301926001030262002211565b8015620022955782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026200225f565b505b509050620022a69190620022d4565b5090565b606060405190810160405280600390602082028038833980820191505090505090565b5060009055565b6200230b91905b808211156200230757600081816101000a81549067ffffffffffffffff021916905550600101620022db565b5090565b9056fe6080604052604051610be7380380610be78339810180604052604081101561002657600080fd5b8101908080519060200190929190805164010000000081111561004857600080fd5b8281019050602081018481111561005e57600080fd5b815185600182028301116401000000008211171561007b57600080fd5b50509291905050508181600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1415156100f157fe5b6101008261024b60201b60201c565b6000815111156101d05760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b6020831015156101595780518252602082019150602081019050602083039250610134565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101b9576040519150601f19603f3d011682016040523d82523d6000602084013e6101be565b606091505b505090508015156101ce57600080fd5b505b505060405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815250601a01905060405180910390207f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b14151561023557fe5b610244336102e460201b60201c565b5050610326565b61025e8161031360201b6107951760201c565b15156102b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610bac603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181555050565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b90508181555050565b600080823b905060008111915050919050565b610877806103356000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100a55780635c60da1b1461013e5780638f28397014610195578063f851a440146101e6575b61005261023d565b005b34801561006057600080fd5b506100a36004803603602081101561007757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610257565b005b61013c600480360360408110156100bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b90919293919293905050506102ac565b005b34801561014a57600080fd5b50610153610384565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101a157600080fd5b506101e4600480360360208110156101b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103dc565b005b3480156101f257600080fd5b506101fb610557565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610245610566565b6102556102506105fe565b61062f565b565b61025f610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102a05761029b81610686565b6102a9565b6102a861023d565b5b50565b6102b4610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610376576102f083610686565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d806000811461035b576040519150601f19603f3d011682016040523d82523d6000602084013e610360565b606091505b5050905080151561037057600080fd5b5061037f565b61037e61023d565b5b505050565b600061038e610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103d0576103c96105fe565b90506103d9565b6103d861023d565b5b90565b6103e4610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561054b57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561049f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806107db6036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104c8610655565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1610546816106d5565b610554565b61055361023d565b5b50565b6000610561610655565b905090565b61056e610655565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806107a96032913960400191505060405180910390fd5b6105fc610704565b565b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050805491505090565b3660008037600080366000845af43d6000803e8060008114610650573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050805491505090565b61068f81610706565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b90508181555050565b565b61070f81610795565b1515610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610811603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181555050565b600080823b90506000811191505091905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a165627a7a7230582043d54e8c86eca6076ab1c3551d02c14dc6e9af4c622a6852d142b22c096f2a1e002943616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373546865207265717565737465642076657273696f6e206d757374206265207265676973746572656420696e2074686520676976656e207061636b616765a165627a7a72305820be825877238c15023bcdca404d933572d774a591fb762d74d4bbe4f3f21f48be0029",
  "compiler": {
    "name": "solc",
    "version": "0.5.3+commit.10d17f24.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  }
}
