{"abi": [{"inputs": [{"internalType": "address", "name": "ogv_", "type": "address"}, {"internalType": "uint256", "name": "epoch_", "type": "uint256"}, {"internalType": "uint256", "name": "minStakeDuration_", "type": "uint256"}, {"internalType": "address", "name": "rewardsSource_", "type": "address"}], "stateMutability": "nonpayable", "type": "constructor", "name": "constructor"}, {"inputs": [{"internalType": "uint256", "name": "x", "type": "uint256"}], "name": "PRBMathUD60x18__Exp2InputTooBig", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "x", "type": "uint256"}], "name": "PRBMathUD60x18__LogInputTooSmall", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "prod1", "type": "uint256"}], "name": "PRBMath__MulDivFixedPointOverflow", "type": "error"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "owner", "type": "address"}, {"indexed": true, "internalType": "address", "name": "spender", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "value", "type": "uint256"}], "name": "Approval", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "delegator", "type": "address"}, {"indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address"}, {"indexed": true, "internalType": "address", "name": "toDelegate", "type": "address"}], "name": "DelegateChanged", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "delegate", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "previousBalance", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256"}], "name": "DelegateVotesChanged", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "user", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "Reward", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "user", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "lockupId", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "end", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "points", "type": "uint256"}], "name": "Stake", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "from", "type": "address"}, {"indexed": true, "internalType": "address", "name": "to", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "value", "type": "uint256"}], "name": "Transfer", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "user", "type": "address"}, {"indexed": false, "internalType": "uint256", "name": "lockupId", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "end", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "points", "type": "uint256"}], "name": "Unstake", "type": "event"}, {"inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "accRewardPerShare", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "owner", "type": "address"}, {"internalType": "address", "name": "spender", "type": "address"}], "name": "allowance", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "spender", "type": "address"}, {"internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "approve", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}], "name": "balanceOf", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}, {"internalType": "uint32", "name": "pos", "type": "uint32"}], "name": "checkpoints", "outputs": [{"components": [{"internalType": "uint32", "name": "fromBlock", "type": "uint32"}, {"internalType": "uint224", "name": "votes", "type": "uint224"}], "internalType": "struct ERC20Votes.Checkpoint", "name": "", "type": "tuple"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "collectRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [], "name": "decimals", "outputs": [{"internalType": "uint8", "name": "", "type": "uint8"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "spender", "type": "address"}, {"internalType": "uint256", "name": "subtractedValue", "type": "uint256"}], "name": "decreaseAllowance", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "delegatee", "type": "address"}], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "delegatee", "type": "address"}, {"internalType": "uint256", "name": "nonce", "type": "uint256"}, {"internalType": "uint256", "name": "expiry", "type": "uint256"}, {"internalType": "uint8", "name": "v", "type": "uint8"}, {"internalType": "bytes32", "name": "r", "type": "bytes32"}, {"internalType": "bytes32", "name": "s", "type": "bytes32"}], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}], "name": "delegates", "outputs": [{"internalType": "address", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "epoch", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "lockupId", "type": "uint256"}, {"internalType": "uint256", "name": "duration", "type": "uint256"}], "name": "extend", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "blockNumber", "type": "uint256"}], "name": "getPastTotalSupply", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}, {"internalType": "uint256", "name": "blockNumber", "type": "uint256"}], "name": "getPastVotes", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}], "name": "getVotes", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}], "name": "hasDelegationSet", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "spender", "type": "address"}, {"internalType": "uint256", "name": "addedValue", "type": "uint256"}], "name": "increaseAllowance", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}, {"internalType": "uint256", "name": "", "type": "uint256"}], "name": "lockups", "outputs": [{"internalType": "uint128", "name": "amount", "type": "uint128"}, {"internalType": "uint128", "name": "end", "type": "uint128"}, {"internalType": "uint256", "name": "points", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "minStakeDuration", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "name", "outputs": [{"internalType": "string", "name": "", "type": "string"}], "stateMutability": "pure", "type": "function"}, {"inputs": [{"internalType": "address", "name": "owner", "type": "address"}], "name": "nonces", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "account", "type": "address"}], "name": "numCheckpoints", "outputs": [{"internalType": "uint32", "name": "", "type": "uint32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "ogv", "outputs": [{"internalType": "contract ERC20", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "owner", "type": "address"}, {"internalType": "address", "name": "spender", "type": "address"}, {"internalType": "uint256", "name": "value", "type": "uint256"}, {"internalType": "uint256", "name": "deadline", "type": "uint256"}, {"internalType": "uint8", "name": "v", "type": "uint8"}, {"internalType": "bytes32", "name": "r", "type": "bytes32"}, {"internalType": "bytes32", "name": "s", "type": "bytes32"}], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}, {"internalType": "uint256", "name": "duration", "type": "uint256"}], "name": "previewPoints", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}, {"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "user", "type": "address"}], "name": "previewRewards", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}], "name": "rewardDebtPerShare", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "rewardsSource", "outputs": [{"internalType": "contract RewardsSource", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}, {"internalType": "uint256", "name": "duration", "type": "uint256"}, {"internalType": "address", "name": "to", "type": "address"}], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}, {"internalType": "uint256", "name": "duration", "type": "uint256"}], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [], "name": "symbol", "outputs": [{"internalType": "string", "name": "", "type": "string"}], "stateMutability": "pure", "type": "function"}, {"inputs": [], "name": "totalSupply", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}, {"internalType": "uint256", "name": "", "type": "uint256"}], "name": "transfer", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}, {"internalType": "address", "name": "", "type": "address"}, {"internalType": "uint256", "name": "", "type": "uint256"}], "name": "transferFrom", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "lockupId", "type": "uint256"}], "name": "unstake", "outputs": [], "stateMutability": "nonpayable", "type": "function"}], "allSourcePaths": {"0": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/governance/utils/IVotes.sol", "1": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/ERC20.sol", "11": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/utils/cryptography/draft-EIP712.sol", "14": "/Users/domen-privat/.brownie/packages/paulrberg/prb-math@2.5.0/contracts/PRBMath.sol", "15": "/Users/domen-privat/.brownie/packages/paulrberg/prb-math@2.5.0/contracts/PRBMathUD60x18.sol", "17": "contracts/OgvStaking.sol", "18": "contracts/RewardsSource.sol", "2": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/IERC20.sol", "3": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/ERC20Votes.sol", "4": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/IERC20Metadata.sol", "5": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-ERC20Permit.sol", "6": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-IERC20Permit.sol", "7": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/utils/Context.sol"}, "ast": {"absolutePath": "contracts/OgvStaking.sol", "exportedSymbols": {"ERC20": [1420], "ERC20Permit": [2229], "ERC20Votes": [2057], "OgvStaking": [806], "PRBMathUD60x18": [2839], "RewardsSource": [3353]}, "id": 807, "license": "MIT", "nodeType": "SourceUnit", "nodes": [{"id": 1, "literals": ["solidity", "0.8", ".10"], "nodeType": "PragmaDirective", "src": "32:23:17"}, {"absolutePath": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/ERC20Votes.sol", "file": "OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/ERC20Votes.sol", "id": 3, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 2058, "src": "56:117:17", "symbolAliases": [{"foreign": {"id": 2, "name": "ERC20Votes", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "64:10:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"absolutePath": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-ERC20Permit.sol", "file": "OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-ERC20Permit.sol", "id": 5, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 2230, "src": "174:125:17", "symbolAliases": [{"foreign": {"id": 4, "name": "ERC20Permit", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "182:11:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"absolutePath": "/Users/domen-privat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/ERC20.sol", "file": "OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/ERC20.sol", "id": 7, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 1421, "src": "300:96:17", "symbolAliases": [{"foreign": {"id": 6, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "308:5:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"absolutePath": "/Users/domen-privat/.brownie/packages/paulrberg/prb-math@2.5.0/contracts/PRBMathUD60x18.sol", "file": "paulrberg/prb-math@2.5.0/contracts/PRBMathUD60x18.sol", "id": 9, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 2840, "src": "397:85:17", "symbolAliases": [{"foreign": {"id": 8, "name": "PRBMathUD60x18", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "405:14:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"absolutePath": "contracts/RewardsSource.sol", "file": "./RewardsSource.sol", "id": 11, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 807, "sourceUnit": 3354, "src": "483:50:17", "symbolAliases": [{"foreign": {"id": 10, "name": "RewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "src": "491:13:17", "typeDescriptions": {}}, "nameLocation": "-1:-1:-1"}], "unitAlias": ""}, {"abstract": false, "baseContracts": [{"baseName": {"id": 13, "name": "ERC20Votes", "nodeType": "IdentifierPath", "referencedDeclaration": 2057, "src": "860:10:17"}, "id": 14, "nodeType": "InheritanceSpecifier", "src": "860:10:17"}], "canonicalName": "OgvStaking", "contractDependencies": [], "contractKind": "contract", "documentation": {"id": 12, "nodeType": "StructuredDocumentation", "src": "535:302:17", "text": "@title OGV Staking\n @author Daniel Von Fange\n @notice Provides staking, vote power history, vote delegation, and rewards\n distribution.\n The balance received for staking (and thus the voting power and rewards\n distribution) goes up exponentially by the end of the staked period."}, "fullyImplemented": true, "id": 806, "linearizedBaseContracts": [806, 2057, 2229, 4708, 4480, 1420, 3456, 3431, 3478, 3556], "name": "OgvStaking", "nameLocation": "846:10:17", "nodeType": "ContractDefinition", "nodes": [{"constant": false, "functionSelector": "900cf0cf", "id": 16, "mutability": "immutable", "name": "epoch", "nameLocation": "925:5:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "900:30:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 15, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "900:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "public"}, {"constant": false, "functionSelector": "5fec5c64", "id": 18, "mutability": "immutable", "name": "minStakeDuration", "nameLocation": "974:16:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "949:41:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 17, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "949:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "public"}, {"constant": true, "id": 21, "mutability": "constant", "name": "YEAR_BASE", "nameLocation": "1065:9:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1048:34:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 19, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1048:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "value": {"hexValue": "3138653137", "id": 20, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1077:5:17", "typeDescriptions": {"typeIdentifier": "t_rational_1800000000000000000_by_1", "typeString": "int_const 1800000000000000000"}, "value": "18e17"}, "visibility": "internal"}, {"canonicalName": "OgvStaking.Lockup", "id": 28, "members": [{"constant": false, "id": 23, "mutability": "mutable", "name": "amount", "nameLocation": "1120:6:17", "nodeType": "VariableDeclaration", "scope": 28, "src": "1112:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}, "typeName": {"id": 22, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "1112:7:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "visibility": "internal"}, {"constant": false, "id": 25, "mutability": "mutable", "name": "end", "nameLocation": "1144:3:17", "nodeType": "VariableDeclaration", "scope": 28, "src": "1136:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}, "typeName": {"id": 24, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "1136:7:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "visibility": "internal"}, {"constant": false, "id": 27, "mutability": "mutable", "name": "points", "nameLocation": "1165:6:17", "nodeType": "VariableDeclaration", "scope": 28, "src": "1157:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 26, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1157:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "name": "Lockup", "nameLocation": "1095:6:17", "nodeType": "StructDefinition", "scope": 806, "src": "1088:90:17", "visibility": "public"}, {"constant": false, "functionSelector": "c93d0b1e", "id": 34, "mutability": "mutable", "name": "lockups", "nameLocation": "1219:7:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1183:43:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup[])"}, "typeName": {"id": 33, "keyType": {"id": 29, "name": "address", "nodeType": "ElementaryTypeName", "src": "1191:7:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "Mapping", "src": "1183:28:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup[])"}, "valueType": {"baseType": {"id": 31, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 30, "name": "Lockup", "nodeType": "IdentifierPath", "referencedDeclaration": 28, "src": "1202:6:17"}, "referencedDeclaration": 28, "src": "1202:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage_ptr", "typeString": "struct OgvStaking.Lockup"}}, "id": 32, "nodeType": "ArrayTypeName", "src": "1202:8:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_ptr", "typeString": "struct OgvStaking.Lockup[]"}}}, "visibility": "public"}, {"constant": false, "functionSelector": "142561cf", "id": 37, "mutability": "immutable", "name": "ogv", "nameLocation": "1281:3:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1258:26:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}, "typeName": {"id": 36, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 35, "name": "ERC20", "nodeType": "IdentifierPath", "referencedDeclaration": 1420, "src": "1258:5:17"}, "referencedDeclaration": 1420, "src": "1258:5:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}}, "visibility": "public"}, {"constant": false, "functionSelector": "f7240d2f", "id": 40, "mutability": "immutable", "name": "rewardsSource", "nameLocation": "1350:13:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1319:44:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3353", "typeString": "contract RewardsSource"}, "typeName": {"id": 39, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 38, "name": "RewardsSource", "nodeType": "IdentifierPath", "referencedDeclaration": 3353, "src": "1319:13:17"}, "referencedDeclaration": 3353, "src": "1319:13:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3353", "typeString": "contract RewardsSource"}}, "visibility": "public"}, {"constant": false, "functionSelector": "4423bf57", "id": 44, "mutability": "mutable", "name": "rewardDebtPerShare", "nameLocation": "1404:18:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1369:53:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}, "typeName": {"id": 43, "keyType": {"id": 41, "name": "address", "nodeType": "ElementaryTypeName", "src": "1377:7:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "Mapping", "src": "1369:27:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}, "valueType": {"id": 42, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1388:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}}, "visibility": "public"}, {"constant": false, "functionSelector": "939d6237", "id": 46, "mutability": "mutable", "name": "accRewardPerShare", "nameLocation": "1443:17:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1428:32:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 45, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1428:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "public"}, {"constant": false, "functionSelector": "0348dbf1", "id": 50, "mutability": "mutable", "name": "hasDelegationSet", "nameLocation": "1860:16:17", "nodeType": "VariableDeclaration", "scope": 806, "src": "1828:48:17", "stateVariable": true, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}, "typeName": {"id": 49, "keyType": {"id": 47, "name": "address", "nodeType": "ElementaryTypeName", "src": "1836:7:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "Mapping", "src": "1828:24:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}, "valueType": {"id": 48, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1847:4:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}}, "visibility": "public"}, {"anonymous": false, "id": 62, "name": "Stake", "nameLocation": "1903:5:17", "nodeType": "EventDefinition", "parameters": {"id": 61, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 52, "indexed": true, "mutability": "mutable", "name": "user", "nameLocation": "1934:4:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "1918:20:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 51, "name": "address", "nodeType": "ElementaryTypeName", "src": "1918:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 54, "indexed": false, "mutability": "mutable", "name": "lockupId", "nameLocation": "1956:8:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "1948:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 53, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1948:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 56, "indexed": false, "mutability": "mutable", "name": "amount", "nameLocation": "1982:6:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "1974:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 55, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1974:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 58, "indexed": false, "mutability": "mutable", "name": "end", "nameLocation": "2006:3:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "1998:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 57, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1998:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 60, "indexed": false, "mutability": "mutable", "name": "points", "nameLocation": "2027:6:17", "nodeType": "VariableDeclaration", "scope": 62, "src": "2019:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 59, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2019:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "1908:131:17"}, "src": "1897:143:17"}, {"anonymous": false, "id": 74, "name": "Unstake", "nameLocation": "2051:7:17", "nodeType": "EventDefinition", "parameters": {"id": 73, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 64, "indexed": true, "mutability": "mutable", "name": "user", "nameLocation": "2084:4:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2068:20:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 63, "name": "address", "nodeType": "ElementaryTypeName", "src": "2068:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 66, "indexed": false, "mutability": "mutable", "name": "lockupId", "nameLocation": "2106:8:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2098:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 65, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2098:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 68, "indexed": false, "mutability": "mutable", "name": "amount", "nameLocation": "2132:6:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2124:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 67, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2124:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 70, "indexed": false, "mutability": "mutable", "name": "end", "nameLocation": "2156:3:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2148:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 69, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2148:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 72, "indexed": false, "mutability": "mutable", "name": "points", "nameLocation": "2177:6:17", "nodeType": "VariableDeclaration", "scope": 74, "src": "2169:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 71, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2169:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "2058:131:17"}, "src": "2045:145:17"}, {"anonymous": false, "id": 80, "name": "Reward", "nameLocation": "2201:6:17", "nodeType": "EventDefinition", "parameters": {"id": 79, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 76, "indexed": true, "mutability": "mutable", "name": "user", "nameLocation": "2224:4:17", "nodeType": "VariableDeclaration", "scope": 80, "src": "2208:20:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 75, "name": "address", "nodeType": "ElementaryTypeName", "src": "2208:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 78, "indexed": false, "mutability": "mutable", "name": "amount", "nameLocation": "2238:6:17", "nodeType": "VariableDeclaration", "scope": 80, "src": "2230:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 77, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2230:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "2207:38:17"}, "src": "2195:51:17"}, {"body": {"id": 118, "nodeType": "Block", "src": "2444:159:17", "statements": [{"expression": {"id": 102, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 98, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "2454:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"arguments": [{"id": 100, "name": "ogv_", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 82, "src": "2466:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 99, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1420, "src": "2460:5:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_contract$_ERC20_$1420_$", "typeString": "type(contract ERC20)"}}, "id": 101, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2460:11:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}}, "src": "2454:17:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}}, "id": 103, "nodeType": "ExpressionStatement", "src": "2454:17:17"}, {"expression": {"id": 106, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 104, "name": "epoch", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 16, "src": "2481:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 105, "name": "epoch_", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 84, "src": "2489:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "2481:14:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 107, "nodeType": "ExpressionStatement", "src": "2481:14:17"}, {"expression": {"id": 110, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 108, "name": "minStakeDuration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 18, "src": "2505:16:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 109, "name": "minStakeDuration_", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 86, "src": "2524:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "2505:36:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 111, "nodeType": "ExpressionStatement", "src": "2505:36:17"}, {"expression": {"id": 116, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 112, "name": "rewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 40, "src": "2551:13:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3353", "typeString": "contract RewardsSource"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"arguments": [{"id": 114, "name": "rewardsSource_", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 88, "src": "2581:14:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 113, "name": "RewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3353, "src": "2567:13:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_contract$_RewardsSource_$3353_$", "typeString": "type(contract RewardsSource)"}}, "id": 115, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2567:29:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3353", "typeString": "contract RewardsSource"}}, "src": "2551:45:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3353", "typeString": "contract RewardsSource"}}, "id": 117, "nodeType": "ExpressionStatement", "src": "2551:45:17"}]}, "id": 119, "implemented": true, "kind": "constructor", "modifiers": [{"arguments": [{"hexValue": "", "id": 91, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2415:2:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "typeString": "literal_string \"\""}, "value": ""}, {"hexValue": "", "id": 92, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2419:2:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "typeString": "literal_string \"\""}, "value": ""}], "id": 93, "kind": "baseConstructorSpecifier", "modifierName": {"id": 90, "name": "ERC20", "nodeType": "IdentifierPath", "referencedDeclaration": 1420, "src": "2409:5:17"}, "nodeType": "ModifierInvocation", "src": "2409:13:17"}, {"arguments": [{"hexValue": "76654f4756", "id": 95, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2435:7:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_4b159c4a905f2022b9e1f6b831656ce74997c155de726499d27a28637823c6fe", "typeString": "literal_string \"veOGV\""}, "value": "veOGV"}], "id": 96, "kind": "baseConstructorSpecifier", "modifierName": {"id": 94, "name": "ERC20Permit", "nodeType": "IdentifierPath", "referencedDeclaration": 2229, "src": "2423:11:17"}, "nodeType": "ModifierInvocation", "src": "2423:20:17"}], "name": "", "nameLocation": "-1:-1:-1", "nodeType": "FunctionDefinition", "parameters": {"id": 89, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 82, "mutability": "mutable", "name": "ogv_", "nameLocation": "2307:4:17", "nodeType": "VariableDeclaration", "scope": 119, "src": "2299:12:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 81, "name": "address", "nodeType": "ElementaryTypeName", "src": "2299:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 84, "mutability": "mutable", "name": "epoch_", "nameLocation": "2329:6:17", "nodeType": "VariableDeclaration", "scope": 119, "src": "2321:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 83, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2321:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 86, "mutability": "mutable", "name": "minStakeDuration_", "nameLocation": "2353:17:17", "nodeType": "VariableDeclaration", "scope": 119, "src": "2345:25:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 85, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2345:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 88, "mutability": "mutable", "name": "rewardsSource_", "nameLocation": "2388:14:17", "nodeType": "VariableDeclaration", "scope": 119, "src": "2380:22:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 87, "name": "address", "nodeType": "ElementaryTypeName", "src": "2380:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "2289:119:17"}, "returnParameters": {"id": 97, "nodeType": "ParameterList", "parameters": [], "src": "2444:0:17"}, "scope": 806, "src": "2278:325:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"baseFunctions": [889], "body": {"id": 127, "nodeType": "Block", "src": "2670:64:17", "statements": [{"expression": {"hexValue": "566f746520457363726f776564204f726967696e20446f6c6c617220476f7665726e616e6365", "id": 125, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2687:40:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_67fa42e88656fb46d3e7cda0c323b602904e21a87089e889263d77269a192185", "typeString": "literal_string \"Vote Escrowed Origin Dollar Governance\""}, "value": "Vote Escrowed Origin Dollar Governance"}, "functionReturnParameters": 124, "id": 126, "nodeType": "Return", "src": "2680:47:17"}]}, "functionSelector": "06fdde03", "id": 128, "implemented": true, "kind": "function", "modifiers": [], "name": "name", "nameLocation": "2618:4:17", "nodeType": "FunctionDefinition", "overrides": {"id": 121, "nodeType": "OverrideSpecifier", "overrides": [], "src": "2637:8:17"}, "parameters": {"id": 120, "nodeType": "ParameterList", "parameters": [], "src": "2622:2:17"}, "returnParameters": {"id": 124, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 123, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 128, "src": "2655:13:17", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": {"typeIdentifier": "t_string_memory_ptr", "typeString": "string"}, "typeName": {"id": 122, "name": "string", "nodeType": "ElementaryTypeName", "src": "2655:6:17", "typeDescriptions": {"typeIdentifier": "t_string_storage_ptr", "typeString": "string"}}, "visibility": "internal"}], "src": "2654:15:17"}, "scope": 806, "src": "2609:125:17", "stateMutability": "pure", "virtual": false, "visibility": "public"}, {"baseFunctions": [899], "body": {"id": 136, "nodeType": "Block", "src": "2803:31:17", "statements": [{"expression": {"hexValue": "76654f4756", "id": 134, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2820:7:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_4b159c4a905f2022b9e1f6b831656ce74997c155de726499d27a28637823c6fe", "typeString": "literal_string \"veOGV\""}, "value": "veOGV"}, "functionReturnParameters": 133, "id": 135, "nodeType": "Return", "src": "2813:14:17"}]}, "functionSelector": "95d89b41", "id": 137, "implemented": true, "kind": "function", "modifiers": [], "name": "symbol", "nameLocation": "2749:6:17", "nodeType": "FunctionDefinition", "overrides": {"id": 130, "nodeType": "OverrideSpecifier", "overrides": [], "src": "2770:8:17"}, "parameters": {"id": 129, "nodeType": "ParameterList", "parameters": [], "src": "2755:2:17"}, "returnParameters": {"id": 133, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 132, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 137, "src": "2788:13:17", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": {"typeIdentifier": "t_string_memory_ptr", "typeString": "string"}, "typeName": {"id": 131, "name": "string", "nodeType": "ElementaryTypeName", "src": "2788:6:17", "typeDescriptions": {"typeIdentifier": "t_string_storage_ptr", "typeString": "string"}}, "visibility": "internal"}], "src": "2787:15:17"}, "scope": 806, "src": "2740:94:17", "stateMutability": "pure", "virtual": false, "visibility": "public"}, {"baseFunctions": [958], "body": {"id": 151, "nodeType": "Block", "src": "2907:54:17", "statements": [{"expression": {"arguments": [{"hexValue": "5374616b696e673a205472616e73666572732064697361626c6564", "id": 148, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2924:29:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_273700fd328f15da228f1d74942920aea785e0b73aa9dee61942ef8c96ed037f", "typeString": "literal_string \"Staking: Transfers disabled\""}, "value": "Staking: Transfers disabled"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_stringliteral_273700fd328f15da228f1d74942920aea785e0b73aa9dee61942ef8c96ed037f", "typeString": "literal_string \"Staking: Transfers disabled\""}], "id": 147, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [-19, -19], "referencedDeclaration": -19, "src": "2917:6:17", "typeDescriptions": {"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure"}}, "id": 149, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2917:37:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 150, "nodeType": "ExpressionStatement", "src": "2917:37:17"}]}, "functionSelector": "a9059cbb", "id": 152, "implemented": true, "kind": "function", "modifiers": [], "name": "transfer", "nameLocation": "2849:8:17", "nodeType": "FunctionDefinition", "overrides": {"id": 143, "nodeType": "OverrideSpecifier", "overrides": [], "src": "2883:8:17"}, "parameters": {"id": 142, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 139, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 152, "src": "2858:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 138, "name": "address", "nodeType": "ElementaryTypeName", "src": "2858:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 141, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 152, "src": "2867:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 140, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2867:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "2857:18:17"}, "returnParameters": {"id": 146, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 145, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 152, "src": "2901:4:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}, "typeName": {"id": 144, "name": "bool", "nodeType": "ElementaryTypeName", "src": "2901:4:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "visibility": "internal"}], "src": "2900:6:17"}, "scope": 806, "src": "2840:121:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"baseFunctions": [1034], "body": {"id": 168, "nodeType": "Block", "src": "3077:54:17", "statements": [{"expression": {"arguments": [{"hexValue": "5374616b696e673a205472616e73666572732064697361626c6564", "id": 165, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "3094:29:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_273700fd328f15da228f1d74942920aea785e0b73aa9dee61942ef8c96ed037f", "typeString": "literal_string \"Staking: Transfers disabled\""}, "value": "Staking: Transfers disabled"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_stringliteral_273700fd328f15da228f1d74942920aea785e0b73aa9dee61942ef8c96ed037f", "typeString": "literal_string \"Staking: Transfers disabled\""}], "id": 164, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [-19, -19], "referencedDeclaration": -19, "src": "3087:6:17", "typeDescriptions": {"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure"}}, "id": 166, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3087:37:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 167, "nodeType": "ExpressionStatement", "src": "3087:37:17"}]}, "functionSelector": "23b872dd", "id": 169, "implemented": true, "kind": "function", "modifiers": [], "name": "transferFrom", "nameLocation": "2976:12:17", "nodeType": "FunctionDefinition", "overrides": {"id": 160, "nodeType": "OverrideSpecifier", "overrides": [], "src": "3053:8:17"}, "parameters": {"id": 159, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 154, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 169, "src": "2998:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 153, "name": "address", "nodeType": "ElementaryTypeName", "src": "2998:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 156, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 169, "src": "3015:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 155, "name": "address", "nodeType": "ElementaryTypeName", "src": "3015:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 158, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 169, "src": "3032:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 157, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3032:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "2988:57:17"}, "returnParameters": {"id": 163, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 162, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 169, "src": "3071:4:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}, "typeName": {"id": 161, "name": "bool", "nodeType": "ElementaryTypeName", "src": "3071:4:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "visibility": "internal"}], "src": "3070:6:17"}, "scope": 806, "src": "2967:164:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "public"}, {"body": {"id": 185, "nodeType": "Block", "src": "3847:45:17", "statements": [{"expression": {"arguments": [{"id": 180, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 172, "src": "3864:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 181, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 174, "src": "3872:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 182, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 176, "src": "3882:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 179, "name": "_stake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 335, "src": "3857:6:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$", "typeString": "function (uint256,uint256,address)"}}, "id": 183, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3857:28:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 184, "nodeType": "ExpressionStatement", "src": "3857:28:17"}]}, "documentation": {"id": 170, "nodeType": "StructuredDocumentation", "src": "3177:565:17", "text": "@notice Stake OGV to an address that may not be the same as the\n sender of the funds. This can be used to give staked funds to someone\n else.\n If staking before the start of staking (epoch), then the lockup start\n and end dates are shifted forward so that the lockup starts at the\n epoch.\n Any rewards previously earned will be paid out.\n @param amount OGV to lockup in the stake\n @param duration in seconds for the stake\n @param to address to receive ownership of the stake"}, "functionSelector": "7628a37d", "id": 186, "implemented": true, "kind": "function", "modifiers": [], "name": "stake", "nameLocation": "3756:5:17", "nodeType": "FunctionDefinition", "parameters": {"id": 177, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 172, "mutability": "mutable", "name": "amount", "nameLocation": "3779:6:17", "nodeType": "VariableDeclaration", "scope": 186, "src": "3771:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 171, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3771:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 174, "mutability": "mutable", "name": "duration", "nameLocation": "3803:8:17", "nodeType": "VariableDeclaration", "scope": 186, "src": "3795:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 173, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3795:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 176, "mutability": "mutable", "name": "to", "nameLocation": "3829:2:17", "nodeType": "VariableDeclaration", "scope": 186, "src": "3821:10:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 175, "name": "address", "nodeType": "ElementaryTypeName", "src": "3821:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "3761:76:17"}, "returnParameters": {"id": 178, "nodeType": "ParameterList", "parameters": [], "src": "3847:0:17"}, "scope": 806, "src": "3747:145:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 201, "nodeType": "Block", "src": "4366:53:17", "statements": [{"expression": {"arguments": [{"id": 195, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 189, "src": "4383:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 196, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 191, "src": "4391:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"expression": {"id": 197, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "4401:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 198, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "4401:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 194, "name": "_stake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 335, "src": "4376:6:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$", "typeString": "function (uint256,uint256,address)"}}, "id": 199, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4376:36:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 200, "nodeType": "ExpressionStatement", "src": "4376:36:17"}]}, "documentation": {"id": 187, "nodeType": "StructuredDocumentation", "src": "3898:405:17", "text": "@notice Stake OGV\n If staking before the start of staking (epoch), then the lockup start\n and end dates are shifted forward so that the lockup starts at the\n epoch.\n Any rewards previously earned will be paid out.\n @notice Stake OGV for myself.\n @param amount OGV to lockup in the stake\n @param duration in seconds for the stake"}, "functionSelector": "7b0472f0", "id": 202, "implemented": true, "kind": "function", "modifiers": [], "name": "stake", "nameLocation": "4317:5:17", "nodeType": "FunctionDefinition", "parameters": {"id": 192, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 189, "mutability": "mutable", "name": "amount", "nameLocation": "4331:6:17", "nodeType": "VariableDeclaration", "scope": 202, "src": "4323:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 188, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4323:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 191, "mutability": "mutable", "name": "duration", "nameLocation": "4347:8:17", "nodeType": "VariableDeclaration", "scope": 202, "src": "4339:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 190, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4339:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "4322:34:17"}, "returnParameters": {"id": 193, "nodeType": "ParameterList", "parameters": [], "src": "4366:0:17"}, "scope": 806, "src": "4308:111:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 334, "nodeType": "Block", "src": "4737:1053:17", "statements": [{"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_address", "typeString": "address"}, "id": 218, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 213, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "4755:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": {"arguments": [{"hexValue": "30", "id": 216, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4769:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}], "id": 215, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "4761:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 214, "name": "address", "nodeType": "ElementaryTypeName", "src": "4761:7:17", "typeDescriptions": {}}}, "id": 217, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4761:10:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "src": "4755:16:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20546f20746865207a65726f2061646472657373", "id": 219, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4773:30:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_3722f569c9d712bdfa9855535a99e24879d58f8c46ac4bec4b08f4dafde64f70", "typeString": "literal_string \"Staking: To the zero address\""}, "value": "Staking: To the zero address"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_3722f569c9d712bdfa9855535a99e24879d58f8c46ac4bec4b08f4dafde64f70", "typeString": "literal_string \"Staking: To the zero address\""}], "id": 212, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "4747:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 220, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4747:57:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 221, "nodeType": "ExpressionStatement", "src": "4747:57:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 229, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 223, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "4822:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "<=", "rightExpression": {"expression": {"arguments": [{"id": 226, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "4837:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}, "typeName": {"id": 225, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "4837:7:17", "typeDescriptions": {}}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}], "id": 224, "name": "type", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -27, "src": "4832:4:17", "typeDescriptions": {"typeIdentifier": "t_function_metatype_pure$__$returns$__$", "typeString": "function () pure"}}, "id": 227, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4832:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_magic_meta_type_t_uint128", "typeString": "type(uint128)"}}, "id": 228, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "max", "nodeType": "MemberAccess", "src": "4832:17:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "src": "4822:27:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20546f6f206d756368", "id": 230, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4851:19:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_fd107e9166f5f2d80f8937d89e1acb9b493c8f956a7362bf3c829b67a4332250", "typeString": "literal_string \"Staking: Too much\""}, "value": "Staking: Too much"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_fd107e9166f5f2d80f8937d89e1acb9b493c8f956a7362bf3c829b67a4332250", "typeString": "literal_string \"Staking: Too much\""}], "id": 222, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "4814:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 231, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4814:57:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 232, "nodeType": "ExpressionStatement", "src": "4814:57:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 236, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 234, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "4889:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": {"hexValue": "30", "id": 235, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4898:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "4889:10:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a204e6f7420656e6f756768", "id": 237, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4901:21:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_08892562ded77aa8ef18a86a8de0fa9e3c2f47710d6852b40351db2eb3ecffa8", "typeString": "literal_string \"Staking: Not enough\""}, "value": "Staking: Not enough"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_08892562ded77aa8ef18a86a8de0fa9e3c2f47710d6852b40351db2eb3ecffa8", "typeString": "literal_string \"Staking: Not enough\""}], "id": 233, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "4881:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 238, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4881:42:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 239, "nodeType": "ExpressionStatement", "src": "4881:42:17"}, {"assignments": [241, 243], "declarations": [{"constant": false, "id": 241, "mutability": "mutable", "name": "points", "nameLocation": "4992:6:17", "nodeType": "VariableDeclaration", "scope": 334, "src": "4984:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 240, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4984:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 243, "mutability": "mutable", "name": "end", "nameLocation": "5008:3:17", "nodeType": "VariableDeclaration", "scope": 334, "src": "5000:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 242, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "5000:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 248, "initialValue": {"arguments": [{"id": 245, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "5029:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 246, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 207, "src": "5037:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 244, "name": "previewPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 620, "src": "5015:13:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", "typeString": "function (uint256,uint256) view returns (uint256,uint256)"}}, "id": 247, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5015:31:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", "typeString": "tuple(uint256,uint256)"}}, "nodeType": "VariableDeclarationStatement", "src": "4983:63:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 259, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 253, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 250, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 241, "src": "5077:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "+", "rightExpression": {"arguments": [], "expression": {"argumentTypes": [], "id": 251, "name": "totalSupply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 919, "src": "5086:11:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)"}}, "id": 252, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5086:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "5077:22:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "<=", "rightExpression": {"expression": {"arguments": [{"id": 256, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5108:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint192_$", "typeString": "type(uint192)"}, "typeName": {"id": 255, "name": "uint192", "nodeType": "ElementaryTypeName", "src": "5108:7:17", "typeDescriptions": {}}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_type$_t_uint192_$", "typeString": "type(uint192)"}], "id": 254, "name": "type", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -27, "src": "5103:4:17", "typeDescriptions": {"typeIdentifier": "t_function_metatype_pure$__$returns$__$", "typeString": "function () pure"}}, "id": 257, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5103:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_magic_meta_type_t_uint192", "typeString": "type(uint192)"}}, "id": 258, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "max", "nodeType": "MemberAccess", "src": "5103:17:17", "typeDescriptions": {"typeIdentifier": "t_uint192", "typeString": "uint192"}}, "src": "5077:43:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a204d617820706f696e7473206578636565646564", "id": 260, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5134:30:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_e194468b410d451dc6103feb88d157bdf439ade8f710d2ec12445d5007de7928", "typeString": "literal_string \"Staking: Max points exceeded\""}, "value": "Staking: Max points exceeded"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_e194468b410d451dc6103feb88d157bdf439ade8f710d2ec12445d5007de7928", "typeString": "literal_string \"Staking: Max points exceeded\""}], "id": 249, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "5056:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 261, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5056:118:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 262, "nodeType": "ExpressionStatement", "src": "5056:118:17"}, {"expression": {"arguments": [{"id": 264, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5200:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 263, "name": "_collectRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 782, "src": "5184:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", "typeString": "function (address)"}}, "id": 265, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5184:19:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 266, "nodeType": "ExpressionStatement", "src": "5184:19:17"}, {"expression": {"arguments": [{"arguments": [{"arguments": [{"id": 274, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "5284:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 273, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5276:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}, "typeName": {"id": 272, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "5276:7:17", "typeDescriptions": {}}}, "id": 275, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5276:15:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, {"arguments": [{"id": 278, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 243, "src": "5354:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 277, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5346:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}, "typeName": {"id": 276, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "5346:7:17", "typeDescriptions": {}}}, "id": 279, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5346:12:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, {"id": 280, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 241, "src": "5384:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint128", "typeString": "uint128"}, {"typeIdentifier": "t_uint128", "typeString": "uint128"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 271, "name": "Lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 28, "src": "5243:6:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_struct$_Lockup_$28_storage_ptr_$", "typeString": "type(struct OgvStaking.Lockup storage pointer)"}}, "id": 281, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": ["amount", "end", "points"], "nodeType": "FunctionCall", "src": "5243:162:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}], "expression": {"baseExpression": {"id": 267, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "5213:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 269, "indexExpression": {"id": 268, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5221:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "5213:11:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 270, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "push", "nodeType": "MemberAccess", "src": "5213:16:17", "typeDescriptions": {"typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_ptr_$_t_struct$_Lockup_$28_storage_$returns$__$bound_to$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_ptr_$", "typeString": "function (struct OgvStaking.Lockup storage ref[] storage pointer,struct OgvStaking.Lockup storage ref)"}}, "id": 282, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5213:202:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 283, "nodeType": "ExpressionStatement", "src": "5213:202:17"}, {"expression": {"arguments": [{"id": 285, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5431:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 286, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 241, "src": "5435:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 284, "name": "_mint", "nodeType": "Identifier", "overloadedDeclarations": [1771], "referencedDeclaration": 1771, "src": "5425:5:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 287, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5425:17:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 288, "nodeType": "ExpressionStatement", "src": "5425:17:17"}, {"expression": {"arguments": [{"expression": {"id": 292, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "5469:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 293, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "5469:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"arguments": [{"id": 296, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, "src": "5489:4:17", "typeDescriptions": {"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}], "id": 295, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5481:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 294, "name": "address", "nodeType": "ElementaryTypeName", "src": "5481:7:17", "typeDescriptions": {}}}, "id": 297, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5481:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 298, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "5496:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "expression": {"id": 289, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "5452:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}}, "id": 291, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transferFrom", "nodeType": "MemberAccess", "referencedDeclaration": 1034, "src": "5452:16:17", "typeDescriptions": {"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) external returns (bool)"}}, "id": 299, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5452:51:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 300, "nodeType": "ExpressionStatement", "src": "5452:51:17"}, {"condition": {"commonType": {"typeIdentifier": "t_bool", "typeString": "bool"}, "id": 313, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 304, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "5548:21:17", "subExpression": {"baseExpression": {"id": 301, "name": "hasDelegationSet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 50, "src": "5549:16:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}}, "id": 303, "indexExpression": {"id": 302, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5566:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "5549:20:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": {"commonType": {"typeIdentifier": "t_address", "typeString": "address"}, "id": 312, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"id": 306, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5583:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 305, "name": "delegates", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1505, "src": "5573:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$", "typeString": "function (address) view returns (address)"}}, "id": 307, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5573:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": {"arguments": [{"hexValue": "30", "id": 310, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5598:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}], "id": 309, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5590:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 308, "name": "address", "nodeType": "ElementaryTypeName", "src": "5590:7:17", "typeDescriptions": {}}}, "id": 311, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5590:10:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "src": "5573:27:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "src": "5548:52:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 320, "nodeType": "IfStatement", "src": "5544:170:17", "trueBody": {"id": 319, "nodeType": "Block", "src": "5602:112:17", "statements": [{"expression": {"arguments": [{"id": 315, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5696:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 316, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5700:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 314, "name": "_delegate", "nodeType": "Identifier", "overloadedDeclarations": [805], "referencedDeclaration": 805, "src": "5686:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)"}}, "id": 317, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5686:17:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 318, "nodeType": "ExpressionStatement", "src": "5686:17:17"}]}}, {"eventCall": {"arguments": [{"id": 322, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5735:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 328, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"expression": {"baseExpression": {"id": 323, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "5739:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 325, "indexExpression": {"id": 324, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 209, "src": "5747:2:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "5739:11:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 326, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", "src": "5739:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"hexValue": "31", "id": 327, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5760:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1"}, "value": "1"}, "src": "5739:22:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 329, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 205, "src": "5763:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 330, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 243, "src": "5771:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 331, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 241, "src": "5776:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 321, "name": "Stake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, "src": "5729:5:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,uint256,uint256,uint256,uint256)"}}, "id": 332, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5729:54:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 333, "nodeType": "EmitStatement", "src": "5724:59:17"}]}, "documentation": {"id": 203, "nodeType": "StructuredDocumentation", "src": "4425:206:17", "text": "@dev Internal method used for public staking\n @param amount OGV to lockup in the stake\n @param duration in seconds for the stake\n @param to address to receive ownership of the stake"}, "id": 335, "implemented": true, "kind": "function", "modifiers": [], "name": "_stake", "nameLocation": "4645:6:17", "nodeType": "FunctionDefinition", "parameters": {"id": 210, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 205, "mutability": "mutable", "name": "amount", "nameLocation": "4669:6:17", "nodeType": "VariableDeclaration", "scope": 335, "src": "4661:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 204, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4661:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 207, "mutability": "mutable", "name": "duration", "nameLocation": "4693:8:17", "nodeType": "VariableDeclaration", "scope": 335, "src": "4685:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 206, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4685:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 209, "mutability": "mutable", "name": "to", "nameLocation": "4719:2:17", "nodeType": "VariableDeclaration", "scope": 335, "src": "4711:10:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 208, "name": "address", "nodeType": "ElementaryTypeName", "src": "4711:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "4651:76:17"}, "returnParameters": {"id": 211, "nodeType": "ParameterList", "parameters": [], "src": "4737:0:17"}, "scope": 806, "src": "4636:1154:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal"}, {"body": {"id": 417, "nodeType": "Block", "src": "5968:602:17", "statements": [{"assignments": [343], "declarations": [{"constant": false, "id": 343, "mutability": "mutable", "name": "lockup", "nameLocation": "5992:6:17", "nodeType": "VariableDeclaration", "scope": 417, "src": "5978:20:17", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup"}, "typeName": {"id": 342, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 341, "name": "Lockup", "nodeType": "IdentifierPath", "referencedDeclaration": 28, "src": "5978:6:17"}, "referencedDeclaration": 28, "src": "5978:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage_ptr", "typeString": "struct OgvStaking.Lockup"}}, "visibility": "internal"}], "id": 350, "initialValue": {"baseExpression": {"baseExpression": {"id": 344, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "6001:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 347, "indexExpression": {"expression": {"id": 345, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6009:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 346, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6009:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "6001:19:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 349, "indexExpression": {"id": 348, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 338, "src": "6021:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "6001:29:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "nodeType": "VariableDeclarationStatement", "src": "5978:52:17"}, {"assignments": [352], "declarations": [{"constant": false, "id": 352, "mutability": "mutable", "name": "amount", "nameLocation": "6048:6:17", "nodeType": "VariableDeclaration", "scope": 417, "src": "6040:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 351, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "6040:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 355, "initialValue": {"expression": {"id": 353, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 343, "src": "6057:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 354, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "amount", "nodeType": "MemberAccess", "referencedDeclaration": 23, "src": "6057:13:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "VariableDeclarationStatement", "src": "6040:30:17"}, {"assignments": [357], "declarations": [{"constant": false, "id": 357, "mutability": "mutable", "name": "end", "nameLocation": "6088:3:17", "nodeType": "VariableDeclaration", "scope": 417, "src": "6080:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 356, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "6080:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 360, "initialValue": {"expression": {"id": 358, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 343, "src": "6094:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 359, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "end", "nodeType": "MemberAccess", "referencedDeclaration": 25, "src": "6094:10:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "VariableDeclarationStatement", "src": "6080:24:17"}, {"assignments": [362], "declarations": [{"constant": false, "id": 362, "mutability": "mutable", "name": "points", "nameLocation": "6122:6:17", "nodeType": "VariableDeclaration", "scope": 417, "src": "6114:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 361, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "6114:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 365, "initialValue": {"expression": {"id": 363, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 343, "src": "6131:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 364, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "points", "nodeType": "MemberAccess", "referencedDeclaration": 27, "src": "6131:13:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "6114:30:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 370, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"expression": {"id": 367, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, "src": "6162:5:17", "typeDescriptions": {"typeIdentifier": "t_magic_block", "typeString": "block"}}, "id": 368, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "timestamp", "nodeType": "MemberAccess", "src": "6162:15:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": {"id": 369, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 357, "src": "6181:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "6162:22:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20456e64206f66206c6f636b7570206e6f742072656163686564", "id": 371, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "6186:36:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_0d3769af651e026174c0d257a3236a0a34f7f86e6f859f0cb2560d42d70963a5", "typeString": "literal_string \"Staking: End of lockup not reached\""}, "value": "Staking: End of lockup not reached"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_0d3769af651e026174c0d257a3236a0a34f7f86e6f859f0cb2560d42d70963a5", "typeString": "literal_string \"Staking: End of lockup not reached\""}], "id": 366, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "6154:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 372, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6154:69:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 373, "nodeType": "ExpressionStatement", "src": "6154:69:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 377, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 375, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 357, "src": "6241:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": {"hexValue": "30", "id": 376, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6248:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "6241:8:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20416c726561647920756e7374616b65642074686973206c6f636b7570", "id": 378, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "6251:39:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_7b6a7597b3901c8ecbc7ed06f0b2e89e96023c5d0ae17a3d605a26de7cb7a8a9", "typeString": "literal_string \"Staking: Already unstaked this lockup\""}, "value": "Staking: Already unstaked this lockup"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_7b6a7597b3901c8ecbc7ed06f0b2e89e96023c5d0ae17a3d605a26de7cb7a8a9", "typeString": "literal_string \"Staking: Already unstaked this lockup\""}], "id": 374, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "6233:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 379, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6233:58:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 380, "nodeType": "ExpressionStatement", "src": "6233:58:17"}, {"expression": {"arguments": [{"expression": {"id": 382, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6317:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 383, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6317:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 381, "name": "_collectRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 782, "src": "6301:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", "typeString": "function (address)"}}, "id": 384, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6301:27:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 385, "nodeType": "ExpressionStatement", "src": "6301:27:17"}, {"expression": {"id": 392, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "delete", "prefix": true, "src": "6338:36:17", "subExpression": {"baseExpression": {"baseExpression": {"id": 386, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "6345:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 389, "indexExpression": {"expression": {"id": 387, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6353:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 388, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6353:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "6345:19:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 391, "indexExpression": {"id": 390, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 338, "src": "6365:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "6345:29:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 393, "nodeType": "ExpressionStatement", "src": "6338:36:17"}, {"expression": {"arguments": [{"expression": {"id": 395, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6437:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 396, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6437:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 397, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 362, "src": "6449:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 394, "name": "_burn", "nodeType": "Identifier", "overloadedDeclarations": [1794], "referencedDeclaration": 1794, "src": "6431:5:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 398, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6431:25:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 399, "nodeType": "ExpressionStatement", "src": "6431:25:17"}, {"expression": {"arguments": [{"expression": {"id": 403, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6479:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 404, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6479:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 405, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 352, "src": "6491:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "expression": {"id": 400, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "6466:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}}, "id": 402, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": 958, "src": "6466:12:17", "typeDescriptions": {"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) external returns (bool)"}}, "id": 406, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6466:32:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 407, "nodeType": "ExpressionStatement", "src": "6466:32:17"}, {"eventCall": {"arguments": [{"expression": {"id": 409, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "6521:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 410, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "6521:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 411, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 338, "src": "6533:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 412, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 352, "src": "6543:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 413, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 357, "src": "6551:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 414, "name": "points", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 362, "src": "6556:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 408, "name": "Unstake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, "src": "6513:7:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,uint256,uint256,uint256,uint256)"}}, "id": 415, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6513:50:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 416, "nodeType": "EmitStatement", "src": "6508:55:17"}]}, "documentation": {"id": 336, "nodeType": "StructuredDocumentation", "src": "5796:123:17", "text": "@notice Collect staked OGV for a lockup and any earned rewards.\n @param lockupId the id of the lockup to unstake"}, "functionSelector": "2e17de78", "id": 418, "implemented": true, "kind": "function", "modifiers": [], "name": "unstake", "nameLocation": "5933:7:17", "nodeType": "FunctionDefinition", "parameters": {"id": 339, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 338, "mutability": "mutable", "name": "lockupId", "nameLocation": "5949:8:17", "nodeType": "VariableDeclaration", "scope": 418, "src": "5941:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 337, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "5941:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "5940:18:17"}, "returnParameters": {"id": 340, "nodeType": "ParameterList", "parameters": [], "src": "5968:0:17"}, "scope": 806, "src": "5924:646:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 546, "nodeType": "Block", "src": "7283:994:17", "statements": [{"expression": {"arguments": [{"expression": {"id": 427, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7358:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 428, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7358:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 426, "name": "_collectRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 782, "src": "7342:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", "typeString": "function (address)"}}, "id": 429, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7342:27:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 430, "nodeType": "ExpressionStatement", "src": "7342:27:17"}, {"assignments": [433], "declarations": [{"constant": false, "id": 433, "mutability": "mutable", "name": "lockup", "nameLocation": "7393:6:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7379:20:17", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup"}, "typeName": {"id": 432, "nodeType": "UserDefinedTypeName", "pathNode": {"id": 431, "name": "Lockup", "nodeType": "IdentifierPath", "referencedDeclaration": 28, "src": "7379:6:17"}, "referencedDeclaration": 28, "src": "7379:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage_ptr", "typeString": "struct OgvStaking.Lockup"}}, "visibility": "internal"}], "id": 440, "initialValue": {"baseExpression": {"baseExpression": {"id": 434, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "7402:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 437, "indexExpression": {"expression": {"id": 435, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7410:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 436, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7410:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "7402:19:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 439, "indexExpression": {"id": 438, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 421, "src": "7422:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "7402:29:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "nodeType": "VariableDeclarationStatement", "src": "7379:52:17"}, {"assignments": [442], "declarations": [{"constant": false, "id": 442, "mutability": "mutable", "name": "oldAmount", "nameLocation": "7449:9:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7441:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 441, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7441:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 445, "initialValue": {"expression": {"id": 443, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7461:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 444, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "amount", "nodeType": "MemberAccess", "referencedDeclaration": 23, "src": "7461:13:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "VariableDeclarationStatement", "src": "7441:33:17"}, {"assignments": [447], "declarations": [{"constant": false, "id": 447, "mutability": "mutable", "name": "oldEnd", "nameLocation": "7492:6:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7484:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 446, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7484:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 450, "initialValue": {"expression": {"id": 448, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7501:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 449, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "end", "nodeType": "MemberAccess", "referencedDeclaration": 25, "src": "7501:10:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "VariableDeclarationStatement", "src": "7484:27:17"}, {"assignments": [452], "declarations": [{"constant": false, "id": 452, "mutability": "mutable", "name": "oldPoints", "nameLocation": "7529:9:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7521:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 451, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7521:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 455, "initialValue": {"expression": {"id": 453, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7541:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 454, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "points", "nodeType": "MemberAccess", "referencedDeclaration": 27, "src": "7541:13:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "7521:33:17"}, {"assignments": [457, 459], "declarations": [{"constant": false, "id": 457, "mutability": "mutable", "name": "newPoints", "nameLocation": "7573:9:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7565:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 456, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7565:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 459, "mutability": "mutable", "name": "newEnd", "nameLocation": "7592:6:17", "nodeType": "VariableDeclaration", "scope": 546, "src": "7584:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 458, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7584:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 464, "initialValue": {"arguments": [{"id": 461, "name": "oldAmount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 442, "src": "7629:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 462, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 423, "src": "7652:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 460, "name": "previewPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 620, "src": "7602:13:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", "typeString": "function (uint256,uint256) view returns (uint256,uint256)"}}, "id": 463, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7602:68:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", "typeString": "tuple(uint256,uint256)"}}, "nodeType": "VariableDeclarationStatement", "src": "7564:106:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 468, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 466, "name": "newEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 459, "src": "7688:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": {"id": 467, "name": "oldEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 447, "src": "7697:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "7688:15:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a204e6577206c6f636b7570206d757374206265206c6f6e676572", "id": 469, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "7705:36:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_70c051efd901941ca607823cb4b1c13317dff0c9ec5cf600ecce8566fa99a2ac", "typeString": "literal_string \"Staking: New lockup must be longer\""}, "value": "Staking: New lockup must be longer"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_70c051efd901941ca607823cb4b1c13317dff0c9ec5cf600ecce8566fa99a2ac", "typeString": "literal_string \"Staking: New lockup must be longer\""}], "id": 465, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "7680:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 470, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7680:62:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 471, "nodeType": "ExpressionStatement", "src": "7680:62:17"}, {"expression": {"id": 479, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"expression": {"id": 472, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7752:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 474, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "memberName": "end", "nodeType": "MemberAccess", "referencedDeclaration": 25, "src": "7752:10:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"arguments": [{"id": 477, "name": "newEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 459, "src": "7773:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 476, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "7765:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_uint128_$", "typeString": "type(uint128)"}, "typeName": {"id": 475, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "7765:7:17", "typeDescriptions": {}}}, "id": 478, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7765:15:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "src": "7752:28:17", "typeDescriptions": {"typeIdentifier": "t_uint128", "typeString": "uint128"}}, "id": 480, "nodeType": "ExpressionStatement", "src": "7752:28:17"}, {"expression": {"id": 485, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"expression": {"id": 481, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7790:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "id": 483, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "memberName": "points", "nodeType": "MemberAccess", "referencedDeclaration": 27, "src": "7790:13:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 484, "name": "newPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 457, "src": "7806:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "7790:25:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 486, "nodeType": "ExpressionStatement", "src": "7790:25:17"}, {"expression": {"id": 494, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"baseExpression": {"baseExpression": {"id": 487, "name": "lockups", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 34, "src": "7825:7:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Lockup_$28_storage_$dyn_storage_$", "typeString": "mapping(address => struct OgvStaking.Lockup storage ref[] storage ref)"}}, "id": 491, "indexExpression": {"expression": {"id": 488, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7833:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 489, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7833:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "7825:19:17", "typeDescriptions": {"typeIdentifier": "t_array$_t_struct$_Lockup_$28_storage_$dyn_storage", "typeString": "struct OgvStaking.Lockup storage ref[] storage ref"}}, "id": 492, "indexExpression": {"id": 490, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 421, "src": "7845:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "7825:29:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 493, "name": "lockup", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 433, "src": "7857:6:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_memory_ptr", "typeString": "struct OgvStaking.Lockup memory"}}, "src": "7825:38:17", "typeDescriptions": {"typeIdentifier": "t_struct$_Lockup_$28_storage", "typeString": "struct OgvStaking.Lockup storage ref"}}, "id": 495, "nodeType": "ExpressionStatement", "src": "7825:38:17"}, {"expression": {"arguments": [{"expression": {"id": 497, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7879:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 498, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7879:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 501, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 499, "name": "newPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 457, "src": "7891:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"id": 500, "name": "oldPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 452, "src": "7903:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "7891:21:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 496, "name": "_mint", "nodeType": "Identifier", "overloadedDeclarations": [1771], "referencedDeclaration": 1771, "src": "7873:5:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 502, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7873:40:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 503, "nodeType": "ExpressionStatement", "src": "7873:40:17"}, {"condition": {"commonType": {"typeIdentifier": "t_bool", "typeString": "bool"}, "id": 518, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 508, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "7927:29:17", "subExpression": {"baseExpression": {"id": 504, "name": "hasDelegationSet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 50, "src": "7928:16:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}}, "id": 507, "indexExpression": {"expression": {"id": 505, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7945:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 506, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7945:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "7928:28:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": {"commonType": {"typeIdentifier": "t_address", "typeString": "address"}, "id": 517, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"expression": {"id": 510, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "7970:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 511, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "7970:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 509, "name": "delegates", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1505, "src": "7960:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$", "typeString": "function (address) view returns (address)"}}, "id": 512, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7960:21:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": {"arguments": [{"hexValue": "30", "id": 515, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "7993:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}], "id": 514, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "7985:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 513, "name": "address", "nodeType": "ElementaryTypeName", "src": "7985:7:17", "typeDescriptions": {}}}, "id": 516, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7985:10:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "src": "7960:35:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "src": "7927:68:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 527, "nodeType": "IfStatement", "src": "7923:202:17", "trueBody": {"id": 526, "nodeType": "Block", "src": "7997:128:17", "statements": [{"expression": {"arguments": [{"expression": {"id": 520, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "8091:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 521, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "8091:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"expression": {"id": 522, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "8103:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 523, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "8103:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_address", "typeString": "address"}], "id": 519, "name": "_delegate", "nodeType": "Identifier", "overloadedDeclarations": [805], "referencedDeclaration": 805, "src": "8081:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)"}}, "id": 524, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8081:33:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 525, "nodeType": "ExpressionStatement", "src": "8081:33:17"}]}}, {"eventCall": {"arguments": [{"expression": {"id": 529, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "8147:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 530, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "8147:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 531, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 421, "src": "8159:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 532, "name": "oldAmount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 442, "src": "8169:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 533, "name": "oldEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 447, "src": "8180:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 534, "name": "oldPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 452, "src": "8188:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 528, "name": "Unstake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, "src": "8139:7:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,uint256,uint256,uint256,uint256)"}}, "id": 535, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8139:59:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 536, "nodeType": "EmitStatement", "src": "8134:64:17"}, {"eventCall": {"arguments": [{"expression": {"id": 538, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "8219:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 539, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "8219:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 540, "name": "lockupId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 421, "src": "8231:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 541, "name": "oldAmount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 442, "src": "8241:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 542, "name": "newEnd", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 459, "src": "8252:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 543, "name": "newPoints", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 457, "src": "8260:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 537, "name": "Stake", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, "src": "8213:5:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,uint256,uint256,uint256,uint256)"}}, "id": 544, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8213:57:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 545, "nodeType": "EmitStatement", "src": "8208:62:17"}]}, "documentation": {"id": 419, "nodeType": "StructuredDocumentation", "src": "6576:641:17", "text": "@notice Extend a stake lockup for additional points.\n The stake end time is computed from the current time + duration, just\n like it is for new stakes. So a new stake for seven days duration and\n an old stake extended with a seven days duration would have the same\n end.\n If an extend is made before the start of staking, the start time for\n the new stake is shifted forwards to the start of staking, which also\n shifts forward the end date.\n @param lockupId the id of the old lockup to extend\n @param duration number of seconds from now to stake for"}, "functionSelector": "c89258db", "id": 547, "implemented": true, "kind": "function", "modifiers": [], "name": "extend", "nameLocation": "7231:6:17", "nodeType": "FunctionDefinition", "parameters": {"id": 424, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 421, "mutability": "mutable", "name": "lockupId", "nameLocation": "7246:8:17", "nodeType": "VariableDeclaration", "scope": 547, "src": "7238:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 420, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7238:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 423, "mutability": "mutable", "name": "duration", "nameLocation": "7264:8:17", "nodeType": "VariableDeclaration", "scope": 547, "src": "7256:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 422, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "7256:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "7237:36:17"}, "returnParameters": {"id": 425, "nodeType": "ParameterList", "parameters": [], "src": "7283:0:17"}, "scope": 806, "src": "7222:1055:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 619, "nodeType": "Block", "src": "8725:440:17", "statements": [{"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 562, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 560, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 552, "src": "8743:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": {"id": 561, "name": "minStakeDuration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 18, "src": "8755:16:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "8743:28:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20546f6f2073686f7274", "id": 563, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "8773:20:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_38e1c554f41a064a892f10b1178a72e1abb4177a0010e35038e96ebec4ad94aa", "typeString": "literal_string \"Staking: Too short\""}, "value": "Staking: Too short"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_38e1c554f41a064a892f10b1178a72e1abb4177a0010e35038e96ebec4ad94aa", "typeString": "literal_string \"Staking: Too short\""}], "id": 559, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "8735:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 564, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8735:59:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 565, "nodeType": "ExpressionStatement", "src": "8735:59:17"}, {"expression": {"arguments": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 569, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 567, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 552, "src": "8812:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "<=", "rightExpression": {"hexValue": "31343631", "id": 568, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "8824:9:17", "subdenomination": "days", "typeDescriptions": {"typeIdentifier": "t_rational_126230400_by_1", "typeString": "int_const 126230400"}, "value": "1461"}, "src": "8812:21:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, {"hexValue": "5374616b696e673a20546f6f206c6f6e67", "id": 570, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "8835:19:17", "typeDescriptions": {"typeIdentifier": "t_stringliteral_ed7b53d9950697bcde3253b7494f5c32f212ed9ae4b86a74f2c4e5078aa9541d", "typeString": "literal_string \"Staking: Too long\""}, "value": "Staking: Too long"}], "expression": {"argumentTypes": [{"typeIdentifier": "t_bool", "typeString": "bool"}, {"typeIdentifier": "t_stringliteral_ed7b53d9950697bcde3253b7494f5c32f212ed9ae4b86a74f2c4e5078aa9541d", "typeString": "literal_string \"Staking: Too long\""}], "id": 566, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [-18, -18], "referencedDeclaration": -18, "src": "8804:7:17", "typeDescriptions": {"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure"}}, "id": 571, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8804:51:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 572, "nodeType": "ExpressionStatement", "src": "8804:51:17"}, {"assignments": [574], "declarations": [{"constant": false, "id": 574, "mutability": "mutable", "name": "start", "nameLocation": "8873:5:17", "nodeType": "VariableDeclaration", "scope": 619, "src": "8865:13:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 573, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8865:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 583, "initialValue": {"condition": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 578, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"expression": {"id": 575, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, "src": "8881:5:17", "typeDescriptions": {"typeIdentifier": "t_magic_block", "typeString": "block"}}, "id": 576, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "timestamp", "nodeType": "MemberAccess", "src": "8881:15:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": {"id": 577, "name": "epoch", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 16, "src": "8899:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "8881:23:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "falseExpression": {"id": 581, "name": "epoch", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 16, "src": "8925:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 582, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "Conditional", "src": "8881:49:17", "trueExpression": {"expression": {"id": 579, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, "src": "8907:5:17", "typeDescriptions": {"typeIdentifier": "t_magic_block", "typeString": "block"}}, "id": 580, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "timestamp", "nodeType": "MemberAccess", "src": "8907:15:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "8865:65:17"}, {"assignments": [585], "declarations": [{"constant": false, "id": 585, "mutability": "mutable", "name": "end", "nameLocation": "8948:3:17", "nodeType": "VariableDeclaration", "scope": 619, "src": "8940:11:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 584, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8940:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 589, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 588, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 586, "name": "start", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 574, "src": "8954:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "+", "rightExpression": {"id": 587, "name": "duration", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 552, "src": "8962:8:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "8954:16:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "8940:30:17"}, {"assignments": [591], "declarations": [{"constant": false, "id": 591, "mutability": "mutable", "name": "endYearpoc", "nameLocation": "8988:10:17", "nodeType": "VariableDeclaration", "scope": 619, "src": "8980:18:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 590, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8980:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 601, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 600, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 597, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 594, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 592, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 585, "src": "9003:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"id": 593, "name": "epoch", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 16, "src": "9009:5:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9003:11:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 595, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9002:13:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"hexValue": "31653138", "id": 596, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9018:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000000000_by_1", "typeString": "int_const 1000000000000000000"}, "value": "1e18"}, "src": "9002:20:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 598, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9001:22:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"hexValue": "333635", "id": 599, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9026:8:17", "subdenomination": "days", "typeDescriptions": {"typeIdentifier": "t_rational_31536000_by_1", "typeString": "int_const 31536000"}, "value": "365"}, "src": "9001:33:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "8980:54:17"}, {"assignments": [603], "declarations": [{"constant": false, "id": 603, "mutability": "mutable", "name": "multiplier", "nameLocation": "9052:10:17", "nodeType": "VariableDeclaration", "scope": 619, "src": "9044:18:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 602, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9044:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 609, "initialValue": {"arguments": [{"id": 606, "name": "YEAR_BASE", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 21, "src": "9084:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 607, "name": "endYearpoc", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 591, "src": "9095:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_uint256", "typeString": "uint256"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "expression": {"id": 604, "name": "PRBMathUD60x18", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2839, "src": "9065:14:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_contract$_PRBMathUD60x18_$2839_$", "typeString": "type(library PRBMathUD60x18)"}}, "id": 605, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "pow", "nodeType": "MemberAccess", "referencedDeclaration": 2723, "src": "9065:18:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)"}}, "id": 608, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9065:41:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "9044:62:17"}, {"expression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 615, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 612, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 610, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 550, "src": "9125:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"id": 611, "name": "multiplier", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 603, "src": "9134:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9125:19:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 613, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9124:21:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"hexValue": "31653138", "id": 614, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9148:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000000000_by_1", "typeString": "int_const 1000000000000000000"}, "value": "1e18"}, "src": "9124:28:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, {"id": 616, "name": "end", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 585, "src": "9154:3:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 617, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9123:35:17", "typeDescriptions": {"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", "typeString": "tuple(uint256,uint256)"}}, "functionReturnParameters": 558, "id": 618, "nodeType": "Return", "src": "9116:42:17"}]}, "documentation": {"id": 548, "nodeType": "StructuredDocumentation", "src": "8283:313:17", "text": "@notice Preview the number of points that would be returned for the\n given amount and duration.\n @param amount OGV to be staked\n @param duration number of seconds to stake for\n @return points staking points that would be returned\n @return end staking period end date"}, "functionSelector": "4fd0e648", "id": 620, "implemented": true, "kind": "function", "modifiers": [], "name": "previewPoints", "nameLocation": "8610:13:17", "nodeType": "FunctionDefinition", "parameters": {"id": 553, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 550, "mutability": "mutable", "name": "amount", "nameLocation": "8632:6:17", "nodeType": "VariableDeclaration", "scope": 620, "src": "8624:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 549, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8624:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 552, "mutability": "mutable", "name": "duration", "nameLocation": "8648:8:17", "nodeType": "VariableDeclaration", "scope": 620, "src": "8640:16:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 551, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8640:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "8623:34:17"}, "returnParameters": {"id": 558, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 555, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 620, "src": "8703:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 554, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8703:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}, {"constant": false, "id": 557, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 620, "src": "8712:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 556, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "8712:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "8702:18:17"}, "scope": 806, "src": "8601:564:17", "stateMutability": "view", "virtual": false, "visibility": "public"}, {"body": {"id": 629, "nodeType": "Block", "src": "9282:44:17", "statements": [{"expression": {"arguments": [{"expression": {"id": 625, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, "src": "9308:3:17", "typeDescriptions": {"typeIdentifier": "t_magic_message", "typeString": "msg"}}, "id": 626, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "src": "9308:10:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 624, "name": "_collectRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 782, "src": "9292:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", "typeString": "function (address)"}}, "id": 627, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9292:27:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 628, "nodeType": "ExpressionStatement", "src": "9292:27:17"}]}, "documentation": {"id": 621, "nodeType": "StructuredDocumentation", "src": "9199:43:17", "text": "@notice Collect all earned OGV rewards."}, "functionSelector": "70bb45b3", "id": 630, "implemented": true, "kind": "function", "modifiers": [], "name": "collectRewards", "nameLocation": "9256:14:17", "nodeType": "FunctionDefinition", "parameters": {"id": 622, "nodeType": "ParameterList", "parameters": [], "src": "9270:2:17"}, "returnParameters": {"id": 623, "nodeType": "ParameterList", "parameters": [], "src": "9282:0:17"}, "scope": 806, "src": "9247:79:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "external"}, {"body": {"id": 682, "nodeType": "Block", "src": "9597:445:17", "statements": [{"assignments": [639], "declarations": [{"constant": false, "id": 639, "mutability": "mutable", "name": "supply", "nameLocation": "9615:6:17", "nodeType": "VariableDeclaration", "scope": 682, "src": "9607:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 638, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9607:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 642, "initialValue": {"arguments": [], "expression": {"argumentTypes": [], "id": 640, "name": "totalSupply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 919, "src": "9624:11:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)"}}, "id": 641, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9624:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "9607:30:17"}, {"condition": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 645, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 643, "name": "supply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 639, "src": "9651:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": {"hexValue": "30", "id": 644, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9661:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "9651:11:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 649, "nodeType": "IfStatement", "src": "9647:95:17", "trueBody": {"id": 648, "nodeType": "Block", "src": "9664:78:17", "statements": [{"expression": {"hexValue": "30", "id": 646, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9685:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "functionReturnParameters": 637, "id": 647, "nodeType": "Return", "src": "9678:8:17"}]}}, {"assignments": [651], "declarations": [{"constant": false, "id": 651, "mutability": "mutable", "name": "_accRewardPerShare", "nameLocation": "9759:18:17", "nodeType": "VariableDeclaration", "scope": 682, "src": "9751:26:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 650, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9751:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 653, "initialValue": {"id": 652, "name": "accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, "src": "9780:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "9751:46:17"}, {"expression": {"id": 663, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 654, "name": "_accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 651, "src": "9807:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "+=", "rightHandSide": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 662, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 659, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [], "expression": {"argumentTypes": [], "expression": {"id": 655, "name": "rewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 40, "src": "9830:13:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3353", "typeString": "contract RewardsSource"}}, "id": 656, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "previewRewards", "nodeType": "MemberAccess", "referencedDeclaration": 3048, "src": "9830:28:17", "typeDescriptions": {"typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", "typeString": "function () view external returns (uint256)"}}, "id": 657, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9830:30:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"hexValue": "31653132", "id": 658, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "9863:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000_by_1", "typeString": "int_const 1000000000000"}, "value": "1e12"}, "src": "9830:37:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 660, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9829:39:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"id": 661, "name": "supply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 639, "src": "9871:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9829:48:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9807:70:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 664, "nodeType": "ExpressionStatement", "src": "9807:70:17"}, {"assignments": [666], "declarations": [{"constant": false, "id": 666, "mutability": "mutable", "name": "netRewardsPerShare", "nameLocation": "9895:18:17", "nodeType": "VariableDeclaration", "scope": 682, "src": "9887:26:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 665, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9887:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 672, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 671, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 667, "name": "_accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 651, "src": "9916:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"baseExpression": {"id": 668, "name": "rewardDebtPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, "src": "9949:18:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}}, "id": 670, "indexExpression": {"id": 669, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 633, "src": "9968:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "9949:24:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9916:57:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "9887:86:17"}, {"expression": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 680, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 677, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"id": 674, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 633, "src": "10001:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 673, "name": "balanceOf", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 933, "src": "9991:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view returns (uint256)"}}, "id": 675, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9991:15:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"id": 676, "name": "netRewardsPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 666, "src": "10009:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "9991:36:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 678, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "9990:38:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"hexValue": "31653132", "id": 679, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10031:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000_by_1", "typeString": "int_const 1000000000000"}, "value": "1e12"}, "src": "9990:45:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "functionReturnParameters": 637, "id": 681, "nodeType": "Return", "src": "9983:52:17"}]}, "documentation": {"id": 631, "nodeType": "StructuredDocumentation", "src": "9332:190:17", "text": "@notice Shows the amount of OGV a user would receive if they collected\n rewards at this time.\n @param user to preview rewards for\n @return OGV rewards amount"}, "functionSelector": "f166e920", "id": 683, "implemented": true, "kind": "function", "modifiers": [], "name": "previewRewards", "nameLocation": "9536:14:17", "nodeType": "FunctionDefinition", "parameters": {"id": 634, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 633, "mutability": "mutable", "name": "user", "nameLocation": "9559:4:17", "nodeType": "VariableDeclaration", "scope": 683, "src": "9551:12:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 632, "name": "address", "nodeType": "ElementaryTypeName", "src": "9551:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "9550:14:17"}, "returnParameters": {"id": 637, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 636, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 683, "src": "9588:7:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 635, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9588:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "src": "9587:9:17"}, "scope": 806, "src": "9527:515:17", "stateMutability": "view", "virtual": false, "visibility": "external"}, {"body": {"id": 781, "nodeType": "Block", "src": "10582:796:17", "statements": [{"assignments": [690], "declarations": [{"constant": false, "id": 690, "mutability": "mutable", "name": "supply", "nameLocation": "10600:6:17", "nodeType": "VariableDeclaration", "scope": 781, "src": "10592:14:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 689, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "10592:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 693, "initialValue": {"arguments": [], "expression": {"argumentTypes": [], "id": 691, "name": "totalSupply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 919, "src": "10609:11:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)"}}, "id": 692, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10609:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "10592:30:17"}, {"condition": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 696, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 694, "name": "supply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 690, "src": "10636:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": {"hexValue": "30", "id": 695, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10645:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "10636:10:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 737, "nodeType": "IfStatement", "src": "10632:375:17", "trueBody": {"id": 736, "nodeType": "Block", "src": "10648:359:17", "statements": [{"assignments": [698], "declarations": [{"constant": false, "id": 698, "mutability": "mutable", "name": "preBalance", "nameLocation": "10670:10:17", "nodeType": "VariableDeclaration", "scope": 736, "src": "10662:18:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 697, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "10662:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 706, "initialValue": {"arguments": [{"arguments": [{"id": 703, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, "src": "10705:4:17", "typeDescriptions": {"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}], "id": 702, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "10697:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 701, "name": "address", "nodeType": "ElementaryTypeName", "src": "10697:7:17", "typeDescriptions": {}}}, "id": 704, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10697:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "expression": {"id": 699, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "10683:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}}, "id": 700, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", "referencedDeclaration": 933, "src": "10683:13:17", "typeDescriptions": {"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)"}}, "id": 705, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10683:28:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "10662:49:17"}, {"clauses": [{"block": {"id": 710, "nodeType": "Block", "src": "10760:2:17", "statements": []}, "errorName": "", "id": 711, "nodeType": "TryCatchClause", "src": "10760:2:17"}, {"block": {"id": 712, "nodeType": "Block", "src": "10769:91:17", "statements": []}, "errorName": "", "id": 713, "nodeType": "TryCatchClause", "src": "10763:97:17"}], "externalCall": {"arguments": [], "expression": {"argumentTypes": [], "expression": {"id": 707, "name": "rewardsSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 40, "src": "10729:13:17", "typeDescriptions": {"typeIdentifier": "t_contract$_RewardsSource_$3353", "typeString": "contract RewardsSource"}}, "id": 708, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "collectRewards", "nodeType": "MemberAccess", "referencedDeclaration": 3022, "src": "10729:28:17", "typeDescriptions": {"typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$", "typeString": "function () external returns (uint256)"}}, "id": 709, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10729:30:17", "tryCall": true, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 714, "nodeType": "TryStatement", "src": "10725:135:17"}, {"assignments": [716], "declarations": [{"constant": false, "id": 716, "mutability": "mutable", "name": "collected", "nameLocation": "10881:9:17", "nodeType": "VariableDeclaration", "scope": 736, "src": "10873:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 715, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "10873:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 726, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 725, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"arguments": [{"id": 721, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, "src": "10915:4:17", "typeDescriptions": {"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_contract$_OgvStaking_$806", "typeString": "contract OgvStaking"}], "id": 720, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "10907:7:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)"}, "typeName": {"id": 719, "name": "address", "nodeType": "ElementaryTypeName", "src": "10907:7:17", "typeDescriptions": {}}}, "id": 722, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10907:13:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "expression": {"id": 717, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "10893:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}}, "id": 718, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", "referencedDeclaration": 933, "src": "10893:13:17", "typeDescriptions": {"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)"}}, "id": 723, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10893:28:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"id": 724, "name": "preBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 698, "src": "10924:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "10893:41:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "10873:61:17"}, {"expression": {"id": 734, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"id": 727, "name": "accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, "src": "10948:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "+=", "rightHandSide": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 733, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 730, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 728, "name": "collected", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 716, "src": "10970:9:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"hexValue": "31653132", "id": 729, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10982:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000_by_1", "typeString": "int_const 1000000000000"}, "value": "1e12"}, "src": "10970:16:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 731, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "10969:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"id": 732, "name": "supply", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 690, "src": "10990:6:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "10969:27:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "10948:48:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 735, "nodeType": "ExpressionStatement", "src": "10948:48:17"}]}}, {"assignments": [739], "declarations": [{"constant": false, "id": 739, "mutability": "mutable", "name": "netRewardsPerShare", "nameLocation": "11024:18:17", "nodeType": "VariableDeclaration", "scope": 781, "src": "11016:26:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 738, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "11016:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 745, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 744, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 740, "name": "accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, "src": "11045:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": {"baseExpression": {"id": 741, "name": "rewardDebtPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, "src": "11077:18:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}}, "id": 743, "indexExpression": {"id": 742, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11096:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "11077:24:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "11045:56:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "11016:85:17"}, {"assignments": [747], "declarations": [{"constant": false, "id": 747, "mutability": "mutable", "name": "netRewards", "nameLocation": "11119:10:17", "nodeType": "VariableDeclaration", "scope": 781, "src": "11111:18:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "typeName": {"id": 746, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "11111:7:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "visibility": "internal"}], "id": 756, "initialValue": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 755, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"components": [{"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 752, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"arguments": [{"id": 749, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11143:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}], "id": 748, "name": "balanceOf", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 933, "src": "11133:9:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view returns (uint256)"}}, "id": 750, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11133:15:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": {"id": 751, "name": "netRewardsPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 739, "src": "11151:18:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "11133:36:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "id": 753, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "11132:38:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": {"hexValue": "31653132", "id": 754, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "11173:4:17", "typeDescriptions": {"typeIdentifier": "t_rational_1000000000000_by_1", "typeString": "int_const 1000000000000"}, "value": "1e12"}, "src": "11132:45:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "VariableDeclarationStatement", "src": "11111:66:17"}, {"expression": {"id": 761, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"baseExpression": {"id": 757, "name": "rewardDebtPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, "src": "11187:18:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)"}}, "id": 759, "indexExpression": {"id": 758, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11206:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "11187:24:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"id": 760, "name": "accRewardPerShare", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, "src": "11214:17:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "src": "11187:44:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "id": 762, "nodeType": "ExpressionStatement", "src": "11187:44:17"}, {"condition": {"commonType": {"typeIdentifier": "t_uint256", "typeString": "uint256"}, "id": 765, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": {"id": 763, "name": "netRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 747, "src": "11245:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": {"hexValue": "30", "id": 764, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "11259:1:17", "typeDescriptions": {"typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0"}, "value": "0"}, "src": "11245:15:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 768, "nodeType": "IfStatement", "src": "11241:52:17", "trueBody": {"id": 767, "nodeType": "Block", "src": "11262:31:17", "statements": [{"functionReturnParameters": 688, "id": 766, "nodeType": "Return", "src": "11276:7:17"}]}}, {"expression": {"arguments": [{"id": 772, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11315:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 773, "name": "netRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 747, "src": "11321:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "expression": {"id": 769, "name": "ogv", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "11302:3:17", "typeDescriptions": {"typeIdentifier": "t_contract$_ERC20_$1420", "typeString": "contract ERC20"}}, "id": 771, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": 958, "src": "11302:12:17", "typeDescriptions": {"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256) external returns (bool)"}}, "id": 774, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11302:30:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 775, "nodeType": "ExpressionStatement", "src": "11302:30:17"}, {"eventCall": {"arguments": [{"id": 777, "name": "user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 686, "src": "11354:4:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 778, "name": "netRewards", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 747, "src": "11360:10:17", "typeDescriptions": {"typeIdentifier": "t_uint256", "typeString": "uint256"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_uint256", "typeString": "uint256"}], "id": 776, "name": "Reward", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 80, "src": "11347:6:17", "typeDescriptions": {"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)"}}, "id": 779, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11347:24:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 780, "nodeType": "EmitStatement", "src": "11342:29:17"}]}, "documentation": {"id": 684, "nodeType": "StructuredDocumentation", "src": "10048:481:17", "text": "@dev Internal function to handle rewards accounting.\n 1. Collect new rewards for everyone\n 2. Calculate this user's rewards and accounting\n 3. Distribute this user's rewards\n This function *must* be called before any user balance changes.\n This will always update the user's rewardDebtPerShare to match\n accRewardPerShare, which is essential to the accounting.\n @param user to collect rewards for"}, "id": 782, "implemented": true, "kind": "function", "modifiers": [], "name": "_collectRewards", "nameLocation": "10543:15:17", "nodeType": "FunctionDefinition", "parameters": {"id": 687, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 686, "mutability": "mutable", "name": "user", "nameLocation": "10567:4:17", "nodeType": "VariableDeclaration", "scope": 782, "src": "10559:12:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 685, "name": "address", "nodeType": "ElementaryTypeName", "src": "10559:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "10558:14:17"}, "returnParameters": {"id": 688, "nodeType": "ParameterList", "parameters": [], "src": "10582:0:17"}, "scope": 806, "src": "10534:844:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal"}, {"baseFunctions": [1863], "body": {"id": 804, "nodeType": "Block", "src": "11610:98:17", "statements": [{"expression": {"id": 795, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": {"baseExpression": {"id": 791, "name": "hasDelegationSet", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 50, "src": "11620:16:17", "typeDescriptions": {"typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)"}}, "id": 793, "indexExpression": {"id": 792, "name": "delegator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 785, "src": "11637:9:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "11620:27:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "nodeType": "Assignment", "operator": "=", "rightHandSide": {"hexValue": "74727565", "id": 794, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "11650:4:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}, "value": "true"}, "src": "11620:34:17", "typeDescriptions": {"typeIdentifier": "t_bool", "typeString": "bool"}}, "id": 796, "nodeType": "ExpressionStatement", "src": "11620:34:17"}, {"expression": {"arguments": [{"id": 800, "name": "delegator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 785, "src": "11680:9:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, {"id": 801, "name": "delegatee", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 787, "src": "11691:9:17", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}], "expression": {"argumentTypes": [{"typeIdentifier": "t_address", "typeString": "address"}, {"typeIdentifier": "t_address", "typeString": "address"}], "expression": {"id": 797, "name": "super", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -25, "src": "11664:5:17", "typeDescriptions": {"typeIdentifier": "t_type$_t_super$_OgvStaking_$806_$", "typeString": "type(contract super OgvStaking)"}}, "id": 799, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "_delegate", "nodeType": "MemberAccess", "referencedDeclaration": 1863, "src": "11664:15:17", "typeDescriptions": {"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", "typeString": "function (address,address)"}}, "id": 802, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11664:37:17", "tryCall": false, "typeDescriptions": {"typeIdentifier": "t_tuple$__$", "typeString": "tuple()"}}, "id": 803, "nodeType": "ExpressionStatement", "src": "11664:37:17"}]}, "documentation": {"id": 783, "nodeType": "StructuredDocumentation", "src": "11384:146:17", "text": " @dev Change delegation for `delegator` to `delegatee`.\n Emits events {DelegateChanged} and {DelegateVotesChanged}."}, "id": 805, "implemented": true, "kind": "function", "modifiers": [], "name": "_delegate", "nameLocation": "11544:9:17", "nodeType": "FunctionDefinition", "overrides": {"id": 789, "nodeType": "OverrideSpecifier", "overrides": [], "src": "11601:8:17"}, "parameters": {"id": 788, "nodeType": "ParameterList", "parameters": [{"constant": false, "id": 785, "mutability": "mutable", "name": "delegator", "nameLocation": "11562:9:17", "nodeType": "VariableDeclaration", "scope": 805, "src": "11554:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 784, "name": "address", "nodeType": "ElementaryTypeName", "src": "11554:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}, {"constant": false, "id": 787, "mutability": "mutable", "name": "delegatee", "nameLocation": "11581:9:17", "nodeType": "VariableDeclaration", "scope": 805, "src": "11573:17:17", "stateVariable": false, "storageLocation": "default", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}, "typeName": {"id": 786, "name": "address", "nodeType": "ElementaryTypeName", "src": "11573:7:17", "stateMutability": "nonpayable", "typeDescriptions": {"typeIdentifier": "t_address", "typeString": "address"}}, "visibility": "internal"}], "src": "11553:38:17"}, "returnParameters": {"id": 790, "nodeType": "ParameterList", "parameters": [], "src": "11610:0:17"}, "scope": 806, "src": "11535:173:17", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal"}], "scope": 807, "src": "837:10873:17", "usedErrors": [4715, 4835, 4852]}], "src": "32:11679:17"}, "bytecode": "6101c06040523480156200001257600080fd5b50604051620039f6380380620039f6833981016040819052620000359162000239565b604051806040016040528060058152602001643b32a7a3ab60d91b81525080604051806040016040528060018152602001603160f81b81525060405180602001604052806000815250604051806020016040528060008152508160039080519060200190620000a692919062000176565b508051620000bc90600490602084019062000176565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c05261012052505050506001600160a01b0394851661018052506101409290925261016052166101a052620002c1565b828054620001849062000284565b90600052602060002090601f016020900481019282620001a85760008555620001f3565b82601f10620001c357805160ff1916838001178555620001f3565b82800160010185558215620001f3579182015b82811115620001f3578251825591602001919060010190620001d6565b506200020192915062000205565b5090565b5b8082111562000201576000815560010162000206565b80516001600160a01b03811681146200023457600080fd5b919050565b600080600080608085870312156200025057600080fd5b6200025b856200021c565b9350602085015192506040850151915062000279606086016200021c565b905092959194509250565b600181811c908216806200029957607f821691505b60208210811415620002bb57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a05161366c6200038a600039600081816105db0152818161136d015261164201526000818161029101528181610812015281816115cb015281816116e9015281816118460152611ddb0152600081816103b5015261098a01526000818161048101528181610a3901528181610a600152610aa2015260006119a5015260006119f4015260006119cf01526000611928015260006119520152600061197c015261366c6000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806370bb45b311610130578063a457c2d7116100b8578063d505accf1161007c578063d505accf14610560578063dd62ed3e14610573578063f1127ed814610586578063f166e920146105c3578063f7240d2f146105d657600080fd5b8063a457c2d7146104e0578063a9059cbb146104f3578063c3cda52014610501578063c89258db14610514578063c93d0b1e1461052757600080fd5b80638e539e8c116100ff5780638e539e8c14610469578063900cf0cf1461047c578063939d6237146104a357806395d89b41146104ac5780639ab24eb0146104cd57600080fd5b806370bb45b3146104285780637628a37d146104305780637b0472f0146104435780637ecebe001461045657600080fd5b806339509351116101b3578063587cde1e11610182578063587cde1e1461038a5780635c19a95c1461039d5780635fec5c64146103b05780636fcfff45146103d757806370a08231146103ff57600080fd5b8063395093511461031c5780633a46b1a81461032f5780634423bf57146103425780634fd0e6481461036257600080fd5b806318160ddd116101fa57806318160ddd146102cb57806323b872dd146102dd5780632e17de78146102f0578063313ce567146103055780633644e5151461031457600080fd5b80630348dbf11461022c57806306fdde0314610264578063095ea7b314610279578063142561cf1461028c575b600080fd5b61024f61023a366004613297565b600d6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61026c6105fd565b60405161025b91906132b2565b61024f610287366004613307565b61061d565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b6002545b60405190815260200161025b565b61024f6102eb366004613331565b610637565b6103036102fe36600461336d565b610687565b005b6040516012815260200161025b565b6102cf6108da565b61024f61032a366004613307565b6108e9565b6102cf61033d366004613307565b61090b565b6102cf610350366004613297565b600b6020526000908152604090205481565b610375610370366004613386565b610985565b6040805192835260208301919091520161025b565b6102b3610398366004613297565b610b26565b6103036103ab366004613297565b610b44565b6102cf7f000000000000000000000000000000000000000000000000000000000000000081565b6103ea6103e5366004613297565b610b51565b60405163ffffffff909116815260200161025b565b6102cf61040d366004613297565b6001600160a01b031660009081526020819052604090205490565b610303610b73565b61030361043e3660046133a8565b610b7e565b610303610451366004613386565b610b8e565b6102cf610464366004613297565b610b9d565b6102cf61047736600461336d565b610bbb565b6102cf7f000000000000000000000000000000000000000000000000000000000000000081565b6102cf600c5481565b6040805180820190915260058152643b32a7a3ab60d91b602082015261026c565b6102cf6104db366004613297565b610c17565b61024f6104ee366004613307565b610c9d565b61024f6102eb366004613307565b61030361050f3660046133ee565b610d23565b610303610522366004613386565b610e77565b61053a610535366004613307565b6110c6565b604080516001600160801b0394851681529390921660208401529082015260600161025b565b61030361056e366004613446565b611117565b6102cf6105813660046134b0565b611299565b6105996105943660046134e3565b6112c4565b60408051825163ffffffff1681526020928301516001600160e01b0316928101929092520161025b565b6102cf6105d1366004613297565b611347565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b606060405180606001604052806026815260200161361160269139905090565b60003361062b81858561147c565b60019150505b92915050565b60405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a205472616e73666572732064697361626c6564000000000060448201526000906064015b60405180910390fd5b336000908152600a602052604081208054839081106106a8576106a8613523565b600091825260209182902060408051606081018252600290930290910180546001600160801b03808216808652600160801b90920416948401859052600190910154918301829052919350909190428211156107515760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a20456e64206f66206c6f636b7570206e6f74207265616368604482015261195960f21b606482015260840161067e565b816107ac5760405162461bcd60e51b815260206004820152602560248201527f5374616b696e673a20416c726561647920756e7374616b65642074686973206c60448201526406f636b75760dc1b606482015260840161067e565b6107b5336115a0565b336000908152600a602052604090208054869081106107d6576107d6613523565b600091825260208220600290910201818155600101556107f633826118fd565b60405163a9059cbb60e01b8152336004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190613539565b5060408051868152602081018590529081018390526060810182905233907f05b744e3e9358bc00ba3cc0c6606a4d6536134dba00b2d2ee4b5de169acd6427906080015b60405180910390a25050505050565b60006108e461191b565b905090565b60003361062b8185856108fc8383611299565b6109069190613571565b61147c565b600043821061095c5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161067e565b6001600160a01b038316600090815260086020526040902061097e9083611a42565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000008310156109ed5760405162461bcd60e51b815260206004820152601260248201527114dd185ada5b99ce88151bdbc81cda1bdc9d60721b604482015260640161067e565b6307861f80831115610a355760405162461bcd60e51b81526020600482015260116024820152705374616b696e673a20546f6f206c6f6e6760781b604482015260640161067e565b60007f00000000000000000000000000000000000000000000000000000000000000004211610a84577f0000000000000000000000000000000000000000000000000000000000000000610a86565b425b90506000610a948583613571565b905060006301e13380610ac77f000000000000000000000000000000000000000000000000000000000000000084613589565b610ad990670de0b6b3a76400006135a0565b610ae391906135bf565b90506000610af96718fae27693b4000083611afe565b9050670de0b6b3a7640000610b0e828a6135a0565b610b1891906135bf565b989297509195505050505050565b6001600160a01b039081166000908152600760205260409020541690565b610b4e3382611b3d565b50565b6001600160a01b03811660009081526008602052604081205461063190611b6a565b610b7c336115a0565b565b610b89838383611bd3565b505050565b610b99828233611bd3565b5050565b6001600160a01b038116600090815260056020526040812054610631565b6000438210610c0c5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161067e565b610631600983611a42565b6001600160a01b0381166000908152600860205260408120548015610c8a576001600160a01b0383166000908152600860205260409020610c59600183613589565b81548110610c6957610c69613523565b600091825260209091200154600160201b90046001600160e01b0316610c8d565b60005b6001600160e01b03169392505050565b60003381610cab8286611299565b905083811015610d0b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161067e565b610d18828686840361147c565b506001949350505050565b83421115610d735760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e61747572652065787069726564000000604482015260640161067e565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ded90610de59060a00160405160208183030381529060405280519060200120611f03565b858585611f51565b9050610e16816001600160a01b0316600090815260056020526040902080546001810190915590565b8614610e645760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000604482015260640161067e565b610e6e8188611b3d565b50505050505050565b610e80336115a0565b336000908152600a60205260408120805484908110610ea157610ea1613523565b6000918252602080832060408051606081018252600290940290910180546001600160801b03808216808752600160801b90920416938501849052600190910154918401829052929450919290919080610efb8588610985565b91509150838111610f595760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a204e6577206c6f636b7570206d757374206265206c6f6e6760448201526132b960f11b606482015260840161067e565b6001600160801b0381166020808801919091526040808801849052336000908152600a909252902080548791908a908110610f9657610f96613523565b60009182526020918290208351928401516001600160801b03908116600160801b029316929092176002909102909101908155604090910151600190910155610fe833610fe38585613589565b611f79565b336000908152600d602052604090205460ff161580156110195750600061100e33610b26565b6001600160a01b0316145b15611028576110283333611b3d565b60408051898152602081018790529081018590526060810184905233907f05b744e3e9358bc00ba3cc0c6606a4d6536134dba00b2d2ee4b5de169acd64279060800160405180910390a260408051898152602081018790529081018290526060810183905233907f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde2829060800160405180910390a25050505050505050565b600a60205281600052604060002081815481106110e257600080fd5b6000918252602090912060029091020180546001909101546001600160801b038083169450600160801b909204909116915083565b834211156111675760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161067e565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111b48c6001600160a01b0316600090815260056020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061120f82611f03565b9050600061121f82878787611f51565b9050896001600160a01b0316816001600160a01b0316146112825760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161067e565b61128d8a8a8a61147c565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526001600160a01b0383166000908152600860205260409020805463ffffffff841690811061130857611308613523565b60009182526020918290206040805180820190915291015463ffffffff81168252600160201b90046001600160e01b0316918101919091529392505050565b60008061135360025490565b9050806113635750600092915050565b6000600c549050817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0d801dd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed91906135e1565b6113fc9064e8d4a510006135a0565b61140691906135bf565b6114109082613571565b6001600160a01b0385166000908152600b6020526040812054919250906114379083613589565b905064e8d4a510008161145f876001600160a01b031660009081526020819052604090205490565b61146991906135a0565b61147391906135bf565b95945050505050565b6001600160a01b0383166114de5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161067e565b6001600160a01b03821661153f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161067e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006115ab60025490565b90508015611793576040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561161a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163e91906135e1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370bb45b36040518163ffffffff1660e01b81526004016020604051808303816000875af19250505080156116bc575060408051601f3d908101601f191682019092526116b9918101906135e1565b60015b6116c5576116c7565b505b6040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175491906135e1565b61175e9190613589565b9050826117708264e8d4a510006135a0565b61177a91906135bf565b600c600082825461178b9190613571565b909155505050505b6001600160a01b0382166000908152600b6020526040812054600c546117b99190613589565b9050600064e8d4a51000826117e3866001600160a01b031660009081526020819052604090205490565b6117ed91906135a0565b6117f791906135bf565b600c546001600160a01b0386166000908152600b60205260409020559050806118205750505050565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190613539565b50836001600160a01b03167f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9826040516118ef91815260200190565b60405180910390a250505050565b6119078282612003565b611915600961215883612164565b50505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561197457507f000000000000000000000000000000000000000000000000000000000000000046145b1561199e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8154600090815b81811015611aa6576000611a5d82846122db565b905084868281548110611a7257611a72613523565b60009182526020909120015463ffffffff161115611a9257809250611aa0565b611a9d816001613571565b91505b50611a49565b8115611ae95784611ab8600184613589565b81548110611ac857611ac8613523565b600091825260209091200154600160201b90046001600160e01b0316611aec565b60005b6001600160e01b031695945050505050565b600082611b23578115611b12576000611b1c565b670de0b6b3a76400005b9050610631565b61097e611b38611b32856122f6565b846123a6565b6123b2565b6001600160a01b0382166000908152600d60205260409020805460ff19166001179055610b9982826123f8565b600063ffffffff821115611bcf5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b606482015260840161067e565b5090565b6001600160a01b038116611c295760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a20546f20746865207a65726f206164647265737300000000604482015260640161067e565b6001600160801b03831115611c745760405162461bcd60e51b81526020600482015260116024820152700a6e8c2d6d2dcce7440a8dede40daeac6d607b1b604482015260640161067e565b60008311611cba5760405162461bcd60e51b81526020600482015260136024820152720a6e8c2d6d2dcce74409cdee840cadcdeeaced606b1b604482015260640161067e565b600080611cc78585610985565b90925090506001600160c01b03611cdd60025490565b611ce79084613571565b1115611d355760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a204d617820706f696e747320657863656564656400000000604482015260640161067e565b611d3e836115a0565b6001600160a01b0383166000908152600a6020908152604080832081516060810183526001600160801b03808b16825286811682860190815293820188815283546001818101865594885295909620915193518116600160801b0293169290921760029093029091019182559151910155611db98383611f79565b6040516323b872dd60e01b8152336004820152306024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190613539565b506001600160a01b0383166000908152600d602052604090205460ff16158015611e8b57506000611e8084610b26565b6001600160a01b0316145b15611e9a57611e9a8384611b3d565b6001600160a01b0383166000818152600a60205260409020547f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28290611ee190600190613589565b60408051918252602082018990528101849052606081018590526080016108cb565b6000610631611f1061191b565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611f628787878761248e565b91509150611f6f8161257b565b5095945050505050565b611f838282612736565b6002546001600160e01b031015611ff55760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b606482015260840161067e565b611915600961281d83612164565b6001600160a01b0382166120635760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161067e565b6001600160a01b038216600090815260208190526040902054818110156120d75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161067e565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612106908490613589565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b8983600084612829565b600061097e8284613589565b8254600090819080156121ae578561217d600183613589565b8154811061218d5761218d613523565b600091825260209091200154600160201b90046001600160e01b03166121b1565b60005b6001600160e01b031692506121ca83858763ffffffff16565b9150600081118015612208575043866121e4600184613589565b815481106121f4576121f4613523565b60009182526020909120015463ffffffff16145b156122685761221682612844565b86612222600184613589565b8154811061223257612232613523565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506122d2565b85604051806040016040528061227d43611b6a565b63ffffffff16815260200161229185612844565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b50935093915050565b60006122ea60028484186135bf565b61097e90848416613571565b6000670de0b6b3a764000082101561232457604051633621413760e21b81526004810183905260240161067e565b6000612339670de0b6b3a764000084046128ad565b670de0b6b3a7640000808202935090915083821c9081141561235c575050919050565b6706f05b59d3b200005b801561239e57670de0b6b3a7640000828002049150671bc16d674ec800008210612396579283019260019190911c905b60011c612366565b505050919050565b600061097e8383612995565b6000680a688906bd8b00000082106123e057604051634a4f26f160e01b81526004810183905260240161067e565b670de0b6b3a7640000604083901b0461097e81612a57565b600061240383610b26565b90506000612426846001600160a01b031660009081526020819052604090205490565b6001600160a01b0385811660008181526007602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611915828483613152565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156124c55750600090506003612572565b8460ff16601b141580156124dd57508460ff16601c14155b156124ee5750600090506004612572565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612542573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661256b57600060019250925050612572565b9150600090505b94509492505050565b600081600481111561258f5761258f6135fa565b14156125985750565b60018160048111156125ac576125ac6135fa565b14156125fa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161067e565b600281600481111561260e5761260e6135fa565b141561265c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161067e565b6003816004811115612670576126706135fa565b14156126c95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161067e565b60048160048111156126dd576126dd6135fa565b1415610b4e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161067e565b6001600160a01b03821661278c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161067e565b806002600082825461279e9190613571565b90915550506001600160a01b038216600090815260208190526040812080548392906127cb908490613571565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b9960008383612829565b600061097e8284613571565b610b8961283584610b26565b61283e84610b26565b83613152565b60006001600160e01b03821115611bcf5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b606482015260840161067e565b6000600160801b82106128cd57608091821c916128ca9082613571565b90505b6801000000000000000082106128f057604091821c916128ed9082613571565b90505b600160201b821061290e57602091821c9161290b9082613571565b90505b62010000821061292b57601091821c916129289082613571565b90505b610100821061294757600891821c916129449082613571565b90505b6010821061296257600491821c9161295f9082613571565b90505b6004821061297d57600291821c9161297a9082613571565b90505b6002821061299057610631600182613571565b919050565b60008080600019848609848602925082811083820303915050670de0b6b3a764000081106129d95760405163698d9a0160e11b81526004810182905260240161067e565b600080670de0b6b3a76400008688099150506706f05b59d3b1ffff811182612a135780670de0b6b3a7640000850401945050505050610631565b620400008285030493909111909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690201905092915050565b600160bf1b678000000000000000821615612a7b5768016a09e667f3bcc9090260401c5b674000000000000000821615612a9a576801306fe0a31b7152df0260401c5b672000000000000000821615612ab9576801172b83c7d517adce0260401c5b671000000000000000821615612ad85768010b5586cf9890f62a0260401c5b670800000000000000821615612af7576801059b0d31585743ae0260401c5b670400000000000000821615612b1657680102c9a3e778060ee70260401c5b670200000000000000821615612b355768010163da9fb33356d80260401c5b670100000000000000821615612b5457680100b1afa5abcbed610260401c5b6680000000000000821615612b725768010058c86da1c09ea20260401c5b6640000000000000821615612b90576801002c605e2e8cec500260401c5b6620000000000000821615612bae57680100162f3904051fa10260401c5b6610000000000000821615612bcc576801000b175effdc76ba0260401c5b6608000000000000821615612bea57680100058ba01fb9f96d0260401c5b6604000000000000821615612c085768010002c5cc37da94920260401c5b6602000000000000821615612c26576801000162e525ee05470260401c5b6601000000000000821615612c445768010000b17255775c040260401c5b65800000000000821615612c61576801000058b91b5bc9ae0260401c5b65400000000000821615612c7e57680100002c5c89d5ec6d0260401c5b65200000000000821615612c9b5768010000162e43f4f8310260401c5b65100000000000821615612cb857680100000b1721bcfc9a0260401c5b65080000000000821615612cd55768010000058b90cf1e6e0260401c5b65040000000000821615612cf2576801000002c5c863b73f0260401c5b65020000000000821615612d0f57680100000162e430e5a20260401c5b65010000000000821615612d2c576801000000b1721835510260401c5b648000000000821615612d4857680100000058b90c0b490260401c5b644000000000821615612d645768010000002c5c8601cc0260401c5b642000000000821615612d80576801000000162e42fff00260401c5b641000000000821615612d9c5768010000000b17217fbb0260401c5b640800000000821615612db8576801000000058b90bfce0260401c5b640400000000821615612dd457680100000002c5c85fe30260401c5b640200000000821615612df05768010000000162e42ff10260401c5b600160201b821615612e0b57680100000000b17217f80260401c5b6380000000821615612e265768010000000058b90bfc0260401c5b6340000000821615612e41576801000000002c5c85fe0260401c5b6320000000821615612e5c57680100000000162e42ff0260401c5b6310000000821615612e77576801000000000b17217f0260401c5b6308000000821615612e9257680100000000058b90c00260401c5b6304000000821615612ead5768010000000002c5c8600260401c5b6302000000821615612ec8576801000000000162e4300260401c5b6301000000821615612ee35768010000000000b172180260401c5b62800000821615612efd576801000000000058b90c0260401c5b62400000821615612f1757680100000000002c5c860260401c5b62200000821615612f315768010000000000162e430260401c5b62100000821615612f4b57680100000000000b17210260401c5b62080000821615612f655768010000000000058b910260401c5b62040000821615612f7f576801000000000002c5c80260401c5b62020000821615612f9957680100000000000162e40260401c5b62010000821615612fb3576801000000000000b1720260401c5b618000821615612fcc57680100000000000058b90260401c5b614000821615612fe55768010000000000002c5d0260401c5b612000821615612ffe576801000000000000162e0260401c5b6110008216156130175768010000000000000b170260401c5b610800821615613030576801000000000000058c0260401c5b61040082161561304957680100000000000002c60260401c5b61020082161561306257680100000000000001630260401c5b61010082161561307b57680100000000000000b10260401c5b608082161561309357680100000000000000590260401c5b60408216156130ab576801000000000000002c0260401c5b60208216156130c357680100000000000000160260401c5b60108216156130db576801000000000000000b0260401c5b60088216156130f357680100000000000000060260401c5b600482161561310b57680100000000000000030260401c5b600282161561312357680100000000000000010260401c5b600182161561313b57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b816001600160a01b0316836001600160a01b0316141580156131745750600081115b15610b89576001600160a01b03831615613202576001600160a01b038316600090815260086020526040812081906131af9061215885612164565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516131f7929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610b89576001600160a01b038216600090815260086020526040812081906132389061281d85612164565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516108cb929190918252602082015260400190565b80356001600160a01b038116811461299057600080fd5b6000602082840312156132a957600080fd5b61097e82613280565b600060208083528351808285015260005b818110156132df578581018301518582016040015282016132c3565b818111156132f1576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561331a57600080fd5b61332383613280565b946020939093013593505050565b60008060006060848603121561334657600080fd5b61334f84613280565b925061335d60208501613280565b9150604084013590509250925092565b60006020828403121561337f57600080fd5b5035919050565b6000806040838503121561339957600080fd5b50508035926020909101359150565b6000806000606084860312156133bd57600080fd5b83359250602084013591506133d460408501613280565b90509250925092565b803560ff8116811461299057600080fd5b60008060008060008060c0878903121561340757600080fd5b61341087613280565b9550602087013594506040870135935061342c606088016133dd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561346157600080fd5b61346a88613280565b965061347860208901613280565b95506040880135945060608801359350613494608089016133dd565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156134c357600080fd5b6134cc83613280565b91506134da60208401613280565b90509250929050565b600080604083850312156134f657600080fd5b6134ff83613280565b9150602083013563ffffffff8116811461351857600080fd5b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561354b57600080fd5b8151801515811461097e57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156135845761358461355b565b500190565b60008282101561359b5761359b61355b565b500390565b60008160001904831182151516156135ba576135ba61355b565b500290565b6000826135dc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156135f357600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fdfe566f746520457363726f776564204f726967696e20446f6c6c617220476f7665726e616e6365a26469706673582212203cf0ea7f196455cf5cdee17fbf93796c46865225c959ffc664c1669d873fcc5964736f6c634300080a0033", "bytecodeSha1": "6ce4f870dbe34a1154164e8626a4a36e0df2f057", "compiler": {"evm_version": "istanbul", "optimizer": {"enabled": true, "runs": 200}, "version": "0.8.10+commit.fc410830"}, "contractName": "OgvStaking", "coverageMap": {"branches": {"0": {}, "1": {"ERC20._approve": {"228": [10250, 10269, true], "229": [10328, 10349, true]}, "ERC20._burn": {"230": [9203, 9224, true], "231": [9394, 9418, true]}, "ERC20._mint": {"232": [8494, 8515, true]}, "ERC20.decreaseAllowance": {"227": [6811, 6846, true]}}, "11": {"EIP712._domainSeparatorV4": {"225": [3219, 3248, false], "226": [3252, 3285, false]}}, "14": {"PRBMath.exp2": {"260": [5351, 5377, false], "261": [5474, 5500, false], "262": [5597, 5623, false], "263": [5720, 5746, false], "264": [5843, 5868, false], "265": [5965, 5990, false], "266": [6087, 6112, false], "267": [6209, 6234, false], "268": [6331, 6355, false], "269": [6452, 6476, false], "270": [6573, 6597, false], "271": [6694, 6718, false], "272": [6815, 6838, false], "273": [6935, 6958, false], "274": [7055, 7078, false], "275": [7175, 7198, false], "276": [7295, 7317, false], "277": [7414, 7436, false], "278": [7533, 7555, false], "279": [7652, 7674, false], "280": [7771, 7792, false], "281": [7889, 7910, false], "282": [8007, 8028, false], "283": [8125, 8146, false], "284": [8243, 8263, false], "285": [8360, 8380, false], "286": [8477, 8497, false], "287": [8594, 8614, false], "288": [8711, 8730, false], "289": [8827, 8846, false], "290": [8943, 8962, false], "291": [9059, 9078, false], "292": [9175, 9193, false], "293": [9290, 9308, false], "294": [9405, 9423, false], "295": [9520, 9538, false], "296": [9635, 9652, false], "297": [9749, 9766, false], "298": [9863, 9880, false], "299": [9977, 9994, false], "300": [10091, 10107, false], "301": [10204, 10220, false], "302": [10317, 10333, false], "303": [10430, 10446, false], "304": [10543, 10558, false], "305": [10655, 10670, false], "306": [10767, 10782, false], "307": [10879, 10894, false], "308": [10991, 11005, false], "309": [11102, 11116, false], "310": [11213, 11227, false], "311": [11324, 11338, false], "312": [11435, 11448, false], "313": [11545, 11558, false], "314": [11655, 11668, false], "315": [11765, 11778, false], "316": [11875, 11887, false], "317": [11984, 11996, false], "318": [12093, 12105, false], "319": [12202, 12214, false], "320": [12311, 12322, false], "321": [12419, 12430, false], "322": [12527, 12538, false], "323": [12635, 12646, false]}, "PRBMath.mostSignificantBit": {"250": [13836, 13847, false], "251": [13920, 13930, false], "252": [14001, 14011, false], "253": [14082, 14092, false], "254": [14163, 14172, false], "255": [14241, 14250, false], "256": [14319, 14328, false], "257": [14397, 14406, false]}, "PRBMath.mulDivFixedPoint": {"258": [20498, 20512, false], "259": [20792, 20802, false]}}, "15": {"PRBMathUD60x18.exp2": {"329": [5744, 5755, false]}, "PRBMathUD60x18.log2": {"326": [19466, 19475, false], "327": [20112, 20122, false], "328": [20534, 20548, false]}, "PRBMathUD60x18.pow": {"324": [22253, 22259, false], "325": [22284, 22290, true]}}, "17": {"OgvStaking._collectRewards": {"217": [10636, 10646, false], "218": [11245, 11260, false]}, "OgvStaking._stake": {"219": [4755, 4771, true], "220": [4822, 4849, true], "221": [4889, 4899, true], "222": [5077, 5120, true], "223": [5549, 5569, false], "224": [5573, 5600, false]}, "OgvStaking.extend": {"213": [7688, 7703, true], "214": [7928, 7956, false], "215": [7960, 7995, false]}, "OgvStaking.previewPoints": {"210": [8743, 8771, true], "211": [8812, 8833, true], "212": [8881, 8904, true]}, "OgvStaking.previewRewards": {"216": [9651, 9662, false]}, "OgvStaking.unstake": {"208": [6162, 6184, true], "209": [6241, 6249, true]}}, "18": {}, "2": {}, "3": {"ERC20Votes._checkpointsLookup": {"240": [4965, 4999, false], "241": [5123, 5132, true]}, "ERC20Votes._mint": {"242": [6435, 6464, true]}, "ERC20Votes._moveVotingPower": {"246": [7919, 7929, false], "247": [7933, 7943, false], "248": [7963, 7980, false], "249": [8198, 8215, false]}, "ERC20Votes._writeCheckpoint": {"243": [8698, 8706, true], "244": [8790, 8797, false], "245": [8801, 8841, false]}, "ERC20Votes.delegateBySig": {"238": [5637, 5662, true], "239": [5910, 5936, true]}, "ERC20Votes.getPastTotalSupply": {"236": [3483, 3509, true]}, "ERC20Votes.getPastVotes": {"235": [2950, 2976, true]}, "ERC20Votes.getVotes": {"237": [2574, 2582, true]}}, "4": {}, "5": {"ERC20Permit.permit": {"233": [2164, 2191, true], "234": [2475, 2490, true]}}, "6": {}, "7": {}}, "statements": {"0": {}, "1": {"ERC20._approve": {"56": [10242, 10310], "57": [10320, 10388], "58": [10399, 10435], "59": [10445, 10482]}, "ERC20._burn": {"91": [9195, 9262], "92": [9386, 9457], "93": [9491, 9535], "94": [9555, 9577], "95": [9588, 9630], "96": [9641, 9689]}, "ERC20._mint": {"115": [8486, 8551], "116": [8622, 8644], "117": [8654, 8682], "118": [8692, 8734], "119": [8745, 8793]}, "ERC20.allowance": {"51": [4084, 4118]}, "ERC20.approve": {"6": [4570, 4602], "7": [4612, 4623]}, "ERC20.balanceOf": {"2": [3501, 3526]}, "ERC20.decimals": {"1": [3168, 3177]}, "ERC20.decreaseAllowance": {"33": [6803, 6888], "34": [6922, 6982], "35": [7003, 7014]}, "ERC20.increaseAllowance": {"17": [6015, 6079]}, "ERC20.totalSupply": {"0": [3324, 3343]}}, "11": {"EIP712._buildDomainSeparator": {"68": [3616, 3707]}, "EIP712._domainSeparatorV4": {"67": [3301, 3332], "69": [3363, 3434]}, "EIP712._hashTypedDataV4": {"87": [4435, 4497]}}, "14": {"PRBMath.exp2": {"140": [5397, 5442], "141": [5520, 5565], "142": [5643, 5688], "143": [5766, 5811], "144": [5888, 5933], "145": [6010, 6055], "146": [6132, 6177], "147": [6254, 6299], "148": [6375, 6420], "149": [6496, 6541], "150": [6617, 6662], "151": [6738, 6783], "152": [6858, 6903], "153": [6978, 7023], "154": [7098, 7143], "155": [7218, 7263], "156": [7337, 7382], "157": [7456, 7501], "158": [7575, 7620], "159": [7694, 7739], "160": [7812, 7857], "161": [7930, 7975], "162": [8048, 8093], "163": [8166, 8211], "164": [8283, 8328], "165": [8400, 8445], "166": [8517, 8562], "167": [8634, 8679], "168": [8750, 8795], "169": [8866, 8911], "170": [8982, 9027], "171": [9098, 9143], "172": [9213, 9258], "173": [9328, 9373], "174": [9443, 9488], "175": [9558, 9603], "176": [9672, 9717], "177": [9786, 9831], "178": [9900, 9945], "179": [10014, 10059], "180": [10127, 10172], "181": [10240, 10285], "182": [10353, 10398], "183": [10466, 10511], "184": [10578, 10623], "185": [10690, 10735], "186": [10802, 10847], "187": [10914, 10959], "188": [11025, 11070], "189": [11136, 11181], "190": [11247, 11292], "191": [11358, 11403], "192": [11468, 11513], "193": [11578, 11623], "194": [11688, 11733], "195": [11798, 11843], "196": [11907, 11952], "197": [12016, 12061], "198": [12125, 12170], "199": [12234, 12279], "200": [12342, 12387], "201": [12450, 12495], "202": [12558, 12603], "203": [12666, 12711], "204": [13286, 13301], "205": [13315, 13343]}, "PRBMath.mostSignificantBit": {"122": [13863, 13872], "123": [13886, 13896], "124": [13946, 13954], "125": [13968, 13977], "126": [14027, 14035], "127": [14049, 14058], "128": [14108, 14116], "129": [14130, 14139], "130": [14188, 14195], "131": [14209, 14217], "132": [14266, 14273], "133": [14287, 14295], "134": [14344, 14351], "135": [14365, 14373], "136": [14466, 14474]}, "PRBMath.mulDivFixedPoint": {"137": [20494, 20586], "138": [20846, 20884], "139": [20902, 20915]}}, "15": {"PRBMathUD60x18.exp2": {"110": [5740, 5823], "111": [6083, 6113]}, "PRBMathUD60x18.log2": {"102": [19462, 19544], "103": [19949, 19967], "104": [20142, 20155], "105": [20435, 20454], "106": [20635, 20650], "107": [20729, 20736], "108": [20404, 20415]}, "PRBMathUD60x18.mul": {"109": [21354, 21393]}, "PRBMathUD60x18.pow": {"73": [22275, 22311], "74": [22342, 22372]}}, "17": {"OgvStaking._collectRewards": {"60": [10948, 10996], "61": [11187, 11231], "62": [11276, 11283], "63": [11302, 11332], "64": [11342, 11371]}, "OgvStaking._delegate": {"75": [11620, 11654], "76": [11664, 11701]}, "OgvStaking._stake": {"77": [4747, 4804], "78": [4814, 4871], "79": [4881, 4923], "80": [5056, 5174], "81": [5184, 5203], "82": [5213, 5415], "83": [5425, 5442], "84": [5452, 5503], "85": [5686, 5703], "86": [5724, 5783]}, "OgvStaking.collectRewards": {"26": [9292, 9319]}, "OgvStaking.extend": {"39": [7342, 7369], "40": [7680, 7742], "41": [7752, 7780], "42": [7790, 7815], "43": [7825, 7863], "44": [7873, 7913], "45": [8081, 8114], "46": [8134, 8198], "47": [8208, 8270]}, "OgvStaking.name": {"4": [2680, 2727]}, "OgvStaking.previewPoints": {"20": [8735, 8794], "21": [8804, 8855], "22": [9116, 9158]}, "OgvStaking.previewRewards": {"53": [9678, 9686], "54": [9807, 9877], "55": [9983, 10035]}, "OgvStaking.stake": {"27": [3857, 3885], "28": [4376, 4412]}, "OgvStaking.symbol": {"3": [2813, 2827]}, "OgvStaking.transferFrom": {"8": [3087, 3124]}, "OgvStaking.unstake": {"9": [6154, 6223], "10": [6233, 6291], "11": [6301, 6328], "12": [6338, 6374], "13": [6431, 6456], "14": [6466, 6498], "15": [6508, 6563]}}, "18": {}, "2": {}, "3": {"ERC20Votes._add": {"120": [9146, 9158]}, "ERC20Votes._afterTokenTransfer": {"121": [7193, 7249]}, "ERC20Votes._burn": {"65": [6763, 6791], "66": [6802, 6862]}, "ERC20Votes._checkpointsLookup": {"70": [5019, 5029], "71": [5068, 5081], "72": [5116, 5160]}, "ERC20Votes._delegate": {"112": [7610, 7643], "113": [7654, 7713], "114": [7724, 7786]}, "ERC20Votes._mint": {"88": [6389, 6417], "89": [6427, 6517], "90": [6528, 6583]}, "ERC20Votes._moveVotingPower": {"206": [8113, 8165], "207": [8343, 8395]}, "ERC20Votes._subtract": {"97": [9253, 9265]}, "ERC20Votes._writeCheckpoint": {"98": [8686, 8733], "99": [8743, 8775], "100": [8857, 8909], "101": [8940, 9046]}, "ERC20Votes.checkpoints": {"52": [1866, 1899]}, "ERC20Votes.delegate": {"24": [5319, 5353]}, "ERC20Votes.delegateBySig": {"36": [5629, 5696], "37": [5902, 5966], "38": [5976, 6004]}, "ERC20Votes.delegates": {"23": [2311, 2337]}, "ERC20Votes.getPastTotalSupply": {"30": [3475, 3545], "31": [3555, 3618]}, "ERC20Votes.getPastVotes": {"18": [2942, 3012], "19": [3022, 3083]}, "ERC20Votes.getVotes": {"32": [2567, 2625]}, "ERC20Votes.numCheckpoints": {"25": [2069, 2123]}}, "4": {}, "5": {"ERC20Permit.DOMAIN_SEPARATOR": {"16": [2964, 2991]}, "ERC20Permit.nonces": {"29": [2723, 2754]}, "ERC20Permit.permit": {"48": [2156, 2225], "49": [2467, 2525], "50": [2536, 2567]}}, "6": {}, "7": {"Context._msgSender": {"5": [712, 729]}}}}, "dependencies": ["OpenZeppelin/openzeppelin-contracts@4.6.0/Context", "OpenZeppelin/openzeppelin-contracts@4.6.0/EIP712", "OpenZeppelin/openzeppelin-contracts@4.6.0/ERC20", "OpenZeppelin/openzeppelin-contracts@4.6.0/ERC20Permit", "OpenZeppelin/openzeppelin-contracts@4.6.0/ERC20Votes", "OpenZeppelin/openzeppelin-contracts@4.6.0/IERC20", "OpenZeppelin/openzeppelin-contracts@4.6.0/IERC20Metadata", "OpenZeppelin/openzeppelin-contracts@4.6.0/IERC20Permit", "OpenZeppelin/openzeppelin-contracts@4.6.0/IVotes", "Mintable", "paulrberg/prb-math@2.5.0/PRBMath", "paulrberg/prb-math@2.5.0/PRBMathUD60x18", "RewardsSource"], "deployedBytecode": "608060405234801561001057600080fd5b50600436106102275760003560e01c806370bb45b311610130578063a457c2d7116100b8578063d505accf1161007c578063d505accf14610560578063dd62ed3e14610573578063f1127ed814610586578063f166e920146105c3578063f7240d2f146105d657600080fd5b8063a457c2d7146104e0578063a9059cbb146104f3578063c3cda52014610501578063c89258db14610514578063c93d0b1e1461052757600080fd5b80638e539e8c116100ff5780638e539e8c14610469578063900cf0cf1461047c578063939d6237146104a357806395d89b41146104ac5780639ab24eb0146104cd57600080fd5b806370bb45b3146104285780637628a37d146104305780637b0472f0146104435780637ecebe001461045657600080fd5b806339509351116101b3578063587cde1e11610182578063587cde1e1461038a5780635c19a95c1461039d5780635fec5c64146103b05780636fcfff45146103d757806370a08231146103ff57600080fd5b8063395093511461031c5780633a46b1a81461032f5780634423bf57146103425780634fd0e6481461036257600080fd5b806318160ddd116101fa57806318160ddd146102cb57806323b872dd146102dd5780632e17de78146102f0578063313ce567146103055780633644e5151461031457600080fd5b80630348dbf11461022c57806306fdde0314610264578063095ea7b314610279578063142561cf1461028c575b600080fd5b61024f61023a366004613297565b600d6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61026c6105fd565b60405161025b91906132b2565b61024f610287366004613307565b61061d565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025b565b6002545b60405190815260200161025b565b61024f6102eb366004613331565b610637565b6103036102fe36600461336d565b610687565b005b6040516012815260200161025b565b6102cf6108da565b61024f61032a366004613307565b6108e9565b6102cf61033d366004613307565b61090b565b6102cf610350366004613297565b600b6020526000908152604090205481565b610375610370366004613386565b610985565b6040805192835260208301919091520161025b565b6102b3610398366004613297565b610b26565b6103036103ab366004613297565b610b44565b6102cf7f000000000000000000000000000000000000000000000000000000000000000081565b6103ea6103e5366004613297565b610b51565b60405163ffffffff909116815260200161025b565b6102cf61040d366004613297565b6001600160a01b031660009081526020819052604090205490565b610303610b73565b61030361043e3660046133a8565b610b7e565b610303610451366004613386565b610b8e565b6102cf610464366004613297565b610b9d565b6102cf61047736600461336d565b610bbb565b6102cf7f000000000000000000000000000000000000000000000000000000000000000081565b6102cf600c5481565b6040805180820190915260058152643b32a7a3ab60d91b602082015261026c565b6102cf6104db366004613297565b610c17565b61024f6104ee366004613307565b610c9d565b61024f6102eb366004613307565b61030361050f3660046133ee565b610d23565b610303610522366004613386565b610e77565b61053a610535366004613307565b6110c6565b604080516001600160801b0394851681529390921660208401529082015260600161025b565b61030361056e366004613446565b611117565b6102cf6105813660046134b0565b611299565b6105996105943660046134e3565b6112c4565b60408051825163ffffffff1681526020928301516001600160e01b0316928101929092520161025b565b6102cf6105d1366004613297565b611347565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b606060405180606001604052806026815260200161361160269139905090565b60003361062b81858561147c565b60019150505b92915050565b60405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a205472616e73666572732064697361626c6564000000000060448201526000906064015b60405180910390fd5b336000908152600a602052604081208054839081106106a8576106a8613523565b600091825260209182902060408051606081018252600290930290910180546001600160801b03808216808652600160801b90920416948401859052600190910154918301829052919350909190428211156107515760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a20456e64206f66206c6f636b7570206e6f74207265616368604482015261195960f21b606482015260840161067e565b816107ac5760405162461bcd60e51b815260206004820152602560248201527f5374616b696e673a20416c726561647920756e7374616b65642074686973206c60448201526406f636b75760dc1b606482015260840161067e565b6107b5336115a0565b336000908152600a602052604090208054869081106107d6576107d6613523565b600091825260208220600290910201818155600101556107f633826118fd565b60405163a9059cbb60e01b8152336004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190613539565b5060408051868152602081018590529081018390526060810182905233907f05b744e3e9358bc00ba3cc0c6606a4d6536134dba00b2d2ee4b5de169acd6427906080015b60405180910390a25050505050565b60006108e461191b565b905090565b60003361062b8185856108fc8383611299565b6109069190613571565b61147c565b600043821061095c5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161067e565b6001600160a01b038316600090815260086020526040902061097e9083611a42565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000008310156109ed5760405162461bcd60e51b815260206004820152601260248201527114dd185ada5b99ce88151bdbc81cda1bdc9d60721b604482015260640161067e565b6307861f80831115610a355760405162461bcd60e51b81526020600482015260116024820152705374616b696e673a20546f6f206c6f6e6760781b604482015260640161067e565b60007f00000000000000000000000000000000000000000000000000000000000000004211610a84577f0000000000000000000000000000000000000000000000000000000000000000610a86565b425b90506000610a948583613571565b905060006301e13380610ac77f000000000000000000000000000000000000000000000000000000000000000084613589565b610ad990670de0b6b3a76400006135a0565b610ae391906135bf565b90506000610af96718fae27693b4000083611afe565b9050670de0b6b3a7640000610b0e828a6135a0565b610b1891906135bf565b989297509195505050505050565b6001600160a01b039081166000908152600760205260409020541690565b610b4e3382611b3d565b50565b6001600160a01b03811660009081526008602052604081205461063190611b6a565b610b7c336115a0565b565b610b89838383611bd3565b505050565b610b99828233611bd3565b5050565b6001600160a01b038116600090815260056020526040812054610631565b6000438210610c0c5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161067e565b610631600983611a42565b6001600160a01b0381166000908152600860205260408120548015610c8a576001600160a01b0383166000908152600860205260409020610c59600183613589565b81548110610c6957610c69613523565b600091825260209091200154600160201b90046001600160e01b0316610c8d565b60005b6001600160e01b03169392505050565b60003381610cab8286611299565b905083811015610d0b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161067e565b610d18828686840361147c565b506001949350505050565b83421115610d735760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e61747572652065787069726564000000604482015260640161067e565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ded90610de59060a00160405160208183030381529060405280519060200120611f03565b858585611f51565b9050610e16816001600160a01b0316600090815260056020526040902080546001810190915590565b8614610e645760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000604482015260640161067e565b610e6e8188611b3d565b50505050505050565b610e80336115a0565b336000908152600a60205260408120805484908110610ea157610ea1613523565b6000918252602080832060408051606081018252600290940290910180546001600160801b03808216808752600160801b90920416938501849052600190910154918401829052929450919290919080610efb8588610985565b91509150838111610f595760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a204e6577206c6f636b7570206d757374206265206c6f6e6760448201526132b960f11b606482015260840161067e565b6001600160801b0381166020808801919091526040808801849052336000908152600a909252902080548791908a908110610f9657610f96613523565b60009182526020918290208351928401516001600160801b03908116600160801b029316929092176002909102909101908155604090910151600190910155610fe833610fe38585613589565b611f79565b336000908152600d602052604090205460ff161580156110195750600061100e33610b26565b6001600160a01b0316145b15611028576110283333611b3d565b60408051898152602081018790529081018590526060810184905233907f05b744e3e9358bc00ba3cc0c6606a4d6536134dba00b2d2ee4b5de169acd64279060800160405180910390a260408051898152602081018790529081018290526060810183905233907f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde2829060800160405180910390a25050505050505050565b600a60205281600052604060002081815481106110e257600080fd5b6000918252602090912060029091020180546001909101546001600160801b038083169450600160801b909204909116915083565b834211156111675760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161067e565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111b48c6001600160a01b0316600090815260056020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061120f82611f03565b9050600061121f82878787611f51565b9050896001600160a01b0316816001600160a01b0316146112825760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161067e565b61128d8a8a8a61147c565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526001600160a01b0383166000908152600860205260409020805463ffffffff841690811061130857611308613523565b60009182526020918290206040805180820190915291015463ffffffff81168252600160201b90046001600160e01b0316918101919091529392505050565b60008061135360025490565b9050806113635750600092915050565b6000600c549050817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0d801dd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed91906135e1565b6113fc9064e8d4a510006135a0565b61140691906135bf565b6114109082613571565b6001600160a01b0385166000908152600b6020526040812054919250906114379083613589565b905064e8d4a510008161145f876001600160a01b031660009081526020819052604090205490565b61146991906135a0565b61147391906135bf565b95945050505050565b6001600160a01b0383166114de5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161067e565b6001600160a01b03821661153f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161067e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006115ab60025490565b90508015611793576040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561161a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163e91906135e1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370bb45b36040518163ffffffff1660e01b81526004016020604051808303816000875af19250505080156116bc575060408051601f3d908101601f191682019092526116b9918101906135e1565b60015b6116c5576116c7565b505b6040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175491906135e1565b61175e9190613589565b9050826117708264e8d4a510006135a0565b61177a91906135bf565b600c600082825461178b9190613571565b909155505050505b6001600160a01b0382166000908152600b6020526040812054600c546117b99190613589565b9050600064e8d4a51000826117e3866001600160a01b031660009081526020819052604090205490565b6117ed91906135a0565b6117f791906135bf565b600c546001600160a01b0386166000908152600b60205260409020559050806118205750505050565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190613539565b50836001600160a01b03167f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9826040516118ef91815260200190565b60405180910390a250505050565b6119078282612003565b611915600961215883612164565b50505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561197457507f000000000000000000000000000000000000000000000000000000000000000046145b1561199e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8154600090815b81811015611aa6576000611a5d82846122db565b905084868281548110611a7257611a72613523565b60009182526020909120015463ffffffff161115611a9257809250611aa0565b611a9d816001613571565b91505b50611a49565b8115611ae95784611ab8600184613589565b81548110611ac857611ac8613523565b600091825260209091200154600160201b90046001600160e01b0316611aec565b60005b6001600160e01b031695945050505050565b600082611b23578115611b12576000611b1c565b670de0b6b3a76400005b9050610631565b61097e611b38611b32856122f6565b846123a6565b6123b2565b6001600160a01b0382166000908152600d60205260409020805460ff19166001179055610b9982826123f8565b600063ffffffff821115611bcf5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b606482015260840161067e565b5090565b6001600160a01b038116611c295760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a20546f20746865207a65726f206164647265737300000000604482015260640161067e565b6001600160801b03831115611c745760405162461bcd60e51b81526020600482015260116024820152700a6e8c2d6d2dcce7440a8dede40daeac6d607b1b604482015260640161067e565b60008311611cba5760405162461bcd60e51b81526020600482015260136024820152720a6e8c2d6d2dcce74409cdee840cadcdeeaced606b1b604482015260640161067e565b600080611cc78585610985565b90925090506001600160c01b03611cdd60025490565b611ce79084613571565b1115611d355760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a204d617820706f696e747320657863656564656400000000604482015260640161067e565b611d3e836115a0565b6001600160a01b0383166000908152600a6020908152604080832081516060810183526001600160801b03808b16825286811682860190815293820188815283546001818101865594885295909620915193518116600160801b0293169290921760029093029091019182559151910155611db98383611f79565b6040516323b872dd60e01b8152336004820152306024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190613539565b506001600160a01b0383166000908152600d602052604090205460ff16158015611e8b57506000611e8084610b26565b6001600160a01b0316145b15611e9a57611e9a8384611b3d565b6001600160a01b0383166000818152600a60205260409020547f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28290611ee190600190613589565b60408051918252602082018990528101849052606081018590526080016108cb565b6000610631611f1061191b565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611f628787878761248e565b91509150611f6f8161257b565b5095945050505050565b611f838282612736565b6002546001600160e01b031015611ff55760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b606482015260840161067e565b611915600961281d83612164565b6001600160a01b0382166120635760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161067e565b6001600160a01b038216600090815260208190526040902054818110156120d75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161067e565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612106908490613589565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b8983600084612829565b600061097e8284613589565b8254600090819080156121ae578561217d600183613589565b8154811061218d5761218d613523565b600091825260209091200154600160201b90046001600160e01b03166121b1565b60005b6001600160e01b031692506121ca83858763ffffffff16565b9150600081118015612208575043866121e4600184613589565b815481106121f4576121f4613523565b60009182526020909120015463ffffffff16145b156122685761221682612844565b86612222600184613589565b8154811061223257612232613523565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506122d2565b85604051806040016040528061227d43611b6a565b63ffffffff16815260200161229185612844565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b50935093915050565b60006122ea60028484186135bf565b61097e90848416613571565b6000670de0b6b3a764000082101561232457604051633621413760e21b81526004810183905260240161067e565b6000612339670de0b6b3a764000084046128ad565b670de0b6b3a7640000808202935090915083821c9081141561235c575050919050565b6706f05b59d3b200005b801561239e57670de0b6b3a7640000828002049150671bc16d674ec800008210612396579283019260019190911c905b60011c612366565b505050919050565b600061097e8383612995565b6000680a688906bd8b00000082106123e057604051634a4f26f160e01b81526004810183905260240161067e565b670de0b6b3a7640000604083901b0461097e81612a57565b600061240383610b26565b90506000612426846001600160a01b031660009081526020819052604090205490565b6001600160a01b0385811660008181526007602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611915828483613152565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156124c55750600090506003612572565b8460ff16601b141580156124dd57508460ff16601c14155b156124ee5750600090506004612572565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612542573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661256b57600060019250925050612572565b9150600090505b94509492505050565b600081600481111561258f5761258f6135fa565b14156125985750565b60018160048111156125ac576125ac6135fa565b14156125fa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161067e565b600281600481111561260e5761260e6135fa565b141561265c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161067e565b6003816004811115612670576126706135fa565b14156126c95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161067e565b60048160048111156126dd576126dd6135fa565b1415610b4e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161067e565b6001600160a01b03821661278c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161067e565b806002600082825461279e9190613571565b90915550506001600160a01b038216600090815260208190526040812080548392906127cb908490613571565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b9960008383612829565b600061097e8284613571565b610b8961283584610b26565b61283e84610b26565b83613152565b60006001600160e01b03821115611bcf5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b606482015260840161067e565b6000600160801b82106128cd57608091821c916128ca9082613571565b90505b6801000000000000000082106128f057604091821c916128ed9082613571565b90505b600160201b821061290e57602091821c9161290b9082613571565b90505b62010000821061292b57601091821c916129289082613571565b90505b610100821061294757600891821c916129449082613571565b90505b6010821061296257600491821c9161295f9082613571565b90505b6004821061297d57600291821c9161297a9082613571565b90505b6002821061299057610631600182613571565b919050565b60008080600019848609848602925082811083820303915050670de0b6b3a764000081106129d95760405163698d9a0160e11b81526004810182905260240161067e565b600080670de0b6b3a76400008688099150506706f05b59d3b1ffff811182612a135780670de0b6b3a7640000850401945050505050610631565b620400008285030493909111909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690201905092915050565b600160bf1b678000000000000000821615612a7b5768016a09e667f3bcc9090260401c5b674000000000000000821615612a9a576801306fe0a31b7152df0260401c5b672000000000000000821615612ab9576801172b83c7d517adce0260401c5b671000000000000000821615612ad85768010b5586cf9890f62a0260401c5b670800000000000000821615612af7576801059b0d31585743ae0260401c5b670400000000000000821615612b1657680102c9a3e778060ee70260401c5b670200000000000000821615612b355768010163da9fb33356d80260401c5b670100000000000000821615612b5457680100b1afa5abcbed610260401c5b6680000000000000821615612b725768010058c86da1c09ea20260401c5b6640000000000000821615612b90576801002c605e2e8cec500260401c5b6620000000000000821615612bae57680100162f3904051fa10260401c5b6610000000000000821615612bcc576801000b175effdc76ba0260401c5b6608000000000000821615612bea57680100058ba01fb9f96d0260401c5b6604000000000000821615612c085768010002c5cc37da94920260401c5b6602000000000000821615612c26576801000162e525ee05470260401c5b6601000000000000821615612c445768010000b17255775c040260401c5b65800000000000821615612c61576801000058b91b5bc9ae0260401c5b65400000000000821615612c7e57680100002c5c89d5ec6d0260401c5b65200000000000821615612c9b5768010000162e43f4f8310260401c5b65100000000000821615612cb857680100000b1721bcfc9a0260401c5b65080000000000821615612cd55768010000058b90cf1e6e0260401c5b65040000000000821615612cf2576801000002c5c863b73f0260401c5b65020000000000821615612d0f57680100000162e430e5a20260401c5b65010000000000821615612d2c576801000000b1721835510260401c5b648000000000821615612d4857680100000058b90c0b490260401c5b644000000000821615612d645768010000002c5c8601cc0260401c5b642000000000821615612d80576801000000162e42fff00260401c5b641000000000821615612d9c5768010000000b17217fbb0260401c5b640800000000821615612db8576801000000058b90bfce0260401c5b640400000000821615612dd457680100000002c5c85fe30260401c5b640200000000821615612df05768010000000162e42ff10260401c5b600160201b821615612e0b57680100000000b17217f80260401c5b6380000000821615612e265768010000000058b90bfc0260401c5b6340000000821615612e41576801000000002c5c85fe0260401c5b6320000000821615612e5c57680100000000162e42ff0260401c5b6310000000821615612e77576801000000000b17217f0260401c5b6308000000821615612e9257680100000000058b90c00260401c5b6304000000821615612ead5768010000000002c5c8600260401c5b6302000000821615612ec8576801000000000162e4300260401c5b6301000000821615612ee35768010000000000b172180260401c5b62800000821615612efd576801000000000058b90c0260401c5b62400000821615612f1757680100000000002c5c860260401c5b62200000821615612f315768010000000000162e430260401c5b62100000821615612f4b57680100000000000b17210260401c5b62080000821615612f655768010000000000058b910260401c5b62040000821615612f7f576801000000000002c5c80260401c5b62020000821615612f9957680100000000000162e40260401c5b62010000821615612fb3576801000000000000b1720260401c5b618000821615612fcc57680100000000000058b90260401c5b614000821615612fe55768010000000000002c5d0260401c5b612000821615612ffe576801000000000000162e0260401c5b6110008216156130175768010000000000000b170260401c5b610800821615613030576801000000000000058c0260401c5b61040082161561304957680100000000000002c60260401c5b61020082161561306257680100000000000001630260401c5b61010082161561307b57680100000000000000b10260401c5b608082161561309357680100000000000000590260401c5b60408216156130ab576801000000000000002c0260401c5b60208216156130c357680100000000000000160260401c5b60108216156130db576801000000000000000b0260401c5b60088216156130f357680100000000000000060260401c5b600482161561310b57680100000000000000030260401c5b600282161561312357680100000000000000010260401c5b600182161561313b57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b816001600160a01b0316836001600160a01b0316141580156131745750600081115b15610b89576001600160a01b03831615613202576001600160a01b038316600090815260086020526040812081906131af9061215885612164565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516131f7929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610b89576001600160a01b038216600090815260086020526040812081906132389061281d85612164565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516108cb929190918252602082015260400190565b80356001600160a01b038116811461299057600080fd5b6000602082840312156132a957600080fd5b61097e82613280565b600060208083528351808285015260005b818110156132df578581018301518582016040015282016132c3565b818111156132f1576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561331a57600080fd5b61332383613280565b946020939093013593505050565b60008060006060848603121561334657600080fd5b61334f84613280565b925061335d60208501613280565b9150604084013590509250925092565b60006020828403121561337f57600080fd5b5035919050565b6000806040838503121561339957600080fd5b50508035926020909101359150565b6000806000606084860312156133bd57600080fd5b83359250602084013591506133d460408501613280565b90509250925092565b803560ff8116811461299057600080fd5b60008060008060008060c0878903121561340757600080fd5b61341087613280565b9550602087013594506040870135935061342c606088016133dd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561346157600080fd5b61346a88613280565b965061347860208901613280565b95506040880135945060608801359350613494608089016133dd565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156134c357600080fd5b6134cc83613280565b91506134da60208401613280565b90509250929050565b600080604083850312156134f657600080fd5b6134ff83613280565b9150602083013563ffffffff8116811461351857600080fd5b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561354b57600080fd5b8151801515811461097e57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156135845761358461355b565b500190565b60008282101561359b5761359b61355b565b500390565b60008160001904831182151516156135ba576135ba61355b565b500290565b6000826135dc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156135f357600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fdfe566f746520457363726f776564204f726967696e20446f6c6c617220476f7665726e616e6365a26469706673582212203cf0ea7f196455cf5cdee17fbf93796c46865225c959ffc664c1669d873fcc5964736f6c634300080a0033", "deployedSourceMap": "837:10873:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1828:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;548:14:20;;541:22;523:41;;511:2;496:18;1828:48:17;;;;;;;;2609:125;;;:::i;:::-;;;;;;;:::i;4433:197:1:-;;;;;;:::i;:::-;;:::i;1258:26:17:-;;;;;;;;-1:-1:-1;;;;;1614:32:20;;;1596:51;;1584:2;1569:18;1258:26:17;1436:217:20;3244:106:1;3331:12;;3244:106;;;1804:25:20;;;1792:2;1777:18;3244:106:1;1658:177:20;2967:164:17;;;;;;:::i;:::-;;:::i;5924:646::-;;;;;;:::i;:::-;;:::i;:::-;;3093:91:1;;;3175:2;2500:36:20;;2488:2;2473:18;3093:91:1;2358:184:20;2885:113:5;;;:::i;5873:234:1:-;;;;;;:::i;:::-;;:::i;2825:265:3:-;;;;;;:::i;:::-;;:::i;1369:53:17:-;;;;;;:::i;:::-;;;;;;;;;;;;;;8601:564;;;;;;:::i;:::-;;:::i;:::-;;;;3156:25:20;;;3212:2;3197:18;;3190:34;;;;3129:18;8601:564:17;2982:248:20;2218:126:3;;;;;;:::i;:::-;;:::i;5248:112::-;;;;;;:::i;:::-;;:::i;949:41:17:-;;;;;1981:149:3;;;;;;:::i;:::-;;:::i;:::-;;;3617:10:20;3605:23;;;3587:42;;3575:2;3560:18;1981:149:3;3443:192:20;3408:125:1;;;;;;:::i;:::-;-1:-1:-1;;;;;3508:18:1;3482:7;3508:18;;;;;;;;;;;;3408:125;9247:79:17;;;:::i;3747:145::-;;;;;;:::i;:::-;;:::i;4308:111::-;;;;;;:::i;:::-;;:::i;2635:126:5:-;;;;;;:::i;:::-;;:::i;3369:256:3:-;;;;;;:::i;:::-;;:::i;900:30:17:-;;;;;1428:32;;;;;;2740:94;2813:14;;;;;;;;;;;;-1:-1:-1;;;2813:14:17;;;;2740:94;;2423:209:3;;;;;;:::i;:::-;;:::i;6594:427:1:-;;;;;;:::i;:::-;;:::i;2840:121:17:-;;;;;;:::i;5437:574:3:-;;;;;;:::i;:::-;;:::i;7222:1055:17:-;;;;;;:::i;:::-;;:::i;1183:43::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4937:15:20;;;4919:34;;4989:15;;;;4984:2;4969:18;;4962:43;5021:18;;;5014:34;4854:2;4839:18;1183:43:17;4664:390:20;1948:626:5;;;;;;:::i;:::-;;:::i;3976:149:1:-;;;;;;:::i;:::-;;:::i;1758:148:3:-;;;;;;:::i;:::-;;:::i;:::-;;;;6514:13:20;;6529:10;6510:30;6492:49;;6601:4;6589:17;;;6583:24;-1:-1:-1;;;;;6579:50:20;6557:20;;;6550:80;;;;6465:18;1758:148:3;6290:346:20;9527:515:17;;;;;;:::i;:::-;;:::i;1319:44::-;;;;;2609:125;2655:13;2680:47;;;;;;;;;;;;;;;;;;;2609:125;:::o;4433:197:1:-;4516:4;719:10:7;4570:32:1;719:10:7;4586:7:1;4595:6;4570:8;:32::i;:::-;4619:4;4612:11;;;4433:197;;;;;:::o;2967:164:17:-;3087:37;;-1:-1:-1;;;3087:37:17;;7073:2:20;3087:37:17;;;7055:21:20;7112:2;7092:18;;;7085:30;7151:29;7131:18;;;7124:57;3071:4:17;;7198:18:20;;3087:37:17;;;;;;;;5924:646;6009:10;5978:20;6001:19;;;:7;:19;;;;;:29;;6021:8;;6001:29;;;;;;:::i;:::-;;;;;;;;;;5978:52;;;;;;;;6001:29;;;;;;;5978:52;;-1:-1:-1;;;;;5978:52:17;;;;;;-1:-1:-1;;;5978:52:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5978:52:17;;;6162:15;:22;-1:-1:-1;6162:22:17;6154:69;;;;-1:-1:-1;;;6154:69:17;;7561:2:20;6154:69:17;;;7543:21:20;7600:2;7580:18;;;7573:30;7639:34;7619:18;;;7612:62;-1:-1:-1;;;7690:18:20;;;7683:32;7732:19;;6154:69:17;7359:398:20;6154:69:17;6241:8;6233:58;;;;-1:-1:-1;;;6233:58:17;;7964:2:20;6233:58:17;;;7946:21:20;8003:2;7983:18;;;7976:30;8042:34;8022:18;;;8015:62;-1:-1:-1;;;8093:18:20;;;8086:35;8138:19;;6233:58:17;7762:401:20;6233:58:17;6301:27;6317:10;6301:15;:27::i;:::-;6353:10;6345:19;;;;:7;:19;;;;;:29;;6365:8;;6345:29;;;;;;:::i;:::-;;;;;;;;;;;;;6338:36;;;;;;6431:25;6437:10;6449:6;6431:5;:25::i;:::-;6466:32;;-1:-1:-1;;;6466:32:17;;6479:10;6466:32;;;8342:51:20;8409:18;;;8402:34;;;6466:3:17;-1:-1:-1;;;;;6466:12:17;;;;8315:18:20;;6466:32:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6513:50:17;;;8960:25:20;;;9016:2;9001:18;;8994:34;;;9044:18;;;9037:34;;;9102:2;9087:18;;9080:34;;;6521:10:17;;6513:50;;8947:3:20;8932:19;6513:50:17;;;;;;;;5968:602;;;;5924:646;:::o;2885:113:5:-;2945:7;2971:20;:18;:20::i;:::-;2964:27;;2885:113;:::o;5873:234:1:-;5961:4;719:10:7;6015:64:1;719:10:7;6031:7:1;6068:10;6040:25;719:10:7;6031:7:1;6040:9;:25::i;:::-;:38;;;;:::i;:::-;6015:8;:64::i;2825:265:3:-;2923:7;2964:12;2950:11;:26;2942:70;;;;-1:-1:-1;;;2942:70:3;;9592:2:20;2942:70:3;;;9574:21:20;9631:2;9611:18;;;9604:30;9670:33;9650:18;;;9643:61;9721:18;;2942:70:3;9390:355:20;2942:70:3;-1:-1:-1;;;;;3048:21:3;;;;;;:12;:21;;;;;3029:54;;3071:11;3029:18;:54::i;:::-;3022:61;2825:265;-1:-1:-1;;;2825:265:3:o;8601:564:17:-;8703:7;8712;8755:16;8743:8;:28;;8735:59;;;;-1:-1:-1;;;8735:59:17;;9952:2:20;8735:59:17;;;9934:21:20;9991:2;9971:18;;;9964:30;-1:-1:-1;;;10010:18:20;;;10003:48;10068:18;;8735:59:17;9750:342:20;8735:59:17;8824:9;8812:8;:21;;8804:51;;;;-1:-1:-1;;;8804:51:17;;10299:2:20;8804:51:17;;;10281:21:20;10338:2;10318:18;;;10311:30;-1:-1:-1;;;10357:18:20;;;10350:47;10414:18;;8804:51:17;10097:341:20;8804:51:17;8865:13;8899:5;8881:15;:23;:49;;8925:5;8881:49;;;8907:15;8881:49;8865:65;-1:-1:-1;8940:11:17;8954:16;8962:8;8865:65;8954:16;:::i;:::-;8940:30;-1:-1:-1;8980:18:17;9026:8;9003:11;9009:5;8940:30;9003:11;:::i;:::-;9002:20;;9018:4;9002:20;:::i;:::-;9001:33;;;;:::i;:::-;8980:54;;9044:18;9065:41;1077:5;9095:10;9065:18;:41::i;:::-;9044:62;-1:-1:-1;9148:4:17;9125:19;9044:62;9125:6;:19;:::i;:::-;9124:28;;;;:::i;:::-;9116:42;9154:3;;-1:-1:-1;8601:564:17;;-1:-1:-1;;;;;;8601:564:17:o;2218:126:3:-;-1:-1:-1;;;;;2318:19:3;;;2292:7;2318:19;;;:10;:19;;;;;;;;2218:126::o;5248:112::-;5319:34;719:10:7;5343:9:3;5319;:34::i;:::-;5248:112;:::o;1981:149::-;-1:-1:-1;;;;;2094:21:3;;2051:6;2094:21;;;:12;:21;;;;;:28;2076:47;;:17;:47::i;9247:79:17:-;9292:27;9308:10;9292:15;:27::i;:::-;9247:79::o;3747:145::-;3857:28;3864:6;3872:8;3882:2;3857:6;:28::i;:::-;3747:145;;;:::o;4308:111::-;4376:36;4383:6;4391:8;4401:10;4376:6;:36::i;:::-;4308:111;;:::o;2635:126:5:-;-1:-1:-1;;;;;2730:14:5;;2704:7;2730:14;;;:7;:14;;;;;918::8;2730:24:5;827:112:8;3369:256:3;3456:7;3497:12;3483:11;:26;3475:70;;;;-1:-1:-1;;;3475:70:3;;9592:2:20;3475:70:3;;;9574:21:20;9631:2;9611:18;;;9604:30;9670:33;9650:18;;;9643:61;9721:18;;3475:70:3;9390:355:20;3475:70:3;3562:56;3581:23;3606:11;3562:18;:56::i;2423:209::-;-1:-1:-1;;;;;2529:21:3;;2496:7;2529:21;;;:12;:21;;;;;:28;2574:8;;:51;;-1:-1:-1;;;;;2589:21:3;;;;;;:12;:21;;;;;2611:7;2617:1;2611:3;:7;:::i;:::-;2589:30;;;;;;;;:::i;:::-;;;;;;;;;;:36;-1:-1:-1;;;2589:36:3;;-1:-1:-1;;;;;2589:36:3;2574:51;;;2585:1;2574:51;-1:-1:-1;;;;;2567:58:3;;2423:209;-1:-1:-1;;;2423:209:3:o;6594:427:1:-;6687:4;719:10:7;6687:4:1;6768:25;719:10:7;6785:7:1;6768:9;:25::i;:::-;6741:52;;6831:15;6811:16;:35;;6803:85;;;;-1:-1:-1;;;6803:85:1;;11302:2:20;6803:85:1;;;11284:21:20;11341:2;11321:18;;;11314:30;11380:34;11360:18;;;11353:62;-1:-1:-1;;;11431:18:20;;;11424:35;11476:19;;6803:85:1;11100:401:20;6803:85:1;6922:60;6931:5;6938:7;6966:15;6947:16;:34;6922:8;:60::i;:::-;-1:-1:-1;7010:4:1;;6594:427;-1:-1:-1;;;;6594:427:1:o;5437:574:3:-;5656:6;5637:15;:25;;5629:67;;;;-1:-1:-1;;;5629:67:3;;11708:2:20;5629:67:3;;;11690:21:20;11747:2;11727:18;;;11720:30;11786:31;11766:18;;;11759:59;11835:18;;5629:67:3;11506:353:20;5629:67:3;5777:58;;;1447:71;5777:58;;;12095:25:20;-1:-1:-1;;;;;12156:32:20;;12136:18;;;12129:60;;;;12205:18;;;12198:34;;;12248:18;;;12241:34;;;5706:14:3;;5723:169;;5750:87;;12067:19:20;;5777:58:3;;;;;;;;;;;;5767:69;;;;;;5750:16;:87::i;:::-;5851:1;5866;5881;5723:13;:169::i;:::-;5706:186;;5919:17;5929:6;-1:-1:-1;;;;;3249:14:5;3189:15;3249:14;;;:7;:14;;;;;918::8;;1050:1;1032:19;;;;;918:14;3129:203:5;5919:17:3;5910:5;:26;5902:64;;;;-1:-1:-1;;;5902:64:3;;12488:2:20;5902:64:3;;;12470:21:20;12527:2;12507:18;;;12500:30;12566:27;12546:18;;;12539:55;12611:18;;5902:64:3;12286:349:20;5902:64:3;5976:28;5986:6;5994:9;5976;:28::i;:::-;5619:392;5437:574;;;;;;:::o;7222:1055:17:-;7342:27;7358:10;7342:15;:27::i;:::-;7410:10;7379:20;7402:19;;;:7;:19;;;;;:29;;7422:8;;7402:29;;;;;;:::i;:::-;;;;;;;;;7379:52;;;;;;;;7402:29;;;;;;;7379:52;;-1:-1:-1;;;;;7379:52:17;;;;;;-1:-1:-1;;;7379:52:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7379:52:17;;;;;7402:29;7602:68;7379:52;7652:8;7602:13;:68::i;:::-;7564:106;;;;7697:6;7688;:15;7680:62;;;;-1:-1:-1;;;7680:62:17;;12842:2:20;7680:62:17;;;12824:21:20;12881:2;12861:18;;;12854:30;12920:34;12900:18;;;12893:62;-1:-1:-1;;;12971:18:20;;;12964:32;13013:19;;7680:62:17;12640:398:20;7680:62:17;-1:-1:-1;;;;;7752:28:17;;:10;;;;:28;;;;7790:13;;;;:25;;;7833:10;-1:-1:-1;7825:19:17;;;:7;:19;;;;;:29;;7752:6;;7825:19;7845:8;;7825:29;;;;;;:::i;:::-;;;;;;;;;;:38;;;;;;-1:-1:-1;;;;;7825:38:17;;;-1:-1:-1;;;7825:38:17;;;;;;;:29;;;;;;;:38;;;;;;;;;;;;;7873:40;7879:10;7891:21;7903:9;7891;:21;:::i;:::-;7873:5;:40::i;:::-;7945:10;7928:28;;;;:16;:28;;;;;;;;7927:29;:68;;;;-1:-1:-1;7993:1:17;7960:21;7970:10;7960:9;:21::i;:::-;-1:-1:-1;;;;;7960:35:17;;7927:68;7923:202;;;8081:33;8091:10;8103;8081:9;:33::i;:::-;8139:59;;;8960:25:20;;;9016:2;9001:18;;8994:34;;;9044:18;;;9037:34;;;9102:2;9087:18;;9080:34;;;8147:10:17;;8139:59;;8947:3:20;8932:19;8139:59:17;;;;;;;8213:57;;;8960:25:20;;;9016:2;9001:18;;8994:34;;;9044:18;;;9037:34;;;9102:2;9087:18;;9080:34;;;8219:10:17;;8213:57;;8947:3:20;8932:19;8213:57:17;;;;;;;7283:994;;;;;;7222:1055;;:::o;1183:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1183:43:17;;;;-1:-1:-1;;;;1183:43:17;;;;;;;-1:-1:-1;1183:43:17;:::o;1948:626:5:-;2183:8;2164:15;:27;;2156:69;;;;-1:-1:-1;;;2156:69:5;;13245:2:20;2156:69:5;;;13227:21:20;13284:2;13264:18;;;13257:30;13323:31;13303:18;;;13296:59;13372:18;;2156:69:5;13043:353:20;2156:69:5;2236:18;1143:95;2296:5;2303:7;2312:5;2319:16;2329:5;-1:-1:-1;;;;;3249:14:5;3189:15;3249:14;;;:7;:14;;;;;918::8;;1050:1;1032:19;;;;;918:14;3129:203:5;2319:16;2267:79;;;;;;13688:25:20;;;;-1:-1:-1;;;;;13787:15:20;;;13767:18;;;13760:43;13839:15;;;;13819:18;;;13812:43;13871:18;;;13864:34;13914:19;;;13907:35;13958:19;;;13951:35;;;13660:19;;2267:79:5;;;;;;;;;;;;2257:90;;;;;;2236:111;;2358:12;2373:28;2390:10;2373:16;:28::i;:::-;2358:43;;2412:14;2429:28;2443:4;2449:1;2452;2455;2429:13;:28::i;:::-;2412:45;;2485:5;-1:-1:-1;;;;;2475:15:5;:6;-1:-1:-1;;;;;2475:15:5;;2467:58;;;;-1:-1:-1;;;2467:58:5;;14199:2:20;2467:58:5;;;14181:21:20;14238:2;14218:18;;;14211:30;14277:32;14257:18;;;14250:60;14327:18;;2467:58:5;13997:354:20;2467:58:5;2536:31;2545:5;2552:7;2561:5;2536:8;:31::i;:::-;2146:428;;;1948:626;;;;;;;:::o;3976:149:1:-;-1:-1:-1;;;;;4091:18:1;;;4065:7;4091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3976:149::o;1758:148:3:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;1873:21:3;;;;;;:12;:21;;;;;:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1866:33;;;;;;;;;1873:26;;1866:33;;;;;;-1:-1:-1;;;1866:33:3;;-1:-1:-1;;;;;1866:33:3;;;;;;;;;1758:148;-1:-1:-1;;;1758:148:3:o;9527:515:17:-;9588:7;9607:14;9624:13;3331:12:1;;;3244:106;9624:13:17;9607:30;-1:-1:-1;9651:11:17;9647:95;;-1:-1:-1;9685:1:17;;9527:515;-1:-1:-1;;9527:515:17:o;9647:95::-;9751:26;9780:17;;9751:46;;9871:6;9830:13;-1:-1:-1;;;;;9830:28:17;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;9863:4;9830:37;:::i;:::-;9829:48;;;;:::i;:::-;9807:70;;;;:::i;:::-;-1:-1:-1;;;;;9949:24:17;;9887:26;9949:24;;;:18;:24;;;;;;9807:70;;-1:-1:-1;9887:26:17;9916:57;;9807:70;9916:57;:::i;:::-;9887:86;;10031:4;10009:18;9991:15;10001:4;-1:-1:-1;;;;;3508:18:1;3482:7;3508:18;;;;;;;;;;;;3408:125;9991:15:17;:36;;;;:::i;:::-;9990:45;;;;:::i;:::-;9983:52;9527:515;-1:-1:-1;;;;;9527:515:17:o;10119:370:1:-;-1:-1:-1;;;;;10250:19:1;;10242:68;;;;-1:-1:-1;;;10242:68:1;;14747:2:20;10242:68:1;;;14729:21:20;14786:2;14766:18;;;14759:30;14825:34;14805:18;;;14798:62;-1:-1:-1;;;14876:18:20;;;14869:34;14920:19;;10242:68:1;14545:400:20;10242:68:1;-1:-1:-1;;;;;10328:21:1;;10320:68;;;;-1:-1:-1;;;10320:68:1;;15152:2:20;10320:68:1;;;15134:21:20;15191:2;15171:18;;;15164:30;15230:34;15210:18;;;15203:62;-1:-1:-1;;;15281:18:20;;;15274:32;15323:19;;10320:68:1;14950:398:20;10320:68:1;-1:-1:-1;;;;;10399:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10450:32;;1804:25:20;;;10450:32:1;;1777:18:20;10450:32:1;;;;;;;10119:370;;;:::o;10534:844:17:-;10592:14;10609:13;3331:12:1;;;3244:106;10609:13:17;10592:30;-1:-1:-1;10636:10:17;;10632:375;;10683:28;;-1:-1:-1;;;10683:28:17;;10705:4;10683:28;;;1596:51:20;10662:18:17;;10683:3;-1:-1:-1;;;;;10683:13:17;;;;1569:18:20;;10683:28:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10662:49;;10729:13;-1:-1:-1;;;;;10729:28:17;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10729:30:17;;;;;;;;-1:-1:-1;;10729:30:17;;;;;;;;;;;;:::i;:::-;;;10725:135;;;;;;;10893:28;;-1:-1:-1;;;10893:28:17;;10915:4;10893:28;;;1596:51:20;10873:17:17;;10924:10;;-1:-1:-1;;;;;10893:3:17;:13;;;;1569:18:20;;10893:28:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;;:::i;:::-;10873:61;-1:-1:-1;10990:6:17;10970:16;10873:61;10982:4;10970:16;:::i;:::-;10969:27;;;;:::i;:::-;10948:17;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;10632:375:17;-1:-1:-1;;;;;11077:24:17;;11016:26;11077:24;;;:18;:24;;;;;;11045:17;;:56;;11077:24;11045:56;:::i;:::-;11016:85;;11111:18;11173:4;11151:18;11133:15;11143:4;-1:-1:-1;;;;;3508:18:1;3482:7;3508:18;;;;;;;;;;;;3408:125;11133:15:17;:36;;;;:::i;:::-;11132:45;;;;:::i;:::-;11214:17;;-1:-1:-1;;;;;11187:24:17;;;;;;:18;:24;;;;;:44;11111:66;-1:-1:-1;11245:15:17;11241:52;;11276:7;;;10534:844;:::o;11241:52::-;11302:30;;-1:-1:-1;;;11302:30:17;;-1:-1:-1;;;;;8360:32:20;;;11302:30:17;;;8342:51:20;8409:18;;;8402:34;;;11302:3:17;:12;;;;8315:18:20;;11302:30:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11354:4;-1:-1:-1;;;;;11347:24:17;;11360:10;11347:24;;;;1804:25:20;;1792:2;1777:18;;1658:177;11347:24:17;;;;;;;;10582:796;;;10534:844;:::o;6679:190:3:-;6763:28;6775:7;6784:6;6763:11;:28::i;:::-;6802:60;6819:23;6844:9;6855:6;6802:16;:60::i;:::-;;;6679:190;;:::o;3143:308:11:-;3196:7;3227:4;-1:-1:-1;;;;;3236:12:11;3219:29;;:66;;;;;3269:16;3252:13;:33;3219:66;3215:230;;;-1:-1:-1;3308:24:11;;3143:308::o;3215:230::-;-1:-1:-1;3633:73:11;;;3392:10;3633:73;;;;19029:25:20;;;;3404:12:11;19070:18:20;;;19063:34;3418:15:11;19113:18:20;;;19106:34;3677:13:11;19156:18:20;;;19149:34;3700:4:11;19199:19:20;;;;19192:61;;;;3633:73:11;;;;;;;;;;19001:19:20;;;;3633:73:11;;;3623:84;;;;;;2885:113:5:o;3709:1458:3:-;4830:12;;3808:7;;;4877:229;4890:4;4884:3;:10;4877:229;;;4910:11;4924:23;4937:3;4942:4;4924:12;:23::i;:::-;4910:37;;4988:11;4965:5;4971:3;4965:10;;;;;;;;:::i;:::-;;;;;;;;;;:20;;;:34;4961:135;;;5026:3;5019:10;;4961:135;;;5074:7;:3;5080:1;5074:7;:::i;:::-;5068:13;;4961:135;4896:210;4877:229;;;5123:9;;:37;;5139:5;5145:8;5152:1;5145:4;:8;:::i;:::-;5139:15;;;;;;;;:::i;:::-;;;;;;;;;;:21;-1:-1:-1;;;5139:21:3;;-1:-1:-1;;;;;5139:21:3;5123:37;;;5135:1;5123:37;-1:-1:-1;;;;;5116:44:3;;3709:1458;-1:-1:-1;;;;;3709:1458:3:o;22165:224:15:-;22223:14;22253:6;22249:134;;22284:6;;:27;;22309:1;22284:27;;;1359:4;22284:27;22275:36;;22249:134;;;22351:21;22356:15;22360:7;22365:1;22360:4;:7::i;:::-;22369:1;22356:3;:15::i;:::-;22351:4;:21::i;11535:173:17:-;-1:-1:-1;;;;;11620:27:17;;;;;;:16;:27;;;;;:34;;-1:-1:-1;;11620:34:17;11650:4;11620:34;;;11664:37;11637:9;11691;11664:15;:37::i;3045:187:13:-;3101:6;3136:16;3127:25;;;3119:76;;;;-1:-1:-1;;;3119:76:13;;15555:2:20;3119:76:13;;;15537:21:20;15594:2;15574:18;;;15567:30;15633:34;15613:18;;;15606:62;-1:-1:-1;;;15684:18:20;;;15677:36;15730:19;;3119:76:13;15353:402:20;3119:76:13;-1:-1:-1;3219:5:13;3045:187::o;4636:1154:17:-;-1:-1:-1;;;;;4755:16:17;;4747:57;;;;-1:-1:-1;;;4747:57:17;;15962:2:20;4747:57:17;;;15944:21:20;16001:2;15981:18;;;15974:30;16040;16020:18;;;16013:58;16088:18;;4747:57:17;15760:352:20;4747:57:17;-1:-1:-1;;;;;4822:27:17;;;4814:57;;;;-1:-1:-1;;;4814:57:17;;16319:2:20;4814:57:17;;;16301:21:20;16358:2;16338:18;;;16331:30;-1:-1:-1;;;16377:18:20;;;16370:47;16434:18;;4814:57:17;16117:341:20;4814:57:17;4898:1;4889:6;:10;4881:42;;;;-1:-1:-1;;;4881:42:17;;16665:2:20;4881:42:17;;;16647:21:20;16704:2;16684:18;;;16677:30;-1:-1:-1;;;16723:18:20;;;16716:49;16782:18;;4881:42:17;16463:343:20;4881:42:17;4984:14;5000:11;5015:31;5029:6;5037:8;5015:13;:31::i;:::-;4983:63;;-1:-1:-1;4983:63:17;-1:-1:-1;;;;;;5086:13:17;3331:12:1;;;3244:106;5086:13:17;5077:22;;:6;:22;:::i;:::-;:43;;5056:118;;;;-1:-1:-1;;;5056:118:17;;17013:2:20;5056:118:17;;;16995:21:20;17052:2;17032:18;;;17025:30;17091;17071:18;;;17064:58;17139:18;;5056:118:17;16811:352:20;5056:118:17;5184:19;5200:2;5184:15;:19::i;:::-;-1:-1:-1;;;;;5213:11:17;;;;;;:7;:11;;;;;;;;5243:162;;;;;;;-1:-1:-1;;;;;5243:162:17;;;;;;;;;;;;;;;;;;;;5213:202;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5213:202:17;;;;;;;;;;;;;;;;;;;;;;5425:17;5221:2;5384:6;5425:5;:17::i;:::-;5452:51;;-1:-1:-1;;;5452:51:17;;5469:10;5452:51;;;17408:34:20;5489:4:17;17458:18:20;;;17451:43;17510:18;;;17503:34;;;5452:3:17;-1:-1:-1;;;;;5452:16:17;;;;17343:18:20;;5452:51:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;5549:20:17;;;;;;:16;:20;;;;;;;;5548:21;:52;;;;-1:-1:-1;5598:1:17;5573:13;5583:2;5573:9;:13::i;:::-;-1:-1:-1;;;;;5573:27:17;;5548:52;5544:170;;;5686:17;5696:2;5700;5686:9;:17::i;:::-;-1:-1:-1;;;;;5729:54:17;;5739:11;;;;:7;:11;;;;;:18;5729:54;;5739:22;;5760:1;;5739:22;:::i;:::-;5729:54;;;8960:25:20;;;9016:2;9001:18;;8994:34;;;9044:18;;9037:34;;;9102:2;9087:18;;9080:34;;;8947:3;8932:19;5729:54:17;8729:391:20;4339:165:11;4416:7;4442:55;4464:20;:18;:20::i;:::-;4486:10;9226:57:10;;-1:-1:-1;;;9226:57:10;;;19522:27:20;19565:11;;;19558:27;;;19601:12;;;19594:28;;;9190:7:10;;19638:12:20;;9226:57:10;;;;;;;;;;;;9216:68;;;;;;9209:75;;9097:194;;;;;7452:270;7575:7;7595:17;7614:18;7636:25;7647:4;7653:1;7656;7659;7636:10;:25::i;:::-;7594:67;;;;7671:18;7683:5;7671:11;:18::i;:::-;-1:-1:-1;7706:9:10;7452:270;-1:-1:-1;;;;;7452:270:10:o;6305:285:3:-;6389:28;6401:7;6410:6;6389:11;:28::i;:::-;3331:12:1;;-1:-1:-1;;;;;;6435:29:3;6427:90;;;;-1:-1:-1;;;6427:90:3;;17750:2:20;6427:90:3;;;17732:21:20;17789:2;17769:18;;;17762:30;17828:34;17808:18;;;17801:62;-1:-1:-1;;;17879:18:20;;;17872:46;17935:19;;6427:90:3;17548:412:20;6427:90:3;6528:55;6545:23;6570:4;6576:6;6528:16;:55::i;9120:576:1:-;-1:-1:-1;;;;;9203:21:1;;9195:67;;;;-1:-1:-1;;;9195:67:1;;18167:2:20;9195:67:1;;;18149:21:20;18206:2;18186:18;;;18179:30;18245:34;18225:18;;;18218:62;-1:-1:-1;;;18296:18:20;;;18289:31;18337:19;;9195:67:1;17965:397:20;9195:67:1;-1:-1:-1;;;;;9358:18:1;;9333:22;9358:18;;;;;;;;;;;9394:24;;;;9386:71;;;;-1:-1:-1;;;9386:71:1;;18569:2:20;9386:71:1;;;18551:21:20;18608:2;18588:18;;;18581:30;18647:34;18627:18;;;18620:62;-1:-1:-1;;;18698:18:20;;;18691:32;18740:19;;9386:71:1;18367:398:20;9386:71:1;-1:-1:-1;;;;;9491:18:1;;:9;:18;;;;;;;;;;9512:23;;;9491:44;;9555:12;:22;;9529:6;;9491:9;9555:22;;9529:6;;9555:22;:::i;:::-;;;;-1:-1:-1;;9593:37:1;;1804:25:20;;;9619:1:1;;-1:-1:-1;;;;;9593:37:1;;;;;1792:2:20;1777:18;9593:37:1;;;;;;;9641:48;9661:7;9678:1;9682:6;9641:19;:48::i;9171:101:3:-;9234:7;9260:5;9264:1;9260;:5;:::i;8432:631::-;8664:12;;8602:17;;;;8698:8;;:35;;8713:5;8719:7;8725:1;8719:3;:7;:::i;:::-;8713:14;;;;;;;;:::i;:::-;;;;;;;;;;:20;-1:-1:-1;;;8713:20:3;;-1:-1:-1;;;;;8713:20:3;8698:35;;;8709:1;8698:35;-1:-1:-1;;;;;8686:47:3;;;8755:20;8758:9;8769:5;8755:2;:20;;:::i;:::-;8743:32;;8796:1;8790:3;:7;:51;;;;-1:-1:-1;8829:12:3;8801:5;8807:7;8813:1;8807:3;:7;:::i;:::-;8801:14;;;;;;;;:::i;:::-;;;;;;;;;;:24;;;:40;8790:51;8786:271;;;8880:29;8899:9;8880:18;:29::i;:::-;8857:5;8863:7;8869:1;8863:3;:7;:::i;:::-;8857:14;;;;;;;;:::i;:::-;;;;;;;;:20;;;:52;;;;;-1:-1:-1;;;;;8857:52:3;;;;;-1:-1:-1;;;;;8857:52:3;;;;;;8786:271;;;8940:5;8951:94;;;;;;;;8974:31;8992:12;8974:17;:31::i;:::-;8951:94;;;;;;9014:29;9033:9;9014:18;:29::i;:::-;-1:-1:-1;;;;;8951:94:3;;;;;;8940:106;;;;;;;-1:-1:-1;8940:106:3;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8940:106:3;;;;;;;;;;;;8786:271;8640:423;8432:631;;;;;;:::o;678:153:12:-;740:7;813:11;823:1;814:5;;;813:11;:::i;:::-;803:21;;804:5;;;803:21;:::i;19388:1397:15:-;19436:14;1359:4;19466:1;:9;19462:82;;;19498:35;;-1:-1:-1;;;19498:35:15;;;;;1804:25:20;;;1777:18;;19498:35:15;1658:177:20;19462:82:15;19699:9;19711:37;1359:4;19738:1;:9;19711:26;:37::i;:::-;1359:4;19958:9;;;;-1:-1:-1;19699:49:15;;-1:-1:-1;20033:6:15;;;;20112:10;;20108:62;;;20142:13;;19388:1397;;;:::o;20108:62::-;670:4;20360:409;20393:9;;20360:409;;1359:4;20440:5;;;20439:15;;-1:-1:-1;20539:9:15;20534:14;;20530:225;;20635:15;;;;20735:1;20729:7;;;;;20530:225;20414:1;20404:11;20360:409;;;;19553:1226;;19388:1397;;;:::o;21270:130::-;21328:14;21363:30;21388:1;21391;21363:24;:30::i;5574:556::-;5622:14;5749:6;5744:1;:11;5740:83;;5778:34;;-1:-1:-1;;;5778:34:15;;;;;1804:25:20;;;1777:18;;5778:34:15;1658:177:20;5740:83:15;1359:4;5944:2;5939:7;;;5938:17;6092:21;5938:17;6092:12;:21::i;7413:380:3:-;7497:23;7523:20;7533:9;7523;:20::i;:::-;7497:46;;7553:24;7580:20;7590:9;-1:-1:-1;;;;;3508:18:1;3482:7;3508:18;;;;;;;;;;;;3408:125;7580:20:3;-1:-1:-1;;;;;7610:21:3;;;;;;;:10;:21;;;;;;:33;;-1:-1:-1;;;;;;7610:33:3;;;;;;;;;;7659:54;;7553:47;;-1:-1:-1;7610:33:3;7659:54;;;;;;7610:21;7659:54;7724:62;7741:15;7758:9;7769:16;7724;:62::i;5716:1603:10:-;5842:7;;6766:66;6753:79;;6749:161;;;-1:-1:-1;6864:1:10;;-1:-1:-1;6868:30:10;6848:51;;6749:161;6923:1;:7;;6928:2;6923:7;;:18;;;;;6934:1;:7;;6939:2;6934:7;;6923:18;6919:100;;;-1:-1:-1;6973:1:10;;-1:-1:-1;6977:30:10;6957:51;;6919:100;7130:24;;;7113:14;7130:24;;;;;;;;;19888:25:20;;;19961:4;19949:17;;19929:18;;;19922:45;;;;19983:18;;;19976:34;;;20026:18;;;20019:34;;;7130:24:10;;19860:19:20;;7130:24:10;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7130:24:10;;-1:-1:-1;;7130:24:10;;;-1:-1:-1;;;;;;;7168:20:10;;7164:101;;7220:1;7224:29;7204:50;;;;;;;7164:101;7283:6;-1:-1:-1;7291:20:10;;-1:-1:-1;5716:1603:10;;;;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;;766:34;;-1:-1:-1;;;766:34:10;;20398:2:20;766:34:10;;;20380:21:20;20437:2;20417:18;;;20410:30;20476:26;20456:18;;;20449:54;20520:18;;766:34:10;20196:348:20;708:465:10;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;;881:41;;-1:-1:-1;;;881:41:10;;20751:2:20;881:41:10;;;20733:21:20;20790:2;20770:18;;;20763:30;20829:33;20809:18;;;20802:61;20880:18;;881:41:10;20549:355:20;817:356:10;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;;998:44;;-1:-1:-1;;;998:44:10;;21111:2:20;998:44:10;;;21093:21:20;21150:2;21130:18;;;21123:30;21189:34;21169:18;;;21162:62;-1:-1:-1;;;21240:18:20;;;21233:32;21282:19;;998:44:10;20909:398:20;939:234:10;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;;1118:44;;-1:-1:-1;;;1118:44:10;;21514:2:20;1118:44:10;;;21496:21:20;21553:2;21533:18;;;21526:30;21592:34;21572:18;;;21565:62;-1:-1:-1;;;21643:18:20;;;21636:32;21685:19;;1118:44:10;21312:398:20;8411:389:1;-1:-1:-1;;;;;8494:21:1;;8486:65;;;;-1:-1:-1;;;8486:65:1;;21917:2:20;8486:65:1;;;21899:21:20;21956:2;21936:18;;;21929:30;21995:33;21975:18;;;21968:61;22046:18;;8486:65:1;21715:355:20;8486:65:1;8638:6;8622:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8654:18:1;;:9;:18;;;;;;;;;;:28;;8676:6;;8654:9;:28;;8676:6;;8654:28;:::i;:::-;;;;-1:-1:-1;;8697:37:1;;1804:25:20;;;-1:-1:-1;;;;;8697:37:1;;;8714:1;;8697:37;;1792:2:20;1777:18;8697:37:1;;;;;;;8745:48;8773:1;8777:7;8786:6;8745:19;:48::i;9069:96:3:-;9127:7;9153:5;9157:1;9153;:5;:::i;7002:254::-;7193:56;7210:15;7220:4;7210:9;:15::i;:::-;7227:13;7237:2;7227:9;:13::i;:::-;7242:6;7193:16;:56::i;1135:192:13:-;1192:7;-1:-1:-1;;;;;1219:26:13;;;1211:78;;;;-1:-1:-1;;;1211:78:13;;22277:2:20;1211:78:13;;;22259:21:20;22316:2;22296:18;;;22289:30;22355:34;22335:18;;;22328:62;-1:-1:-1;;;22406:18:20;;;22399:37;22453:19;;1211:78:13;22075:403:20;13747:744:14;13809:11;-1:-1:-1;;;13836:1:14;:11;13832:75;;13869:3;13863:9;;;;13886:10;;;;:::i;:::-;;;13832:75;13925:5;13920:1;:10;13916:72;;13952:2;13946:8;;;;13968:9;;;;:::i;:::-;;;13916:72;-1:-1:-1;;;14001:1:14;:10;13997:72;;14033:2;14027:8;;;;14049:9;;;;:::i;:::-;;;13997:72;14087:5;14082:1;:10;14078:72;;14114:2;14108:8;;;;14130:9;;;;:::i;:::-;;;14078:72;14168:4;14163:1;:9;14159:69;;14194:1;14188:7;;;;14209:8;;;;:::i;:::-;;;14159:69;14246:4;14241:1;:9;14237:69;;14272:1;14266:7;;;;14287:8;;;;:::i;:::-;;;14237:69;14324:4;14319:1;:9;14315:69;;14350:1;14344:7;;;;14365:8;;;;:::i;:::-;;;14315:69;14402:4;14397:1;:9;14393:92;;14466:8;14473:1;14466:8;;:::i;14393:92::-;13747:744;;;:::o;20191:1149::-;20262:14;;;-1:-1:-1;;20377:1:14;20374;20367:20;20416:1;20413;20409:9;20400:18;;20467:5;20463:2;20460:13;20452:5;20448:2;20444:14;20440:34;20431:43;;;4210:4;20498:5;:14;20494:92;;20535:40;;-1:-1:-1;;;20535:40:14;;;;;1804:25:20;;;1777:18;;20535:40:14;1658:177:20;20494:92:14;20596:17;20623:19;20701:5;20698:1;20695;20688:19;20675:32;-1:-1:-1;;20749:18:14;20735:33;;20792:10;20788:152;;20873:11;4210:4;20856:5;:13;20855:29;20846:38;;20902:13;;;;;;20788:152;21189:11;21061:21;;;21057:39;21137:20;;;;21126:32;;;-1:-1:-1;;;21122:84:14;21029:199;;;;21250:13;21004:277;20983:341;;-1:-1:-1;20191:1149:14;;;;:::o;4886:8474::-;-1:-1:-1;;;5355:18:14;5351:22;;:26;5347:110;;5416:19;5407:28;5440:2;5406:36;5347:110;5478:18;5474:22;;:26;5470:110;;5539:19;5530:28;5563:2;5529:36;5470:110;5601:18;5597:22;;:26;5593:110;;5662:19;5653:28;5686:2;5652:36;5593:110;5724:18;5720:22;;:26;5716:110;;5785:19;5776:28;5809:2;5775:36;5716:110;5847:17;5843:21;;:25;5839:109;;5907:19;5898:28;5931:2;5897:36;5839:109;5969:17;5965:21;;:25;5961:109;;6029:19;6020:28;6053:2;6019:36;5961:109;6091:17;6087:21;;:25;6083:109;;6151:19;6142:28;6175:2;6141:36;6083:109;6213:17;6209:21;;:25;6205:109;;6273:19;6264:28;6297:2;6263:36;6205:109;6335:16;6331:20;;:24;6327:108;;6394:19;6385:28;6418:2;6384:36;6327:108;6456:16;6452:20;;:24;6448:108;;6515:19;6506:28;6539:2;6505:36;6448:108;6577:16;6573:20;;:24;6569:108;;6636:19;6627:28;6660:2;6626:36;6569:108;6698:16;6694:20;;:24;6690:108;;6757:19;6748:28;6781:2;6747:36;6690:108;6819:15;6815:19;;:23;6811:107;;6877:19;6868:28;6901:2;6867:36;6811:107;6939:15;6935:19;;:23;6931:107;;6997:19;6988:28;7021:2;6987:36;6931:107;7059:15;7055:19;;:23;7051:107;;7117:19;7108:28;7141:2;7107:36;7051:107;7179:15;7175:19;;:23;7171:107;;7237:19;7228:28;7261:2;7227:36;7171:107;7299:14;7295:18;;:22;7291:106;;7356:19;7347:28;7380:2;7346:36;7291:106;7418:14;7414:18;;:22;7410:106;;7475:19;7466:28;7499:2;7465:36;7410:106;7537:14;7533:18;;:22;7529:106;;7594:19;7585:28;7618:2;7584:36;7529:106;7656:14;7652:18;;:22;7648:106;;7713:19;7704:28;7737:2;7703:36;7648:106;7775:13;7771:17;;:21;7767:105;;7831:19;7822:28;7855:2;7821:36;7767:105;7893:13;7889:17;;:21;7885:105;;7949:19;7940:28;7973:2;7939:36;7885:105;8011:13;8007:17;;:21;8003:105;;8067:19;8058:28;8091:2;8057:36;8003:105;8129:13;8125:17;;:21;8121:105;;8185:19;8176:28;8209:2;8175:36;8121:105;8247:12;8243:16;;:20;8239:104;;8302:19;8293:28;8326:2;8292:36;8239:104;8364:12;8360:16;;:20;8356:104;;8419:19;8410:28;8443:2;8409:36;8356:104;8481:12;8477:16;;:20;8473:104;;8536:19;8527:28;8560:2;8526:36;8473:104;8598:12;8594:16;;:20;8590:104;;8653:19;8644:28;8677:2;8643:36;8590:104;8715:11;8711:15;;:19;8707:103;;8769:19;8760:28;8793:2;8759:36;8707:103;8831:11;8827:15;;:19;8823:103;;8885:19;8876:28;8909:2;8875:36;8823:103;8947:11;8943:15;;:19;8939:103;;9001:19;8992:28;9025:2;8991:36;8939:103;-1:-1:-1;;;9059:15:14;;:19;9055:103;;9117:19;9108:28;9141:2;9107:36;9055:103;9179:10;9175:14;;:18;9171:102;;9232:19;9223:28;9256:2;9222:36;9171:102;9294:10;9290:14;;:18;9286:102;;9347:19;9338:28;9371:2;9337:36;9286:102;9409:10;9405:14;;:18;9401:102;;9462:19;9453:28;9486:2;9452:36;9401:102;9524:10;9520:14;;:18;9516:102;;9577:19;9568:28;9601:2;9567:36;9516:102;9639:9;9635:13;;:17;9631:101;;9691:19;9682:28;9715:2;9681:36;9631:101;9753:9;9749:13;;:17;9745:101;;9805:19;9796:28;9829:2;9795:36;9745:101;9867:9;9863:13;;:17;9859:101;;9919:19;9910:28;9943:2;9909:36;9859:101;9981:9;9977:13;;:17;9973:101;;10033:19;10024:28;10057:2;10023:36;9973:101;10095:8;10091:12;;:16;10087:100;;10146:19;10137:28;10170:2;10136:36;10087:100;10208:8;10204:12;;:16;10200:100;;10259:19;10250:28;10283:2;10249:36;10200:100;10321:8;10317:12;;:16;10313:100;;10372:19;10363:28;10396:2;10362:36;10313:100;10434:8;10430:12;;:16;10426:100;;10485:19;10476:28;10509:2;10475:36;10426:100;10547:7;10543:11;;:15;10539:99;;10597:19;10588:28;10621:2;10587:36;10539:99;10659:7;10655:11;;:15;10651:99;;10709:19;10700:28;10733:2;10699:36;10651:99;10771:7;10767:11;;:15;10763:99;;10821:19;10812:28;10845:2;10811:36;10763:99;10883:7;10879:11;;:15;10875:99;;10933:19;10924:28;10957:2;10923:36;10875:99;10995:6;10991:10;;:14;10987:98;;11044:19;11035:28;11068:2;11034:36;10987:98;11106:6;11102:10;;:14;11098:98;;11155:19;11146:28;11179:2;11145:36;11098:98;11217:6;11213:10;;:14;11209:98;;11266:19;11257:28;11290:2;11256:36;11209:98;11328:6;11324:10;;:14;11320:98;;11377:19;11368:28;11401:2;11367:36;11320:98;11439:5;11435:9;;:13;11431:97;;11487:19;11478:28;11511:2;11477:36;11431:97;11549:5;11545:9;;:13;11541:97;;11597:19;11588:28;11621:2;11587:36;11541:97;11659:5;11655:9;;:13;11651:97;;11707:19;11698:28;11731:2;11697:36;11651:97;11769:5;11765:9;;:13;11761:97;;11817:19;11808:28;11841:2;11807:36;11761:97;11879:4;11875:8;;:12;11871:96;;11926:19;11917:28;11950:2;11916:36;11871:96;11988:4;11984:8;;:12;11980:96;;12035:19;12026:28;12059:2;12025:36;11980:96;12097:4;12093:8;;:12;12089:96;;12144:19;12135:28;12168:2;12134:36;12089:96;12206:4;12202:8;;:12;12198:96;;12253:19;12244:28;12277:2;12243:36;12198:96;12315:3;12311:7;;:11;12307:95;;12361:19;12352:28;12385:2;12351:36;12307:95;12423:3;12419:7;;:11;12415:95;;12469:19;12460:28;12493:2;12459:36;12415:95;12531:3;12527:7;;:11;12523:95;;12577:19;12568:28;12601:2;12567:36;12523:95;12639:3;12635:7;;:11;12631:95;;12685:19;12676:28;12709:2;12675:36;12631:95;4210:4;13286:15;13339:2;13334:7;;;;13327:3;:15;13315:28;;4886:8474::o;7799:627:3:-;7926:3;-1:-1:-1;;;;;7919:10:3;:3;-1:-1:-1;;;;;7919:10:3;;;:24;;;;;7942:1;7933:6;:10;7919:24;7915:505;;;-1:-1:-1;;;;;7963:17:3;;;7959:221;;-1:-1:-1;;;;;8058:17:3;;8001;8058;;;:12;:17;;;;;8001;;8041:54;;8077:9;8088:6;8041:16;:54::i;:::-;8000:95;;;;8139:3;-1:-1:-1;;;;;8118:47:3;;8144:9;8155;8118:47;;;;;;3156:25:20;;;3212:2;3197:18;;3190:34;3144:2;3129:18;;2982:248;8118:47:3;;;;;;;;7982:198;;7959:221;-1:-1:-1;;;;;8198:17:3;;;8194:216;;-1:-1:-1;;;;;8293:17:3;;8236;8293;;;:12;:17;;;;;8236;;8276:49;;8312:4;8318:6;8276:16;:49::i;:::-;8235:90;;;;8369:3;-1:-1:-1;;;;;8348:47:3;;8374:9;8385;8348:47;;;;;;3156:25:20;;;3212:2;3197:18;;3190:34;3144:2;3129:18;;2982:248;14:173;82:20;;-1:-1:-1;;;;;131:31:20;;121:42;;111:70;;177:1;174;167:12;192:186;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;575:597::-;687:4;716:2;745;734:9;727:21;777:6;771:13;820:6;815:2;804:9;800:18;793:34;845:1;855:140;869:6;866:1;863:13;855:140;;;964:14;;;960:23;;954:30;930:17;;;949:2;926:26;919:66;884:10;;855:140;;;1013:6;1010:1;1007:13;1004:91;;;1083:1;1078:2;1069:6;1058:9;1054:22;1050:31;1043:42;1004:91;-1:-1:-1;1156:2:20;1135:15;-1:-1:-1;;1131:29:20;1116:45;;;;1163:2;1112:54;;575:597;-1:-1:-1;;;575:597:20:o;1177:254::-;1245:6;1253;1306:2;1294:9;1285:7;1281:23;1277:32;1274:52;;;1322:1;1319;1312:12;1274:52;1345:29;1364:9;1345:29;:::i;:::-;1335:39;1421:2;1406:18;;;;1393:32;;-1:-1:-1;;;1177:254:20:o;1840:328::-;1917:6;1925;1933;1986:2;1974:9;1965:7;1961:23;1957:32;1954:52;;;2002:1;1999;1992:12;1954:52;2025:29;2044:9;2025:29;:::i;:::-;2015:39;;2073:38;2107:2;2096:9;2092:18;2073:38;:::i;:::-;2063:48;;2158:2;2147:9;2143:18;2130:32;2120:42;;1840:328;;;;;:::o;2173:180::-;2232:6;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;-1:-1:-1;2324:23:20;;2173:180;-1:-1:-1;2173:180:20:o;2729:248::-;2797:6;2805;2858:2;2846:9;2837:7;2833:23;2829:32;2826:52;;;2874:1;2871;2864:12;2826:52;-1:-1:-1;;2897:23:20;;;2967:2;2952:18;;;2939:32;;-1:-1:-1;2729:248:20:o;3640:322::-;3717:6;3725;3733;3786:2;3774:9;3765:7;3761:23;3757:32;3754:52;;;3802:1;3799;3792:12;3754:52;3838:9;3825:23;3815:33;;3895:2;3884:9;3880:18;3867:32;3857:42;;3918:38;3952:2;3941:9;3937:18;3918:38;:::i;:::-;3908:48;;3640:322;;;;;:::o;3967:156::-;4033:20;;4093:4;4082:16;;4072:27;;4062:55;;4113:1;4110;4103:12;4128:531;4230:6;4238;4246;4254;4262;4270;4323:3;4311:9;4302:7;4298:23;4294:33;4291:53;;;4340:1;4337;4330:12;4291:53;4363:29;4382:9;4363:29;:::i;:::-;4353:39;;4439:2;4428:9;4424:18;4411:32;4401:42;;4490:2;4479:9;4475:18;4462:32;4452:42;;4513:36;4545:2;4534:9;4530:18;4513:36;:::i;:::-;4503:46;;4596:3;4585:9;4581:19;4568:33;4558:43;;4648:3;4637:9;4633:19;4620:33;4610:43;;4128:531;;;;;;;;:::o;5059:606::-;5170:6;5178;5186;5194;5202;5210;5218;5271:3;5259:9;5250:7;5246:23;5242:33;5239:53;;;5288:1;5285;5278:12;5239:53;5311:29;5330:9;5311:29;:::i;:::-;5301:39;;5359:38;5393:2;5382:9;5378:18;5359:38;:::i;:::-;5349:48;;5444:2;5433:9;5429:18;5416:32;5406:42;;5495:2;5484:9;5480:18;5467:32;5457:42;;5518:37;5550:3;5539:9;5535:19;5518:37;:::i;:::-;5508:47;;5602:3;5591:9;5587:19;5574:33;5564:43;;5654:3;5643:9;5639:19;5626:33;5616:43;;5059:606;;;;;;;;;;:::o;5670:260::-;5738:6;5746;5799:2;5787:9;5778:7;5774:23;5770:32;5767:52;;;5815:1;5812;5805:12;5767:52;5838:29;5857:9;5838:29;:::i;:::-;5828:39;;5886:38;5920:2;5909:9;5905:18;5886:38;:::i;:::-;5876:48;;5670:260;;;;;:::o;5935:350::-;6002:6;6010;6063:2;6051:9;6042:7;6038:23;6034:32;6031:52;;;6079:1;6076;6069:12;6031:52;6102:29;6121:9;6102:29;:::i;:::-;6092:39;;6181:2;6170:9;6166:18;6153:32;6225:10;6218:5;6214:22;6207:5;6204:33;6194:61;;6251:1;6248;6241:12;6194:61;6274:5;6264:15;;;5935:350;;;;;:::o;7227:127::-;7288:10;7283:3;7279:20;7276:1;7269:31;7319:4;7316:1;7309:15;7343:4;7340:1;7333:15;8447:277;8514:6;8567:2;8555:9;8546:7;8542:23;8538:32;8535:52;;;8583:1;8580;8573:12;8535:52;8615:9;8609:16;8668:5;8661:13;8654:21;8647:5;8644:32;8634:60;;8690:1;8687;8680:12;9125:127;9186:10;9181:3;9177:20;9174:1;9167:31;9217:4;9214:1;9207:15;9241:4;9238:1;9231:15;9257:128;9297:3;9328:1;9324:6;9321:1;9318:13;9315:39;;;9334:18;;:::i;:::-;-1:-1:-1;9370:9:20;;9257:128::o;10443:125::-;10483:4;10511:1;10508;10505:8;10502:34;;;10516:18;;:::i;:::-;-1:-1:-1;10553:9:20;;10443:125::o;10573:168::-;10613:7;10679:1;10675;10671:6;10667:14;10664:1;10661:21;10656:1;10649:9;10642:17;10638:45;10635:71;;;10686:18;;:::i;:::-;-1:-1:-1;10726:9:20;;10573:168::o;10878:217::-;10918:1;10944;10934:132;;10988:10;10983:3;10979:20;10976:1;10969:31;11023:4;11020:1;11013:15;11051:4;11048:1;11041:15;10934:132;-1:-1:-1;11080:9:20;;10878:217::o;14356:184::-;14426:6;14479:2;14467:9;14458:7;14454:23;14450:32;14447:52;;;14495:1;14492;14485:12;14447:52;-1:-1:-1;14518:16:20;;14356:184;-1:-1:-1;14356:184:20:o;20064:127::-;20125:10;20120:3;20116:20;20113:1;20106:31;20156:4;20153:1;20146:15;20180:4;20177:1;20170:15", "language": "Solidity", "natspec": {"author": "Daniel Von Fange", "errors": {"PRBMathUD60x18__Exp2InputTooBig(uint256)": [{"notice": "Emitted when the input is greater than 192."}], "PRBMathUD60x18__LogInputTooSmall(uint256)": [{"notice": "Emitted when the input is less than 1."}], "PRBMath__MulDivFixedPointOverflow(uint256)": [{"notice": "Emitted when the result overflows uint256."}]}, "kind": "dev", "methods": {"DOMAIN_SEPARATOR()": {"details": "See {IERC20Permit-DOMAIN_SEPARATOR}."}, "allowance(address,address)": {"details": "See {IERC20-allowance}."}, "approve(address,uint256)": {"details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."}, "balanceOf(address)": {"details": "See {IERC20-balanceOf}."}, "checkpoints(address,uint32)": {"details": "Get the `pos`-th checkpoint for `account`."}, "collectRewards()": {"notice": "Collect all earned OGV rewards."}, "decimals()": {"details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."}, "decreaseAllowance(address,uint256)": {"details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."}, "delegate(address)": {"details": "Delegate votes from the sender to `delegatee`."}, "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": {"details": "Delegates votes from signer to `delegatee`"}, "delegates(address)": {"details": "Get the address `account` is currently delegating to."}, "extend(uint256,uint256)": {"notice": "Extend a stake lockup for additional points. The stake end time is computed from the current time + duration, just like it is for new stakes. So a new stake for seven days duration and an old stake extended with a seven days duration would have the same end. If an extend is made before the start of staking, the start time for the new stake is shifted forwards to the start of staking, which also shifts forward the end date.", "params": {"duration": "number of seconds from now to stake for", "lockupId": "the id of the old lockup to extend"}}, "getPastTotalSupply(uint256)": {"details": "Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances. It is but NOT the sum of all the delegated votes! Requirements: - `blockNumber` must have been already mined"}, "getPastVotes(address,uint256)": {"details": "Retrieve the number of votes for `account` at the end of `blockNumber`. Requirements: - `blockNumber` must have been already mined"}, "getVotes(address)": {"details": "Gets the current votes balance for `account`"}, "increaseAllowance(address,uint256)": {"details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."}, "name()": {"details": "Returns the name of the token."}, "nonces(address)": {"details": "See {IERC20Permit-nonces}."}, "numCheckpoints(address)": {"details": "Get number of checkpoints for `account`."}, "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": {"details": "See {IERC20Permit-permit}."}, "previewPoints(uint256,uint256)": {"notice": "Preview the number of points that would be returned for the given amount and duration.", "params": {"amount": "OGV to be staked", "duration": "number of seconds to stake for"}, "returns": {"_0": "points staking points that would be returned", "_1": "end staking period end date"}}, "previewRewards(address)": {"notice": "Shows the amount of OGV a user would receive if they collected rewards at this time.", "params": {"user": "to preview rewards for"}, "returns": {"_0": "OGV rewards amount"}}, "stake(uint256,uint256)": {"notice": "Stake OGV If staking before the start of staking (epoch), then the lockup start and end dates are shifted forward so that the lockup starts at the epoch. Any rewards previously earned will be paid out.Stake OGV for myself.", "params": {"amount": "OGV to lockup in the stake", "duration": "in seconds for the stake"}}, "stake(uint256,uint256,address)": {"notice": "Stake OGV to an address that may not be the same as the sender of the funds. This can be used to give staked funds to someone else. If staking before the start of staking (epoch), then the lockup start and end dates are shifted forward so that the lockup starts at the epoch. Any rewards previously earned will be paid out.", "params": {"amount": "OGV to lockup in the stake", "duration": "in seconds for the stake", "to": "address to receive ownership of the stake"}}, "symbol()": {"details": "Returns the symbol of the token, usually a shorter version of the name."}, "totalSupply()": {"details": "See {IERC20-totalSupply}."}, "unstake(uint256)": {"notice": "Collect staked OGV for a lockup and any earned rewards.", "params": {"lockupId": "the id of the lockup to unstake"}}}, "notice": "Provides staking, vote power history, vote delegation, and rewards distribution. The balance received for staking (and thus the voting power and rewards distribution) goes up exponentially by the end of the staked period.", "title": "OGV Staking", "version": 1}, "offset": [837, 11710], "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x227 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70BB45B3 GT PUSH2 0x130 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xF1127ED8 EQ PUSH2 0x586 JUMPI DUP1 PUSH4 0xF166E920 EQ PUSH2 0x5C3 JUMPI DUP1 PUSH4 0xF7240D2F EQ PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4E0 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4F3 JUMPI DUP1 PUSH4 0xC3CDA520 EQ PUSH2 0x501 JUMPI DUP1 PUSH4 0xC89258DB EQ PUSH2 0x514 JUMPI DUP1 PUSH4 0xC93D0B1E EQ PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8E539E8C GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x8E539E8C EQ PUSH2 0x469 JUMPI DUP1 PUSH4 0x900CF0CF EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0x939D6237 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x9AB24EB0 EQ PUSH2 0x4CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70BB45B3 EQ PUSH2 0x428 JUMPI DUP1 PUSH4 0x7628A37D EQ PUSH2 0x430 JUMPI DUP1 PUSH4 0x7B0472F0 EQ PUSH2 0x443 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 GT PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x587CDE1E GT PUSH2 0x182 JUMPI DUP1 PUSH4 0x587CDE1E EQ PUSH2 0x38A JUMPI DUP1 PUSH4 0x5C19A95C EQ PUSH2 0x39D JUMPI DUP1 PUSH4 0x5FEC5C64 EQ PUSH2 0x3B0 JUMPI DUP1 PUSH4 0x6FCFFF45 EQ PUSH2 0x3D7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x3A46B1A8 EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0x4423BF57 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0x4FD0E648 EQ PUSH2 0x362 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1FA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2DD JUMPI DUP1 PUSH4 0x2E17DE78 EQ PUSH2 0x2F0 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x348DBF1 EQ PUSH2 0x22C JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x142561CF EQ PUSH2 0x28C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24F PUSH2 0x23A CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x26C PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x25B SWAP2 SWAP1 PUSH2 0x32B2 JUMP JUMPDEST PUSH2 0x24F PUSH2 0x287 CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x61D JUMP JUMPDEST PUSH2 0x2B3 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x24F PUSH2 0x2EB CALLDATASIZE PUSH1 0x4 PUSH2 0x3331 JUMP JUMPDEST PUSH2 0x637 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x2FE CALLDATASIZE PUSH1 0x4 PUSH2 0x336D JUMP JUMPDEST PUSH2 0x687 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x24F PUSH2 0x32A CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x8E9 JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x33D CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x90B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x375 PUSH2 0x370 CALLDATASIZE PUSH1 0x4 PUSH2 0x3386 JUMP JUMPDEST PUSH2 0x985 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2B3 PUSH2 0x398 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xB26 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x3AB CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xB44 JUMP JUMPDEST PUSH2 0x2CF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xB51 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x40D CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x303 PUSH2 0xB73 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x43E CALLDATASIZE PUSH1 0x4 PUSH2 0x33A8 JUMP JUMPDEST PUSH2 0xB7E JUMP JUMPDEST PUSH2 0x303 PUSH2 0x451 CALLDATASIZE PUSH1 0x4 PUSH2 0x3386 JUMP JUMPDEST PUSH2 0xB8E JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x464 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xB9D JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x477 CALLDATASIZE PUSH1 0x4 PUSH2 0x336D JUMP JUMPDEST PUSH2 0xBBB JUMP JUMPDEST PUSH2 0x2CF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x2CF PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH5 0x3B32A7A3AB PUSH1 0xD9 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x26C JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0xC17 JUMP JUMPDEST PUSH2 0x24F PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0xC9D JUMP JUMPDEST PUSH2 0x24F PUSH2 0x2EB CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x50F CALLDATASIZE PUSH1 0x4 PUSH2 0x33EE JUMP JUMPDEST PUSH2 0xD23 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x522 CALLDATASIZE PUSH1 0x4 PUSH2 0x3386 JUMP JUMPDEST PUSH2 0xE77 JUMP JUMPDEST PUSH2 0x53A PUSH2 0x535 CALLDATASIZE PUSH1 0x4 PUSH2 0x3307 JUMP JUMPDEST PUSH2 0x10C6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x303 PUSH2 0x56E CALLDATASIZE PUSH1 0x4 PUSH2 0x3446 JUMP JUMPDEST PUSH2 0x1117 JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x34B0 JUMP JUMPDEST PUSH2 0x1299 JUMP JUMPDEST PUSH2 0x599 PUSH2 0x594 CALLDATASIZE PUSH1 0x4 PUSH2 0x34E3 JUMP JUMPDEST PUSH2 0x12C4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x5D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3297 JUMP JUMPDEST PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x2B3 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3611 PUSH1 0x26 SWAP2 CODECOPY SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x62B DUP2 DUP6 DUP6 PUSH2 0x147C JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A205472616E73666572732064697361626C65640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x6A8 JUMPI PUSH2 0x6A8 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP1 DUP7 MSTORE PUSH1 0x1 PUSH1 0x80 SHL SWAP1 SWAP3 DIV AND SWAP5 DUP5 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP4 POP SWAP1 SWAP2 SWAP1 TIMESTAMP DUP3 GT ISZERO PUSH2 0x751 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A20456E64206F66206C6F636B7570206E6F74207265616368 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x1959 PUSH1 0xF2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST DUP2 PUSH2 0x7AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A20416C726561647920756E7374616B65642074686973206C PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6F636B757 PUSH1 0xDC SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x7B5 CALLER PUSH2 0x15A0 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP7 SWAP1 DUP2 LT PUSH2 0x7D6 JUMPI PUSH2 0x7D6 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD DUP2 DUP2 SSTORE PUSH1 0x1 ADD SSTORE PUSH2 0x7F6 CALLER DUP3 PUSH2 0x18FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x863 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x887 SWAP2 SWAP1 PUSH2 0x3539 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE CALLER SWAP1 PUSH32 0x5B744E3E9358BC00BA3CC0C6606A4D6536134DBA00B2D2EE4B5DE169ACD6427 SWAP1 PUSH1 0x80 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8E4 PUSH2 0x191B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x62B DUP2 DUP6 DUP6 PUSH2 0x8FC DUP4 DUP4 PUSH2 0x1299 JUMP JUMPDEST PUSH2 0x906 SWAP2 SWAP1 PUSH2 0x3571 JUMP JUMPDEST PUSH2 0x147C JUMP JUMPDEST PUSH1 0x0 NUMBER DUP3 LT PUSH2 0x95C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A20626C6F636B206E6F7420796574206D696E656400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x97E SWAP1 DUP4 PUSH2 0x1A42 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 DUP4 LT ISZERO PUSH2 0x9ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x14DD185ADA5B99CE88151BDBC81CDA1BDC9D PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH4 0x7861F80 DUP4 GT ISZERO PUSH2 0xA35 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x5374616B696E673A20546F6F206C6F6E67 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 TIMESTAMP GT PUSH2 0xA84 JUMPI PUSH32 0x0 PUSH2 0xA86 JUMP JUMPDEST TIMESTAMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA94 DUP6 DUP4 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH4 0x1E13380 PUSH2 0xAC7 PUSH32 0x0 DUP5 PUSH2 0x3589 JUMP JUMPDEST PUSH2 0xAD9 SWAP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0xAE3 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAF9 PUSH8 0x18FAE27693B40000 DUP4 PUSH2 0x1AFE JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 PUSH2 0xB0E DUP3 DUP11 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0xB18 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST SWAP9 SWAP3 SWAP8 POP SWAP2 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0xB4E CALLER DUP3 PUSH2 0x1B3D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x631 SWAP1 PUSH2 0x1B6A JUMP JUMPDEST PUSH2 0xB7C CALLER PUSH2 0x15A0 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xB89 DUP4 DUP4 DUP4 PUSH2 0x1BD3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xB99 DUP3 DUP3 CALLER PUSH2 0x1BD3 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x631 JUMP JUMPDEST PUSH1 0x0 NUMBER DUP3 LT PUSH2 0xC0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A20626C6F636B206E6F7420796574206D696E656400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x631 PUSH1 0x9 DUP4 PUSH2 0x1A42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xC8A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xC59 PUSH1 0x1 DUP4 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0xC69 JUMPI PUSH2 0xC69 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0xC8D JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0xCAB DUP3 DUP7 PUSH2 0x1299 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xD0B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0xD18 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x147C JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0xD73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A207369676E61747572652065787069726564000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE48329057BFD03D55E49B547132E39CFFD9C1820AD7B9D4C5307691425D15ADF PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0xDED SWAP1 PUSH2 0xDE5 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x1F03 JUMP JUMPDEST DUP6 DUP6 DUP6 PUSH2 0x1F51 JUMP JUMPDEST SWAP1 POP PUSH2 0xE16 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE SWAP1 JUMP JUMPDEST DUP7 EQ PUSH2 0xE64 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A20696E76616C6964206E6F6E636500000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0xE6E DUP2 DUP9 PUSH2 0x1B3D JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE80 CALLER PUSH2 0x15A0 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP1 DUP2 LT PUSH2 0xEA1 JUMPI PUSH2 0xEA1 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x2 SWAP1 SWAP5 MUL SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP1 DUP8 MSTORE PUSH1 0x1 PUSH1 0x80 SHL SWAP1 SWAP3 DIV AND SWAP4 DUP6 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP5 ADD DUP3 SWAP1 MSTORE SWAP3 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP1 PUSH2 0xEFB DUP6 DUP9 PUSH2 0x985 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 DUP2 GT PUSH2 0xF59 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A204E6577206C6F636B7570206D757374206265206C6F6E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x32B9 PUSH1 0xF1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND PUSH1 0x20 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 DUP9 ADD DUP5 SWAP1 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP8 SWAP2 SWAP1 DUP11 SWAP1 DUP2 LT PUSH2 0xF96 JUMPI PUSH2 0xF96 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD SWAP3 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x2 SWAP1 SWAP2 MUL SWAP1 SWAP2 ADD SWAP1 DUP2 SSTORE PUSH1 0x40 SWAP1 SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE PUSH2 0xFE8 CALLER PUSH2 0xFE3 DUP6 DUP6 PUSH2 0x3589 JUMP JUMPDEST PUSH2 0x1F79 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1019 JUMPI POP PUSH1 0x0 PUSH2 0x100E CALLER PUSH2 0xB26 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0x1028 JUMPI PUSH2 0x1028 CALLER CALLER PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP10 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP5 SWAP1 MSTORE CALLER SWAP1 PUSH32 0x5B744E3E9358BC00BA3CC0C6606A4D6536134DBA00B2D2EE4B5DE169ACD6427 SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP10 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE CALLER SWAP1 PUSH32 0x2720EFA4B2DD4F3F8A347DA3CBD290A522E9432DA9072C5B8E6300496FDDE282 SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x10E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND SWAP5 POP PUSH1 0x1 PUSH1 0x80 SHL SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP2 POP DUP4 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x1167 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x11B4 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x120F DUP3 PUSH2 0x1F03 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x121F DUP3 DUP8 DUP8 DUP8 PUSH2 0x1F51 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1282 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x128D DUP11 DUP11 DUP11 PUSH2 0x147C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF DUP5 AND SWAP1 DUP2 LT PUSH2 0x1308 JUMPI PUSH2 0x1308 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP2 ADD SLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1353 PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1363 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC SLOAD SWAP1 POP DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE0D801DD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13ED SWAP2 SWAP1 PUSH2 0x35E1 JUMP JUMPDEST PUSH2 0x13FC SWAP1 PUSH5 0xE8D4A51000 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0x1406 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST PUSH2 0x1410 SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1437 SWAP1 DUP4 PUSH2 0x3589 JUMP JUMPDEST SWAP1 POP PUSH5 0xE8D4A51000 DUP2 PUSH2 0x145F DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1469 SWAP2 SWAP1 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0x1473 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x14DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x153F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15AB PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1793 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x161A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x163E SWAP2 SWAP1 PUSH2 0x35E1 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70BB45B3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x16BC JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x16B9 SWAP2 DUP2 ADD SWAP1 PUSH2 0x35E1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x16C5 JUMPI PUSH2 0x16C7 JUMP JUMPDEST POP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1730 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1754 SWAP2 SWAP1 PUSH2 0x35E1 JUMP JUMPDEST PUSH2 0x175E SWAP2 SWAP1 PUSH2 0x3589 JUMP JUMPDEST SWAP1 POP DUP3 PUSH2 0x1770 DUP3 PUSH5 0xE8D4A51000 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0x177A SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST PUSH1 0xC PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x178B SWAP2 SWAP1 PUSH2 0x3571 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xC SLOAD PUSH2 0x17B9 SWAP2 SWAP1 PUSH2 0x3589 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH5 0xE8D4A51000 DUP3 PUSH2 0x17E3 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x17ED SWAP2 SWAP1 PUSH2 0x35A0 JUMP JUMPDEST PUSH2 0x17F7 SWAP2 SWAP1 PUSH2 0x35BF JUMP JUMPDEST PUSH1 0xC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE SWAP1 POP DUP1 PUSH2 0x1820 JUMPI POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x188F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B3 SWAP2 SWAP1 PUSH2 0x3539 JUMP JUMPDEST POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x619CAAFABDD75649B302BA8419E48CCCF64F37F1983AC4727CFB38B57703FFC9 DUP3 PUSH1 0x40 MLOAD PUSH2 0x18EF SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH2 0x1907 DUP3 DUP3 PUSH2 0x2003 JUMP JUMPDEST PUSH2 0x1915 PUSH1 0x9 PUSH2 0x2158 DUP4 PUSH2 0x2164 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0x1974 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0x199E JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x0 DUP3 DUP5 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP4 ADD MSTORE CHAINID PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1AA6 JUMPI PUSH1 0x0 PUSH2 0x1A5D DUP3 DUP5 PUSH2 0x22DB JUMP JUMPDEST SWAP1 POP DUP5 DUP7 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1A72 JUMPI PUSH2 0x1A72 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x1A92 JUMPI DUP1 SWAP3 POP PUSH2 0x1AA0 JUMP JUMPDEST PUSH2 0x1A9D DUP2 PUSH1 0x1 PUSH2 0x3571 JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x1A49 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1AE9 JUMPI DUP5 PUSH2 0x1AB8 PUSH1 0x1 DUP5 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x1AC8 JUMPI PUSH2 0x1AC8 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x1AEC JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1B23 JUMPI DUP2 ISZERO PUSH2 0x1B12 JUMPI PUSH1 0x0 PUSH2 0x1B1C JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 JUMPDEST SWAP1 POP PUSH2 0x631 JUMP JUMPDEST PUSH2 0x97E PUSH2 0x1B38 PUSH2 0x1B32 DUP6 PUSH2 0x22F6 JUMP JUMPDEST DUP5 PUSH2 0x23A6 JUMP JUMPDEST PUSH2 0x23B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0xB99 DUP3 DUP3 PUSH2 0x23F8 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 GT ISZERO PUSH2 0x1BCF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2033 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x322062697473 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C29 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A20546F20746865207A65726F206164647265737300000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 GT ISZERO PUSH2 0x1C74 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0xA6E8C2D6D2DCCE7440A8DEDE40DAEAC6D PUSH1 0x7B SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 DUP4 GT PUSH2 0x1CBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0xA6E8C2D6D2DCCE74409CDEE840CADCDEEACED PUSH1 0x6B SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CC7 DUP6 DUP6 PUSH2 0x985 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB PUSH2 0x1CDD PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1CE7 SWAP1 DUP5 PUSH2 0x3571 JUMP JUMPDEST GT ISZERO PUSH2 0x1D35 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5374616B696E673A204D617820706F696E747320657863656564656400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x1D3E DUP4 PUSH2 0x15A0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP12 AND DUP3 MSTORE DUP7 DUP2 AND DUP3 DUP7 ADD SWAP1 DUP2 MSTORE SWAP4 DUP3 ADD DUP9 DUP2 MSTORE DUP4 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP7 SSTORE SWAP5 DUP9 MSTORE SWAP6 SWAP1 SWAP7 KECCAK256 SWAP2 MLOAD SWAP4 MLOAD DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP2 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP2 ADD SSTORE PUSH2 0x1DB9 DUP4 DUP4 PUSH2 0x1F79 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E2C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E50 SWAP2 SWAP1 PUSH2 0x3539 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1E8B JUMPI POP PUSH1 0x0 PUSH2 0x1E80 DUP5 PUSH2 0xB26 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0x1E9A JUMPI PUSH2 0x1E9A DUP4 DUP5 PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH32 0x2720EFA4B2DD4F3F8A347DA3CBD290A522E9432DA9072C5B8E6300496FDDE282 SWAP1 PUSH2 0x1EE1 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3589 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 ADD PUSH2 0x8CB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x631 PUSH2 0x1F10 PUSH2 0x191B JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1F62 DUP8 DUP8 DUP8 DUP8 PUSH2 0x248E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1F6F DUP2 PUSH2 0x257B JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1F83 DUP3 DUP3 PUSH2 0x2736 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB LT ISZERO PUSH2 0x1FF5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230566F7465733A20746F74616C20737570706C79207269736B73206F PUSH1 0x44 DUP3 ADD MSTORE PUSH16 0x766572666C6F77696E6720766F746573 PUSH1 0x80 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH2 0x1915 PUSH1 0x9 PUSH2 0x281D DUP4 PUSH2 0x2164 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2063 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x20D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP4 DUP4 SUB SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x2106 SWAP1 DUP5 SWAP1 PUSH2 0x3589 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0xB89 DUP4 PUSH1 0x0 DUP5 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97E DUP3 DUP5 PUSH2 0x3589 JUMP JUMPDEST DUP3 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP1 ISZERO PUSH2 0x21AE JUMPI DUP6 PUSH2 0x217D PUSH1 0x1 DUP4 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x218D JUMPI PUSH2 0x218D PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x21B1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP3 POP PUSH2 0x21CA DUP4 DUP6 DUP8 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x2208 JUMPI POP NUMBER DUP7 PUSH2 0x21E4 PUSH1 0x1 DUP5 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x21F4 JUMPI PUSH2 0x21F4 PUSH2 0x3523 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH4 0xFFFFFFFF AND EQ JUMPDEST ISZERO PUSH2 0x2268 JUMPI PUSH2 0x2216 DUP3 PUSH2 0x2844 JUMP JUMPDEST DUP7 PUSH2 0x2222 PUSH1 0x1 DUP5 PUSH2 0x3589 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x2232 JUMPI PUSH2 0x2232 PUSH2 0x3523 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 ADD PUSH1 0x4 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x22D2 JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x227D NUMBER PUSH2 0x1B6A JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2291 DUP6 PUSH2 0x2844 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 DUP2 AND SWAP1 SWAP2 MSTORE DUP3 SLOAD PUSH1 0x1 DUP2 ADD DUP5 SSTORE PUSH1 0x0 SWAP4 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 SWAP1 KECCAK256 DUP4 MLOAD SWAP5 SWAP1 SWAP4 ADD MLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP2 ADD SSTORE JUMPDEST POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA PUSH1 0x2 DUP5 DUP5 XOR PUSH2 0x35BF JUMP JUMPDEST PUSH2 0x97E SWAP1 DUP5 DUP5 AND PUSH2 0x3571 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH2 0x2324 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36214137 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2339 PUSH8 0xDE0B6B3A7640000 DUP5 DIV PUSH2 0x28AD JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 MUL SWAP4 POP SWAP1 SWAP2 POP DUP4 DUP3 SHR SWAP1 DUP2 EQ ISZERO PUSH2 0x235C JUMPI POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 JUMPDEST DUP1 ISZERO PUSH2 0x239E JUMPI PUSH8 0xDE0B6B3A7640000 DUP3 DUP1 MUL DIV SWAP2 POP PUSH8 0x1BC16D674EC80000 DUP3 LT PUSH2 0x2396 JUMPI SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHR SWAP1 JUMPDEST PUSH1 0x1 SHR PUSH2 0x2366 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97E DUP4 DUP4 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x0 PUSH9 0xA688906BD8B000000 DUP3 LT PUSH2 0x23E0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A4F26F1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x67E JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH1 0x40 DUP4 SWAP1 SHL DIV PUSH2 0x97E DUP2 PUSH2 0x2A57 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2403 DUP4 PUSH2 0xB26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2426 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP10 DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP5 SWAP6 POP SWAP4 SWAP3 DUP7 AND SWAP3 PUSH32 0x3134E8A2E6D97E929A7E54011EA5485D7D196DD5F0BA4D4EF95803E8E3FC257F SWAP2 SWAP1 LOG4 PUSH2 0x1915 DUP3 DUP5 DUP4 PUSH2 0x3152 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0x24C5 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x2572 JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x24DD JUMPI POP DUP5 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x24EE JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x4 PUSH2 0x2572 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2542 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x256B JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x2572 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x258F JUMPI PUSH2 0x258F PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0x2598 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x25AC JUMPI PUSH2 0x25AC PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0x25FA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x260E JUMPI PUSH2 0x260E PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0x265C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2670 JUMPI PUSH2 0x2670 PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0x26C9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x26DD JUMPI PUSH2 0x26DD PUSH2 0x35FA JUMP JUMPDEST EQ ISZERO PUSH2 0xB4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x278C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x67E JUMP JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x279E SWAP2 SWAP1 PUSH2 0x3571 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x27CB SWAP1 DUP5 SWAP1 PUSH2 0x3571 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0xB99 PUSH1 0x0 DUP4 DUP4 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97E DUP3 DUP5 PUSH2 0x3571 JUMP JUMPDEST PUSH2 0xB89 PUSH2 0x2835 DUP5 PUSH2 0xB26 JUMP JUMPDEST PUSH2 0x283E DUP5 PUSH2 0xB26 JUMP JUMPDEST DUP4 PUSH2 0x3152 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 GT ISZERO PUSH2 0x1BCF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2032 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x32342062697473 PUSH1 0xC8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x80 SHL DUP3 LT PUSH2 0x28CD JUMPI PUSH1 0x80 SWAP2 DUP3 SHR SWAP2 PUSH2 0x28CA SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH9 0x10000000000000000 DUP3 LT PUSH2 0x28F0 JUMPI PUSH1 0x40 SWAP2 DUP3 SHR SWAP2 PUSH2 0x28ED SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x1 PUSH1 0x20 SHL DUP3 LT PUSH2 0x290E JUMPI PUSH1 0x20 SWAP2 DUP3 SHR SWAP2 PUSH2 0x290B SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 LT PUSH2 0x292B JUMPI PUSH1 0x10 SWAP2 DUP3 SHR SWAP2 PUSH2 0x2928 SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 LT PUSH2 0x2947 JUMPI PUSH1 0x8 SWAP2 DUP3 SHR SWAP2 PUSH2 0x2944 SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 LT PUSH2 0x2962 JUMPI PUSH1 0x4 SWAP2 DUP3 SHR SWAP2 PUSH2 0x295F SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 LT PUSH2 0x297D JUMPI PUSH1 0x2 SWAP2 DUP3 SHR SWAP2 PUSH2 0x297A SWAP1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x2 DUP3 LT PUSH2 0x2990 JUMPI PUSH2 0x631 PUSH1 0x1 DUP3 PUSH2 0x3571 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP5 DUP7 MULMOD DUP5 DUP7 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP PUSH8 0xDE0B6B3A7640000 DUP2 LT PUSH2 0x29D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x698D9A01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH8 0xDE0B6B3A7640000 DUP7 DUP9 MULMOD SWAP2 POP POP PUSH8 0x6F05B59D3B1FFFF DUP2 GT DUP3 PUSH2 0x2A13 JUMPI DUP1 PUSH8 0xDE0B6B3A7640000 DUP6 DIV ADD SWAP5 POP POP POP POP POP PUSH2 0x631 JUMP JUMPDEST PUSH3 0x40000 DUP3 DUP6 SUB DIV SWAP4 SWAP1 SWAP2 GT SWAP1 SWAP2 SUB PUSH1 0x1 PUSH1 0xEE SHL MUL SWAP2 SWAP1 SWAP2 OR PUSH32 0xACCB18165BD6FE31AE1CF318DC5B51EEE0E1BA569B88CD74C1773B91FAC10669 MUL ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xBF SHL PUSH8 0x8000000000000000 DUP3 AND ISZERO PUSH2 0x2A7B JUMPI PUSH9 0x16A09E667F3BCC909 MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x4000000000000000 DUP3 AND ISZERO PUSH2 0x2A9A JUMPI PUSH9 0x1306FE0A31B7152DF MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x2000000000000000 DUP3 AND ISZERO PUSH2 0x2AB9 JUMPI PUSH9 0x1172B83C7D517ADCE MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x1000000000000000 DUP3 AND ISZERO PUSH2 0x2AD8 JUMPI PUSH9 0x10B5586CF9890F62A MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x800000000000000 DUP3 AND ISZERO PUSH2 0x2AF7 JUMPI PUSH9 0x1059B0D31585743AE MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x400000000000000 DUP3 AND ISZERO PUSH2 0x2B16 JUMPI PUSH9 0x102C9A3E778060EE7 MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x200000000000000 DUP3 AND ISZERO PUSH2 0x2B35 JUMPI PUSH9 0x10163DA9FB33356D8 MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0x100000000000000 DUP3 AND ISZERO PUSH2 0x2B54 JUMPI PUSH9 0x100B1AFA5ABCBED61 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x80000000000000 DUP3 AND ISZERO PUSH2 0x2B72 JUMPI PUSH9 0x10058C86DA1C09EA2 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x40000000000000 DUP3 AND ISZERO PUSH2 0x2B90 JUMPI PUSH9 0x1002C605E2E8CEC50 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x20000000000000 DUP3 AND ISZERO PUSH2 0x2BAE JUMPI PUSH9 0x100162F3904051FA1 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x10000000000000 DUP3 AND ISZERO PUSH2 0x2BCC JUMPI PUSH9 0x1000B175EFFDC76BA MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x8000000000000 DUP3 AND ISZERO PUSH2 0x2BEA JUMPI PUSH9 0x100058BA01FB9F96D MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x4000000000000 DUP3 AND ISZERO PUSH2 0x2C08 JUMPI PUSH9 0x10002C5CC37DA9492 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x2000000000000 DUP3 AND ISZERO PUSH2 0x2C26 JUMPI PUSH9 0x1000162E525EE0547 MUL PUSH1 0x40 SHR JUMPDEST PUSH7 0x1000000000000 DUP3 AND ISZERO PUSH2 0x2C44 JUMPI PUSH9 0x10000B17255775C04 MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x800000000000 DUP3 AND ISZERO PUSH2 0x2C61 JUMPI PUSH9 0x1000058B91B5BC9AE MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x400000000000 DUP3 AND ISZERO PUSH2 0x2C7E JUMPI PUSH9 0x100002C5C89D5EC6D MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x200000000000 DUP3 AND ISZERO PUSH2 0x2C9B JUMPI PUSH9 0x10000162E43F4F831 MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x100000000000 DUP3 AND ISZERO PUSH2 0x2CB8 JUMPI PUSH9 0x100000B1721BCFC9A MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x80000000000 DUP3 AND ISZERO PUSH2 0x2CD5 JUMPI PUSH9 0x10000058B90CF1E6E MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x40000000000 DUP3 AND ISZERO PUSH2 0x2CF2 JUMPI PUSH9 0x1000002C5C863B73F MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x20000000000 DUP3 AND ISZERO PUSH2 0x2D0F JUMPI PUSH9 0x100000162E430E5A2 MUL PUSH1 0x40 SHR JUMPDEST PUSH6 0x10000000000 DUP3 AND ISZERO PUSH2 0x2D2C JUMPI PUSH9 0x1000000B172183551 MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x8000000000 DUP3 AND ISZERO PUSH2 0x2D48 JUMPI PUSH9 0x100000058B90C0B49 MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x4000000000 DUP3 AND ISZERO PUSH2 0x2D64 JUMPI PUSH9 0x10000002C5C8601CC MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x2000000000 DUP3 AND ISZERO PUSH2 0x2D80 JUMPI PUSH9 0x1000000162E42FFF0 MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x1000000000 DUP3 AND ISZERO PUSH2 0x2D9C JUMPI PUSH9 0x10000000B17217FBB MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x800000000 DUP3 AND ISZERO PUSH2 0x2DB8 JUMPI PUSH9 0x1000000058B90BFCE MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x400000000 DUP3 AND ISZERO PUSH2 0x2DD4 JUMPI PUSH9 0x100000002C5C85FE3 MUL PUSH1 0x40 SHR JUMPDEST PUSH5 0x200000000 DUP3 AND ISZERO PUSH2 0x2DF0 JUMPI PUSH9 0x10000000162E42FF1 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x1 PUSH1 0x20 SHL DUP3 AND ISZERO PUSH2 0x2E0B JUMPI PUSH9 0x100000000B17217F8 MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x80000000 DUP3 AND ISZERO PUSH2 0x2E26 JUMPI PUSH9 0x10000000058B90BFC MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x40000000 DUP3 AND ISZERO PUSH2 0x2E41 JUMPI PUSH9 0x1000000002C5C85FE MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x20000000 DUP3 AND ISZERO PUSH2 0x2E5C JUMPI PUSH9 0x100000000162E42FF MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x10000000 DUP3 AND ISZERO PUSH2 0x2E77 JUMPI PUSH9 0x1000000000B17217F MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x8000000 DUP3 AND ISZERO PUSH2 0x2E92 JUMPI PUSH9 0x100000000058B90C0 MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x4000000 DUP3 AND ISZERO PUSH2 0x2EAD JUMPI PUSH9 0x10000000002C5C860 MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x2000000 DUP3 AND ISZERO PUSH2 0x2EC8 JUMPI PUSH9 0x1000000000162E430 MUL PUSH1 0x40 SHR JUMPDEST PUSH4 0x1000000 DUP3 AND ISZERO PUSH2 0x2EE3 JUMPI PUSH9 0x10000000000B17218 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x800000 DUP3 AND ISZERO PUSH2 0x2EFD JUMPI PUSH9 0x1000000000058B90C MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x400000 DUP3 AND ISZERO PUSH2 0x2F17 JUMPI PUSH9 0x100000000002C5C86 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x200000 DUP3 AND ISZERO PUSH2 0x2F31 JUMPI PUSH9 0x10000000000162E43 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x100000 DUP3 AND ISZERO PUSH2 0x2F4B JUMPI PUSH9 0x100000000000B1721 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x2F65 JUMPI PUSH9 0x10000000000058B91 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x2F7F JUMPI PUSH9 0x1000000000002C5C8 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x2F99 JUMPI PUSH9 0x100000000000162E4 MUL PUSH1 0x40 SHR JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x2FB3 JUMPI PUSH9 0x1000000000000B172 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x2FCC JUMPI PUSH9 0x100000000000058B9 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x2FE5 JUMPI PUSH9 0x10000000000002C5D MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x2FFE JUMPI PUSH9 0x1000000000000162E MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x3017 JUMPI PUSH9 0x10000000000000B17 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x3030 JUMPI PUSH9 0x1000000000000058C MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x3049 JUMPI PUSH9 0x100000000000002C6 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x3062 JUMPI PUSH9 0x10000000000000163 MUL PUSH1 0x40 SHR JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x307B JUMPI PUSH9 0x100000000000000B1 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x3093 JUMPI PUSH9 0x10000000000000059 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x30AB JUMPI PUSH9 0x1000000000000002C MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0x30C3 JUMPI PUSH9 0x10000000000000016 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0x30DB JUMPI PUSH9 0x1000000000000000B MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0x30F3 JUMPI PUSH9 0x10000000000000006 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0x310B JUMPI PUSH9 0x10000000000000003 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x2 DUP3 AND ISZERO PUSH2 0x3123 JUMPI PUSH9 0x10000000000000001 MUL PUSH1 0x40 SHR JUMPDEST PUSH1 0x1 DUP3 AND ISZERO PUSH2 0x313B JUMPI PUSH9 0x10000000000000001 MUL PUSH1 0x40 SHR JUMPDEST PUSH8 0xDE0B6B3A7640000 MUL PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHR PUSH1 0xBF SUB SHR SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x3174 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0xB89 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH2 0x3202 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 PUSH2 0x31AF SWAP1 PUSH2 0x2158 DUP6 PUSH2 0x2164 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDEC2BACDD2F05B59DE34DA9B523DFF8BE42E5E38E818C82FDB0BAE774387A724 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x31F7 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0xB89 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 PUSH2 0x3238 SWAP1 PUSH2 0x281D DUP6 PUSH2 0x2164 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDEC2BACDD2F05B59DE34DA9B523DFF8BE42E5E38E818C82FDB0BAE774387A724 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x8CB SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x97E DUP3 PUSH2 0x3280 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x32DF JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x32C3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x32F1 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x331A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3323 DUP4 PUSH2 0x3280 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x334F DUP5 PUSH2 0x3280 JUMP JUMPDEST SWAP3 POP PUSH2 0x335D PUSH1 0x20 DUP6 ADD PUSH2 0x3280 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x337F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x33BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x33D4 PUSH1 0x40 DUP6 ADD PUSH2 0x3280 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3410 DUP8 PUSH2 0x3280 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH2 0x342C PUSH1 0x60 DUP9 ADD PUSH2 0x33DD JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3461 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x346A DUP9 PUSH2 0x3280 JUMP JUMPDEST SWAP7 POP PUSH2 0x3478 PUSH1 0x20 DUP10 ADD PUSH2 0x3280 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3494 PUSH1 0x80 DUP10 ADD PUSH2 0x33DD JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x34CC DUP4 PUSH2 0x3280 JUMP JUMPDEST SWAP2 POP PUSH2 0x34DA PUSH1 0x20 DUP5 ADD PUSH2 0x3280 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x34FF DUP4 PUSH2 0x3280 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3518 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x354B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x97E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3584 JUMPI PUSH2 0x3584 PUSH2 0x355B JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x359B JUMPI PUSH2 0x359B PUSH2 0x355B JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x35BA JUMPI PUSH2 0x35BA PUSH2 0x355B JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x35DC JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID JUMP PUSH16 0x746520457363726F776564204F726967 PUSH10 0x6E20446F6C6C61722047 PUSH16 0x7665726E616E6365A264697066735822 SLT KECCAK256 EXTCODECOPY CREATE 0xEA PUSH32 0x196455CF5CDEE17FBF93796C46865225C959FFC664C1669D873FCC5964736F6C PUSH4 0x4300080A STOP CALLER ", "sha1": "786ac44390bafa31bb8989ae3786027155320528", "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\nimport {ERC20Votes} from \"OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/ERC20Votes.sol\";\nimport {ERC20Permit} from \"OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/extensions/draft-ERC20Permit.sol\";\nimport {ERC20} from \"OpenZeppelin/openzeppelin-contracts@4.6.0/contracts/token/ERC20/ERC20.sol\";\nimport {PRBMathUD60x18} from \"paulrberg/prb-math@2.5.0/contracts/PRBMathUD60x18.sol\";\nimport {RewardsSource} from \"./RewardsSource.sol\";\n\n/// @title OGV Staking\n/// @author Daniel Von Fange\n/// @notice Provides staking, vote power history, vote delegation, and rewards\n/// distribution.\n///\n/// The balance received for staking (and thus the voting power and rewards\n/// distribution) goes up exponentially by the end of the staked period.\ncontract OgvStaking is ERC20Votes {\n // 1. Core Storage\n uint256 public immutable epoch; // timestamp\n uint256 public immutable minStakeDuration; // in seconds\n\n // 2. Staking and Lockup Storage\n uint256 constant YEAR_BASE = 18e17;\n struct Lockup {\n uint128 amount;\n uint128 end;\n uint256 points;\n }\n mapping(address => Lockup[]) public lockups;\n\n // 3. Reward Storage\n ERC20 public immutable ogv; // Must not allow reentrancy\n RewardsSource public immutable rewardsSource;\n mapping(address => uint256) public rewardDebtPerShare;\n uint256 public accRewardPerShare; // As of the start of the block\n\n // Used to track any calls to `delegate()` method. When this isn't\n // set to true, voting powers are delegated to the receiver of the stake\n // when `stake()` or `extend()` method are called. \n // For existing stakers with delegation set, This will remain `false` \n // unless the user calls `delegate()` method.\n mapping(address => bool) public hasDelegationSet;\n\n // Events\n event Stake(\n address indexed user,\n uint256 lockupId,\n uint256 amount,\n uint256 end,\n uint256 points\n );\n event Unstake(\n address indexed user,\n uint256 lockupId,\n uint256 amount,\n uint256 end,\n uint256 points\n );\n event Reward(address indexed user, uint256 amount);\n\n // 1. Core Functions\n\n constructor(\n address ogv_,\n uint256 epoch_,\n uint256 minStakeDuration_,\n address rewardsSource_\n ) ERC20(\"\", \"\") ERC20Permit(\"veOGV\") {\n ogv = ERC20(ogv_);\n epoch = epoch_;\n minStakeDuration = minStakeDuration_;\n rewardsSource = RewardsSource(rewardsSource_);\n }\n\n function name() public pure override returns (string memory) {\n return \"Vote Escrowed Origin Dollar Governance\";\n }\n\n function symbol() public pure override returns (string memory) {\n return \"veOGV\";\n }\n\n function transfer(address, uint256) public override returns (bool) {\n revert(\"Staking: Transfers disabled\");\n }\n\n function transferFrom(\n address,\n address,\n uint256\n ) public override returns (bool) {\n revert(\"Staking: Transfers disabled\");\n }\n\n // 2. Staking and Lockup Functions\n\n /// @notice Stake OGV to an address that may not be the same as the\n /// sender of the funds. This can be used to give staked funds to someone\n /// else.\n ///\n /// If staking before the start of staking (epoch), then the lockup start\n /// and end dates are shifted forward so that the lockup starts at the\n /// epoch.\n ///\n /// Any rewards previously earned will be paid out.\n ///\n /// @param amount OGV to lockup in the stake\n /// @param duration in seconds for the stake\n /// @param to address to receive ownership of the stake\n function stake(\n uint256 amount,\n uint256 duration,\n address to\n ) external {\n _stake(amount, duration, to);\n }\n\n /// @notice Stake OGV\n ///\n /// If staking before the start of staking (epoch), then the lockup start\n /// and end dates are shifted forward so that the lockup starts at the\n /// epoch.\n ///\n /// Any rewards previously earned will be paid out.\n ///\n /// @notice Stake OGV for myself.\n /// @param amount OGV to lockup in the stake\n /// @param duration in seconds for the stake\n function stake(uint256 amount, uint256 duration) external {\n _stake(amount, duration, msg.sender);\n }\n\n /// @dev Internal method used for public staking\n /// @param amount OGV to lockup in the stake\n /// @param duration in seconds for the stake\n /// @param to address to receive ownership of the stake\n function _stake(\n uint256 amount,\n uint256 duration,\n address to\n ) internal {\n require(to != address(0), \"Staking: To the zero address\");\n require(amount <= type(uint128).max, \"Staking: Too much\");\n require(amount > 0, \"Staking: Not enough\");\n\n // duration checked inside previewPoints\n (uint256 points, uint256 end) = previewPoints(amount, duration);\n require(\n points + totalSupply() <= type(uint192).max,\n \"Staking: Max points exceeded\"\n );\n _collectRewards(to);\n lockups[to].push(\n Lockup({\n amount: uint128(amount), // max checked in require above\n end: uint128(end),\n points: points\n })\n );\n _mint(to, points);\n ogv.transferFrom(msg.sender, address(this), amount); // Important that it's sender\n\n if (!hasDelegationSet[to] && delegates(to) == address(0)) {\n // Delegate voting power to the receiver, if unregistered\n _delegate(to, to);\n }\n\n emit Stake(to, lockups[to].length - 1, amount, end, points);\n }\n\n /// @notice Collect staked OGV for a lockup and any earned rewards.\n /// @param lockupId the id of the lockup to unstake\n function unstake(uint256 lockupId) external {\n Lockup memory lockup = lockups[msg.sender][lockupId];\n uint256 amount = lockup.amount;\n uint256 end = lockup.end;\n uint256 points = lockup.points;\n require(block.timestamp >= end, \"Staking: End of lockup not reached\");\n require(end != 0, \"Staking: Already unstaked this lockup\");\n _collectRewards(msg.sender);\n delete lockups[msg.sender][lockupId]; // Keeps empty in array, so indexes are stable\n _burn(msg.sender, points);\n ogv.transfer(msg.sender, amount);\n emit Unstake(msg.sender, lockupId, amount, end, points);\n }\n\n /// @notice Extend a stake lockup for additional points.\n ///\n /// The stake end time is computed from the current time + duration, just\n /// like it is for new stakes. So a new stake for seven days duration and\n /// an old stake extended with a seven days duration would have the same\n /// end.\n ///\n /// If an extend is made before the start of staking, the start time for\n /// the new stake is shifted forwards to the start of staking, which also\n /// shifts forward the end date.\n ///\n /// @param lockupId the id of the old lockup to extend\n /// @param duration number of seconds from now to stake for\n function extend(uint256 lockupId, uint256 duration) external {\n // duration checked inside previewPoints\n _collectRewards(msg.sender);\n Lockup memory lockup = lockups[msg.sender][lockupId];\n uint256 oldAmount = lockup.amount;\n uint256 oldEnd = lockup.end;\n uint256 oldPoints = lockup.points;\n (uint256 newPoints, uint256 newEnd) = previewPoints(\n oldAmount,\n duration\n );\n require(newEnd > oldEnd, \"Staking: New lockup must be longer\");\n lockup.end = uint128(newEnd);\n lockup.points = newPoints;\n lockups[msg.sender][lockupId] = lockup;\n _mint(msg.sender, newPoints - oldPoints);\n if (!hasDelegationSet[msg.sender] && delegates(msg.sender) == address(0)) {\n // Delegate voting power to the receiver, if unregistered\n _delegate(msg.sender, msg.sender);\n }\n emit Unstake(msg.sender, lockupId, oldAmount, oldEnd, oldPoints);\n emit Stake(msg.sender, lockupId, oldAmount, newEnd, newPoints);\n }\n\n /// @notice Preview the number of points that would be returned for the\n /// given amount and duration.\n ///\n /// @param amount OGV to be staked\n /// @param duration number of seconds to stake for\n /// @return points staking points that would be returned\n /// @return end staking period end date\n function previewPoints(uint256 amount, uint256 duration)\n public\n view\n returns (uint256, uint256)\n {\n require(duration >= minStakeDuration, \"Staking: Too short\");\n require(duration <= 1461 days, \"Staking: Too long\");\n uint256 start = block.timestamp > epoch ? block.timestamp : epoch;\n uint256 end = start + duration;\n uint256 endYearpoc = ((end - epoch) * 1e18) / 365 days;\n uint256 multiplier = PRBMathUD60x18.pow(YEAR_BASE, endYearpoc);\n return ((amount * multiplier) / 1e18, end);\n }\n\n // 3. Reward functions\n\n /// @notice Collect all earned OGV rewards.\n function collectRewards() external {\n _collectRewards(msg.sender);\n }\n\n /// @notice Shows the amount of OGV a user would receive if they collected\n /// rewards at this time.\n ///\n /// @param user to preview rewards for\n /// @return OGV rewards amount\n function previewRewards(address user) external view returns (uint256) {\n uint256 supply = totalSupply();\n if (supply == 0) {\n return 0; // No one has any points to even get rewards\n }\n uint256 _accRewardPerShare = accRewardPerShare;\n _accRewardPerShare += (rewardsSource.previewRewards() * 1e12) / supply;\n uint256 netRewardsPerShare = _accRewardPerShare -\n rewardDebtPerShare[user];\n return (balanceOf(user) * netRewardsPerShare) / 1e12;\n }\n\n /// @dev Internal function to handle rewards accounting.\n ///\n /// 1. Collect new rewards for everyone\n /// 2. Calculate this user's rewards and accounting\n /// 3. Distribute this user's rewards\n ///\n /// This function *must* be called before any user balance changes.\n ///\n /// This will always update the user's rewardDebtPerShare to match\n /// accRewardPerShare, which is essential to the accounting.\n ///\n /// @param user to collect rewards for\n function _collectRewards(address user) internal {\n uint256 supply = totalSupply();\n if (supply > 0) {\n uint256 preBalance = ogv.balanceOf(address(this));\n try rewardsSource.collectRewards() {} catch {\n // Governance staking should continue, even if rewards fail\n }\n uint256 collected = ogv.balanceOf(address(this)) - preBalance;\n accRewardPerShare += (collected * 1e12) / supply;\n }\n uint256 netRewardsPerShare = accRewardPerShare -\n rewardDebtPerShare[user];\n uint256 netRewards = (balanceOf(user) * netRewardsPerShare) / 1e12;\n rewardDebtPerShare[user] = accRewardPerShare;\n if (netRewards == 0) {\n return;\n }\n ogv.transfer(user, netRewards);\n emit Reward(user, netRewards);\n }\n\n /**\n * @dev Change delegation for `delegator` to `delegatee`.\n *\n * Emits events {DelegateChanged} and {DelegateVotesChanged}.\n */\n function _delegate(address delegator, address delegatee) internal override {\n hasDelegationSet[delegator] = true;\n super._delegate(delegator, delegatee);\n }\n}\n", "sourceMap": "837:10873:17:-:0;;;2278:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1835:52:5;;;;;;;;;;;;;-1:-1:-1;;;1835:52:5;;;1874:4;2455:602:11;;;;;;;;;;;;;-1:-1:-1;;;2455:602:11;;;1978:113:1;;;;;;;;;;;;;;;;;;;;;;;;2052:5;2044;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2067:17:1;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2541:22:11;;;;;;;;;;2597:25;;;;;;2778;;;;2813:31;;;;2873:13;2854:32;;;;-1:-1:-1;3633:73:11;;2651:117;3633:73;;;876:25:20;;;917:18;;;910:34;;;-1:-1:-1;960:18:20;;953:34;;;1003:18;;;996:34;;;;3700:4:11;1046:19:20;;;1039:61;3633:73:11;;;;;;;;;;848:19:20;;3633:73:11;;3623:84;;;;;;;;2541:22;;-1:-1:-1;2597:25:11;2651:117;2896:85;;3014:4;2991:28;;3029:21;;-1:-1:-1;;;;;;;;;2454:17:17;;::::2;;::::0;-1:-1:-1;2481:14:17::2;::::0;;;;2505:36:::2;::::0;2551:45:::2;;::::0;837:10873;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;837:10873:17;;;-1:-1:-1;837:10873:17;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:20;93:13;;-1:-1:-1;;;;;135:31:20;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:416::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;490:2;479:9;475:18;469:25;459:35;;534:2;523:9;519:18;513:25;503:35;;557:49;602:2;591:9;587:18;557:49;:::i;:::-;547:59;;196:416;;;;;;;:::o;1111:380::-;1190:1;1186:12;;;;1233;;;1254:61;;1308:4;1300:6;1296:17;1286:27;;1254:61;1361:2;1353:6;1350:14;1330:18;1327:38;1324:161;;;1407:10;1402:3;1398:20;1395:1;1388:31;1442:4;1439:1;1432:15;1470:4;1467:1;1460:15;1324:161;;1111:380;;;:::o;:::-;837:10873:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "sourcePath": "contracts/OgvStaking.sol", "type": "contract", "deployment": {"address": "0xE61110663334794abA03c349c621A075DC590a42", "chainid": "1", "blockHeight": 16675746}}