@dolomite-exchange/dolomite-margin
Version:
Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol
377 lines • 1.62 MB
JSON
{
"contractName": "GenericTraderProxyV1",
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "_chainId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_expiry",
"type": "address"
},
{
"internalType": "address",
"name": "_eventEmitterRegistry",
"type": "address"
},
{
"internalType": "address",
"name": "_dolomiteMargin",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"constant": true,
"inputs": [],
"name": "DOLOMITE_MARGIN",
"outputs": [
{
"internalType": "contract IDolomiteMargin",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "EVENT_EMITTER_REGISTRY",
"outputs": [
{
"internalType": "contract IEventEmitterRegistry",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "EXPIRY",
"outputs": [
{
"internalType": "contract IExpiry",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "chainId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "contract IDolomiteMargin",
"name": "_dolomiteMargin",
"type": "address"
},
{
"internalType": "uint256",
"name": "_marketId",
"type": "uint256"
}
],
"name": "isIsolationModeMarket",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_eventEmitterRegistry",
"type": "address"
}
],
"name": "ownerSetEventEmitterRegistry",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "_tradeAccountNumber",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "_marketIdsPath",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "_inputAmountWei",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minOutputAmountWei",
"type": "uint256"
},
{
"components": [
{
"internalType": "enum IGenericTraderProxyBase.TraderType",
"name": "traderType",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "makerAccountIndex",
"type": "uint256"
},
{
"internalType": "address",
"name": "trader",
"type": "address"
},
{
"internalType": "bytes",
"name": "tradeData",
"type": "bytes"
}
],
"internalType": "struct IGenericTraderProxyBase.TraderParam[]",
"name": "_tradersPath",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info[]",
"name": "_makerAccounts",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "enum AccountBalanceLib.BalanceCheckFlag",
"name": "balanceCheckFlag",
"type": "uint8"
},
{
"internalType": "enum IGenericTraderProxyV1.EventEmissionType",
"name": "eventType",
"type": "uint8"
}
],
"internalType": "struct IGenericTraderProxyV1.UserConfig",
"name": "_userConfig",
"type": "tuple"
}
],
"name": "swapExactInputForOutput",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "_tradeAccountNumber",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "_marketIdsPath",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "_inputAmountWei",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minOutputAmountWei",
"type": "uint256"
},
{
"components": [
{
"internalType": "enum IGenericTraderProxyBase.TraderType",
"name": "traderType",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "makerAccountIndex",
"type": "uint256"
},
{
"internalType": "address",
"name": "trader",
"type": "address"
},
{
"internalType": "bytes",
"name": "tradeData",
"type": "bytes"
}
],
"internalType": "struct IGenericTraderProxyBase.TraderParam[]",
"name": "_tradersPath",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info[]",
"name": "_makerAccounts",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "uint256",
"name": "fromAccountNumber",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "toAccountNumber",
"type": "uint256"
},
{
"components": [
{
"internalType": "uint256",
"name": "marketId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountWei",
"type": "uint256"
}
],
"internalType": "struct IGenericTraderProxyV1.TransferAmount[]",
"name": "transferAmounts",
"type": "tuple[]"
}
],
"internalType": "struct IGenericTraderProxyV1.TransferCollateralParam",
"name": "_transferCollateralParams",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "marketId",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "expiryTimeDelta",
"type": "uint32"
}
],
"internalType": "struct IGenericTraderProxyV1.ExpiryParam",
"name": "_expiryParams",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "enum AccountBalanceLib.BalanceCheckFlag",
"name": "balanceCheckFlag",
"type": "uint8"
},
{
"internalType": "enum IGenericTraderProxyV1.EventEmissionType",
"name": "eventType",
"type": "uint8"
}
],
"internalType": "struct IGenericTraderProxyV1.UserConfig",
"name": "_userConfig",
"type": "tuple"
}
],
"name": "swapExactInputForOutputAndModifyPosition",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_expiry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_eventEmitterRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_dolomiteMargin\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EVENT_EMITTER_REGISTRY\",\"outputs\":[{\"internalType\":\"contract IEventEmitterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EXPIRY\",\"outputs\":[{\"internalType\":\"contract IExpiry\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"_dolomiteMargin\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_marketId\",\"type\":\"uint256\"}],\"name\":\"isIsolationModeMarket\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_eventEmitterRegistry\",\"type\":\"address\"}],\"name\":\"ownerSetEventEmitterRegistry\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tradeAccountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_marketIdsPath\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_inputAmountWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minOutputAmountWei\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"enum IGenericTraderProxyBase.TraderType\",\"name\":\"traderType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"makerAccountIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"tradeData\",\"type\":\"bytes\"}],\"internalType\":\"struct IGenericTraderProxyBase.TraderParam[]\",\"name\":\"_tradersPath\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"_makerAccounts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"enum AccountBalanceLib.BalanceCheckFlag\",\"name\":\"balanceCheckFlag\",\"type\":\"uint8\"},{\"internalType\":\"enum IGenericTraderProxyV1.EventEmissionType\",\"name\":\"eventType\",\"type\":\"uint8\"}],\"internalType\":\"struct IGenericTraderProxyV1.UserConfig\",\"name\":\"_userConfig\",\"type\":\"tuple\"}],\"name\":\"swapExactInputForOutput\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tradeAccountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_marketIdsPath\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_inputAmountWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minOutputAmountWei\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"enum IGenericTraderProxyBase.TraderType\",\"name\":\"traderType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"makerAccountIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"tradeData\",\"type\":\"bytes\"}],\"internalType\":\"struct IGenericTraderProxyBase.TraderParam[]\",\"name\":\"_tradersPath\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"_makerAccounts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"fromAccountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toAccountNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWei\",\"type\":\"uint256\"}],\"internalType\":\"struct IGenericTraderProxyV1.TransferAmount[]\",\"name\":\"transferAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IGenericTraderProxyV1.TransferCollateralParam\",\"name\":\"_transferCollateralParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"expiryTimeDelta\",\"type\":\"uint32\"}],\"internalType\":\"struct IGenericTraderProxyV1.ExpiryParam\",\"name\":\"_expiryParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"enum AccountBalanceLib.BalanceCheckFlag\",\"name\":\"balanceCheckFlag\",\"type\":\"uint8\"},{\"internalType\":\"enum IGenericTraderProxyV1.EventEmissionType\",\"name\":\"eventType\",\"type\":\"uint8\"}],\"internalType\":\"struct IGenericTraderProxyV1.UserConfig\",\"name\":\"_userConfig\",\"type\":\"tuple\"}],\"name\":\"swapExactInputForOutputAndModifyPosition\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Dolomite\",\"details\":\"Proxy contract for trading any asset from msg.sender\",\"methods\":{},\"title\":\"GenericTraderProxyV1\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/GenericTraderProxyV1.sol\":\"GenericTraderProxyV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/GenericTraderProxyBase.sol\":{\"keccak256\":\"0x90b66c6de853e01fb004e4f1b78d51a818ab0bc7ae822709b989f008d2e76b4d\",\"urls\":[\"bzz-raw://a8fb3f83766be9aa674e68b87b9e8806ce3e3c772be91a5e91340f6e4a0bcf1d\",\"dweb:/ipfs/QmSSgnheY4xJJcqi7zFr2wntVjfAqM77YfKXcVHBtwvKX3\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/HasLiquidatorRegistry.sol\":{\"keccak256\":\"0xf7fb6d26d662f5a7ae5df8e30110664c7254f1a4969c31a3504e166018358e42\",\"urls\":[\"bzz-raw://b1a8adc3fdddce8ad10ce2420570b73218c3dd23238ab0000938051194834389\",\"dweb:/ipfs/QmPE47PxyM2xEat3xCWkiogpNRGkx26KLePGQZhGRGJpk8\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol\":{\"keccak256\":\"0xe40babc0a6dd2a767d76f3e0f0a22de124c4c480f2b2227a7b924b44e57526ea\",\"urls\":[\"bzz-raw://458f7f1f16eacd4faae597090503dc1e58446e9d371640c77b2e01e3e3113f17\",\"dweb:/ipfs/QmXqTG4sWJeDh5XA286KarbqHT4qJ7m3dphS16enpqtQiX\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IEventEmitterRegistry.sol\":{\"keccak256\":\"0x51ae058dafa3850ba14ea352c637af48e213c4b4e69e4d398b84ec6fed91d309\",\"urls\":[\"bzz-raw://974dda23508e2d7428433db7fb280c1bc82e197fd68f9d425c57f7bf57fdf82f\",\"dweb:/ipfs/QmeTteQN1tMXChaQ4nzBvLpndVfghaoznsQDM8kAqgDeF9\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IExpiry.sol\":{\"keccak256\":\"0xa7b197139e570e823cab42c3b8500c9c5edc8a40110970a7d6fe60f05864ba10\",\"urls\":[\"bzz-raw://4f469be063d8f694c5277650bc53ac2c0d164f62e36c6a9ab7dad126479990a9\",\"dweb:/ipfs/Qme4sTbGi4T2QhsJSweqGzqm5rxQkypy27g1vLy8ipVijV\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IGenericTraderProxyBase.sol\":{\"keccak256\":\"0x2ac2830618b13f412f53c803cb8c5e79f1ea1a7da0767fb0c6430a3435153f6f\",\"urls\":[\"bzz-raw://5e128520cdac823bc7dbe5331708c650d9a4ad6a18ec3bb7d9e8739f8360cfc0\",\"dweb:/ipfs/QmcDcrnMcXUGm7NT3q6Z4idFzqcNZukrwHn5GjX44u5Win\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IGenericTraderProxyV1.sol\":{\"keccak256\":\"0x8341482eb0ed7eb1f81ff64556f8e2f60b4d4cd38e24aa025ec42658d1bb15c0\",\"urls\":[\"bzz-raw://75762d5b991aee081933f13fa4faf534cdcd97a68772c7c648e25132966c2847\",\"dweb:/ipfs/QmbCBqS2cmBCfyJWXDBtcnjJ7RsbUwXvuRrbSE1ny7DakH\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IIsolationModeToken.sol\":{\"keccak256\":\"0x7924266dd63b2bfdad669f0f3c5be0b8562533a212c40459a5e350e75c27a438\",\"urls\":[\"bzz-raw://68fc0b4a568d19902b7c938edc74416dd6fb2af7a80f1c89375dce3f55d9b89d\",\"dweb:/ipfs/QmZMT59QgrAo3tmMCaY8HxiWfix5fBXVGs7HFrnSZ7mp9g\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IIsolationModeUnwrapperTrader.sol\":{\"keccak256\":\"0x6b46e389ec0dff927670d76a98902763b517bf81967f9e5b73c3ff6ced2a78c8\",\"urls\":[\"bzz-raw://17cd690e571d488432192852db474420c7e8d54db3169ab9b9c7d6963e9a708a\",\"dweb:/ipfs/Qmaam6B6WyYZmrtVWkJTKc6njrbZXHnERK2ngbwyK9WckM\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IIsolationModeWrapperTrader.sol\":{\"keccak256\":\"0xd228f8ed8b44af8d34d6731434aa6d4146631102ec3402c5731a803393d25a9f\",\"urls\":[\"bzz-raw://186605de708fa3c5075034d0ec4e9cefacd13dd52f22ee0a485a86a4ad92d6fe\",\"dweb:/ipfs/QmcY3411rTWkk8tCGKtj7E94WC3haTbEboY1odjchra6Sn\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/ILiquidatorAssetRegistry.sol\":{\"keccak256\":\"0x0d99615ee12fad08fbdf59a67683af9c7cdcfd2f25cf20b6767ebb6988eec514\",\"urls\":[\"bzz-raw://90230d7a44d9936cda8d1b1fef170daf91750b97d3da9634ed6c079fb8dbd15a\",\"dweb:/ipfs/QmfQxDE36en2hecxS4Y2i4BH6TsSEDEzKNxooysW4GsdKb\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/AccountActionLib.sol\":{\"keccak256\":\"0x5488dd7eae5ce96e479445f19301d9dd44d292a2d6739b9da1fe948eeb41edc4\",\"urls\":[\"bzz-raw://06977e07aea4d893db696173f3ee01a84008770c4e0d81fb5eb82af3a597ceaa\",\"dweb:/ipfs/QmYiH8CsXEbHypJ2gN31LnZv2tfzd2RBuSKoRgx2EbBw26\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/AccountBalanceLib.sol\":{\"keccak256\":\"0x76fd16d615fe7cfceaf775b4e6524fd0462606c802b082498c768a7a4ca01a20\",\"urls\":[\"bzz-raw://56068145e300cde1c77c22e38cb753378abf2f0d4613dcb203e33ff101f169e2\",\"dweb:/ipfs/QmXvMzr9n7vzMHdUPgnc58KX4mrbQAqkq4kDETaj5Y55ZY\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/GenericTraderProxyV1.sol\":{\"keccak256\":\"0x646768b2b48b801762bc56c0376b5145ef1dc6b578ad8b1e518f658ed0ad7cf9\",\"urls\":[\"bzz-raw://61999bbafb91efa84dd8f2345a7f98187cb58162623a6435c2a3eef0eecc9384\",\"dweb:/ipfs/QmbC6yPw18FzhLXBdkXW3tDNwT8YRzUa8JKqf21JYPX52e\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/GenericTraderProxyV1Lib.sol\":{\"keccak256\":\"0x871e2332d63dc2027b81cdc7fd0e593e482f1de670ad612ec03749d68872fe27\",\"urls\":[\"bzz-raw://45264037f7870013cd5176da854113312a106f7ebeb8bf7e4590cad9db70923d\",\"dweb:/ipfs/QmXHGnMFmqdajeF4wQGftiJvhigh4NdNskeoRnK8yXaqBh\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol\":{\"keccak256\":\"0x5b9fde139ddfdaae7b650b3c3f6699e0e44605f0d9d3daadc1622eb06ad4c3f8\",\"urls\":[\"bzz-raw://2dfd5af24b6de63f94519c99fd8777a264d7cd11266fa2d525c7d72d96a9c7cf\",\"dweb:/ipfs/QmPg9fjhbnmBayZMh6yTG79xsK1PWSoAHA5pfwSXfnKKjF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x7e86ed1ed04dc205245db9f4e7cf7cca60c3bfc46c57ade8129a463780647967\",\"urls\":[\"bzz-raw://f8fbd85afd334c12bdccbb6523ebea9172b27b7b4b132c4a48b4b4dd03ceeb2b\",\"dweb:/ipfs/QmU1srfSqBTz3kw7oz1KEzfTUJvphZiE4K8MRZcy9uJjv1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IExchangeWrapper.sol\":{\"keccak256\":\"0x74799c3fac16738be41e270a70d3f7ad4f75d1dc7e5d8c58f0fe4c6128345112\",\"urls\":[\"bzz-raw://d9602af1001189d199736d17266d5fb34a32f71cd05fbcf4c0f97c0b3a642eee\",\"dweb:/ipfs/QmPto2DkZ1nKqicBMdMkaek7kGSSXqSKnf697h5zuthvsy\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol\":{\"keccak256\":\"0xa94499fda55ef112640daed2cb1d06062e72c51c7b925c323b4e0ffa9b456ce5\",\"urls\":[\"bzz-raw://18b4a16acac577590a57f34f7ec6583e3cb35f575c948abb928b308d29cac1ab\",\"dweb:/ipfs/QmR1jLkzj6w7SjrdZ7GVW4V2vofSdMJwzjTqKpeUKABvxu\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x7b2fcf441c034952dd042b6c8b20b148359db771e7c9ac07d06369560a9f0301\",\"urls\":[\"bzz-raw://84665ee4a780360fe6160d197ba98f0bf0ab0d7c6ad87bfed6226bf2f88d8d30\",\"dweb:/ipfs/QmRDfRdAd8hSXeu4SAeeYKkKoXBhStu7n4uReYBce2JD5Z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x6d9a641163b2dd25e648c65f5d9e4949a57938e29ddc4c9dddefd74a9964aeef\",\"urls\":[\"bzz-raw://67e5a04ed4055faafbc100d6ccca9c54448ed378a1a8c71171562edda7bcbf7c\",\"dweb:/ipfs/QmYRikK3Xbgiq3UBJkgoo2zNUSSrShVabpRHmQj6iQHhrc\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0xe57c80a7621a77fcb2acb9f883fb5248e71a6dce03bc2db56df0db3fee332950\",\"urls\":[\"bzz-raw://28e221c04629674490b9a0041d4f9a5f15e669dc0cc192a5df6e2c701c36369f\",\"dweb:/ipfs/QmaL3oh8c7v9cx91pB175pyCEuzxnhNTab4UxmBMsDYfUx\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0xd9a348c2b1eec076609ba12bbec6b9c2e4ea135790a7ef4f5411feb050af2144\",\"urls\":[\"bzz-raw://d5bcff29e47d5cd02d7a9966e9f44c46ccbb4f0e4adfc4b0b86646880677db39\",\"dweb:/ipfs/QmRKfJD4FFM1AvTynSFNx1NcDg94o9SAcjz7dvMaJCfecp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Events.sol\":{\"keccak256\":\"0x2345dcc1ebf53a3d5449dab083b1fb90b5362dae692f8ff3ad00078862894e9b\",\"urls\":[\"bzz-raw://ebd34c557c06caf0696774844f0ca9746412ecc452bdd978b3bca0fd71aefbde\",\"dweb:/ipfs/QmcwXXKgv77DqfhxABRg85WR6RBPTLmge5vJGp99o9kFf8\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/ExcessivelySafeCall.sol\":{\"keccak256\":\"0x9369468538c371057c907f84d438cec6b47673711fe289cc3779f8671314e06b\",\"urls\":[\"bzz-raw://0f59a670f4bc5cf1bd3dd58bdf6c31723d9d84d9da7d9283d6860cdf5f33b7c5\",\"dweb:/ipfs/QmTGuvD5WQD2z56GH35HoPJivKPeeEpbXidJVcbXZyT23C\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x141a0ecb4a746f0e5767df4b99dbe33c6362df507ae9d5c02da1c1c17bc26df3\",\"urls\":[\"bzz-raw://9ff03e64a8ce5231acde07788624bf8c7a8ff55d90b157fa32f62fa887a0eff0\",\"dweb:/ipfs/QmUVxxWeE954RDXbmHJAYnHsXcit6rSXGqZUigu8t9oH2z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9c27f3cd52af28c9b6bca18097b1793f114d08284d78417467d0d05f67e9e2a9\",\"urls\":[\"bzz-raw://d1ed0e7a7f76d59f30572996d4e164ab8fb5b2ec4bfca127983f9e936b904813\",\"dweb:/ipfs/QmePVYbgrY8Yw3Vf76pmEvE9pX916Jaa9we4kjM8tGM4J1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0x095b5f8eb3665f6e246200311efc8a654fa3e90f9a1a522e27a4d089e8ab3917\",\"urls\":[\"bzz-raw://5db812b752a03d601d424e6e21be38153477082af0acf51b5c98eefa5553ed18\",\"dweb:/ipfs/QmbE549QUXYTurpx8hSMLBJvuBpfYqyNE6FBCgHJDY8PLf\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xe1bab8c8799d83e86c7a49aaf815d8e3bc8d09562d46d44d921500db5e98de0e\",\"urls\":[\"bzz-raw://8ea3d0cc4fdab6dd9bba545a792170f939b342d8d1a7051c1c6365009af72658\",\"dweb:/ipfs/QmaLJgbavu88eEit6JPqfWnw6NmGBDZfveMXxumgWywBFG\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xb63221b23818d622bfd83d18e0968307e4fcb7a35536bdceded76e1cf8349acd\",\"urls\":[\"bzz-raw://44e1e8c22362c4708a8c3362735f1465f5b05e2f7315e16c7010d694ce019d73\",\"dweb:/ipfs/QmWj9g8X1hxkXRre2kwkEjLBetjuzmSbWHD81bsSojnBkS\"]}},\"version\":1}",
"bytecode": "0x60806040523480156200001157600080fd5b5060405162005a2338038062005a238339810160408190526200003491620000aa565b6000939093556001805460ff60a01b196001600160a01b039586166001600160a01b03199283161716600160a01b179091556002805493851693821693909317909255600380549190931691161790556200014e565b8051620000978162000129565b92915050565b8051620000978162000143565b60008060008060808587031215620000c157600080fd5b6000620000cf87876200009d565b9450506020620000e2878288016200008a565b9350506040620000f5878288016200008a565b925050606062000108878288016200008a565b91505092959194509250565b60006001600160a01b03821662000097565b90565b620001348162000114565b81146200014057600080fd5b50565b620001348162000126565b6158c5806200015e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639213978c1161005b5780639213978c146100e85780639a8a0592146100fb5780639b277da814610110578063c85acb5c1461011857610088565b806315c14a4a1461008d5780634530a2d7146100ab578063565e4240146100b35780638211e8dc146100c8575b600080fd5b61009561012b565b6040516100a291906154fd565b60405180910390f35b61009561013a565b6100c66100c136600461492c565b610149565b005b6100db6100d636600461473f565b61051b565b6040516100a291906154be565b6100c66100f6366004614808565b6106ca565b610103610d72565b6040516100a291906155fc565b610095610d78565b6100c66101263660046146b0565b610d87565b6001546001600160a01b031681565b6002546001600160a01b031681565b60015474010000000000000000000000000000000000000000900460ff166101a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019d9061552b565b60405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16905580516102244280831015907f47656e6572696354726164657250726f78795631000000000000000000000000907f446561646c696e65206578706972656400000000000000000000000000000000908590610ea8565b61022c613e9f565b60408051610120810182526001546001600160a01b0390811682526003541660208201526000918101829052606081018290526002608082015260a081019190915260c0810161027a610fb3565b8152602001610287610fb3565b8152602001610294610fb3565b905290506102a188610fd3565b6102c1818a8a6000815181106102b357fe5b60200260200101518a611026565b96506102cd878761114f565b6102d9818986886111ed565b60606102e78286338d61127c565b905061030882826001815181106102fa57fe5b60200260200101518b61134c565b606061031387611412565b60405190808252806020026020018201604052801561034c57816020015b610339613f10565b8152602001906001900390816103315790505b50905061035e8282858d8d8d8d611525565b82516040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a45906103a89085908590600401615499565b600060405180830381600087803b1580156103c257600080fd5b505af11580156103d6573d6000803e3d6000fd5b5050505082602001516001600160a01b031663255a3bf7338d8d8b6040518563ffffffff1660e01b8152600401610410949392919061544e565b600060405180830381600087803b15801561042a57600080fd5b505af115801561043e573d6000803e3d6000fd5b506000925061044b915050565b8560200151600381111561045b57fe5b1480610476575060018560200151600381111561047457fe5b145b156104cf576104cf83600001518360008151811061049057fe5b602002602001015160000151846000815181106104a957fe5b6020026020010151602001518d6000815181106104c257fe5b6020026020010151611dba565b5050600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050505050565b60008060606105d5856001600160a01b031663062bd3e9866040518263ffffffff1660e01b815260040161054f91906155fc565b60206040518083038186803b15801561056757600080fd5b505afa15801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061059f91908101906146ce565b6040805160208101909152600081527f06fdde030000000000000000000000000000000000000000000000000000000090611ee7565b91509150816105e9576000925050506106c4565b6060818060200190516105ff9190810190614779565b9050601381511015801561065a57506040518060400160405280601381526020017f446f6c6f6d6974652049736f6c6174696f6e3a00000000000000000000000000815250805190602001206106588260006013611fbf565b145b806106be575060408051808201909152601a81527f446f6c6f6d6974653a20466565202b205374616b656420474c500000000000006020918201528151908201207ff423f1c88d15b6c0b5eba4c4269b960e9de5eca85f47ec00f20e4c0393f6a940145b93505050505b92915050565b60015474010000000000000000000000000000000000000000900460ff1661071e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019d9061552b565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055805161079c4280831015907f47656e6572696354726164657250726f78795631000000000000000000000000907f446561646c696e65206578706972656400000000000000000000000000000000908590610ea8565b6107a4613e9f565b60408051610120810182526001546001600160a01b03908116825260035416602080830191909152870180518e1492820192909252905160608201908d146107f05786602001516107f3565b86515b8152600360208201526000604082015260600161080e610fb3565b815260200161081b610fb3565b8152602001610828610fb3565b905290506108358a610fd3565b61084081868d612072565b8a85602001511480156108825750846040015160008151811061085f57fe5b6020026020010151600001518a60008151811061087857fe5b6020026020010151145b156108ce576108c78186600001518c60008151811061089d57fe5b602002602001015188604001516000815181106108b657fe5b602002602001015160200151611026565b98506108f1565b6108ee818c8c6000815181106108e057fe5b60200260200101518c611026565b98505b6108fb898961114f565b610907818b888a6111ed565b60606109158288338f61127c565b90506040518060400160405280336001600160a01b0316815260200183606001518152508160028151811061094657fe5b6020026020010181905250610970828260018151811061096257fe5b60200260200101518d61134c565b600061097b87612218565b9050606061098887612220565b826109928c611412565b01016040519080825280602002602001820160405280156109cd57816020015b6109ba613f10565b8152602001906001900390816109b25790505b5090508c8c8c8c6109e387868a87878787611525565b5050505060008d60018f5103815181106109f957fe5b6020026020010151905060008f9050610a1683878c848887612245565b5050610a3881858986600081518110610a2b57fe5b60200260200101516124c7565b610a588484600081518110610a4957fe5b60200260200101518f8b61252b565b73__GenericTraderProxyV1Lib_______________636183f6e88585600081518110610a8057fe5b602002602001015189604001516040518463ffffffff1660e01b8152600401610aab939291906155b6565b60006040518083038186803b158015610ac357600080fd5b505af4158015610ad7573d6000803e3d6000fd5b505085516040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063a67a6a459150610b259086908590600401615499565b600060405180830381600087803b158015610b3f57600080fd5b505af1158015610b53573d6000803e3d6000fd5b5050505060608d905073__GenericTraderProxyV1Lib_______________63bd742ba58686600081518110610b8457fe5b6020026020010151848f8e8d604001516040518763ffffffff1660e01b8152600401610bb59695949392919061554c565b60006040518083038186803b158015610bcd57600080fd5b505af4158015610be1573d6000803e3d6000fd5b5060009350610bef92505050565b86602001516003811115610bff57fe5b1480610c1a5750600186602001516003811115610c1857fe5b145b15610c7a5760008d600081518110610c2e57fe5b60200260200101519050610c78856000015185600081518110610c4d57fe5b60200260200101516000015186600081518110610c6657fe5b60200260200101516020015184611dba565b505b600086602001516003811115610c8c57fe5b1480610ca75750600286602001516003811115610ca557fe5b145b15610d235760408801515160005b81811015610d2057610d18866000015186600281518110610cd257fe5b60200260200101516000015187600281518110610ceb57fe5b6020026020010151602001518d604001518581518110610d0757fe5b602002602001015160000151611dba565b600101610cb5565b50505b5050600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050505050505050565b60005481565b6003546001600160a01b031681565b33610e6d600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd957600080fd5b505afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e1191908101906146ce565b6001600160a01b0316826001600160a01b0316147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d697465206f776e65722063616e2063616c6c0000000084612714565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b84610fac57610eb6846127ac565b7f3a20000000000000000000000000000000000000000000000000000000000000610ee0856127ac565b7f203c000000000000000000000000000000000000000000000000000000000000610f0a86612848565b7f2c20000000000000000000000000000000000000000000000000000000000000610f3487612848565b604051610f6c97969594939291907f3e000000000000000000000000000000000000000000000000000000000000009060200161532a565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261019d916004016154ec565b5050505050565b610fbb613f62565b50604080518082019091526000808252602082015290565b6110236002825110157f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c6964206d61726b65742070617468206c656e677468000000000000612939565b50565b60006000198214611038575080611147565b611040613f62565b85516040805180820182523381526020810188905290517fc190c2ec0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163c190c2ec9161109a9188906004016155e1565b604080518083038186803b1580156110b157600080fd5b505afa1580156110c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110e991908101906147cc565b90506111406110f782612988565b157f47656e6572696354726164657250726f787956310000000000000000000000007f42616c616e6365206d75737420626520706f73697469766500000000000000008761299f565b6020015190505b949350505050565b61119c8215157f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c696420696e707574416d6f756e7457656900000000000000000000612939565b6111e98115157f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c6964206d696e4f7574707574416d6f756e74576569000000000000612939565b5050565b61123f81516001018451147f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c6964207472616465727320706172616d73206c656e677468000000612939565b805160005b818110156112745761126c86868686858151811061125e57fe5b602002602001015185612a01565b600101611244565b505050505050565b60608084518660800151016040519080825280602002602001820160405280156112c057816020015b6112ad613f62565b8152602001906001900390816112a55790505b5090506040518060400160405280856001600160a01b0316815260200184815250816000815181106112ee57fe5b60200260200101819052506040518060400160405280856001600160a01b0316815260200161131d8686612abd565b8152508160018151811061132d57fe5b6020026020010181905250611343868683612af3565b95945050505050565b805160005b81811015610fac5784600001516001600160a01b03166347d1b53c8585848151811061137957fe5b60200260200101516040518363ffffffff1660e01b815260040161139e9291906155e1565b604080518083038186803b1580156113b557600080fd5b505afa1580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ed91908101906147ae565b602001516fffffffffffffffffffffffffffffffff161561140a57fe5b600101611351565b8051600090600290825b8181101561151a5761144485828151811061143357fe5b602002602001015160000151612bc4565b156114da5784818151811061145557fe5b6020026020010151604001516001600160a01b031663b189111a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561149957600080fd5b505afa1580156114ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114d191908101906147ea565b83019250611512565b6114fa8582815181106114e957fe5b602002602001015160000151612bdc565b1561150b5784818151811061145557fe5b6001830192505b60010161141c565b50909150505b919050565b61152d612bf1565b831415611628576115fe600060018660008151811061154857fe5b602002602001015188600001516001600160a01b031663c190c2ec8c60008151811061157057fe5b60200260200101518a60008151811061158557fe5b60200260200101516040518363ffffffff1660e01b81526004016115aa9291906155e1565b604080518083038186803b1580156115c157600080fd5b505afa1580156115d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115f991908101906147cc565b612bf7565b868660a00180518091906001018152508151811061161857fe5b6020026020010181905250611670565b61164a600060018660008151811061163c57fe5b602002602001015186612c89565b868660a00180518091906001018152508151811061166457fe5b60200260200101819052505b805160005b81811015611d5e57600083828151811061168b57fe5b60200260200101516000015160038111156116a257fe5b141561174a5761172060018783815181106116b957fe5b60200260200101518884600101815181106116d057fe5b60200260200101518685815181106116e457fe5b6020026020010151604001516116f8612bf1565b6117038a888a612d58565b89888151811061170f57fe5b602002602001015160600151612d73565b888860a00180518091906001018152508151811061173a57fe5b6020026020010181905250611d56565b600183828151811061175857fe5b602002602001015160000151600381111561176f57fe5b14156118bc57600061177f612bf1565b9050606084838151811061178f57fe5b602002602001015160600151905061a4b1600054141561182357808060200190516117bd9190810190614a11565b9092509050611823831580156117d257508783145b806117dc57508315155b7f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c696420637573746f6d20696e70757420616d6f756e740000000000612939565b61189060018a6080015187868151811061183957fe5b602002602001015160200151018a868151811061185257fe5b60200260200101518b876001018151811061186957fe5b602002602001015189888151811061187d57fe5b6020026020010151604001518787612e40565b8a8a60a0018051809190600101815250815181106118aa57fe5b60200260200101819052505050611d56565b6118cb83828151811061143357fe5b15611ae35780156118d857fe5b60608382815181106118e657fe5b6020026020010151604001516001600160a01b031663f93cffde6040518061016001604052806001815260200161191b612eed565b81526020018d60018151811061192d57fe5b6020026020010151600001516001600160a01b031681526020018d60018151811061195457fe5b60200260200101516020015181526020018d61196e612eed565b8151811061197857fe5b6020026020010151600001516001600160a01b031681526020018d61199b612eed565b815181106119a557fe5b60200260200101516020015181526020018a86600101815181106119c557fe5b602002602001015181526020018a86815181106119de57fe5b602002602001015181526020016119f789878a51612d58565b8152602001898152602001878681518110611a0e57fe5b6020026020010151606001518152506040518263ffffffff1660e01b8152600401611a39919061553b565b60006040518083038186803b158015611a5157600080fd5b505afa158015611a65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a8d91908101906146ec565b905060005b8151811015611adc57818181518110611aa757fe5b60200260200101518a8a60a001805180919060010181525081518110611ac957fe5b6020908102919091010152600101611a92565b5050611d56565b611af28382815181106114e957fe5b611af857fe5b611b486001830382147f47656e6572696354726164657250726f787942617365000000000000000000007f57726170706572206d75737420626520746865206c6173742074726164657200612939565b6060838281518110611b5657fe5b6020026020010151604001516001600160a01b0316634e2e558060405180610160016040528060018152602001611b8b612eed565b81526020018d600181518110611b9d57fe5b6020026020010151600001516001600160a01b031681526020018d600181518110611bc457fe5b60200260200101516020015181526020018d611bde612eed565b81518110611be857fe5b6020026020010151600001516001600160a01b031681526020018d611c0b612eed565b81518110611c1557fe5b60200260200101516020015181526020018a8660010181518110611c3557fe5b602002602001015181526020018a8681518110611c4e57fe5b60200260200101518152602001611c6789878a51612d58565b8152602001611c74612bf1565b8152602001878681518110611c8557fe5b6020026020010151606001518152506040518263ffffffff1660e01b8152600401611cb0919061553b565b60006040518083038186803b158015611cc857600080fd5b505afa158015611cdc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d0491908101906146ec565b905060005b8151811015611d5357818181518110611d1e57fe5b60200260200101518a8a60a001805180919060010181525081518110611d4057fe5b6020908102919091010152600101611d09565b50505b600101611675565b50611d8b6001600087600189510381518110611d7657fe5b6020026020010151611d86612bf1565b612c89565b878760a001805180919060010181525081518110611da557fe5b60200260200101819052505050505050505050565b611dc2613f62565b6040518060400160405280856001600160a01b03168152602001848152509050611dea613f62565b6040517f47d1b53c0000000000000000000000000000000000000000000000000000000081526001600160a01b038716906347d1b53c90611e3190859087906004016155e1565b604080518083038186803b158015611e4857600080fd5b505afa158015611e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e8091908101906147ae565b9050611274611e8e82612ef2565b80611e9d5750611e9d82612f1a565b7f4163636f756e7442616c616e63654c69620000000000000000000000000000007f6163636f756e742063616e6e6f7420676f206e65676174697665000000000000888888612f34565b60006060846001600160a01b03168484604051602401611f0791906154ec565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611f729190615298565b600060405180830381855afa9150503d8060008114611fad576040519150601f19603f3d011682016040523d82523d6000602084013e611fb2565b606091505b5090969095509350505050565b6000606084905060608484036040519080825280601f01601f191660200182016040528015611ff5576020820181803883390190505b509050845b8481101561205e5782818151811061200e57fe5b602001015160f81c60f81b828783038151811061202757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611ffa565b5080516020909101209150505b9392505050565b6120c6826040015151600014157f47656e6572696354726164657250726f787956310000000000000000000000007f496e76616c6964207472616e7366657220616d6f756e7473206c656e67746800612939565b6020820151825161211a9114157f47656e6572696354726164657250726f787956310000000000000000000000007f43616e6e6f74207472616e7366657220746f2073616d65206163636f756e7400612939565b8151612177908214806121305750826020015182145b7f47656e6572696354726164657250726f787956310000000000000000000000007f496e76616c6964207472616465206163636f756e74206e756d62657200000000612939565b8160200151811461218c57816020015161218f565b81515b606084015260408201515160005b81811015610fac57612210846040015182815181106121b857fe5b602002602001015160200151600014157f47656e6572696354726164657250726f787956310000000000000000000000007f496e76616c6964207472616e7366657220616d6f756e7420617420696e6465788461299f565b60010161219d565b604001515190565b6000816020015163ffffffff166000141561223d57506000611520565b506001611520565b8351600090841461225757600261225a565b60005b9050600084866000015114612270576000612273565b60025b905060005b848110156124bc577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe876040015182815181106122b157fe5b602002602001015160200151141561244c5761234784886040015183815181106122d757fe5b602002602001015160000151147f47656e6572696354726164657250726f787956310000000000000000000000007f496e76616c6964207472616e73666572206d61726b65744964000000000000008a60400151858151811061233657fe5b60200260200101516000015161299f565b61239383157f47656e6572696354726164657250726f787956310000000000000000000000007f496e76616c69642066726f6d206163636f756e74204944000000000000000000612939565b6124228383896040015184815181106123a857fe5b6020026020010151600001518b600001516001600160a01b031663c190c2ec6040518060400160405280336001600160a01b031681526020018e600001518152508d6040015188815181106123f957fe5b6020026020010151600001516040518363ffffffff1660e01b81526004016115aa9291906155e1565b898960a00180518091906001018152508151811061243c57fe5b60200260200101819052506124b4565b61248e83838960400151848151811061246157fe5b6020026020010151600001518a60400151858151811061247d57fe5b602002602001015160200151612c89565b898960a0018051809190600101815250815181106124a857fe5b60200260200101819052505b600101612278565b505050505050505050565b602082015163ffffffff166124db57612525565b815160025460208401516124ff9284926000926001600160a01b0390911690613024565b848460a00180518091906001018152508151811061251957fe5b60200260200101819052505b50505050565b83600001516001600160a01b031663c190c2ec848460008151811061254c57fe5b60200260200101516040518363ffffffff1660e01b81526004016125719291906155e1565b604080518083038186803b15801561258857600080fd5b505afa15801561259c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125c091908101906147cc565b8460c0018190525083600001516001600160a01b031663c190c2ec84846001865103815181106125ec57fe5b60200260200101516040518363ffffffff1660e01b81526004016126119291906155e1565b604080518083038186803b