UNPKG

@ensuro/core

Version:

Ensuro - Decentralized insurance protocol

1,753 lines 134 kB
{ "_format": "hh-sol-artifact-1", "contractName": "PolicyPool", "sourceName": "contracts/PolicyPool.sol", "abi": [ { "inputs": [ { "internalType": "contract IAccessManager", "name": "access_", "type": "address" }, { "internalType": "contract IERC20Metadata", "name": "currency_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ComponentAlreadyInThePool", "type": "error" }, { "inputs": [ { "internalType": "enum PolicyPool.ComponentKind", "name": "kind", "type": "uint8" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ComponentInUseCannotRemove", "type": "error" }, { "inputs": [], "name": "ComponentMustBeActiveOrDeprecated", "type": "error" }, { "inputs": [], "name": "ComponentNotDeprecated", "type": "error" }, { "inputs": [], "name": "ComponentNotFound", "type": "error" }, { "inputs": [], "name": "ComponentNotFoundOrNotActive", "type": "error" }, { "inputs": [], "name": "ComponentNotLinkedToThisPool", "type": "error" }, { "inputs": [ { "internalType": "contract IPolicyPoolComponent", "name": "component", "type": "address" }, { "internalType": "enum PolicyPool.ComponentKind", "name": "expectedKind", "type": "uint8" } ], "name": "ComponentNotTheRightKind", "type": "error" }, { "inputs": [ { "internalType": "bytes4", "name": "response", "type": "bytes4" } ], "name": "InvalidNotificationResponse", "type": "error" }, { "inputs": [], "name": "NoEmptyName", "type": "error" }, { "inputs": [], "name": "NoEmptySymbol", "type": "error" }, { "inputs": [], "name": "NoZeroAccess", "type": "error" }, { "inputs": [], "name": "NoZeroCurrency", "type": "error" }, { "inputs": [], "name": "NoZeroTreasury", "type": "error" }, { "inputs": [], "name": "OnlyRiskModuleAllowed", "type": "error" }, { "inputs": [], "name": "UpgradeCannotChangeAccess", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "enum IAccessManager.GovernanceActions", "name": "action", "type": "uint8" }, { "indexed": false, "internalType": "address", "name": "value", "type": "address" } ], "name": "ComponentChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IPolicyPoolComponent", "name": "component", "type": "address" }, { "indexed": false, "internalType": "enum PolicyPool.ComponentKind", "name": "kind", "type": "uint8" }, { "indexed": false, "internalType": "enum PolicyPool.ComponentStatus", "name": "newStatus", "type": "uint8" } ], "name": "ComponentStatusChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "policyId", "type": "uint256" }, { "indexed": false, "internalType": "contract IPolicyHolder", "name": "holder", "type": "address" } ], "name": "ExpirationNotificationFailed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "indexed": false, "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" } ], "name": "NewPolicy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "oldPolicyId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "newPolicyId", "type": "uint256" } ], "name": "PolicyReplaced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "policyId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "payout", "type": "uint256" } ], "name": "PolicyResolved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "GUARDIAN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LEVEL1_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LEVEL2_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "access", "outputs": [ { "internalType": "contract IAccessManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IPolicyPoolComponent", "name": "component", "type": "address" }, { "internalType": "enum PolicyPool.ComponentKind", "name": "kind", "type": "uint8" } ], "name": "addComponent", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IPolicyPoolComponent", "name": "component", "type": "address" }, { "internalType": "enum PolicyPool.ComponentStatus", "name": "newStatus", "type": "uint8" } ], "name": "changeComponentStatus", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currency", "outputs": [ { "internalType": "contract IERC20Metadata", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IEToken", "name": "eToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData[]", "name": "policies", "type": "tuple[]" } ], "name": "expirePolicies", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" } ], "name": "expirePolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IPolicyPoolComponent", "name": "component", "type": "address" } ], "name": "getComponentStatus", "outputs": [ { "internalType": "enum PolicyPool.ComponentStatus", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "policyId", "type": "uint256" } ], "name": "getPolicyHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "address", "name": "treasury_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "policyId", "type": "uint256" } ], "name": "isActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IRiskModule", "name": "rm", "type": "address" }, { "internalType": "uint96", "name": "internalId", "type": "uint96" } ], "name": "makePolicyId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" }, { "internalType": "address", "name": "payer", "type": "address" }, { "internalType": "address", "name": "policyHolder", "type": "address" }, { "internalType": "uint96", "name": "internalId", "type": "uint96" } ], "name": "newPolicy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IPolicyPoolComponent", "name": "component", "type": "address" } ], "name": "removeComponent", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "oldPolicy", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "newPolicy_", "type": "tuple" }, { "internalType": "address", "name": "payer", "type": "address" }, { "internalType": "uint96", "name": "internalId", "type": "uint96" } ], "name": "replacePolicy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" }, { "internalType": "uint256", "name": "payout", "type": "uint256" } ], "name": "resolvePolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" }, { "internalType": "bool", "name": "customerWon", "type": "bool" } ], "name": "resolvePolicyFullPayout", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "nftBaseURI_", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "treasury_", "type": "address" } ], "name": "setTreasury", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "contract IEToken", "name": "eToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60e060405230608052348015610013575f5ffd5b50604051615c46380380615c4683398101604081905261003291610172565b6001600160a01b0382166100595760405163a9f283c960e01b815260040160405180910390fd5b6001600160a01b0381166100805760405163559a03cd60e01b815260040160405180910390fd5b61008861009f565b6001600160a01b0391821660a0521660c0526101aa565b5f54610100900460ff161561010a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610159575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461016f575f5ffd5b50565b5f5f60408385031215610183575f5ffd5b825161018e8161015b565b602084015190925061019f8161015b565b809150509250929050565b60805160a05160c0516159bc61028a5f395f8181610749015281816110c00152818161117401528181611228015281816114d001528181611542015281816115a301528181611dea01528181611e9301528181611f3a01528181611f7901526120a501525f81816105db015281816113ed0152818161182b0152818161191d01528181611a3301528181611acf015281816121b50152818161273701528181612d8c01528181612fcf015281816134fc015261358b01525f8181610bd001528181610c100152818161168e015281816116ce015261175b01526159bc5ff3fe608060405260043610610254575f3560e01c80636769a76f1161013f57806395d89b41116100b3578063e5a6b10f11610078578063e5a6b10f1461073b578063e985e9c51461076d578063f0f44260146107b5578063f3fef3a3146107d4578063f67b2bad146107f3578063ffa600e314610813575f5ffd5b806395d89b41146106ab578063a22cb465146106bf578063b88d4fde146106de578063c016f88a146106fd578063c87b56dd1461071c575f5ffd5b806371907f171161010457806371907f17146105cd578063792da09e146105ff5780637a702b3c1461062b57806382afd23b1461064a5780638456cb59146106785780638c916d461461068c575f5ffd5b80636769a76f146105325780636af6f1ef146105515780636b8734e7146105705780636f86c8971461058f57806370a08231146105ae575f5ffd5b80633f4ba83a116101d657806352d1902d1161019b57806352d1902d1461048c57806355f804b3146104a05780635c975abb146104bf5780635fcbf445146104d657806361d027b3146104f55780636352211e14610513575f5ffd5b80633f4ba83a146103f457806342842e0e1461040857806347e7ef24146104275780634a47a3e0146104465780634f1ef28614610479575f5ffd5b806323b872dd1161021c57806323b872dd1461032457806324ea54f41461034357806333d6157a146103715780633659cfe6146103b65780633ed7c1ae146103d5575f5ffd5b806301ffc9a71461025857806306fdde031461028c578063077f224a146102ad578063081812fc146102ce578063095ea7b314610305575b5f5ffd5b348015610263575f5ffd5b50610277610272366004614c32565b610832565b60405190151581526020015b60405180910390f35b348015610297575f5ffd5b506102a061085d565b6040516102839190614c7b565b3480156102b8575f5ffd5b506102cc6102c7366004614d70565b6108ed565b005b3480156102d9575f5ffd5b506102ed6102e8366004614de8565b610a5c565b6040516001600160a01b039091168152602001610283565b348015610310575f5ffd5b506102cc61031f366004614dff565b610a81565b34801561032f575f5ffd5b506102cc61033e366004614e29565b610b95565b34801561034e575f5ffd5b506103635f5160206159675f395f51905f5281565b604051908152602001610283565b34801561037c575f5ffd5b506103a961038b366004614e67565b6001600160a01b03165f90815261012e602052604090205460ff1690565b6040516102839190614eb2565b3480156103c1575f5ffd5b506102cc6103d0366004614e67565b610bc6565b3480156103e0575f5ffd5b506103636103ef366004614fc4565b610ca3565b3480156103ff575f5ffd5b506102cc6113c7565b348015610413575f5ffd5b506102cc610422366004614e29565b611482565b348015610432575f5ffd5b506102cc610441366004614dff565b61149c565b348015610451575f5ffd5b506103637fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102cc61048736600461501d565b611684565b348015610497575f5ffd5b5061036361174f565b3480156104ab575f5ffd5b506102cc6104ba36600461506a565b611800565b3480156104ca575f5ffd5b5060335460ff16610277565b3480156104e1575f5ffd5b506102cc6104f03660046150a8565b6118f7565b348015610500575f5ffd5b5061012d546001600160a01b03166102ed565b34801561051e575f5ffd5b506102ed61052d366004614de8565b611bd5565b34801561053d575f5ffd5b5061036361054c3660046150df565b611c34565b34801561055c575f5ffd5b506102cc61056b366004615145565b61211a565b34801561057b575f5ffd5b506102cc61058a3660046150a8565b61219d565b34801561059a575f5ffd5b506102cc6105a9366004614e67565b61271f565b3480156105b9575f5ffd5b506103636105c8366004614e67565b612ccf565b3480156105d8575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b34801561060a575f5ffd5b50610363610619366004614de8565b5f90815261012f602052604090205490565b348015610636575f5ffd5b506102cc610645366004615160565b612d53565b348015610655575f5ffd5b50610277610664366004614de8565b5f90815261012f6020526040902054151590565b348015610683575f5ffd5b506102cc612d74565b348015610697575f5ffd5b506102cc6106a636600461518b565b612e14565b3480156106b6575f5ffd5b506102a0612ed5565b3480156106ca575f5ffd5b506102cc6106d936600461520a565b612ee4565b3480156106e9575f5ffd5b506102cc6106f8366004615236565b612eef565b348015610708575f5ffd5b5061036361071736600461529e565b612f21565b348015610727575f5ffd5b506102a0610736366004614de8565b612f54565b348015610746575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b348015610778575f5ffd5b506102776107873660046152d1565b6001600160a01b039182165f9081526101006020908152604080832093909416825291909152205460ff1690565b3480156107c0575f5ffd5b506102cc6107cf366004614e67565b612fb7565b3480156107df575f5ffd5b506103636107ee366004614dff565b613058565b3480156107fe575f5ffd5b506103635f5160206159205f395f51905f5281565b34801561081e575f5ffd5b506102cc61082d3660046152fd565b6130ea565b5f61083c8261311b565b8061085757506001600160e01b0319821663019c676f60e31b145b92915050565b606060fb805461086c9061532a565b80601f01602080910402602001604051908101604052809291908181526020018280546108989061532a565b80156108e35780601f106108ba576101008083540402835291602001916108e3565b820191905f5260205f20905b8154815290600101906020018083116108c657829003601f168201915b5050505050905090565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156109ad575f805461ff0019166101001790555b83515f036109cd57604051620beefb60e01b815260040160405180910390fd5b82515f036109ee576040516343b47bcb60e01b815260040160405180910390fd5b6109f661316a565b610a008484613192565b610a086131c2565b610a11826131f0565b8015610a56575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f610a668261321f565b505f90815260ff60205260409020546001600160a01b031690565b5f610a8b82611bd5565b9050806001600160a01b0316836001600160a01b031603610af85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610983565b336001600160a01b0382161480610b145750610b148133610787565b610b865760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610983565b610b90838361327d565b505050565b610b9f33826132ea565b610bbb5760405162461bcd60e51b81526004016109839061535c565b610b90838383613367565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c0e5760405162461bcd60e51b8152600401610983906153a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c565f5160206159005f395f51905f52546001600160a01b031690565b6001600160a01b031614610c7c5760405162461bcd60e51b8152600401610983906153f5565b610c85816134d6565b604080515f80825260208201909252610ca09183919061363a565b50565b5f610cac6137a4565b610cb5856137ea565b6101608501516001600160a01b0381163314610ce457604051634ace04f960e01b815260040160405180910390fd5b610cef816002613850565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190615441565b9050610d5d816003613850565b4264ffffffffff16876101a0015164ffffffffff1611610db75760405162461bcd60e51b815260206004820152601560248201527413db19081c1bdb1a58de481a5cc8195e1c1a5c9959605a1b6044820152606401610983565b85610180015164ffffffffff1687610180015164ffffffffff1614610e355760405162461bcd60e51b815260206004820152602e60248201527f426f746820706f6c6963696573206d7573742068617665207468652073616d6560448201526d207374617274696e67206461746560901b6064820152608401610983565b8560200151876020015111158015610e5557508560c001518760c0015111155b8015610e6957508560e001518760e0015111155b8015610e7f575085610120015187610120015111155b8015610e95575085610140015187610140015111155b8015610ea957508560600151876060015111155b8015610ebd57508560800151876080015111155b8015610ed3575085610100015187610100015111155b8015610ef75750856101a0015164ffffffffff16876101a0015164ffffffffff1611155b8015610f1957508561016001516001600160a01b0316826001600160a01b0316145b610f815760405162461bcd60e51b815260206004820152603360248201527f4e657720706f6c696379206d7573742062652067726561746572206f7220657160448201527275616c207468616e206f6c6420706f6c69637960681b6064820152608401610983565b610f8b8285612f21565b8087525f90815261012f602052604090205415610fe25760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b610feb8661388b565b86515f90815261012f6020526040812091909155875161100a90611bd5565b9050