Gelato-automations/deployments/mainnet/ConditionBorrowAmountIsDust.json
2020-12-02 10:37:26 +01:00

167 lines
45 KiB
JSON

{
"address": "0xe5E50CF4b85D6C3C08AD0C5932717C8118BBE6f4",
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "_vaultId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_wDaiToBorrow",
"type": "uint256"
},
{
"internalType": "string",
"name": "_colType",
"type": "string"
}
],
"name": "borrowAmountIsDustExplicit",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_dsa",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromVaultId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_destVaultId",
"type": "uint256"
},
{
"internalType": "string",
"name": "_destColType",
"type": "string"
}
],
"name": "getConditionData",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_dsa",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromVaultId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_destVaultId",
"type": "uint256"
},
{
"internalType": "string",
"name": "_destColType",
"type": "string"
}
],
"name": "isBorrowAmountDust",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_conditionData",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "ok",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
],
"transactionHash": "0x21be61bbe6347c8ccb1f1f3b16a631d736b738a47a344d53903db3f56c31ea6b",
"receipt": {
"to": null,
"from": "0xF953c3d475dc0a9877329F71e2CE3d2519a519A2",
"contractAddress": "0xe5E50CF4b85D6C3C08AD0C5932717C8118BBE6f4",
"transactionIndex": 98,
"gasUsed": "982020",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x95179f20d356072763b4cd647a3a43c6f3c10ef63875e83c66fccf25904583d7",
"transactionHash": "0x21be61bbe6347c8ccb1f1f3b16a631d736b738a47a344d53903db3f56c31ea6b",
"logs": [],
"blockNumber": 11371546,
"cumulativeGasUsed": "4695080",
"status": 1,
"byzantium": true
},
"args": [],
"solcInputHash": "0c702ccad6439e7f34b6d311a794eaa1",
"metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_vaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_wDaiToBorrow\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_colType\",\"type\":\"string\"}],\"name\":\"borrowAmountIsDustExplicit\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dsa\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fromVaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_destVaultId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_destColType\",\"type\":\"string\"}],\"name\":\"getConditionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dsa\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fromVaultId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_destVaultId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_destColType\",\"type\":\"string\"}],\"name\":\"isBorrowAmountDust\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_conditionData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ok\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/gelato/conditions/ConditionBorrowAmountIsDust.sol\":\"ConditionBorrowAmountIsDust\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@gelatonetwork/core/contracts/conditions/GelatoConditionsStandard.sol\":{\"content\":\"// \\\"SPDX-License-Identifier: UNLICENSED\\\"\\npragma solidity >=0.6.10;\\n\\nimport \\\"./IGelatoCondition.sol\\\";\\n\\nabstract contract GelatoConditionsStandard is IGelatoCondition {\\n string internal constant OK = \\\"OK\\\";\\n}\\n\",\"keccak256\":\"0xa3d9ee5c4398914bbc0fe75fe54e57b73b8a4367caf9a40d9e5fd1ba9d4adb89\",\"license\":\"UNLICENSED\"},\"@gelatonetwork/core/contracts/conditions/IGelatoCondition.sol\":{\"content\":\"// \\\"SPDX-License-Identifier: UNLICENSED\\\"\\npragma solidity >=0.6.10;\\npragma experimental ABIEncoderV2;\\n\\n/// @title IGelatoCondition - solidity interface of GelatoConditionsStandard\\n/// @notice all the APIs of GelatoConditionsStandard\\n/// @dev all the APIs are implemented inside GelatoConditionsStandard\\ninterface IGelatoCondition {\\n\\n /// @notice GelatoCore calls this to verify securely the specified Condition securely\\n /// @dev Be careful only to encode a Task's condition.data as is and not with the\\n /// \\\"ok\\\" selector or _taskReceiptId, since those two things are handled by GelatoCore.\\n /// @param _taskReceiptId This is passed by GelatoCore so we can rely on it as a secure\\n /// source of Task identification.\\n /// @param _conditionData This is the Condition.data field developers must encode their\\n /// Condition's specific parameters in.\\n /// @param _cycleId For Tasks that are executed as part of a cycle.\\n function ok(uint256 _taskReceiptId, bytes calldata _conditionData, uint256 _cycleId)\\n external\\n view\\n returns(string memory);\\n}\",\"keccak256\":\"0xd07607af93227ec5f8c2f5401289937b98c298f0d2398c1ba7410f82a6253964\",\"license\":\"UNLICENSED\"},\"contracts/constants/CInstaDapp.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\n\\n// InstaDapp\\naddress constant INSTA_MEMORY = 0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F;\\n\\n// Connectors\\naddress constant CONNECT_MAKER = 0xac02030d8a8F49eD04b2f52C394D3F901A10F8A9;\\naddress constant CONNECT_COMPOUND = 0x15FdD1e902cAC70786fe7D31013B1a806764B5a2;\\naddress constant INSTA_POOL_V2 = 0xeB4bf86589f808f90EEC8e964dBF16Bd4D284905;\\n\\n// Tokens\\naddress constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\naddress constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;\\n\\n// Insta Pool\\naddress constant INSTA_POOL_RESOLVER = 0xa004a5afBa04b74037E9E52bA1f7eb02b5E61509;\\nuint256 constant ROUTE_1_TOLERANCE = 1005e15;\\n\\n// Insta Mapping\\naddress constant INSTA_MAPPING = 0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88;\\n\",\"keccak256\":\"0x0cbe5f37f9df8be40b791e526926ff413816606b8917976693765925bd3b5f27\",\"license\":\"UNLICENSED\"},\"contracts/constants/CMaker.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\n\\naddress constant MCD_MANAGER = 0x5ef30b9986345249bc32d8928B7ee64DE9435E39;\\n\",\"keccak256\":\"0x216362392e679feeaebba65883e7ab77e5a96e1a881f9305d83f3d3881fbddc4\",\"license\":\"UNLICENSED\"},\"contracts/contracts/gelato/conditions/ConditionBorrowAmountIsDust.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\npragma experimental ABIEncoderV2;\\n\\nimport {\\n GelatoConditionsStandard\\n} from \\\"@gelatonetwork/core/contracts/conditions/GelatoConditionsStandard.sol\\\";\\nimport {GelatoBytes} from \\\"../../../lib/GelatoBytes.sol\\\";\\nimport {\\n _debtIsDustNewVault,\\n _debtIsDust,\\n _getMakerVaultDebt,\\n _isVaultOwner\\n} from \\\"../../../functions/dapps/FMaker.sol\\\";\\n\\ncontract ConditionBorrowAmountIsDust is GelatoConditionsStandard {\\n using GelatoBytes for bytes;\\n\\n function getConditionData(\\n address _dsa,\\n uint256 _fromVaultId,\\n uint256 _destVaultId,\\n string calldata _destColType\\n ) public pure virtual returns (bytes memory) {\\n return\\n abi.encodeWithSelector(\\n this.isBorrowAmountDust.selector,\\n _dsa,\\n _fromVaultId,\\n _destVaultId,\\n _destColType\\n );\\n }\\n\\n function ok(\\n uint256,\\n bytes calldata _conditionData,\\n uint256\\n ) public view virtual override returns (string memory) {\\n (\\n address _dsa,\\n uint256 _fromVaultId,\\n uint256 _destVaultId,\\n string memory _destColType\\n ) = abi.decode(_conditionData[4:], (address, uint256, uint256, string));\\n\\n return\\n isBorrowAmountDust(_dsa, _fromVaultId, _destVaultId, _destColType);\\n }\\n\\n function isBorrowAmountDust(\\n address _dsa,\\n uint256 _fromVaultId,\\n uint256 _destVaultId,\\n string memory _destColType\\n ) public view returns (string memory) {\\n _destVaultId = _isVaultOwner(_destVaultId, _dsa) ? _destVaultId : 0;\\n\\n uint256 wDaiToBorrow = _getMakerVaultDebt(_fromVaultId);\\n\\n return\\n borrowAmountIsDustExplicit(_destVaultId, wDaiToBorrow, _destColType)\\n ? \\\"DebtNotGreaterThanDust\\\"\\n : OK;\\n }\\n\\n function borrowAmountIsDustExplicit(\\n uint256 _vaultId,\\n uint256 _wDaiToBorrow,\\n string memory _colType\\n ) public view returns (bool) {\\n return\\n _vaultId == 0\\n ? _debtIsDustNewVault(_colType, _wDaiToBorrow)\\n : _debtIsDust(_vaultId, _wDaiToBorrow);\\n }\\n}\\n\",\"keccak256\":\"0x5a1c98eacca1aa965f8fc464e83b6bfddc57b4e02a1f136bab36f5e4ae97d537\",\"license\":\"UNLICENSED\"},\"contracts/functions/dapps/FMaker.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\n\\nimport {MCD_MANAGER} from \\\"../../constants/CMaker.sol\\\";\\nimport {INSTA_MAPPING} from \\\"../../constants/CInstaDapp.sol\\\";\\nimport {\\n ITokenJoinInterface\\n} from \\\"../../interfaces/dapps/Maker/ITokenJoinInterface.sol\\\";\\nimport {IMcdManager} from \\\"../../interfaces/dapps/Maker/IMcdManager.sol\\\";\\nimport {InstaMapping} from \\\"../../interfaces/InstaDapp/IInstaDapp.sol\\\";\\nimport {IVat} from \\\"../../interfaces/dapps/Maker/IVat.sol\\\";\\nimport {RAY, add, sub, mul} from \\\"../../vendor/DSMath.sol\\\";\\nimport {_stringToBytes32, _convertTo18} from \\\"../../vendor/Convert.sol\\\";\\n\\nfunction _getMakerVaultDebt(uint256 _vaultId) view returns (uint256 wad) {\\n IMcdManager manager = IMcdManager(MCD_MANAGER);\\n\\n (bytes32 ilk, address urn) = _getVaultData(manager, _vaultId);\\n IVat vat = IVat(manager.vat());\\n (, uint256 rate, , , ) = vat.ilks(ilk);\\n (, uint256 art) = vat.urns(ilk, urn);\\n uint256 dai = vat.dai(urn);\\n\\n uint256 rad = sub(mul(art, rate), dai);\\n wad = rad / RAY;\\n\\n wad = mul(wad, RAY) < rad ? wad + 1 : wad;\\n}\\n\\nfunction _getMakerRawVaultDebt(uint256 _vaultId) view returns (uint256 tab) {\\n IMcdManager manager = IMcdManager(MCD_MANAGER);\\n\\n (bytes32 ilk, address urn) = _getVaultData(manager, _vaultId);\\n IVat vat = IVat(manager.vat());\\n (, uint256 rate, , , ) = vat.ilks(ilk);\\n (, uint256 art) = vat.urns(ilk, urn);\\n\\n uint256 rad = mul(art, rate);\\n\\n tab = rad / RAY;\\n tab = mul(tab, RAY) < rad ? tab + 1 : tab;\\n}\\n\\nfunction _getMakerVaultCollateralBalance(uint256 _vaultId)\\n view\\n returns (uint256)\\n{\\n IMcdManager manager = IMcdManager(MCD_MANAGER);\\n\\n IVat vat = IVat(manager.vat());\\n (bytes32 ilk, address urn) = _getVaultData(manager, _vaultId);\\n (uint256 ink, ) = vat.urns(ilk, urn);\\n\\n return ink;\\n}\\n\\nfunction _vaultWillBeSafe(\\n uint256 _vaultId,\\n uint256 _amtToBorrow,\\n uint256 _colToDeposit\\n) view returns (bool) {\\n require(_vaultId != 0, \\\"_vaultWillBeSafe: invalid vault id.\\\");\\n\\n IMcdManager manager = IMcdManager(MCD_MANAGER);\\n\\n (bytes32 ilk, address urn) = _getVaultData(manager, _vaultId);\\n\\n ITokenJoinInterface tokenJoinContract =\\n ITokenJoinInterface(InstaMapping(INSTA_MAPPING).gemJoinMapping(ilk));\\n\\n IVat vat = IVat(manager.vat());\\n (, uint256 rate, uint256 spot, , ) = vat.ilks(ilk);\\n (uint256 ink, uint256 art) = vat.urns(ilk, urn);\\n uint256 dai = vat.dai(urn);\\n\\n uint256 dink = _convertTo18(tokenJoinContract.dec(), _colToDeposit);\\n uint256 dart = _getBorrowAmt(_amtToBorrow, dai, rate);\\n\\n ink = add(ink, dink);\\n art = add(art, dart);\\n\\n uint256 tab = mul(rate, art);\\n\\n return tab <= mul(ink, spot);\\n}\\n\\nfunction _newVaultWillBeSafe(\\n string memory _colType,\\n uint256 _amtToBorrow,\\n uint256 _colToDeposit\\n) view returns (bool) {\\n IMcdManager manager = IMcdManager(MCD_MANAGER);\\n IVat vat = IVat(manager.vat());\\n\\n bytes32 ilk = _stringToBytes32(_colType);\\n\\n (, uint256 rate, uint256 spot, , ) = vat.ilks(ilk);\\n\\n ITokenJoinInterface tokenJoinContract =\\n ITokenJoinInterface(InstaMapping(INSTA_MAPPING).gemJoinMapping(ilk));\\n\\n uint256 ink = _convertTo18(tokenJoinContract.dec(), _colToDeposit);\\n uint256 art = _getBorrowAmt(_amtToBorrow, 0, rate);\\n\\n uint256 tab = mul(rate, art);\\n\\n return tab <= mul(ink, spot);\\n}\\n\\nfunction _debtCeilingIsReachedNewVault(\\n string memory _colType,\\n uint256 _amtToBorrow\\n) view returns (bool) {\\n IMcdManager manager = IMcdManager(MCD_MANAGER);\\n IVat vat = IVat(manager.vat());\\n\\n bytes32 ilk = _stringToBytes32(_colType);\\n\\n (uint256 Art, uint256 rate, , uint256 line, ) = vat.ilks(ilk);\\n uint256 Line = vat.Line();\\n uint256 debt = vat.debt();\\n\\n uint256 dart = _getBorrowAmt(_amtToBorrow, 0, rate);\\n uint256 dtab = mul(rate, dart);\\n\\n debt = add(debt, dtab);\\n Art = add(Art, dart);\\n\\n return mul(Art, rate) > line || debt > Line;\\n}\\n\\nfunction _debtCeilingIsReached(uint256 _vaultId, uint256 _amtToBorrow)\\n view\\n returns (bool)\\n{\\n IMcdManager manager = IMcdManager(MCD_MANAGER);\\n IVat vat = IVat(manager.vat());\\n\\n (bytes32 ilk, address urn) = _getVaultData(manager, _vaultId);\\n\\n (uint256 Art, uint256 rate, , uint256 line, ) = vat.ilks(ilk);\\n uint256 dai = vat.dai(urn);\\n uint256 Line = vat.Line();\\n uint256 debt = vat.debt();\\n\\n uint256 dart = _getBorrowAmt(_amtToBorrow, dai, rate);\\n uint256 dtab = mul(rate, dart);\\n\\n debt = add(debt, dtab);\\n Art = add(Art, dart);\\n\\n return mul(Art, rate) > line || debt > Line;\\n}\\n\\nfunction _debtIsDustNewVault(string memory _colType, uint256 _amtToBorrow)\\n view\\n returns (bool)\\n{\\n IMcdManager manager = IMcdManager(MCD_MANAGER);\\n IVat vat = IVat(manager.vat());\\n\\n bytes32 ilk = _stringToBytes32(_colType);\\n\\n (, uint256 rate, , , uint256 dust) = vat.ilks(ilk);\\n uint256 art = _getBorrowAmt(_amtToBorrow, 0, rate);\\n\\n uint256 tab = mul(rate, art);\\n\\n return tab < dust;\\n}\\n\\nfunction _debtIsDust(uint256 _vaultId, uint256 _amtToBorrow)\\n view\\n returns (bool)\\n{\\n IMcdManager manager = IMcdManager(MCD_MANAGER);\\n IVat vat = IVat(manager.vat());\\n\\n (bytes32 ilk, address urn) = _getVaultData(manager, _vaultId);\\n (, uint256 art) = vat.urns(ilk, urn);\\n (, uint256 rate, , , uint256 dust) = vat.ilks(ilk);\\n\\n uint256 dai = vat.dai(urn);\\n uint256 dart = _getBorrowAmt(_amtToBorrow, dai, rate);\\n art = add(art, dart);\\n uint256 tab = mul(rate, art);\\n\\n return tab < dust;\\n}\\n\\nfunction _getVaultData(IMcdManager manager, uint256 vault)\\n view\\n returns (bytes32 ilk, address urn)\\n{\\n ilk = manager.ilks(vault);\\n urn = manager.urns(vault);\\n}\\n\\nfunction _getBorrowAmt(\\n uint256 _amt,\\n uint256 _dai,\\n uint256 _rate\\n) pure returns (uint256 dart) {\\n dart = sub(mul(_amt, RAY), _dai) / _rate;\\n dart = mul(dart, _rate) < mul(_amt, RAY) ? dart + 1 : dart;\\n}\\n\\nfunction _isVaultOwner(uint256 _vaultId, address _owner) view returns (bool) {\\n if (_vaultId == 0) return false;\\n\\n try IMcdManager(MCD_MANAGER).owns(_vaultId) returns (address owner) {\\n return _owner == owner;\\n } catch Error(string memory error) {\\n revert(string(abi.encodePacked(\\\"FMaker._isVaultOwner:\\\", error)));\\n } catch {\\n revert(\\\"FMaker._isVaultOwner:undefined\\\");\\n }\\n}\\n\",\"keccak256\":\"0x85f307755d9294a821166840e161435dc38bdbddc598866b3e06b8faa6889ff6\",\"license\":\"UNLICENSED\"},\"contracts/interfaces/InstaDapp/IInstaDapp.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\npragma experimental ABIEncoderV2;\\n\\n/// @notice Interface InstaDapp Index\\ninterface IndexInterface {\\n function connectors(uint256 version) external view returns (address);\\n\\n function list() external view returns (address);\\n}\\n\\n/// @notice Interface InstaDapp List\\ninterface ListInterface {\\n function accountID(address _account) external view returns (uint64);\\n}\\n\\n/// @notice Interface InstaDapp InstaMemory\\ninterface MemoryInterface {\\n function setUint(uint256 _id, uint256 _val) external;\\n\\n function getUint(uint256 _id) external returns (uint256);\\n}\\n\\n/// @notice Interface InstaDapp Defi Smart Account wallet\\ninterface AccountInterface {\\n function cast(\\n address[] calldata _targets,\\n bytes[] calldata _datas,\\n address _origin\\n ) external payable returns (bytes32[] memory responses);\\n\\n function version() external view returns (uint256);\\n\\n function isAuth(address user) external view returns (bool);\\n\\n function shield() external view returns (bool);\\n}\\n\\ninterface ConnectorInterface {\\n function connectorID() external view returns (uint256 _type, uint256 _id);\\n\\n function name() external view returns (string memory);\\n}\\n\\ninterface InstaMapping {\\n function gemJoinMapping(bytes32) external view returns (address);\\n}\\n\",\"keccak256\":\"0x09243467e98503c35d8f5b972c5595ee2684f64bf080f46785e7b85aca83562d\",\"license\":\"UNLICENSED\"},\"contracts/interfaces/dapps/Maker/IMcdManager.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\n\\ninterface IMcdManager {\\n function ilks(uint256) external view returns (bytes32);\\n\\n function urns(uint256) external view returns (address);\\n\\n function vat() external view returns (address);\\n\\n function owns(uint256) external view returns (address);\\n}\\n\",\"keccak256\":\"0x53eec95121b3713ce3b308a5fd41935dad42ebd5b90fd4565677c20f2238dc2e\",\"license\":\"UNLICENSED\"},\"contracts/interfaces/dapps/Maker/ITokenJoinInterface.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\n\\ninterface ITokenJoinInterface {\\n function dec() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x9f4ce4d37db51dfd0c9d536e630a3c5a4df3cfeb46aef16d8e78222c9c66c3de\",\"license\":\"UNLICENSED\"},\"contracts/interfaces/dapps/Maker/IVat.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\n\\ninterface IVat {\\n function ilks(bytes32)\\n external\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256,\\n uint256,\\n uint256\\n );\\n\\n function dai(address) external view returns (uint256);\\n\\n function urns(bytes32, address) external view returns (uint256, uint256);\\n\\n function debt() external view returns (uint256);\\n\\n // solhint-disable-next-line\\n function Line() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x160ee2f0a3d0d39d39471bba8f6d5433b8317c5a421d9b92e9e5b8f8811e0cd0\",\"license\":\"UNLICENSED\"},\"contracts/lib/GelatoBytes.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\n\\nlibrary GelatoBytes {\\n function calldataSliceSelector(bytes calldata _bytes)\\n internal\\n pure\\n returns (bytes4 selector)\\n {\\n selector =\\n _bytes[0] |\\n (bytes4(_bytes[1]) >> 8) |\\n (bytes4(_bytes[2]) >> 16) |\\n (bytes4(_bytes[3]) >> 24);\\n }\\n\\n function memorySliceSelector(bytes memory _bytes)\\n internal\\n pure\\n returns (bytes4 selector)\\n {\\n selector =\\n _bytes[0] |\\n (bytes4(_bytes[1]) >> 8) |\\n (bytes4(_bytes[2]) >> 16) |\\n (bytes4(_bytes[3]) >> 24);\\n }\\n\\n function revertWithError(bytes memory _bytes, string memory _tracingInfo)\\n internal\\n pure\\n {\\n // 68: 32-location, 32-length, 4-ErrorSelector, UTF-8 err\\n if (_bytes.length % 32 == 4) {\\n bytes4 selector;\\n assembly {\\n selector := mload(add(0x20, _bytes))\\n }\\n if (selector == 0x08c379a0) {\\n // Function selector for Error(string)\\n assembly {\\n _bytes := add(_bytes, 68)\\n }\\n revert(string(abi.encodePacked(_tracingInfo, string(_bytes))));\\n } else {\\n revert(\\n string(abi.encodePacked(_tracingInfo, \\\"NoErrorSelector\\\"))\\n );\\n }\\n } else {\\n revert(\\n string(abi.encodePacked(_tracingInfo, \\\"UnexpectedReturndata\\\"))\\n );\\n }\\n }\\n\\n function returnError(bytes memory _bytes, string memory _tracingInfo)\\n internal\\n pure\\n returns (string memory)\\n {\\n // 68: 32-location, 32-length, 4-ErrorSelector, UTF-8 err\\n if (_bytes.length % 32 == 4) {\\n bytes4 selector;\\n assembly {\\n selector := mload(add(0x20, _bytes))\\n }\\n if (selector == 0x08c379a0) {\\n // Function selector for Error(string)\\n assembly {\\n _bytes := add(_bytes, 68)\\n }\\n return string(abi.encodePacked(_tracingInfo, string(_bytes)));\\n } else {\\n return\\n string(abi.encodePacked(_tracingInfo, \\\"NoErrorSelector\\\"));\\n }\\n } else {\\n return\\n string(abi.encodePacked(_tracingInfo, \\\"UnexpectedReturndata\\\"));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9038c820e041814ca2311bf582f2123171865b36c9438a7c6f85eb99406ec45c\",\"license\":\"UNLICENSED\"},\"contracts/vendor/Convert.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.7.4;\\n\\nimport {mul as _mul} from \\\"./DSMath.sol\\\";\\n\\nfunction _stringToBytes32(string memory str) pure returns (bytes32 result) {\\n require(bytes(str).length != 0, \\\"string-empty\\\");\\n assembly {\\n result := mload(add(str, 32))\\n }\\n}\\n\\nfunction _convertTo18(uint256 _dec, uint256 _amt) pure returns (uint256 amt) {\\n amt = _mul(_amt, 10**(18 - _dec));\\n}\\n\",\"keccak256\":\"0x7feec80ffbcff215032733f837e646f1389aa8052cf9aa2d7a33aac0249a1bc4\",\"license\":\"UNLICENSED\"},\"contracts/vendor/DSMath.sol\":{\"content\":\"// \\\"SPDX-License-Identifier: AGPL-3.0-or-later\\\"\\n/// math.sol -- mixin for inline numerical wizardry\\n\\n// This program is free software: you can redistribute it and/or modify\\n// it under the terms of the GNU General Public License as published by\\n// the Free Software Foundation, either version 3 of the License, or\\n// (at your option) any later version.\\n\\n// This program is distributed in the hope that it will be useful,\\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n// GNU General Public License for more details.\\n\\n// You should have received a copy of the GNU General Public License\\n// along with this program. If not, see <http://www.gnu.org/licenses/>.\\n\\npragma solidity 0.7.4;\\n\\nfunction add(uint256 x, uint256 y) pure returns (uint256 z) {\\n require((z = x + y) >= x, \\\"ds-math-add-overflow\\\");\\n}\\n\\nfunction sub(uint256 x, uint256 y) pure returns (uint256 z) {\\n require((z = x - y) <= x, \\\"ds-math-sub-underflow\\\");\\n}\\n\\nfunction mul(uint256 x, uint256 y) pure returns (uint256 z) {\\n require(y == 0 || (z = x * y) / y == x, \\\"ds-math-mul-overflow\\\");\\n}\\n\\nfunction min(uint256 x, uint256 y) pure returns (uint256 z) {\\n return x <= y ? x : y;\\n}\\n\\nfunction max(uint256 x, uint256 y) pure returns (uint256 z) {\\n return x >= y ? x : y;\\n}\\n\\nfunction imin(int256 x, int256 y) pure returns (int256 z) {\\n return x <= y ? x : y;\\n}\\n\\nfunction imax(int256 x, int256 y) pure returns (int256 z) {\\n return x >= y ? x : y;\\n}\\n\\nuint256 constant WAD = 10**18;\\nuint256 constant RAY = 10**27;\\n\\n//rounds to zero if x*y < WAD / 2\\nfunction wmul(uint256 x, uint256 y) pure returns (uint256 z) {\\n z = add(mul(x, y), WAD / 2) / WAD;\\n}\\n\\n//rounds to zero if x*y < WAD / 2\\nfunction rmul(uint256 x, uint256 y) pure returns (uint256 z) {\\n z = add(mul(x, y), RAY / 2) / RAY;\\n}\\n\\n//rounds to zero if x*y < WAD / 2\\nfunction wdiv(uint256 x, uint256 y) pure returns (uint256 z) {\\n z = add(mul(x, WAD), y / 2) / y;\\n}\\n\\n//rounds to zero if x*y < RAY / 2\\nfunction rdiv(uint256 x, uint256 y) pure returns (uint256 z) {\\n z = add(mul(x, RAY), y / 2) / y;\\n}\\n\\n// This famous algorithm is called \\\"exponentiation by squaring\\\"\\n// and calculates x^n with x as fixed-point and n as regular unsigned.\\n//\\n// It's O(log n), instead of O(n) for naive repeated multiplication.\\n//\\n// These facts are why it works:\\n//\\n// If n is even, then x^n = (x^2)^(n/2).\\n// If n is odd, then x^n = x * x^(n-1),\\n// and applying the equation for even x gives\\n// x^n = x * (x^2)^((n-1) / 2).\\n//\\n// Also, EVM division is flooring and\\n// floor[(n-1) / 2] = floor[n / 2].\\n//\\nfunction rpow(uint256 x, uint256 n) pure returns (uint256 z) {\\n z = n % 2 != 0 ? x : RAY;\\n\\n for (n /= 2; n != 0; n /= 2) {\\n x = rmul(x, x);\\n\\n if (n % 2 != 0) {\\n z = rmul(z, x);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa0b7c69e573cd75641300eaa6f8dffd94d1334b1561079e75aa9e740689f30f7\",\"license\":\"AGPL-3.0-or-later\"}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b506110cf806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80632effac911461005157806361d10bf01461007a578063a99891c51461008d578063dba43282146100a0575b600080fd5b61006461005f366004610d89565b6100c0565b6040516100719190610f93565b60405180910390f35b610064610088366004610dea565b610151565b61006461009b366004610e52565b6101b1565b6100b36100ae366004610ea3565b6101f3565b6040516100719190610f88565b60606100cc838661021c565b6100d75760006100d9565b825b925060006100e685610426565b90506100f38482856101f3565b61011757604051806040016040528060028152602001614f4b60f01b815250610147565b604051806040016040528060168152602001751119589d139bdd11dc99585d195c951a185b911d5cdd60521b8152505b9695505050505050565b6060632effac9160e01b8686868686604051602401610174959493929190610f3c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b606060008080836101c5876004818b610fad565b8101906101d29190610d89565b93509350935093506101e6848484846100c0565b9998505050505050505050565b6000831561020a57610205848461068b565b610214565b61021482846108e2565b949350505050565b60008261022b57506000610420565b735ef30b9986345249bc32d8928b7ee64de9435e396001600160a01b0316638161b120846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561028357600080fd5b505afa9250505080156102a857506040513d60208110156102a357600080fd5b505160015b61040f576102b4610fdb565b806102bf57506103c2565b806040516020018080742326b0b5b2b9172fb4b9ab30bab63a27bbb732b91d60591b81525060150182805190602001908083835b602083106103125780518252601f1990920191602091820191016102f3565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529384905262461bcd60e51b84526004840181815282516024860152825192965094508493604401925085019080838360005b8381101561038757818101518382015260200161036f565b50505050905090810190601f1680156103b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040805162461bcd60e51b815260206004820152601e60248201527f464d616b65722e5f69735661756c744f776e65723a756e646566696e65640000604482015290519081900360640190fd5b6001600160a01b0383811691161490505b92915050565b6000735ef30b9986345249bc32d8928b7ee64de9435e3981806104498386610a20565b915091506000836001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561048857600080fd5b505afa15801561049c573d6000803e3d6000fd5b505050506040513d60208110156104b257600080fd5b505160408051636cb1c69b60e11b81526004810186905290519192506000916001600160a01b0384169163d9638d369160248083019260a0929190829003018186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d60a081101561052b57600080fd5b5060200151604080516309092f9760e21b8152600481018790526001600160a01b038681166024830152825193945060009390861692632424be5c9260448082019391829003018186803b15801561058257600080fd5b505afa158015610596573d6000803e3d6000fd5b505050506040513d60408110156105ac57600080fd5b5060209081015160408051633612d9a360e11b81526001600160a01b038881166004830152915192945060009391871692636c25b34692602480840193919291829003018186803b15801561060057600080fd5b505afa158015610614573d6000803e3d6000fd5b505050506040513d602081101561062a57600080fd5b50519050600061064361063d8486610b15565b83610b78565b90506b033b2e3c9fd0803ce8000000810498508061066d8a6b033b2e3c9fd0803ce8000000610b15565b10610678578861067d565b886001015b9a9950505050505050505050565b600080735ef30b9986345249bc32d8928b7ee64de9435e3990506000816001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b1580156106e057600080fd5b505afa1580156106f4573d6000803e3d6000fd5b505050506040513d602081101561070a57600080fd5b5051905060008061071b8488610a20565b915091506000836001600160a01b0316632424be5c84846040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050604080518083038186803b15801561077557600080fd5b505afa158015610789573d6000803e3d6000fd5b505050506040513d604081101561079f57600080fd5b506020015160408051636cb1c69b60e11b815260048101869052905191925060009182916001600160a01b0388169163d9638d369160248082019260a092909190829003018186803b1580156107f457600080fd5b505afa158015610808573d6000803e3d6000fd5b505050506040513d60a081101561081e57600080fd5b5060208082015160809092015160408051633612d9a360e11b81526001600160a01b0389811660048301529151949650919450600093908a1692636c25b3469260248082019391829003018186803b15801561087957600080fd5b505afa15801561088d573d6000803e3d6000fd5b505050506040513d60208110156108a357600080fd5b5051905060006108b48b8386610bc8565b90506108c08582610c29565b945060006108ce8587610b15565b939093109c9b505050505050505050505050565b600080735ef30b9986345249bc32d8928b7ee64de9435e3990506000816001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561093757600080fd5b505afa15801561094b573d6000803e3d6000fd5b505050506040513d602081101561096157600080fd5b50519050600061097086610c78565b9050600080836001600160a01b031663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b1580156109b957600080fd5b505afa1580156109cd573d6000803e3d6000fd5b505050506040513d60a08110156109e357600080fd5b50602081015160809091015190925090506000610a01888285610bc8565b90506000610a0f8483610b15565b929092109998505050505050505050565b600080836001600160a01b0316632c2cb9fd846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6757600080fd5b505afa158015610a7b573d6000803e3d6000fd5b505050506040513d6020811015610a9157600080fd5b505160408051632726b07360e01b81526004810186905290519193506001600160a01b03861691632726b07391602480820192602092909190829003018186803b158015610ade57600080fd5b505afa158015610af2573d6000803e3d6000fd5b505050506040513d6020811015610b0857600080fd5b5051919491935090915050565b6000811580610b3057505080820282828281610b2d57fe5b04145b610420576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610420576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b600081610bea610be4866b033b2e3c9fd0803ce8000000610b15565b85610b78565b81610bf157fe5b049050610c0a846b033b2e3c9fd0803ce8000000610b15565b610c148284610b15565b10610c1f5780610214565b6001019392505050565b80820182811015610420576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000815160001415610cc0576040805162461bcd60e51b815260206004820152600c60248201526b737472696e672d656d70747960a01b604482015290519081900360640190fd5b506020015190565b60008083601f840112610cd9578182fd5b50813567ffffffffffffffff811115610cf0578182fd5b602083019150836020828501011115610d0857600080fd5b9250929050565b600082601f830112610d1f578081fd5b813567ffffffffffffffff80821115610d3457fe5b604051601f8301601f191681016020018281118282101715610d5257fe5b604052828152925082848301602001861015610d6d57600080fd5b8260208601602083013760006020848301015250505092915050565b60008060008060808587031215610d9e578384fd5b8435610da981611081565b93506020850135925060408501359150606085013567ffffffffffffffff811115610dd2578182fd5b610dde87828801610d0f565b91505092959194509250565b600080600080600060808688031215610e01578081fd5b8535610e0c81611081565b94506020860135935060408601359250606086013567ffffffffffffffff811115610e35578182fd5b610e4188828901610cc8565b969995985093965092949392505050565b60008060008060608587031215610e67578384fd5b84359350602085013567ffffffffffffffff811115610e84578384fd5b610e9087828801610cc8565b9598909750949560400135949350505050565b600080600060608486031215610eb7578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610edb578182fd5b610ee786828701610d0f565b9150509250925092565b60008151808452815b81811015610f1657602081850181015186830182015201610efa565b81811115610f275782602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038716825285602083015284604083015260806060830152826080830152828460a084013781830160a090810191909152601f909201601f19160101949350505050565b901515815260200190565b600060208252610fa66020830184610ef1565b9392505050565b60008085851115610fbc578182fd5b83861115610fc8578182fd5b5050820193919092039150565b60e01c90565b600060443d1015610feb5761107e565b600481823e6308c379a0610fff8251610fd5565b146110095761107e565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715611039575050505061107e565b82840192508251915080821115611053575050505061107e565b503d8301602082840101111561106b5750505061107e565b601f01601f191681016020016040529150505b90565b6001600160a01b038116811461109657600080fd5b5056fea26469706673582212200e5705498c192385944e757547a7b6749ea266893471bf19ad6b8eba7eeafa1764736f6c63430007040033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80632effac911461005157806361d10bf01461007a578063a99891c51461008d578063dba43282146100a0575b600080fd5b61006461005f366004610d89565b6100c0565b6040516100719190610f93565b60405180910390f35b610064610088366004610dea565b610151565b61006461009b366004610e52565b6101b1565b6100b36100ae366004610ea3565b6101f3565b6040516100719190610f88565b60606100cc838661021c565b6100d75760006100d9565b825b925060006100e685610426565b90506100f38482856101f3565b61011757604051806040016040528060028152602001614f4b60f01b815250610147565b604051806040016040528060168152602001751119589d139bdd11dc99585d195c951a185b911d5cdd60521b8152505b9695505050505050565b6060632effac9160e01b8686868686604051602401610174959493929190610f3c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b606060008080836101c5876004818b610fad565b8101906101d29190610d89565b93509350935093506101e6848484846100c0565b9998505050505050505050565b6000831561020a57610205848461068b565b610214565b61021482846108e2565b949350505050565b60008261022b57506000610420565b735ef30b9986345249bc32d8928b7ee64de9435e396001600160a01b0316638161b120846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561028357600080fd5b505afa9250505080156102a857506040513d60208110156102a357600080fd5b505160015b61040f576102b4610fdb565b806102bf57506103c2565b806040516020018080742326b0b5b2b9172fb4b9ab30bab63a27bbb732b91d60591b81525060150182805190602001908083835b602083106103125780518252601f1990920191602091820191016102f3565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529384905262461bcd60e51b84526004840181815282516024860152825192965094508493604401925085019080838360005b8381101561038757818101518382015260200161036f565b50505050905090810190601f1680156103b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040805162461bcd60e51b815260206004820152601e60248201527f464d616b65722e5f69735661756c744f776e65723a756e646566696e65640000604482015290519081900360640190fd5b6001600160a01b0383811691161490505b92915050565b6000735ef30b9986345249bc32d8928b7ee64de9435e3981806104498386610a20565b915091506000836001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561048857600080fd5b505afa15801561049c573d6000803e3d6000fd5b505050506040513d60208110156104b257600080fd5b505160408051636cb1c69b60e11b81526004810186905290519192506000916001600160a01b0384169163d9638d369160248083019260a0929190829003018186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d60a081101561052b57600080fd5b5060200151604080516309092f9760e21b8152600481018790526001600160a01b038681166024830152825193945060009390861692632424be5c9260448082019391829003018186803b15801561058257600080fd5b505afa158015610596573d6000803e3d6000fd5b505050506040513d60408110156105ac57600080fd5b5060209081015160408051633612d9a360e11b81526001600160a01b038881166004830152915192945060009391871692636c25b34692602480840193919291829003018186803b15801561060057600080fd5b505afa158015610614573d6000803e3d6000fd5b505050506040513d602081101561062a57600080fd5b50519050600061064361063d8486610b15565b83610b78565b90506b033b2e3c9fd0803ce8000000810498508061066d8a6b033b2e3c9fd0803ce8000000610b15565b10610678578861067d565b886001015b9a9950505050505050505050565b600080735ef30b9986345249bc32d8928b7ee64de9435e3990506000816001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b1580156106e057600080fd5b505afa1580156106f4573d6000803e3d6000fd5b505050506040513d602081101561070a57600080fd5b5051905060008061071b8488610a20565b915091506000836001600160a01b0316632424be5c84846040518363ffffffff1660e01b815260040180838152602001826001600160a01b0316815260200192505050604080518083038186803b15801561077557600080fd5b505afa158015610789573d6000803e3d6000fd5b505050506040513d604081101561079f57600080fd5b506020015160408051636cb1c69b60e11b815260048101869052905191925060009182916001600160a01b0388169163d9638d369160248082019260a092909190829003018186803b1580156107f457600080fd5b505afa158015610808573d6000803e3d6000fd5b505050506040513d60a081101561081e57600080fd5b5060208082015160809092015160408051633612d9a360e11b81526001600160a01b0389811660048301529151949650919450600093908a1692636c25b3469260248082019391829003018186803b15801561087957600080fd5b505afa15801561088d573d6000803e3d6000fd5b505050506040513d60208110156108a357600080fd5b5051905060006108b48b8386610bc8565b90506108c08582610c29565b945060006108ce8587610b15565b939093109c9b505050505050505050505050565b600080735ef30b9986345249bc32d8928b7ee64de9435e3990506000816001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561093757600080fd5b505afa15801561094b573d6000803e3d6000fd5b505050506040513d602081101561096157600080fd5b50519050600061097086610c78565b9050600080836001600160a01b031663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b1580156109b957600080fd5b505afa1580156109cd573d6000803e3d6000fd5b505050506040513d60a08110156109e357600080fd5b50602081015160809091015190925090506000610a01888285610bc8565b90506000610a0f8483610b15565b929092109998505050505050505050565b600080836001600160a01b0316632c2cb9fd846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6757600080fd5b505afa158015610a7b573d6000803e3d6000fd5b505050506040513d6020811015610a9157600080fd5b505160408051632726b07360e01b81526004810186905290519193506001600160a01b03861691632726b07391602480820192602092909190829003018186803b158015610ade57600080fd5b505afa158015610af2573d6000803e3d6000fd5b505050506040513d6020811015610b0857600080fd5b5051919491935090915050565b6000811580610b3057505080820282828281610b2d57fe5b04145b610420576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610420576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b600081610bea610be4866b033b2e3c9fd0803ce8000000610b15565b85610b78565b81610bf157fe5b049050610c0a846b033b2e3c9fd0803ce8000000610b15565b610c148284610b15565b10610c1f5780610214565b6001019392505050565b80820182811015610420576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000815160001415610cc0576040805162461bcd60e51b815260206004820152600c60248201526b737472696e672d656d70747960a01b604482015290519081900360640190fd5b506020015190565b60008083601f840112610cd9578182fd5b50813567ffffffffffffffff811115610cf0578182fd5b602083019150836020828501011115610d0857600080fd5b9250929050565b600082601f830112610d1f578081fd5b813567ffffffffffffffff80821115610d3457fe5b604051601f8301601f191681016020018281118282101715610d5257fe5b604052828152925082848301602001861015610d6d57600080fd5b8260208601602083013760006020848301015250505092915050565b60008060008060808587031215610d9e578384fd5b8435610da981611081565b93506020850135925060408501359150606085013567ffffffffffffffff811115610dd2578182fd5b610dde87828801610d0f565b91505092959194509250565b600080600080600060808688031215610e01578081fd5b8535610e0c81611081565b94506020860135935060408601359250606086013567ffffffffffffffff811115610e35578182fd5b610e4188828901610cc8565b969995985093965092949392505050565b60008060008060608587031215610e67578384fd5b84359350602085013567ffffffffffffffff811115610e84578384fd5b610e9087828801610cc8565b9598909750949560400135949350505050565b600080600060608486031215610eb7578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610edb578182fd5b610ee786828701610d0f565b9150509250925092565b60008151808452815b81811015610f1657602081850181015186830182015201610efa565b81811115610f275782602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038716825285602083015284604083015260806060830152826080830152828460a084013781830160a090810191909152601f909201601f19160101949350505050565b901515815260200190565b600060208252610fa66020830184610ef1565b9392505050565b60008085851115610fbc578182fd5b83861115610fc8578182fd5b5050820193919092039150565b60e01c90565b600060443d1015610feb5761107e565b600481823e6308c379a0610fff8251610fd5565b146110095761107e565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715611039575050505061107e565b82840192508251915080821115611053575050505061107e565b503d8301602082840101111561106b5750505061107e565b601f01601f191681016020016040529150505b90565b6001600160a01b038116811461109657600080fd5b5056fea26469706673582212200e5705498c192385944e757547a7b6749ea266893471bf19ad6b8eba7eeafa1764736f6c63430007040033",
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
},
"storageLayout": {
"storage": [],
"types": null
}
}