UNPKG

@vechain/vebetterdao-contracts

Version:

Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.

400 lines 68.8 kB
{ "_format": "hh-sol-artifact-1", "contractName": "GovernorProposalLogicV8", "sourceName": "contracts/deprecated/V8/governance/libraries/GovernorProposalLogicV8.sol", "abi": [ { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "selector", "type": "bytes" } ], "name": "GovernorFunctionInvalidSelector", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "targets", "type": "uint256" }, { "internalType": "uint256", "name": "calldatas", "type": "uint256" }, { "internalType": "uint256", "name": "values", "type": "uint256" } ], "name": "GovernorInvalidProposalLength", "type": "error" }, { "inputs": [ { "internalType": "enum GovernorTypesV8.ProposalType", "name": "proposalType", "type": "uint8" } ], "name": "GovernorInvalidProposalType", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "proposer", "type": "address" }, { "internalType": "uint256", "name": "requiredWeight", "type": "uint256" } ], "name": "GovernorInvalidProposer", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "roundId", "type": "uint256" } ], "name": "GovernorInvalidStartRound", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "GovernorNonexistentProposal", "type": "error" }, { "inputs": [], "name": "GovernorQueueNotImplemented", "type": "error" }, { "inputs": [ { "internalType": "bytes4", "name": "functionSelector", "type": "bytes4" } ], "name": "GovernorRestrictedFunction", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "enum GovernorTypesV8.ProposalType", "name": "proposalType", "type": "uint8" } ], "name": "GovernorRestrictedProposal", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "proposer", "type": "address" } ], "name": "GovernorRestrictedProposer", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "enum GovernorTypesV8.ProposalState", "name": "current", "type": "uint8" }, { "internalType": "bytes32", "name": "expectedStates", "type": "bytes32" } ], "name": "GovernorUnexpectedProposalState", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "enum GovernorTypesV8.ProposalState", "name": "current", "type": "uint8" }, { "internalType": "bytes32", "name": "expectedStates", "type": "bytes32" } ], "name": "GovernorUnexpectedProposalState", "type": "error" }, { "inputs": [], "name": "QueueFull", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "UnauthorizedAccess", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "ProposalCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "ProposalCompleted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "proposer", "type": "address" }, { "indexed": false, "internalType": "address[]", "name": "targets", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "indexed": false, "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "indexed": false, "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "indexed": false, "internalType": "string", "name": "description", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "roundIdVoteStart", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "depositThreshold", "type": "uint256" } ], "name": "ProposalCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "enum GovernorTypesV8.ProposalType", "name": "proposalType", "type": "uint8" } ], "name": "ProposalCreatedWithType", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "depositor", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ProposalDeposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "ProposalDevelopmentStateReset", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "ProposalExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "ProposalInDevelopment", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "etaSeconds", "type": "uint256" } ], "name": "ProposalQueued", "type": "event" } ], "bytecode": "0x61396861003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b95760003560e01c80631a51d904146100be578063455971c1146100e65780634aa321f91461010757806360ca334a1461011a57806367b27b041461014e57806379ff5e8d1461017057806398479f3214610190578063a5e52fbd146101a3578063b46df8a9146101c3578063dd2a0fdc146101e3578063ebd48b1514610203578063ecf03b8614610223578063ed602bd814610243575b600080fd5b6100d16100cc366004612d16565b610263565b60405190151581526020015b60405180910390f35b6100f96100f4366004612d16565b6102b8565b6040519081526020016100dd565b6100f9610115366004612d16565b6102cb565b610141610128366004612d16565b6000908152601591909101602052604090205460ff1690565b6040516100dd9190612d62565b81801561015a57600080fd5b5061016e610169366004612d16565b6102d7565b005b81801561017c57600080fd5b5061016e61018b366004612d16565b610392565b6100d161019e366004612d70565b610402565b8180156101af57600080fd5b506100f96101be366004612fc6565b61040d565b8180156101cf57600080fd5b506100f96101de366004613090565b6104ea565b8180156101ef57600080fd5b506100f96101fe3660046131a0565b6105a2565b81801561020f57600080fd5b506100f961021e366004612fc6565b610798565b81801561022f57600080fd5b506100f961023e36600461325e565b610929565b81801561024f57600080fd5b5061016e61025e366004612d16565b61096b565b60008181526001808401602052604082209081015482036102885760009150506102b2565b6002810154600160201b900460ff16156102a65760019150506102b2565b60009150506102b2565b505b92915050565b60006102c48383610a88565b9392505050565b60006102c48383610e5f565b600081815260158301602052604081205460ff16908160018111156102fe576102fe612d38565b146103295781816040516344b7587b60e01b8152600401610320929190613327565b60405180910390fd5b61033d83836103386008610fbb565b610fde565b506000828152601e84016020908152604091829020805460ff1916600217905590518381527f71611adb0c8d2eea43359b2e41e5fdf96309ce734ed1eb78ceb763198c1b8967910160405180910390a1505050565b6103b182826103a16009610fbb565b6103ab6008610fbb565b17610fde565b506000818152601e83016020908152604091829020805460ff1916905590518281527f89e9abefcace5d0e37429f32023df3d73c9a310923f6383fa778ec40c629df0e910160405180910390a15050565b60006102b282611026565b60008061041c868686866111e0565b905061042d88826103386004610fbb565b50600061043f8989848a8a8a8a61121a565b905065ffffffffffff8116156104c557600082815260018a016020908152604091829020600201805465ffffffffffff60381b1916600160381b65ffffffffffff8616908102919091179091558251858152918201527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892910160405180910390a16104de565b604051634844252360e11b815260040160405180910390fd5b50979650505050505050565b6000806105008a8a8a8a805190602001206111e0565b90506105148b33888a8e8e8e8860016113b6565b601a8b015460405163808860a560e01b81526001600160a01b039091169063808860a59061054e908690859033908a908f906004016133d6565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050506105938b33838d8d8d8d8d8d600161160e565b9b9a5050505050505050505050565b6000806105b1868686866111e0565b90506105bd89826116f8565b6001600160a01b0316886001600160a01b0316141580156105dc575086155b156105fc5787604051633733be5960e21b81526004016103209190613425565b61066a898261060b6003610fbb565b6106156007610fbb565b61061f6009610fbb565b6106296008610fbb565b6106336006610fbb565b61063d6002610fbb565b600161064a60098261344f565b61065590600261354c565b61065f919061355b565b181818181818610fde565b5061067589826116f8565b6001600160a01b0316886001600160a01b0316036106f75760006106998a83611717565b60098111156106aa576106aa612d38565b146106f75760405162461bcd60e51b815260206004820152601e60248201527f476f7665726e6f723a2070726f706f73616c206e6f742070656e64696e6700006044820152606401610320565b600081815260078a01602052604090205480156107805760068a015460405163c4d252f560e01b8152600481018390526001600160a01b039091169063c4d252f590602401600060405180830381600087803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b505050600083815260078c016020526040812055505b61078a8a83611af8565b9a9950505050505050505050565b6000806107a7868686866111e0565b90506107c288826107b86005610fbb565b6103ab6004610fbb565b5060008181526001890160205260409020600201805460ff60281b1916600160281b1790556001600160a01b0387166107fa89611b5b565b6001600160a01b03161461088e5760005b865181101561088c57306001600160a01b03168782815181106108305761083061356e565b60200260200101516001600160a01b03160361087c5761087c85828151811061085b5761085b61356e565b6020026020010151805190602001208a600201611b6b90919063ffffffff16565b61088581613584565b905061080b565b505b61089d88888389898989611bdc565b866001600160a01b03166108b089611b5b565b6001600160a01b0316141580156108de575060028801546001600160801b03808216600160801b9092041614155b156108eb57600060028901555b6040518181527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9060200160405180910390a1979650505050505050565b600080339050600061094489898989805190602001206111e0565b90506109588a8387898d8d8d8860006113b6565b61078a8a83838c8c8c8c8c8c600061160e565b600081815260158301602090815260408083205460018601909252822060ff909116918260018111156109a0576109a0612d38565b146109c25782826040516344b7587b60e01b8152600401610320929190613327565b6109db84846109d16004610fbb565b6103ab6006610fbb565b506002810154600160201b900460ff168015610a11575060046109fe8585611717565b6009811115610a0f57610a0f612d38565b145b15610a335782826040516344b7587b60e01b8152600401610320929190613327565b6000838152601e85016020908152604091829020805460ff1916600117905590518481527fae96d9c307786efa9d87d53b27b247aa9ef9c3640c4d5065fddc861c71684ab0910160405180910390a150505050565b600081815260018084016020908152604080842090920154600a8601548351639cbe5efd60e01b8152935191936001600160a01b0390911692639cbe5efd926004808401938290030181865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a919061359d565b10610b9f57600a83015460008381526001808601602052604091829020015490516368377f6d60e11b81526001600160a01b039092169163d06efeda91610b579160040190815260200190565b602060405180830381865afa158015610b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b98919061359d565b90506102b2565b600a83015460408051639cbe5efd60e01b815290516000926001600160a01b031691639cbe5efd9160048083019260209291908290030181865afa158015610beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0f919061359d565b6000848152600180870160205260409091200154610c2d919061355b565b90506000610c3c60018361355b565b85600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb5919061359d565b610cbf91906135b6565b9050600085600a0160009054906101000a90046001600160a01b03166001600160a01b031663593728126040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061359d565b60405163ac30a9a160e01b81526004810188905290915073__$5ce7699bce76058533ff6d96ddcdca6e4f$__9063ac30a9a190602401602060405180830381865af4158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db391906135cd565b65ffffffffffff168111610e405760405163ac30a9a160e01b81526004810187905273__$5ce7699bce76058533ff6d96ddcdca6e4f$__9063ac30a9a190602401602060405180830381865af4158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3591906135cd565b65ffffffffffff1690505b82610e4b83836135f5565b610e5591906135f5565b9695505050505050565b600081815260018084016020908152604080842090920154600a8601548351639cbe5efd60e01b8152935191936001600160a01b0390911692639cbe5efd926004808401938290030181865afa158015610ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee1919061359d565b10610f2e57600a830154600083815260018086016020526040918290200154905163d3a368bd60e01b81526001600160a01b039092169163d3a368bd91610b579160040190815260200190565b82600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa7919061359d565b610fb18484610a88565b6102c491906135f5565b6000816009811115610fcf57610fcf612d38565b600160ff919091161b92915050565b600080610feb8585611717565b9050600083610ff983610fbb565b160361101e578381846040516331b75e4d60e01b815260040161032093929190613608565b949350505050565b60008082600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a2919061359d565b600a84015460405163d3a368bd60e01b8152600481018390529192506000916001600160a01b039091169063d3a368bd90602401602060405180830381865afa1580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611117919061359d565b60405163ac30a9a160e01b81526004810186905290915060009073__$5ce7699bce76058533ff6d96ddcdca6e4f$__9063ac30a9a190602401602060405180830381865af415801561116d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119191906135cd565b90508065ffffffffffff1682116111ad57506000949350505050565b6111bf65ffffffffffff82168361355b565b856004015411156111d557506000949350505050565b506001949350505050565b6000848484846040516020016111f994939291906136a4565b60408051601f19818403018152919052805160209091012095945050505050565b6000808860060160009054906101000a90046001600160a01b03166001600160a01b031663f27a0c926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611296919061359d565b905060006112a4848a611c6a565b60068b015460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f427906112e0908a908a908a9060009088906004016136ef565b602060405180830381865afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611321919061359d565b600089815260078c0160205260408082209290925560068c015491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb091611370918b918b918b919088908a9060040161373d565b600060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b5050505061078a82426113b191906135f5565b611c7b565b6113bf81611cad565b6113de5780604051633e4bbe1960e11b81526004016103209190612d62565b88600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611457919061359d565b871161147957604051637a5d07d360e01b815260048101889052602401610320565b88600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f2919061359d565b6114fd9060016135f5565b870361152c5761150c89611026565b61152c57604051637a5d07d360e01b815260048101889052602401610320565b600081600181111561154057611540612d38565b0361156e5761154f8887611ce4565b61156e578760405163d9b3955760e01b81526004016103209190613425565b8351855114158061158157508251855114155b156115b657845183518551604051630447b05d60e41b8152600481019390935260248301919091526044820152606401610320565b60008281526001808b0160205260409091200154156115f857816115da8a84611717565b6040516331b75e4d60e01b8152610320929190600090600401613608565b611603898685611dd5565b505050505050505050565b60008061161b8c84611ead565b905060006116a08d600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b919061359d565b611f72565b8a5190915015156116b28e8e87611f9e565b6116c38e8d8f858b868c8a8d6120f6565b85156116d5576116d58e878f8f612192565b6116e68d8d8d8d8d8d8d8a8d612432565b50999c9b505050505050505050505050565b600090815260019190910160205260409020546001600160a01b031690565b6000818152600180840160209081526040808420601e87019092528320546002820154919260ff91821692600160281b8104831692600160301b909104169083600281111561176857611768612d38565b0361177a5760089450505050506102b2565b600283600281111561178e5761178e612d38565b036117a05760099450505050506102b2565b81156117b35760069450505050506102b2565b80156117c65760029450505050506102b2565b83600101546000036117ee57604051636ad0607560e01b815260048101879052602401610320565b836001015487600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c919061359d565b101561187f5760009450505050506102b2565b60405163ac30a9a160e01b81526004810188905260009073__$5ce7699bce76058533ff6d96ddcdca6e4f$__9063ac30a9a190602401602060405180830381865af41580156118d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f691906135cd565b65ffffffffffff169050600061190c8989610e5f565b600089815260018b01602052604090206004810154600390910154919250111561193f57600796505050505050506102b2565b81811061195557600196505050505050506102b2565b61195f898961250e565b158061198157506000888152600f8a0160205260409020805460019091015411155b1561199557600396505050505050506102b2565b600088815260018a016020526040902060020154600160381b900465ffffffffffff166000036119ce57600496505050505050506102b2565b600088815260078a016020526040908190205460068b01549151632c258a9f60e11b81526004810182905290916001600160a01b03169063584b153e90602401602060405180830381865afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190613795565b15611a645760059750505050505050506102b2565b60068a0154604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa158015611aaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad39190613795565b15611ae85760069750505050505050506102b2565b60029750505050505050506102b2565b6000818152600183016020526040808220600201805460ff60301b1916600160301b179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90611b4d9084815260200190565b60405180910390a150919050565b600601546001600160a01b031690565b81546001600160801b03600160801b820481169181166001830190911603611ba657604051638acb5f2760e01b815260040160405180910390fd5b6001600160801b03808216600090815260018086016020526040909120939093558354919092018216600160801b029116179055565b60068701546001600160a01b031663e38335e5348686866000611bff888e611c6a565b6040518763ffffffff1660e01b8152600401611c1f9594939291906136ef565b6000604051808303818588803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b50505060009687525050506007909501602052505060408120555050565b60601b6001600160601b0319161890565b600065ffffffffffff821115611ca9576030826040516306dfcc6560e41b81526004016103209291906137b2565b5090565b600080826001811115611cc257611cc2612d38565b14806102b257506001826001811115611cdd57611cdd612d38565b1492915050565b80516000906034811015611cfc5760019150506102b2565b82810160131901516001600160a01b031981166b046e0e4dee0dee6cae47a60f60a31b14611d2f576001925050506102b2565b600080611d3d60288561355b565b90505b83811015611db457600080611d74888481518110611d6057611d6061356e565b01602001516001600160f81b031916612550565b9150915081611d8c57600196505050505050506102b2565b8060ff166004856001600160a01b0316901b179350505080611dad90613584565b9050611d40565b50856001600160a01b0316816001600160a01b031614935050505092915050565b600983015460ff1615611ea85760005b8251811015611ea6576000611e12838381518110611e0557611e0561356e565b60200260200101516125e2565b9050846008016000858481518110611e2c57611e2c61356e565b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081206001600160e01b03198516825290925290205460ff16611e935760405163294080f760e21b81526001600160e01b031982166004820152602401610320565b5080611e9e81613584565b915050611de5565b505b505050565b600080606484600b0160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2b919061359d565b611f358686612611565b611f3f91906135b6565b611f4991906137db565b90506000611f578585612678565b905080821115611f6a5791506102b29050565b509392505050565b600063ffffffff821115611ca9576020826040516306dfcc6560e41b81526004016103209291906137b2565b600083601c016000836001811115611fb857611fb8612d38565b6001811115611fc957611fc9612d38565b815260208101919091526040908101600090812054601b870154925163d206885d60e01b815290935090916001600160a01b031690636d5e303290829063d206885d9061201a908990600401613425565b602060405180830381865afa158015612037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205b919061359d565b6040518263ffffffff1660e01b815260040161207991815260200190565b602060405180830381865afa158015612096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ba919061359d565b9050818110156120ef576040516304b60e7960e31b81526001600160a01b038516600482015260248101839052604401610320565b5050505050565b600088815260018a81016020908152604080842080546001600160a01b0319166001600160a01b038d161781558084018a905560028101805463ffffffff8d1664ffffffffff1990911617600160201b8b151502179055600381018890556004810187905560158e019092529092208054849260ff1990911690838181111561218157612181612d38565b021790555050505050505050505050565b600c8401546040516323b872dd60e01b81526001600160a01b03848116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af11580156121ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122119190613795565b61225d5760405162461bcd60e51b815260206004820152601d60248201527f42335452476f7665726e6f723a207472616e73666572206661696c65640000006044820152606401610320565b6000818152600d8501602090815260408083206001600160a01b0386168452909152812080548592906122919084906135f5565b909155505060405163ac30a9a160e01b8152600481018590526000906123319073__$5ce7699bce76058533ff6d96ddcdca6e4f$__9063ac30a9a190602401602060405180830381865af41580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231191906135cd565b6001600160a01b0385166000908152601d880160205260409020906126b7565b9050600061233e8561276d565b61234890836137fd565b60405163ac30a9a160e01b8152600481018890529091506123e49073__$5ce7699bce76058533ff6d96ddcdca6e4f$__9063ac30a9a190602401602060405180830381865af415801561239f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c391906135cd565b6001600160a01b0386166000908152601d890160205260409020908361279c565b505082846001600160a01b03167f65c1df56bba34c409163f3295407ab399df5a4d9bf3dd0288416d6041cdc272c8760405161242291815260200190565b60405180910390a3505050505050565b82896001600160a01b0316897f9c2b0d68f5edfd1bf6158a1867aced894efcfcf77c7a7603cb571e18ce89ae768a8a8c516001600160401b0381111561247a5761247a612da5565b6040519080825280602002602001820160405280156124ad57816020015b60608152602001906001900390816124985790505b508b8b8a6040516124c39695949392919061381d565b60405180910390a4877f6d04097725b4d82fbe72e4fd0fd1798c60a7b1bbc328842680c83ac06b1b0ada826040516124fb9190612d62565b60405180910390a2505050505050505050565b60008181526015830160209081526040808320546011860190925282205460ff90911690612546856125408187610a88565b846127b7565b1115949350505050565b60008060f883901c602f8111801561256b5750603a8160ff16105b1561258057600194602f199091019350915050565b8060ff166040108015612596575060478160ff16105b156125ab576001946036199091019350915050565b8060ff1660601080156125c1575060678160ff16105b156125d6576001946056199091019350915050565b50600093849350915050565b600060048251101561260957816040516301a800fb60e41b815260040161032091906138d4565b506020015190565b600061261c82611cad565b6126385760405162461bcd60e51b8152600401610320906138e7565b82601601600083600181111561265057612650612d38565b600181111561266157612661612d38565b815260200190815260200160002054905092915050565b600061268382611cad565b61269f5760405162461bcd60e51b8152600401610320906138e7565b82601901600083600181111561265057612650612d38565b8154600090818160058111156127165760006126d284612849565b6126dc908561355b565b60008881526020902090915081015465ffffffffffff908116908716101561270657809150612714565b6127118160016135f5565b92505b505b600061272487878585612931565b9050801561275f576127498761273b60018461355b565b600091825260209091200190565b54600160301b90046001600160d01b0316612762565b60005b979650505050505050565b60006001600160d01b03821115611ca95760d0826040516306dfcc6560e41b81526004016103209291906137b2565b6000806127aa85858561298b565b915091505b935093915050565b600060646127c6858585612b05565b600c860154604051632394e7a360e21b8152600481018790526001600160a01b0390911690638e539e8c90602401602060405180830381865afa158015612811573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612835919061359d565b61283f91906135b6565b61101e91906137db565b60008160000361285b57506000919050565b6000600161286884612b12565b901c6001901b90506001818481612881576128816137c5565b048201901c90506001818481612899576128996137c5565b048201901c905060018184816128b1576128b16137c5565b048201901c905060018184816128c9576128c96137c5565b048201901c905060018184816128e1576128e16137c5565b048201901c905060018184816128f9576128f96137c5565b048201901c90506001818481612911576129116137c5565b048201901c90506102c48182858161292b5761292b6137c5565b04612ba6565b60005b81831015611f6a5760006129488484612bbc565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561297757809250612985565b6129828160016135f5565b93505b50612934565b825460009081908015612aaa5760006129a98761273b60018561355b565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b0316602084015291925090871610156129fd57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603612a495784612a208861273b60018661355b565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055612a9a565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506127af9050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b0291909316179201919091559050816127af565b600061101e848484612bd7565b600080608083901c15612b2757608092831c92015b604083901c15612b3957604092831c92015b602083901c15612b4b57602092831c92015b601083901c15612b5d57601092831c92015b600883901c15612b6f57600892831c92015b600483901c15612b8157600492831c92015b600283901c15612b9357600292831c92015b600183901c156102b25760010192915050565b6000818310612bb557816102c4565b5090919050565b6000612bcb60028484186137db565b6102c4908484166135f5565b600080846018016000846001811115612bf257612bf2612d38565b6001811115612c0357612c03612d38565b8152602081019190915260400160009081205491506018860181856001811115612c2f57612c2f612d38565b6001811115612c4057612c40612d38565b81526020810191909152604001600020612c5b60018461355b565b81548110612c6b57612c6b61356e565b6000918252602090912001805490915065ffffffffffff811690600160301b90046001600160d01b0316868211612cb0576001600160d01b031693506102c492505050565b612d01612cbc88611c7b565b896018016000896001811115612cd457612cd4612d38565b6001811115612ce557612ce5612d38565b81526020019081526020016000206126b790919063ffffffff16565b6001600160d01b031698975050505050505050565b60008060408385031215612d2957600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b60028110612d5e57612d5e612d38565b9052565b602081016102b28284612d4e565b600060208284031215612d8257600080fd5b5035919050565b80356001600160a01b0381168114612da057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612de357612de3612da5565b604052919050565b60006001600160401b03821115612e0457612e04612da5565b5060051b60200190565b600082601f830112612e1f57600080fd5b81356020612e34612e2f83612deb565b612dbb565b82815260059290921b84018101918181019086841115612e5357600080fd5b8286015b84811015612e7557612e6881612d89565b8352918301918301612e57565b509695505050505050565b600082601f830112612e9157600080fd5b81356020612ea1612e2f83612deb565b82815260059290921b84018101918181019086841115612ec057600080fd5b8286015b84811015612e755780358352918301918301612ec4565b60006001600160401b03831115612ef457612ef4612da5565b612f07601f8401601f1916602001612dbb565b9050828152838383011115612f1b57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612f4357600080fd5b81356020612f53612e2f83612deb565b82815260059290921b84018101918181019086841115612f7257600080fd5b8286015b84811015612e755780356001600160401b03811115612f955760008081fd5b8701603f81018913612fa75760008081fd5b612fb8898683013560408401612edb565b845250918301918301612f76565b60008060008060008060c08789031215612fdf57600080fd5b86359550612fef60208801612d89565b945060408701356001600160401b038082111561300b57600080fd5b6130178a838b01612e0e565b9550606089013591508082111561302d57600080fd5b6130398a838b01612e80565b9450608089013591508082111561304f57600080fd5b5061305c89828a01612f32565b92505060a087013590509295509295509295565b600082601f83011261308157600080fd5b6102c483833560208501612edb565b60008060008060008060008060006101208a8c0312156130af57600080fd5b8935985060208a01356001600160401b03808211156130cd57600080fd5b6130d98d838e01612e0e565b995060408c01359150808211156130ef57600080fd5b6130fb8d838e01612e80565b985060608c013591508082111561311157600080fd5b61311d8d838e01612f32565b975060808c013591508082111561313357600080fd5b61313f8d838e01613070565b965060a08c0135955060c08c0135945061315b60e08d01612d89565b93506101008c013591508082111561317257600080fd5b5061317f8c828d01613070565b9150509295985092959850929598565b801515811461319d57600080fd5b50565b600080600080600080600060e0888a0312156131bb57600080fd5b873596506131cb60208901612d89565b955060408801356131db8161318f565b945060608801356001600160401b03808211156131f757600080fd5b6132038b838c01612e0e565b955060808a013591508082111561321957600080fd5b6132258b838c01612e80565b945060a08a013591508082111561323b57600080fd5b506132488a828b01612f32565b92505060c0880135905092959891949750929550565b600080600080600080600060e0888a03121561327957600080fd5b8735965060208801356001600160401b038082111561329757600080fd5b6132a38b838c01612e0e565b975060408a01359150808211156132b957600080fd5b6132c58b838c01612e80565b965060608a01359150808211156132db57600080fd5b6132e78b838c01612f32565b955060808a01359150808211156132fd57600080fd5b5061330a8a828b01613070565b93505060a0880135915060c0880135905092959891949750929550565b828152604081016102c46020830184612d4e565b6000815180845260005b8181101561336157602081850181015186830182015201613345565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501808196508360051b8101915082860160005b858110156133c95782840389526133b784835161333b565b9885019893509084019060010161339f565b5091979650505050505050565b60a0815260006133e960a083018861333b565b602083018790526001600160a01b0386811660408501528516606084015282810360808401526134198185613381565b98975050505050505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156102b2576102b2613439565b600181815b808511156134a357816000190482111561348957613489613439565b8085161561349657918102915b93841c939080029061346d565b509250929050565b6000826134ba575060016102b2565b816134c7575060006102b2565b81600181146134dd57600281146134e757613503565b60019150506102b2565b60ff8411156134f8576134f8613439565b50506001821b6102b2565b5060208310610133831016604e8410600b8410161715613526575081810a6102b2565b6135308383613468565b806000190482111561354457613544613439565b029392505050565b60006102c460ff8416836134ab565b818103818111156102b2576102b2613439565b634e487b7160e01b600052603260045260246000fd5b60006001820161359657613596613439565b5060010190565b6000602082840312156135af57600080fd5b5051919050565b80820281158282048414176102b2576102b2613439565b6000602082840312156135df57600080fd5b815165ffffffffffff811681146102c457600080fd5b808201808211156102b2576102b2613439565b83815260608101600a841061361f5761361f612d38565b602082019390935260400152919050565b600081518084526020808501945080840160005b838110156136695781516001600160a01b031687529582019590820190600101613644565b509495945050505050565b600081518084526020808501945080840160005b8381101561366957815187529582019590820190600101613688565b6080815260006136b76080830187613630565b82810360208401526136c98187613674565b905082810360408401526136dd8186613381565b91505082606083015295945050505050565b60a08152600061370260a0830188613630565b82810360208401526137148188613674565b905082810360408401526137288187613381565b60608401959095525050608001529392505050565b60c08152600061375060c0830189613630565b82810360208401526137628189613674565b905082810360408401526137768188613381565b60608401969096525050608081019290925260a0909101529392505050565b6000602082840312156137a757600080fd5b81516102c48161318f565b60ff929092168252602082015260400190565b634e487b7160e01b600052601260045260246000fd5b6000826137f857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b038181168382160190808211156102b0576102b0613439565b60c08152600061383060c0830189613630565b602083820381850152613843828a613674565b915083820360408501528188518084528284019150828160051b850101838b0160005b8381101561389457601f1987840301855261388283835161333b565b94860194925090850190600101613866565b505086810360608801526138a8818b613381565b94505050505082810360808401526138c0818661333b565b9150508260a0830152979650505050505050565b6020815260006102c4602083018461333b565b6020808252602b908201527f476f7665726e6f72436f6e666967757261746f723a20696e76616c696420707260408201526a6f706f73616c207479706560a81b60608201526080019056fea2646970667358221220108978181249bfe27887ff509489a817cc758805ae76fb24cc3590db0ecfdcb164736f6c63430008140033", "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100b95760003560e01c80631a51d904146100be578063455971c1146100e65780634aa321f91461010757806360ca334a1461011a57806367b27b041461014e57806379ff5e8d1461017057806398479f3214610190578063a5e52fbd146101a3578063b46df8a9146101c3578063dd2a0fdc146101e3578063ebd48b1514610203578063ecf03b8614610223578063ed602bd814610243575b600080fd5b6100d16100cc366004612d16565b610263565b60405190151581526020015b60405180910390f35b6100f96100f4366004612d16565b6102b8565b6040519081526020016100dd565b6100f9610115366004612d16565b6102cb565b610141610128366004612d16565b6000908152601591909101602052604090205460ff1690565b6040516100dd9190612d62565b81801561015a57600080fd5b5061016e610169366004612d16565b6102d7565b005b81801561017c57600080fd5b5061016e61018b366004612d16565b610392565b6100d161019e366004612d70565b610402565b8180156101af57600080fd5b506100f96101be366004612fc6565b61040d565b8180156101cf57600080fd5b506100f96101de366004613090565b6104ea565b8180156101ef57600080fd5b506100f96101fe3660046131a0565b6105a2565b81801561020f57600080fd5b506100f961021e366004612fc6565b610798565b81801561022f57600080fd5b506100f961023e36600461325e565b610929565b81801561024f57600080fd5b5061016e61025e366004612d16565b61096b565b60008181526001808401602052604082209081015482036102885760009150506102b2565b6002810154600160201b900460ff16156102a65760019150506102b2565b60009150506102b2565b505b92915050565b60006102c48383610a88565b9392505050565b60006102c48383610e5f565b600081815260158301602052604081205460ff16908160018111156102fe576102fe612d38565b146103295781816040516344b7587b60e01b8152600401610320929190613327565b60405180910390fd5b61033d83836103386008610fbb565b610fde565b506000828152601e84016020908152604091829020805460ff1916600217905590518381527f71611adb0c8d2eea43359b2e41e5fdf96309ce734ed1eb78ceb763198c1b8967910160405180910390a1505050565b6103b182826103a16009610fbb565b6103ab6008610fbb565b17610fde565b506000818152601e83016020908152604091829020805460ff1916905590518281527f89e9abefcace5d0e37429f32023df3d73c9a310923f6383fa778ec40c629df0e910160405180910390a15050565b60006102b282611026565b60008061041c868686866111e0565b905061042d88826103386004610fbb565b50600061043f8989848a8a8a8a61121a565b905065ffffffffffff8116156104c557600082815260018a016020908152604091829020600201805465ffffffffffff60381b1916600160381b65ffffffffffff8616908102919091179091558251858152918201527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892910160405180910390a16104de565b604051634844252360e11b815260040160405180910390fd5b50979650505050505050565b6000806105008a8a8a8a805190602001206111e0565b90506105148b33888a8e8e8e8860016113b6565b601a8b015460405163808860a560e01b81526001600160a01b039091169063808860a59061054e908690859033908a908f906004016133d6565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050506105938b33838d8d8d8d8d8d600161160e565b9b9a5050505050505050505050565b6000806105b1868686866111e0565b90506105bd89826116f8565b6001600160a01b0316886001600160a01b0316141580156105dc575086155b156105fc5787604051633733be5960e21b81526004016103209190613425565b61066a898261060b6003610fbb565b6106156007610fbb565b61061f6009610fbb565b6106296008610fbb565b6106336006610fbb565b61063d6002610fbb565b600161064a60098261344f565b61065590600261354c565b61065f919061355b565b181818181818610fde565b5061067589826116f8565b6001600160a01b0316886001600160a01b0316036106f75760006106998a83611717565b60098111156106aa576106aa612d38565b146106f75760405162461bcd60e51b815260206004820152601e60248201527f476f7665726e6f723a2070726f706f73616c206e6f742070656e64696e6700006044820152606401610320565b600081815260078a01602052604090205480156107805760068a015460405163c4d252f560e01b8152600481018390526001600160a01b039091169063c4d252f590602401600060405180830381600087803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b505050600083815260078c016020526040812055505b61078a8a83611af8565b9a9950505050505050505050565b6000806107a7868686866111e0565b90506107c288826107b86005610fbb565b6103ab6004610fbb565b5060008181526001890160205260409020600201805460ff60281b1916600160281b1790556001600160a01b0387166107fa89611b5b565b6001600160a01b03161461088e5760005b865181101561088c57306001600160a01b03168782815181106108305761083061356e565b60200260200101516001600160a01b03160361087c5761087c85828151811061085b5761085b61356e565b6020026020010151805190602001208a600201611b6b90919063ffffffff16565b61088581613584565b905061080b565b505b61089d88888389898989611bdc565b866001600160a01b03166108b089611b5b565b6001600160a01b0316141580156108de575060028801546001600160801b03808216600160801b9092041614155b156108eb57600060028901555b6040518181527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9060200160405180910390a1979650505050505050565b600080339050600061094489898989805190602001206111e0565b90506109588a8387898d8d8d8860006113b6565b61078a8a83838c8c8c8c8c8c600061160e565b600081815260158301602090815260408083205460018601909252822060ff909116918260018111156109a0576109a0612d38565b146109c25782826040516344b7587b60e01b8152600401610320929190613327565b6109db84846109d16004610fbb565b6103ab6006610fbb565b506002810154600160201b900460ff168015610a11575060046109fe8585611717565b6009811115610a0f57610a0f612d38565b145b15610a335782826040516344b7587b60e01b8152600401610320929190613327565b6000838152601e85016020908152604091829020805460ff1916600117905590518481527fae96d9c307786efa9d87d53b27b247aa9ef9c3640c4d5065fddc861c71684ab0910160405180910390a150505050565b600081815260018084016020908152604080842090920154600a8601548351639cbe5efd60e01b8152935191936001600160a01b0390911692639cbe5efd926004808401938290030181865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a919061359d565b10610b9f57600a83015460008381526001808601602052604091829020015490516368377f6d60e11b81526001600160a01b039092169163d06efeda91610b579160040190815260200190565b602060405180830381865afa158015610b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b98919061359d565b90506102b2565b600a83015460408051639cbe5efd60e01b815290516000926001600160a01b031691639cbe5efd9160048083019260209291908290030181865afa158015610beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0f919061359d565b6000848152600180870160205260409091200154610c2d919061355b565b90506000610c3c60018361355b565b85600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb5919061359d565b610cbf91906135b6565b9050600085600a0160009054906101000a90046001600160a01b03166001600160a01b031663593728126040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061359d565b60405163ac30a9a160e01b81526004810188905290915073__$5ce7699bce76058533ff6d96ddcdca6e4f$__9063ac30a9a190602401602060405180830381865af4158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db391906135cd565b65ffffffffffff168111610e405760405163ac30a9a160e01b81526004810187905273__$5ce7699bce76058533ff6d96ddcdca6e4f$__9063ac30a9a190602401602060405180830381865af4158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3591906135cd565b65ffffffffffff1690505b82610e4b83836135f5565b610e5591906135f5565b9695505050505050565b600081815260018084016020908152604080842090920154600a8601548351639cbe5efd60e01b8152935191936001600160a01b0390911692639cbe5efd926004808401938290030181865afa158015610ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee1919061359d565b10610f2e57600a830154600083815260018086016020526040918290200154905163d3a368bd60e01b81526001600160a01b039092169163d3a368bd91610b579160040190815260200190565b82600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa7919061359d565b610fb18484610a88565b6102c491906135f5565b6000816009811115610fcf57610fcf612d38565b600160ff919091161b92915050565b600080610feb8585611717565b9050600083610ff983610fbb565b160361101e578381846040516331b75e4d60e01b815260040161032093929190613608565b949350505050565b60008082600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a2919061359d565b600a84015460405163d3a368bd60e01b8152600481018390529192506000916001600160a01b039091169063d3a368bd90602401602060405180830381865afa1580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611117919061359d565b60405163ac30a9a160e01b81526004810186905290915060009073__$5ce7699bce76058533ff6d96ddcdca6e4f$__9063ac30a9a190602401602060405180830381865af415801561116d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119191906135cd565b90508065ffffffffffff1682116111ad57506000949350505050565b6111bf65ffffffffffff82168361355b565b856004015411156111d557506000949350505050565b506001949350505050565b6000848484846040516020016111f994939291906136a4565b60408051601f19818403018152919052805160209091012095945050505050565b6000808860060160009054906101000a90046001600160a01b03166001600160a01b031663f27a0c926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611296919061359d565b905060006112a4848a611c6a565b60068b015460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f427906112e0908a908a908a9060009088906004016136ef565b602060405180830381865afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611321919061359d565b600089815260078c0160205260408082209290925560068c015491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb091611370918b918b918b919088908a9060040161373d565b600060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b5050505061078a82426113b191906135f5565b611c7b565b6113bf81611cad565b6113de5780604051633e4bbe1960e11b81526004016103209190612d62565b88600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611457919061359d565b871161147957604051637a5d07d360e01b815260048101889052602401610320565b88600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f2919061359d565b6114fd9060016135f5565b870361152c5761150c89611026565b61152c57604051637a5d07d360e01b815260048101889052602401610320565b600081600181111561154057611540612d38565b0361156e5761154f8887611ce4565b61156e578760405163d9b3955760e01b81526004016103209190613425565b8351855114158061158157508251855114155b156115b657845183518551604051630447b05d60e41b8152600481019390935260248301919091526044820152606401610320565b60008281526001808b0160205260409091200154156115f857816115da8a84611717565b6040516331b75e4d60e01b8152610320929190600090600401613608565b611603898685611dd5565b505050505050505050565b60008061161b8c84611ead565b905060006116a08d600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b919061359d565b611f72565b8a5190915015156116b28e8e87611f9e565b6116c38e8d8f858b868c8a8d6120f6565b85156116d5576116d58e878f8f612192565b6116e68d8d8d8d8d8d8d8a8d612432565b5099