@rsksmart/rif-marketplace-storage
Version:
Contracts for incentivized pinning
360 lines • 470 kB
JSON
{
"contractName": "Staking",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_storageManager",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "total",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "Staked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "total",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "Unstaked",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "isWhitelistedToken",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "storageManager",
"outputs": [
{
"internalType": "contract StorageManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_storageContract",
"type": "address"
}
],
"name": "setStorageManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "bool",
"name": "isWhiteListed",
"type": "bool"
}
],
"name": "setWhitelistedTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "stake",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "address",
"name": "tokenAddress",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "stakeFor",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "tokenAddress",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "unstake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "isInWhiteList",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "totalStaked",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "totalStakedFor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "supportsHistory",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Staked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Unstaked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isInWhiteList\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWhitelistedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageContract\",\"type\":\"address\"}],\"name\":\"setStorageManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWhiteListed\",\"type\":\"bool\"}],\"name\":\"setWhitelistedTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stakeFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storageManager\",\"outputs\":[{\"internalType\":\"contract StorageManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supportsHistory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalStakedFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"see ERC900 proposalRinke Hendriksen <rinke@iovlabs.org>\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_storageManager\":\"the storageManager which uses this staking contract\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setStorageManager(address)\":{\"params\":{\"_storageContract\":\"the storageManager which uses this staking contract\"}},\"setWhitelistedTokens(address,bool)\":{\"params\":{\"isWhiteListed\":\"whether you want to whitelist the token or put it from the whitelist.\",\"token\":\"the token from whom you want to set the whitelisted\"}},\"stake(uint256,address,bytes)\":{\"details\":\"note that when you stake a non-native token, the caller must have given approval to the contract to transact tokens if the caller is a contract, it must implement the functionality to call unstake\",\"params\":{\"amount\":\"the amount you want to stake. Can be left blank when you are staking the native currency\",\"data\":\"should be disregarded for the current deployment\",\"token\":\"Token address\"}},\"stakeFor(uint256,address,address,bytes)\":{\"details\":\"note that when you stake a non-native token, the caller must have given approval to the contract to transact tokens if you are staking for a contract, the contract must be able to call unstake\",\"params\":{\"amount\":\"the amount you want to stake. Can be left blank when you are staking the native currency\",\"data\":\"should be disregarded for the current deployment\",\"tokenAddress\":\"Token address\",\"user\":\"the user for whom you are staking\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unstake(uint256,address,bytes)\":{\"details\":\"- if sender does not have nothing staked, the transaction will be reverted with \\\"substraction overflow\\\" error\",\"params\":{\"amount\":\"the total amount of tokens to unstake\",\"data\":\"should be disregarded for the current deployment\",\"tokenAddress\":\"Token address\"}}},\"title\":\"staking\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":\"constructor of the contract\",\"isInWhiteList(address)\":{\"notice\":\"return true if token whitelisted\"},\"setStorageManager(address)\":{\"notice\":\"set Storage Manager contract\"},\"setWhitelistedTokens(address,bool)\":{\"notice\":\"whitelist a token or remove the token from whitelist\"},\"stake(uint256,address,bytes)\":{\"notice\":\"stake the token via this function.\"},\"stakeFor(uint256,address,address,bytes)\":{\"notice\":\"stake tokens for somebody else via this function\"},\"supportsHistory()\":{\"notice\":\"contract does not support history functions (lastStakedFor, totalStakedForAt, totalStakedAt)\"},\"totalStaked(address)\":{\"notice\":\"returns the amount staked for the specific token\"},\"totalStakedFor(address,address)\":{\"notice\":\"returns the amount staked for the specific user and token\"},\"unstake(uint256,address,bytes)\":{\"notice\":\"unstake tokens which where previously staked via this function. Only possible when you don't have any active storage agreements\"}},\"notice\":\"implements the ERC900 interface, with some small modifications. The contract also handles native tokens.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/Staking.sol\":\"Staking\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/Staking.sol\":{\"keccak256\":\"0xc8c6489082e3779074d583ebcae6e3c8168d979af9fcf7cfb21b8466533442be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40f7890632429e13addda8c932b50b10c67551808e81002e41d731a4548b9f35\",\"dweb:/ipfs/QmQND6PUTvZpPiQfbdiWSHrRrLPtFmkoBi4RTMXosJkdpT\"]},\"/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/StorageManager.sol\":{\"keccak256\":\"0xb39dec9f5da8aa5bf10ca169d3e1ea12d08678d2f9d999dcbd22f52711dab8f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07fab32db88ce5f2f79e08db9c81095fc398d8ce7ac8dde69e6885197396ebd1\",\"dweb:/ipfs/QmXHa2SsauGepF6TbDkGsMeqKYgxHsFKsrVWbvC8Cw5q1m\"]},\"@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol\":{\"keccak256\":\"0xe81686511d62f18b2d9c693c2c94c0a789c690de63aa90e15451ebf65c5bfd3e\",\"urls\":[\"bzz-raw://1332ee1d2b096456bf2e5795b5871d0fed47be6a31c9a2f2cef9206a299565ea\",\"dweb:/ipfs/Qmdu1847Y4UL3gTjbLUManMGfxYEoyGPSodM3Br89SKzwx\"]},\"@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol\":{\"keccak256\":\"0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721\",\"urls\":[\"bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f\",\"dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7\"]},\"@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol\":{\"keccak256\":\"0x04a69a78363214b4e3055db8e620bed222349f0c81e9d1cbe769eb849b69b73f\",\"urls\":[\"bzz-raw://b3115459376196d6c2c3817439c169d9b052b27b70e8ee2e28963cda760736da\",\"dweb:/ipfs/QmXaNF5rmcDSAzBiFMQjf979qb9xNXqD9eZtgo4uM9VEis\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x2ad5473fe88d9ab30c6cd495ab8895daae8c4a48cf8231282a2d339387b35006\",\"urls\":[\"bzz-raw://a737c60474c063efc28e5922b6a1d073588c010eb67f883273d3ec29d8e52d6b\",\"dweb:/ipfs/QmWCeqeZhR45S1mcjPRYEMy1DCHMy9sXDfwYLPycFRh2Nk\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xf7c39c7e6d06ed3bda90cfefbcbf2ddc32c599c3d6721746546ad64946efccaa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb57a28e189cd8b05748db44bdd51d608e6f1364dd1b35ad921e1bc82c10631e\",\"dweb:/ipfs/QmaWWTBbVu2pRR9XUbE4iC159NoP59cRF9ZJwhf4ghFN9i\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x3b21f2c8d626de3b9925ae33e972d8bf5c8b1bffb3f4ee94daeed7d0679036e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f8d45329fecbf0836ad7543330c3ecd0f8d0ffa42d4016278c3eb2215fdcdfe\",\"dweb:/ipfs/QmXWLT7GcnHtA5NiD6MFi2CV3EWJY4wv5mLNnypqYDrxL3\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08\",\"dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC\"]},\"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf12dfbe97e6276980b83d2830bb0eb75e0cf4f3e626c2471137f82158ae6a0fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a849c2d95e85463909e5b5c920b13e7a11216ca14127085e16d22b9379d52a\",\"dweb:/ipfs/QmUg3CZDbCCcQdroEpexBy5ZFd5vD1UWijWQq9qHZjtJNQ\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xa6a15ddddcbf29d2922a1e0d4151b5d2d33da24b93cc9ebc12390e0d855532f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c119bcaecfa853d564ac88d312777f75fa1126a3bca88a3371adb0ad9f35cb0\",\"dweb:/ipfs/QmY9UPuXeSKq86Zh38fE43VGQPhKMN34mkuFSFqPcr6nvZ\"]}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b506040516114b73803806114b78339818101604052602081101561003357600080fd5b5051600061003f6100ae565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b0319166001600160a01b03929092169190911790556100b2565b3390565b6113f6806100c16000396000f3fe6080604052600436106100dd5760003560e01c806396bfc2291161007f578063ab37f48611610059578063ab37f486146103d7578063e1df964e1461040a578063f2fde38b146104d2578063ffc9969a14610505576100dd565b806396bfc2291461035c5780639bfd8d611461038f5780639cf001fe146103c2576100dd565b806339888705116100bb57806339888705146102b25780637033e4a6146102ed578063715018a6146103165780638da5cb5b1461032b576100dd565b806305357f93146100e2578063152c64e8146101aa5780632cc205d914610265575b600080fd5b6101a8600480360360808110156100f857600080fd5b8135916001600160a01b0360208201358116926040830135909116919081019060808101606082013564010000000081111561013357600080fd5b82018360208201111561014557600080fd5b8035906020019184600183028401116401000000008311171561016757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610538945050505050565b005b6101a8600480360360608110156101c057600080fd5b8135916001600160a01b03602082013516918101906060810160408201356401000000008111156101f057600080fd5b82018360208201111561020257600080fd5b8035906020019184600183028401116401000000008311171561022457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610783945050505050565b34801561027157600080fd5b506102a06004803603604081101561028857600080fd5b506001600160a01b0381358116916020013516610794565b60408051918252519081900360200190f35b3480156102be57600080fd5b506101a8600480360360408110156102d557600080fd5b506001600160a01b03813516906020013515156107bf565b3480156102f957600080fd5b50610302610842565b604080519115158252519081900360200190f35b34801561032257600080fd5b506101a8610847565b34801561033757600080fd5b506103406108e9565b604080516001600160a01b039092168252519081900360200190f35b34801561036857600080fd5b506103026004803603602081101561037f57600080fd5b50356001600160a01b03166108f8565b34801561039b57600080fd5b506102a0600480360360208110156103b257600080fd5b50356001600160a01b0316610916565b3480156103ce57600080fd5b50610340610931565b3480156103e357600080fd5b50610302600480360360208110156103fa57600080fd5b50356001600160a01b0316610940565b34801561041657600080fd5b506101a86004803603606081101561042d57600080fd5b8135916001600160a01b036020820135169181019060608101604082013564010000000081111561045d57600080fd5b82018360208201111561046f57600080fd5b8035906020019184600183028401116401000000008311171561049157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610955945050505050565b3480156104de57600080fd5b506101a8600480360360208110156104f557600080fd5b50356001600160a01b0316610ccb565b34801561051157600080fd5b506101a86004803603602081101561052857600080fd5b50356001600160a01b0316610dc3565b81306001600160a01b03166396bfc229826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561058657600080fd5b505afa15801561059a573d6000803e3d6000fd5b505050506040513d60208110156105b057600080fd5b50516105ed5760405162461bcd60e51b81526004018080602001828103825260318152602001806112c16031913960400191505060405180910390fd5b6105f683610e3d565b156105ff573494505b6001600160a01b0380851660009081526002602090815260408083209387168352929052205461062f9086610e4a565b6001600160a01b038086166000908152600260209081526040808320938816835292815282822093909355600390925290205461066c9086610e4a565b6001600160a01b038085166000818152600360209081526040808320959095559288168082526002845284822083835284528482205485518b815280860182905295860193909352608060608601818152885191870191909152875191957fe963c8e966503804f256e466220d4148a6f091b129de0c0e447f437af33ac530958c95948b948b949260a085019290860191908190849084905b8381101561071d578181015183820152602001610705565b50505050905090810190601f16801561074a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a261076383610e3d565b61077c5761077c6001600160a01b038416333088610eab565b5050505050565b61078f83338484610538565b505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6107c7610f05565b6000546001600160a01b03908116911614610817576040805162461bcd60e51b81526020600482018190526024820152600080516020611377833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b600090565b61084f610f05565b6000546001600160a01b0390811691161461089f576040805162461bcd60e51b81526020600482018190526024820152600080516020611377833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526003602052604090205490565b6001546001600160a01b031681565b60046020526000908152604090205460ff1681565b81306001600160a01b03166396bfc229826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156109a357600080fd5b505afa1580156109b7573d6000803e3d6000fd5b505050506040513d60208110156109cd57600080fd5b5051610a0a5760405162461bcd60e51b81526004018080602001828103825260318152602001806112c16031913960400191505060405180910390fd5b6001546040805163ec5cdf9960e01b815233600482015290516001600160a01b039092169163ec5cdf9991602480820192602092909190829003018186803b158015610a5557600080fd5b505afa158015610a69573d6000803e3d6000fd5b505050506040513d6020811015610a7f57600080fd5b505115610abd5760405162461bcd60e51b815260040180806020018281038252603981526020018061133e6039913960400191505060405180910390fd5b3360009081526002602090815260408083206001600160a01b0387168452909152902054610aeb9085610f09565b3360009081526002602090815260408083206001600160a01b0388168452825280832093909355600390522054610b229085610f09565b6001600160a01b038416600081815260036020908152604080832094909455338083526002825284832084845282528483205485518a815280840182905295860194909452608060608601818152885191870191909152875191957f7c32fe78663816c0d4450249d427209fdc147e75d9ccb815e0de036eff370c84958b9590948b948b949260a0850192860191908190849084905b83811015610bd0578181015183820152602001610bb8565b50505050905090810190601f168015610bfd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2610c1683610e3d565b15610cb157604051600090339086908381818185875af1925050503d8060008114610c5d576040519150601f19603f3d011682016040523d82523d6000602084013e610c62565b606091505b5050905080610cab576040805162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015290519081900360640190fd5b50610cc5565b610cc56001600160a01b0384163386610f4b565b50505050565b610cd3610f05565b6000546001600160a01b03908116911614610d23576040805162461bcd60e51b81526020600482018190526024820152600080516020611377833981519152604482015290519081900360640190fd5b6001600160a01b038116610d685760405162461bcd60e51b81526004018080602001828103825260268152602001806112f26026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610dcb610f05565b6000546001600160a01b03908116911614610e1b576040805162461bcd60e51b81526020600482018190526024820152600080516020611377833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03161590565b600082820183811015610ea4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610cc5908590610f99565b3390565b6000610ea483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061104a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261078f9084905b6060610fee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110e19092919063ffffffff16565b80519091501561078f5780806020019051602081101561100d57600080fd5b505161078f5760405162461bcd60e51b815260040180806020018281038252602a815260200180611397602a913960400191505060405180910390fd5b600081848411156110d95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561109e578181015183820152602001611086565b50505050905090810190601f1680156110cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606110f084846000856110f8565b949350505050565b6060824710156111395760405162461bcd60e51b81526004018080602001828103825260268152602001806113186026913960400191505060405180910390fd5b61114285611254565b611193576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106111d25780518252601f1990920191602091820191016111b3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611234576040519150601f19603f3d011682016040523d82523d6000602084013e611239565b606091505b509150915061124982828661125a565b979650505050505050565b3b151590565b60608315611269575081610ea4565b8251156112795782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561109e57818101518382015260200161108656fe5374616b696e673a206e6f7420706f737369626c6520746f20696e7465726163742077697468207468697320746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5374616b696e673a206d7573742068617665206e6f207574696c697a656420636170616369747920696e2053746f726167654d616e616765724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212209460bdf4b5b327db3a64888e7bec0520278bf45b34ac6bfa2ce0931f7e6026b064736f6c634300060c0033",
"deployedBytecode": "0x6080604052600436106100dd5760003560e01c806396bfc2291161007f578063ab37f48611610059578063ab37f486146103d7578063e1df964e1461040a578063f2fde38b146104d2578063ffc9969a14610505576100dd565b806396bfc2291461035c5780639bfd8d611461038f5780639cf001fe146103c2576100dd565b806339888705116100bb57806339888705146102b25780637033e4a6146102ed578063715018a6146103165780638da5cb5b1461032b576100dd565b806305357f93146100e2578063152c64e8146101aa5780632cc205d914610265575b600080fd5b6101a8600480360360808110156100f857600080fd5b8135916001600160a01b0360208201358116926040830135909116919081019060808101606082013564010000000081111561013357600080fd5b82018360208201111561014557600080fd5b8035906020019184600183028401116401000000008311171561016757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610538945050505050565b005b6101a8600480360360608110156101c057600080fd5b8135916001600160a01b03602082013516918101906060810160408201356401000000008111156101f057600080fd5b82018360208201111561020257600080fd5b8035906020019184600183028401116401000000008311171561022457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610783945050505050565b34801561027157600080fd5b506102a06004803603604081101561028857600080fd5b506001600160a01b0381358116916020013516610794565b60408051918252519081900360200190f35b3480156102be57600080fd5b506101a8600480360360408110156102d557600080fd5b506001600160a01b03813516906020013515156107bf565b3480156102f957600080fd5b50610302610842565b604080519115158252519081900360200190f35b34801561032257600080fd5b506101a8610847565b34801561033757600080fd5b506103406108e9565b604080516001600160a01b039092168252519081900360200190f35b34801561036857600080fd5b506103026004803603602081101561037f57600080fd5b50356001600160a01b03166108f8565b34801561039b57600080fd5b506102a0600480360360208110156103b257600080fd5b50356001600160a01b0316610916565b3480156103ce57600080fd5b50610340610931565b3480156103e357600080fd5b50610302600480360360208110156103fa57600080fd5b50356001600160a01b0316610940565b34801561041657600080fd5b506101a86004803603606081101561042d57600080fd5b8135916001600160a01b036020820135169181019060608101604082013564010000000081111561045d57600080fd5b82018360208201111561046f57600080fd5b8035906020019184600183028401116401000000008311171561049157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610955945050505050565b3480156104de57600080fd5b506101a8600480360360208110156104f557600080fd5b50356001600160a01b0316610ccb565b34801561051157600080fd5b506101a86004803603602081101561052857600080fd5b50356001600160a01b0316610dc3565b81306001600160a01b03166396bfc229826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561058657600080fd5b505afa15801561059a573d6000803e3d6000fd5b505050506040513d60208110156105b057600080fd5b50516105ed5760405162461bcd60e51b81526004018080602001828103825260318152602001806112c16031913960400191505060405180910390fd5b6105f683610e3d565b156105ff573494505b6001600160a01b0380851660009081526002602090815260408083209387168352929052205461062f9086610e4a565b6001600160a01b038086166000908152600260209081526040808320938816835292815282822093909355600390925290205461066c9086610e4a565b6001600160a01b038085166000818152600360209081526040808320959095559288168082526002845284822083835284528482205485518b815280860182905295860193909352608060608601818152885191870191909152875191957fe963c8e966503804f256e466220d4148a6f091b129de0c0e447f437af33ac530958c95948b948b949260a085019290860191908190849084905b8381101561071d578181015183820152602001610705565b50505050905090810190601f16801561074a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a261076383610e3d565b61077c5761077c6001600160a01b038416333088610eab565b5050505050565b61078f83338484610538565b505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6107c7610f05565b6000546001600160a01b03908116911614610817576040805162461bcd60e51b81526020600482018190526024820152600080516020611377833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b600090565b61084f610f05565b6000546001600160a01b0390811691161461089f576040805162461bcd60e51b81526020600482018190526024820152600080516020611377833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526003602052604090205490565b6001546001600160a01b031681565b60046020526000908152604090205460ff1681565b81306001600160a01b03166396bfc229826040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156109a357600080fd5b505afa1580156109b7573d6000803e3d6000fd5b505050506040513d60208110156109cd57600080fd5b5051610a0a5760405162461bcd60e51b81526004018080602001828103825260318152602001806112c16031913960400191505060405180910390fd5b6001546040805163ec5cdf9960e01b815233600482015290516001600160a01b039092169163ec5cdf9991602480820192602092909190829003018186803b158015610a5557600080fd5b505afa158015610a69573d6000803e3d6000fd5b505050506040513d6020811015610a7f57600080fd5b505115610abd5760405162461bcd60e51b815260040180806020018281038252603981526020018061133e6039913960400191505060405180910390fd5b3360009081526002602090815260408083206001600160a01b0387168452909152902054610aeb9085610f09565b3360009081526002602090815260408083206001600160a01b0388168452825280832093909355600390522054610b229085610f09565b6001600160a01b038416600081815260036020908152604080832094909455338083526002825284832084845282528483205485518a815280840182905295860194909452608060608601818152885191870191909152875191957f7c32fe78663816c0d4450249d427209fdc147e75d9ccb815e0de036eff370c84958b9590948b948b949260a0850192860191908190849084905b83811015610bd0578181015183820152602001610bb8565b50505050905090810190601f168015610bfd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2610c1683610e3d565b15610cb157604051600090339086908381818185875af1925050503d8060008114610c5d576040519150601f19603f3d011682016040523d82523d6000602084013e610c62565b606091505b5050905080610cab576040805162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015290519081900360640190fd5b50610cc5565b610cc56001600160a01b0384163386610f4b565b50505050565b610cd3610f05565b6000546001600160a01b03908116911614610d23576040805162461bcd60e51b81526020600482018190526024820152600080516020611377833981519152604482015290519081900360640190fd5b6001600160a01b038116610d685760405162461bcd60e51b81526004018080602001828103825260268152602001806112f26026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610dcb610f05565b6000546001600160a01b03908116911614610e1b576040805162461bcd60e51b81526020600482018190526024820152600080516020611377833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03161590565b600082820183811015610ea4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610cc5908590610f99565b3390565b6000610ea483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061104a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261078f9084905b6060610fee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110e19092919063ffffffff16565b80519091501561078f5780806020019051602081101561100d57600080fd5b505161078f5760405162461bcd60e51b815260040180806020018281038252602a815260200180611397602a913960400191505060405180910390fd5b600081848411156110d95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561109e578181015183820152602001611086565b50505050905090810190601f1680156110cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606110f084846000856110f8565b949350505050565b6060824710156111395760405162461bcd60e51b81526004018080602001828103825260268152602001806113186026913960400191505060405180910390fd5b61114285611254565b611193576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106111d25780518252601f1990920191602091820191016111b3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611234576040519150601f19603f3d011682016040523d82523d6000602084013e611239565b606091505b509150915061124982828661125a565b979650505050505050565b3b151590565b60608315611269575081610ea4565b8251156112795782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561109e57818101518382015260200161108656fe5374616b696e673a206e6f7420706f737369626c6520746f20696e7465726163742077697468207468697320746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5374616b696e673a206d7573742068617665206e6f207574696c697a656420636170616369747920696e2053746f726167654d616e616765724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212209460bdf4b5b327db3a64888e7bec0520278bf45b34ac6bfa2ce0931f7e6026b064736f6c634300060c0033",
"immutableReferences": {},
"sourceMap": "476:6330:1:-:0;;;1545:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1545:109:1;882:17:11;902:12;:10;:12::i;:::-;924:6;:18;;-1:-1:-1;;;;;;924:18:11;-1:-1:-1;;;;;924:18:11;;;;;;;957:43;;924:18;;-1:-1:-1;924:18:11;957:43;;924:6;;957:43;-1:-1:-1;1599:14:1;:48;;-1:-1:-1;;;;;;1599:48:1;-1:-1:-1;;;;;1599:48:1;;;;;;;;;;476:6330;;598:104:10;685:10;598:104;:::o;476:6330:1:-;;;;;;;",
"deployedSourceMap": "476:6330:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3526:703;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3526:703:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3526:703:1;;-1:-1:-1;3526:703:1;;-1:-1:-1;;;;;3526:703:1:i;:::-;;2807:170;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2807:170:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2807:170:1;;-1:-1:-1;2807:170:1;;-1:-1:-1;;;;;2807:170:1:i;6291:135::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6291:135:1;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2184:142;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2184:142:1;;;;;;;;;;:::i;6553:85::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1706:145:11;;;;;;;;;;;;;:::i;1083:77::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1083:77:11;;;;;;;;;;;;;;5890:116:1;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5890:116:1;-1:-1:-1;;;;;5890:116:1;;:::i;6088:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6088:111:1;-1:-1:-1;;;;;6088:111:1;;:::i;575:36::-;;;;;;;;;;;;;:::i;1155:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1155:50:1;-1:-1:-1;;;;;1155:50:1;;:::i;4674:914::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4674:914:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4674:914:1;;-1:-1:-1;4674:914:1;;-1:-1:-1;;;;;4674:914:1:i;2000:240:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2000:240:11;-1:-1:-1;;;;;2000:240:11;;:::i;1796:138:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1796:138:1;-1:-1:-1;;;;;1796:138:1;;:::i;3526:703::-;3685:12;5719:4;-1:-1:-1;;;;;5719:18:1;;5738:12;5719:32;;;;;;;;;;;;;-1:-1:-1;;;;;5719:32:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5719:32:1;5711:94;;;;-1:-1:-1;;;5711:94:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3751:28:::1;3766:12;3751:14;:28::i;:::-;3747:77;;;3804:9;3795:18;;3747:77;-1:-1:-1::0;;;;;3869:19:1;;::::1;;::::0;;;:13:::1;:19;::::0;;;;;;;:33;;::::1;::::0;;;;;;;:45:::1;::::0;3907:6;3869:37:::1;:45::i;:::-;-1:-1:-1::0;;;;;3833:19:1;;::::1;;::::0;;;:13:::1;:19;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:81;;;;3953:12:::1;:26:::0;;;;;;:38:::1;::::0;3984:6;3953:30:::1;:38::i;:::-;-1:-1:-1::0;;;;;3924:26:1;;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;;:67;;;;4006:75;;::::1;4027:19:::0;;;:13:::1;:19:::0;;;;;:33;;;;;;;;;4006:75;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;4019:6;;4027:33;3937:12;;4076:4;;4006:75;;;;;;;::::1;::::0;;;;;;;;::::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4096:28;4111:12;4096:14;:28::i;:::-;4091:132;;4140:72;-1:-1:-1::0;;;;;4140:37:1;::::1;4178:10;4198:4;4205:6:::0;4140:37:::1;:72::i;:::-;3526:703:::0;;;;;:::o;2807:170::-;2929:41;2938:6;2946:10;2958:5;2965:4;2929:8;:41::i;:::-;2807:170;;;:::o;6291:135::-;-1:-1:-1;;;;;6393:19:1;;;6367:7;6393:19;;;:13;:19;;;;;;;;:26;;;;;;;;;;;;;6291:135::o;2184:142::-;1297:12:11;:10;:12::i;:::-;1287:6;;-1:-1:-1;;;;;1287:6:11;;;:22;;;1279:67;;;;;-1:-1:-1;;;1279:67:11;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1279:67:11;;;;;;;;;;;;;;;-1:-1:-1;;;;;2278:25:1;;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:41;;-1:-1:-1;;2278:41:1::1;::::0;::::1;;::::0;;;::::1;::::0;;2184:142::o;6553:85::-;6603:4;6553:85;:::o;1706:145:11:-;1297:12;:10;:12::i;:::-;1287:6;;-1:-1:-1;;;;;1287:6:11;;;:22;;;1279:67;;;;;-1:-1:-1;;;1279:67:11;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1279:67:11;;;;;;;;;;;;;;;1812:1:::1;1796:6:::0;;1775:40:::1;::::0;-1:-1:-1;;;;;1796:6:11;;::::1;::::0;1775:40:::1;::::0;1812:1;;1775:40:::1;1842:1;1825:19:::0;;-1:-1:-1;;;;;;1825:19:11::1;::::0;;1706:145::o;1083:77::-;1121:7;1147:6;-1:-1:-1;;;;;1147:6:11;1083:77;:::o;5890:116:1:-;-1:-1:-1;;;;;5974:25:1;5951:4;5974:25;;;:18;:25;;;;;;;;;5890:116::o;6088:111::-;-1:-1:-1;;;;;6173:19:1;6147:7;6173:19;;;:12;:19;;;;;;;6088:111::o;575:36::-;;;-1:-1:-1;;;;;575:36:1;;:::o;1155:50::-;;;;;;;;;;;;;;;:::o;4674:914::-;4804:12;5719:4;-1:-1:-1;;;;;5719:18:1;;5738:12;5719:32;;;;;;;;;;;;;-1:-1:-1;;;;;5719:32:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5719:32:1;5711:94;;;;-1:-1:-1;;;5711:94:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4913:14:::1;::::0;:46:::1;::::0;;-1:-1:-1;;;4913:46:1;;4948:10:::1;4913:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;4913:14:1;;::::1;::::0;:34:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;;:14;:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4913:46:1;4912:47:::1;4891:151;;;;-1:-1:-1::0;;;4891:151:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5108:10;5094:25;::::0;;;:13:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;5094:39:1;::::1;::::0;;;;;;;;:51:::1;::::0;5138:6;5094:43:::1;:51::i;:::-;5066:10;5052:25;::::0;;;:13:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;5052:39:1;::::1;::::0;;;;;;;:93;;;;5184:12:::1;:26:::0;;;;:38:::1;::::0;5215:6;5184:30:::1;:38::i;:::-;-1:-1:-1::0;;;;;5155:26:1;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;;:67;;;;5246:10:::1;5266:25:::0;;;:13:::1;:25:::0;;;;;:39;;;;;;;;;5237:89;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5246:10;;5237:89:::1;::::0;5258:6;;5266:39;;5168:12;;5321:4;;5237:89;;;;;;::::1;::::0;;;;;;;;::::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5340:28;5355:12;5340:14;:28::i;:::-;5336:246;;;5403:34;::::0;5385:12:::1;::::0;5403:10:::1;::::0;5426:6;;5385:12;5403:34;5385:12;5403:34;5426:6;5403:10;:34:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5384:53;;;5459:7;5451:36;;;::::0;;-1:-1:-1;;;5451:36:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5451:36:1;;;;;;;;;;;;;::::1;;5336:246;;;;5518:53;-1:-1:-1::0;;;;;5518:33:1;::::1;5552:10;5564:6:::0;5518:33:::1;:53::i;:::-;4674:914:::0;;;;:::o;2000:240:11:-;1297:12;:10;:12::i;:::-;1287:6;;-1:-1:-1;;;;;1287:6:11;;;:22;;;1279:67;;;;;-1:-1:-1;;;1279:67:11;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1279:67:11;;;;;;;;;;;;;;;-1:-1:-1;;;;;2088:22:11;::::1;2080:73;;;;-1:-1:-1::0;;;2080:73:11::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2189:6;::::0;;2168:38:::1;::::0;-1:-1:-1;;;;;2168:38:11;;::::1;::::0;2189:6;::::1;::::0;2168:38:::1;::::0;::::1;2216:6;:17:::0;;-1:-1:-1;;;;;;2216:17:11::1;-1:-1:-1::0;;;;;2216:17:11;;;::::1;::::0;;;::::1;::::0;;2000:240::o;1796:138:1:-;1297:12:11;:10;:12::i;:::-;1287:6;;-1:-1:-1;;;;;1287:6:11;;;:22;;;1279:67;;;;;-1:-1:-1;;;1279:67:11;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1279:67:11;;;;;;;;;;;;;;;1878:14:1::1;:49:::0;;-1:-1:-1;;;;;;1878:49:1::1;-1:-1:-1::0;;;;;1878:49:1;;;::::1;::::0;;;::::1;::::0;;1796:138::o;6694:110::-;-1:-1:-1;;;;;6778:19:1;;;6694:110::o;882:176:12:-;940:7;971:5;;;994:6;;;;986:46;;;;;-1:-1:-1;;;986:46:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;1050:1;882:176;-1:-1:-1;;;882:176:12:o;885:203:15:-;1012:68;;;-1:-1:-1;;;;;1012:68:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1012:68:15;-1:-1:-1;;;1012:68:15;;;985:96;;1005:5;;985:19;:96::i;598:104:10:-;685:10;598:104;:::o;1329:134:12:-;1387:7;1413:43;1417:1;1420;1413:43;;;;;;;;;;;;;;;;;:3;:43::i;704:175:15:-;813:58;;;-1:-1:-1;;;;;813:58:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;813:58:15;-1:-1:-1;;;813:58:15;;;786:86;;806:5;;2967:751;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;-1:-1:-1;;;;;3412:27:15;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:15;3491:221;;3635:10;3624:30;;;;;;;;;;;;;;;-1:-1:-1;3624:30:15;3616:85;;;;-1:-1:-1;;;3616:85:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1754:187:12;1840:7;1875:12;1867:6;;;;1859:29;;;;-1:-1:-1;;;1859:29:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1910:5:12;;;1754:187::o;3581:193:16:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;:::-;3708:59;3581:193;-1:-1:-1;;;;3581:193:16:o;4608:523::-;4735:12;4792:5;4767:21;:30;;4759:81;;;;-1:-1:-1;;;4759:81:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;-1:-1:-1;;;4850:60:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;-1:-1:-1;;;;;5022:11:16;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5022:33:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:16:o;726:413::-;1086:20;1124:8;;;726:413::o;6111:725::-;6226:12;6254:7;6250:580;;;-1:-1:-1;6284:10:16;6277:17;;6250:580;6395:17;;:21;6391:429;;6653:10;6647:17;6713:15;6700:10;6696:2;6692:19;6685:44;6602:145;6785:20;;-1:-1:-1;;;6785:20:16;;;;;;;;;;;;;;;;;6792:12;;6785:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
"source": "// SPDX-License-Identifier: MIT\npragma solidity 0.6.12;\n\nimport \"./StorageManager.sol\";\nimport \"@openzepp