UNPKG

@vechain/vebetterdao-contracts

Version:

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

425 lines 69.8 kB
{ "_format": "hh-sol-artifact-1", "contractName": "GovernorProposalLogicV9", "sourceName": "contracts/deprecated/V9/governance/libraries/GovernorProposalLogicV9.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 GovernorTypesV9.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 GovernorTypesV9.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 GovernorTypesV9.ProposalState", "name": "current", "type": "uint8" }, { "internalType": "bytes32", "name": "expectedStates", "type": "bytes32" } ], "name": "GovernorUnexpectedProposalState", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "enum GovernorTypesV9.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": true, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "canceler", "type": "address" }, { "indexed": false, "internalType": "string", "name": "reason", "type": "string" } ], "name": "ProposalCanceledWithReason", "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 GovernorTypesV9.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": "0x6139e061003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b95760003560e01c80633830cb6b146100be578063427f6ff5146100e0578063462e3084146101135780634ac8231b146101335780634b588c5a146101465780634e661ee71461016657806364621f2e146101865780637b819f9b146101a657806386e119ef146101b95780638a0aa279146101ed57806396d8a1571461020d578063b4aae8c514610230578063be9f66d614610250575b600080fd5b8180156100ca57600080fd5b506100de6100d9366004612d60565b610263565b005b8180156100ec57600080fd5b506101006100fb366004612ffb565b61038f565b6040519081526020015b60405180910390f35b81801561011f57600080fd5b506100de61012e366004612d60565b610588565b610100610141366004612d60565b61063a565b81801561015257600080fd5b506101006101613660046130dc565b61064f565b81801561017257600080fd5b506101006101813660046131db565b6106f8565b81801561019257600080fd5b506100de6101a1366004612d60565b610889565b6101006101b4366004612d60565b6108f3565b6101e06101c7366004612d60565b6000908152601591909101602052604090205460ff1690565b60405161010a91906132af565b8180156101f957600080fd5b506101006102083660046132bd565b6108ff565b61022061021b366004612d60565b61094f565b604051901515815260200161010a565b81801561023c57600080fd5b5061010061024b3660046131db565b6109a3565b61022061025e366004613386565b610a80565b600081815260158301602090815260408083205460018601909252822060ff9091169182600181111561029857610298613285565b146102c35782826040516344b7587b60e01b81526004016102ba92919061339f565b60405180910390fd5b6102e284846102d26004610a8b565b6102dc6006610a8b565b17610aae565b506002810154600160201b900460ff168015610318575060046103058585610af8565b600981111561031657610316613285565b145b1561033a5782826040516344b7587b60e01b81526004016102ba92919061339f565b6000838152601e85016020908152604091829020805460ff1916600117905590518481527fae96d9c307786efa9d87d53b27b247aa9ef9c3640c4d5065fddc861c71684ab0910160405180910390a150505050565b60008061039e87878787610ed9565b90506103aa8a82610f13565b6001600160a01b0316896001600160a01b0316141580156103c9575087155b156103e95788604051633733be5960e21b81526004016102ba91906133b3565b6104578a826103f86003610a8b565b6104026007610a8b565b61040c6009610a8b565b6104166008610a8b565b6104206006610a8b565b61042a6002610a8b565b60016104376009826133dd565b6104429060026134da565b61044c91906134e9565b181818181818610aae565b506104628a82610f13565b6001600160a01b0316896001600160a01b0316036104e45760006104868b83610af8565b600981111561049757610497613285565b146104e45760405162461bcd60e51b815260206004820152601e60248201527f476f7665726e6f723a2070726f706f73616c206e6f742070656e64696e67000060448201526064016102ba565b600081815260078b016020526040902054801561056d5760068b015460405163c4d252f560e01b8152600481018390526001600160a01b039091169063c4d252f590602401600060405180830381600087803b15801561054357600080fd5b505af1158015610557573d6000803e3d6000fd5b505050600083815260078d016020526040812055505b6105798b838c87610f32565b9b9a5050505050505050505050565b600081815260158301602052604081205460ff16908160018111156105af576105af613285565b146105d15781816040516344b7587b60e01b81526004016102ba92919061339f565b6105e583836105e06008610a8b565b610aae565b506000828152601e84016020908152604091829020805460ff1916600217905590518381527f71611adb0c8d2eea43359b2e41e5fdf96309ce734ed1eb78ceb763198c1b8967910160405180910390a1505050565b60006106468383610fda565b90505b92915050565b6000806106658a8a8a8a80519060200120610ed9565b90506106798b33888a8e8e8e8860016113b1565b601a8b015460405163808860a560e01b81526001600160a01b039091169063808860a5906106b3908690859033908a908f90600401613597565b600060405180830381600087803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b505050506105798b33838d8d8d8d8d8d6001611609565b60008061070786868686610ed9565b905061072288826107186005610a8b565b6102dc6004610a8b565b5060008181526001890160205260409020600201805460ff60281b1916600160281b1790556001600160a01b03871661075a896116f3565b6001600160a01b0316146107ee5760005b86518110156107ec57306001600160a01b0316878281518110610790576107906135e6565b60200260200101516001600160a01b0316036107dc576107dc8582815181106107bb576107bb6135e6565b6020026020010151805190602001208a60020161170390919063ffffffff16565b6107e5816135fc565b905061076b565b505b6107fd88888389898989611774565b866001600160a01b0316610810896116f3565b6001600160a01b03161415801561083e575060028801546001600160801b03808216600160801b9092041614155b1561084b57600060028901555b6040518181527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9060200160405180910390a1979650505050505050565b6108a282826108986009610a8b565b6102dc6008610a8b565b506000818152601e83016020908152604091829020805460ff1916905590518281527f89e9abefcace5d0e37429f32023df3d73c9a310923f6383fa778ec40c629df0e910160405180910390a15050565b60006106468383611802565b600080339050600061091a8989898980519060200120610ed9565b905061092e8a8387898d8d8d8860006113b1565b6109418a83838c8c8c8c8c8c6000611609565b9a9950505050505050505050565b6000818152600180840160205260408220908101548203610974576000915050610649565b6002810154600160201b900460ff1615610992576001915050610649565b6000915050610649565b5092915050565b6000806109b286868686610ed9565b90506109c388826105e06004610a8b565b5060006109d58989848a8a8a8a61195e565b905065ffffffffffff811615610a5b57600082815260018a016020908152604091829020600201805465ffffffffffff60381b1916600160381b65ffffffffffff8616908102919091179091558251858152918201527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892910160405180910390a1610a74565b604051634844252360e11b815260040160405180910390fd5b50979650505050505050565b600061064982611afa565b6000816009811115610a9f57610a9f613285565b600160ff919091161b92915050565b600080610abb8585610af8565b9050600083610ac983610a8b565b1603610aee578381846040516331b75e4d60e01b81526004016102ba93929190613615565b90505b9392505050565b6000818152600180840160209081526040808420601e87019092528320546002820154919260ff91821692600160281b8104831692600160301b9091041690836002811115610b4957610b49613285565b03610b5b576008945050505050610649565b6002836002811115610b6f57610b6f613285565b03610b81576009945050505050610649565b8115610b94576006945050505050610649565b8015610ba7576002945050505050610649565b8360010154600003610bcf57604051636ad0607560e01b8152600481018790526024016102ba565b836001015487600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4d919061363d565b1015610c60576000945050505050610649565b60405163287586e760e11b81526004810188905260009073__$52a1e9d9b08edd489cb2c18a0af4a1d43f$__906350eb0dce90602401602060405180830381865af4158015610cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd79190613656565b65ffffffffffff1690506000610ced8989611802565b600089815260018b016020526040902060048101546003909101549192501115610d205760079650505050505050610649565b818110610d365760019650505050505050610649565b610d408989611cb4565b1580610d6257506000888152600f8a0160205260409020805460019091015411155b15610d765760039650505050505050610649565b600088815260018a016020526040902060020154600160381b900465ffffffffffff16600003610daf5760049650505050505050610649565b600088815260078a016020526040908190205460068b01549151632c258a9f60e11b81526004810182905290916001600160a01b03169063584b153e90602401602060405180830381865afa158015610e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e30919061367e565b15610e45576005975050505050505050610649565b60068a0154604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa158015610e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb4919061367e565b15610ec9576006975050505050505050610649565b6002975050505050505050610649565b600084848484604051602001610ef2949392919061370f565b60408051601f19818403018152919052805160209091012095945050505050565b600090815260019190910160205260409020546001600160a01b031690565b6000838152600185016020526040808220600201805460ff60301b1916600160301b179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90610f879086815260200190565b60405180910390a1826001600160a01b0316847f93bcf40b1de68d22878e9394837dd4b08dae46ee73bc722cccffecdadbe4414584604051610fc9919061375a565b60405180910390a350919392505050565b600081815260018084016020908152604080842090920154600a8601548351639cbe5efd60e01b8152935191936001600160a01b0390911692639cbe5efd926004808401938290030181865afa158015611038573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105c919061363d565b106110f157600a83015460008381526001808601602052604091829020015490516368377f6d60e11b81526001600160a01b039092169163d06efeda916110a99160040190815260200190565b602060405180830381865afa1580156110c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ea919061363d565b9050610649565b600a83015460408051639cbe5efd60e01b815290516000926001600160a01b031691639cbe5efd9160048083019260209291908290030181865afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611161919061363d565b600084815260018087016020526040909120015461117f91906134e9565b9050600061118e6001836134e9565b85600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611207919061363d565b611211919061376d565b9050600085600a0160009054906101000a90046001600160a01b03166001600160a01b031663593728126040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e919061363d565b60405163287586e760e11b81526004810188905290915073__$52a1e9d9b08edd489cb2c18a0af4a1d43f$__906350eb0dce90602401602060405180830381865af41580156112e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113059190613656565b65ffffffffffff1681116113925760405163287586e760e11b81526004810187905273__$52a1e9d9b08edd489cb2c18a0af4a1d43f$__906350eb0dce90602401602060405180830381865af4158015611363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113879190613656565b65ffffffffffff1690505b8261139d8383613784565b6113a79190613784565b9695505050505050565b6113ba81611cf6565b6113d95780604051633e4bbe1960e11b81526004016102ba91906132af565b88600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611452919061363d565b871161147457604051637a5d07d360e01b8152600481018890526024016102ba565b88600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ed919061363d565b6114f8906001613784565b87036115275761150789611afa565b61152757604051637a5d07d360e01b8152600481018890526024016102ba565b600081600181111561153b5761153b613285565b036115695761154a8887611d2d565b611569578760405163d9b3955760e01b81526004016102ba91906133b3565b8351855114158061157c57508251855114155b156115b157845183518551604051630447b05d60e41b81526004810193909352602483019190915260448201526064016102ba565b60008281526001808b0160205260409091200154156115f357816115d58a84610af8565b6040516331b75e4d60e01b81526102ba929190600090600401613615565b6115fe898685611e1e565b505050505050505050565b6000806116168c84611ef6565b9050600061169b8d600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611672573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611696919061363d565b611fbb565b8a5190915015156116ad8e8e87611feb565b6116be8e8d8f858b868c8a8d612143565b85156116d0576116d08e878f8f6121df565b6116e18d8d8d8d8d8d8d8a8d61247f565b50999c9b505050505050505050505050565b600601546001600160a01b031690565b81546001600160801b03600160801b82048116918116600183019091160361173e57604051638acb5f2760e01b815260040160405180910390fd5b6001600160801b03808216600090815260018086016020526040909120939093558354919092018216600160801b029116179055565b60068701546001600160a01b031663e38335e5348686866000611797888e61255b565b6040518763ffffffff1660e01b81526004016117b7959493929190613797565b6000604051808303818588803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b50505060009687525050506007909501602052505060408120555050565b600081815260018084016020908152604080842090920154600a8601548351639cbe5efd60e01b8152935191936001600160a01b0390911692639cbe5efd926004808401938290030181865afa158015611860573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611884919061363d565b106118d157600a830154600083815260018086016020526040918290200154905163d3a368bd60e01b81526001600160a01b039092169163d3a368bd916110a99160040190815260200190565b82600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194a919061363d565b6119548484610fda565b6106469190613784565b6000808860060160009054906101000a90046001600160a01b03166001600160a01b031663f27a0c926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119da919061363d565b905060006119e8848a61255b565b60068b015460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f42790611a24908a908a908a906000908890600401613797565b602060405180830381865afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a65919061363d565b600089815260078c0160205260408082209290925560068c015491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb091611ab4918b918b918b919088908a906004016137e5565b600060405180830381600087803b158015611ace57600080fd5b505af1158015611ae2573d6000803e3d6000fd5b505050506109418242611af59190613784565b61256c565b60008082600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b76919061363d565b600a84015460405163d3a368bd60e01b8152600481018390529192506000916001600160a01b039091169063d3a368bd90602401602060405180830381865afa158015611bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611beb919061363d565b60405163287586e760e11b81526004810186905290915060009073__$52a1e9d9b08edd489cb2c18a0af4a1d43f$__906350eb0dce90602401602060405180830381865af4158015611c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c659190613656565b90508065ffffffffffff168211611c8157506000949350505050565b611c9365ffffffffffff8216836134e9565b85600401541115611ca957506000949350505050565b506001949350505050565b60008181526015830160209081526040808320546011860190925282205460ff90911690611cec85611ce68187610fda565b8461259a565b1115949350505050565b600080826001811115611d0b57611d0b613285565b148061064957506001826001811115611d2657611d26613285565b1492915050565b80516000906034811015611d45576001915050610649565b82810160131901516001600160a01b031981166b046e0e4dee0dee6cae47a60f60a31b14611d7857600192505050610649565b600080611d866028856134e9565b90505b83811015611dfd57600080611dbd888481518110611da957611da96135e6565b01602001516001600160f81b03191661262c565b9150915081611dd55760019650505050505050610649565b8060ff166004856001600160a01b0316901b179350505080611df6906135fc565b9050611d89565b50856001600160a01b0316816001600160a01b031614935050505092915050565b600983015460ff1615611ef15760005b8251811015611eef576000611e5b838381518110611e4e57611e4e6135e6565b60200260200101516126be565b9050846008016000858481518110611e7557611e756135e6565b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081206001600160e01b03198516825290925290205460ff16611edc5760405163294080f760e21b81526001600160e01b0319821660048201526024016102ba565b5080611ee7816135fc565b915050611e2e565b505b505050565b600080606484600b0160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f74919061363d565b611f7e86866126ed565b611f88919061376d565b611f929190613853565b90506000611fa08585612754565b905080821115611fb35791506106499050565b509392505050565b600063ffffffff821115611fe7576020826040516306dfcc6560e41b81526004016102ba929190613875565b5090565b600083601c01600083600181111561200557612005613285565b600181111561201657612016613285565b815260208101919091526040908101600090812054601b870154925163d206885d60e01b815290935090916001600160a01b031690636d5e303290829063d206885d906120679089906004016133b3565b602060405180830381865afa158015612084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a8919061363d565b6040518263ffffffff1660e01b81526004016120c691815260200190565b602060405180830381865afa1580156120e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612107919061363d565b90508181101561213c576040516304b60e7960e31b81526001600160a01b0385166004820152602481018390526044016102ba565b5050505050565b600088815260018a81016020908152604080842080546001600160a01b0319166001600160a01b038d161781558084018a905560028101805463ffffffff8d1664ffffffffff1990911617600160201b8b151502179055600381018890556004810187905560158e019092529092208054849260ff199091169083818111156121ce576121ce613285565b021790555050505050505050505050565b600c8401546040516323b872dd60e01b81526001600160a01b03848116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af115801561223a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225e919061367e565b6122aa5760405162461bcd60e51b815260206004820152601d60248201527f42335452476f7665726e6f723a207472616e73666572206661696c656400000060448201526064016102ba565b6000818152600d8501602090815260408083206001600160a01b0386168452909152812080548592906122de908490613784565b909155505060405163287586e760e11b81526004810185905260009061237e9073__$52a1e9d9b08edd489cb2c18a0af4a1d43f$__906350eb0dce90602401602060405180830381865af415801561233a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235e9190613656565b6001600160a01b0385166000908152601d88016020526040902090612793565b9050600061238b85612849565b6123959083613888565b60405163287586e760e11b8152600481018890529091506124319073__$52a1e9d9b08edd489cb2c18a0af4a1d43f$__906350eb0dce90602401602060405180830381865af41580156123ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124109190613656565b6001600160a01b0386166000908152601d8901602052604090209083612878565b505082846001600160a01b03167f65c1df56bba34c409163f3295407ab399df5a4d9bf3dd0288416d6041cdc272c8760405161246f91815260200190565b60405180910390a3505050505050565b82896001600160a01b0316897f9c2b0d68f5edfd1bf6158a1867aced894efcfcf77c7a7603cb571e18ce89ae768a8a8c516001600160401b038111156124c7576124c7612dba565b6040519080825280602002602001820160405280156124fa57816020015b60608152602001906001900390816124e55790505b508b8b8a604051612510969594939291906138a8565b60405180910390a4877f6d04097725b4d82fbe72e4fd0fd1798c60a7b1bbc328842680c83ac06b1b0ada8260405161254891906132af565b60405180910390a2505050505050505050565b60601b6001600160601b0319161890565b600065ffffffffffff821115611fe7576030826040516306dfcc6560e41b81526004016102ba929190613875565b600060646125a9858585612893565b600c860154604051632394e7a360e21b8152600481018790526001600160a01b0390911690638e539e8c90602401602060405180830381865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612618919061363d565b612622919061376d565b610aee9190613853565b60008060f883901c602f811180156126475750603a8160ff16105b1561265c57600194602f199091019350915050565b8060ff166040108015612672575060478160ff16105b15612687576001946036199091019350915050565b8060ff16606010801561269d575060678160ff16105b156126b2576001946056199091019350915050565b50600093849350915050565b60006004825110156126e557816040516301a800fb60e41b81526004016102ba919061375a565b506020015190565b60006126f882611cf6565b6127145760405162461bcd60e51b81526004016102ba9061395f565b82601601600083600181111561272c5761272c613285565b600181111561273d5761273d613285565b815260200190815260200160002054905092915050565b600061275f82611cf6565b61277b5760405162461bcd60e51b81526004016102ba9061395f565b82601901600083600181111561272c5761272c613285565b8154600090818160058111156127f25760006127ae846128a0565b6127b890856134e9565b60008881526020902090915081015465ffffffffffff90811690871610156127e2578091506127f0565b6127ed816001613784565b92505b505b600061280087878585612988565b9050801561283b57612825876128176001846134e9565b600091825260209091200190565b54600160301b90046001600160d01b031661283e565b60005b979650505050505050565b60006001600160d01b03821115611fe75760d0826040516306dfcc6560e41b81526004016102ba929190613875565b6000806128868585856129e2565b915091505b935093915050565b6000610aee848484612b5c565b6000816000036128b257506000919050565b600060016128bf84612c9b565b901c6001901b905060018184816128d8576128d861383d565b048201901c905060018184816128f0576128f061383d565b048201901c905060018184816129085761290861383d565b048201901c905060018184816129205761292061383d565b048201901c905060018184816129385761293861383d565b048201901c905060018184816129505761295061383d565b048201901c905060018184816129685761296861383d565b048201901c9050610af1818285816129825761298261383d565b04612d2f565b60005b81831015611fb357600061299f8484612d45565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156129ce578092506129dc565b6129d9816001613784565b93505b5061298b565b825460009081908015612b01576000612a00876128176001856134e9565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015612a5457604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603612aa05784612a77886128176001866134e9565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055612af1565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b60200151925083915061288b9050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b02919093161792019190915590508161288b565b600080846018016000846001811115612b7757612b77613285565b6001811115612b8857612b88613285565b8152602081019190915260400160009081205491506018860181856001811115612bb457612bb4613285565b6001811115612bc557612bc5613285565b81526020810191909152604001600020612be06001846134e9565b81548110612bf057612bf06135e6565b6000918252602090912001805490915065ffffffffffff811690600160301b90046001600160d01b0316868211612c35576001600160d01b03169350610af192505050565b612c86612c418861256c565b896018016000896001811115612c5957612c59613285565b6001811115612c6a57612c6a613285565b815260200190815260200160002061279390919063ffffffff16565b6001600160d01b031698975050505050505050565b600080608083901c15612cb057608092831c92015b604083901c15612cc257604092831c92015b602083901c15612cd457602092831c92015b601083901c15612ce657601092831c92015b600883901c15612cf857600892831c92015b600483901c15612d0a57600492831c92015b600283901c15612d1c57600292831c92015b600183901c156106495760010192915050565b6000818310612d3e5781610646565b5090919050565b6000612d546002848418613853565b61064690848416613784565b60008060408385031215612d7357600080fd5b50508035926020909101359150565b80356001600160a01b0381168114612d9957600080fd5b919050565b8015158114612dac57600080fd5b50565b8035612d9981612d9e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612df857612df8612dba565b604052919050565b60006001600160401b03821115612e1957612e19612dba565b5060051b60200190565b600082601f830112612e3457600080fd5b81356020612e49612e4483612e00565b612dd0565b82815260059290921b84018101918181019086841115612e6857600080fd5b8286015b84811015612e8a57612e7d81612d82565b8352918301918301612e6c565b509695505050505050565b600082601f830112612ea657600080fd5b81356020612eb6612e4483612e00565b82815260059290921b84018101918181019086841115612ed557600080fd5b8286015b84811015612e8a5780358352918301918301612ed9565b60006001600160401b03831115612f0957612f09612dba565b612f1c601f8401601f1916602001612dd0565b9050828152838383011115612f3057600080fd5b828260208301376000602084830101529392505050565b600082601f830112612f5857600080fd5b81356020612f68612e4483612e00565b82815260059290921b84018101918181019086841115612f8757600080fd5b8286015b84811015612e8a5780356001600160401b03811115612faa5760008081fd5b8701603f81018913612fbc5760008081fd5b612fcd898683013560408401612ef0565b845250918301918301612f8b565b600082601f830112612fec57600080fd5b61064683833560208501612ef0565b600080600080600080600080610100898b03121561301857600080fd5b8835975061302860208a01612d82565b965061303660408a01612daf565b955060608901356001600160401b038082111561305257600080fd5b61305e8c838d01612e23565b965060808b013591508082111561307457600080fd5b6130808c838d01612e95565b955060a08b013591508082111561309657600080fd5b6130a28c838d01612f47565b945060c08b0135935060e08b01359150808211156130bf57600080fd5b506130cc8b828c01612fdb565b9150509295985092959890939650565b60008060008060008060008060006101208a8c0312156130fb57600080fd5b8935985060208a01356001600160401b038082111561311957600080fd5b6131258d838e01612e23565b995060408c013591508082111561313b57600080fd5b6131478d838e01612e95565b985060608c013591508082111561315d57600080fd5b6131698d838e01612f47565b975060808c013591508082111561317f57600080fd5b61318b8d838e01612fdb565b965060a08c0135955060c08c013594506131a760e08d01612d82565b93506101008c01359150808211156131be57600080fd5b506131cb8c828d01612fdb565b9150509295985092959850929598565b60008060008060008060c087890312156131f457600080fd5b8635955061320460208801612d82565b945060408701356001600160401b038082111561322057600080fd5b61322c8a838b01612e23565b9550606089013591508082111561324257600080fd5b61324e8a838b01612e95565b9450608089013591508082111561326457600080fd5b5061327189828a01612f47565b92505060a087013590509295509295509295565b634e487b7160e01b600052602160045260246000fd5b600281106132ab576132ab613285565b9052565b60208101610649828461329b565b600080600080600080600060e0888a0312156132d857600080fd5b8735965060208801356001600160401b03808211156132f657600080fd5b6133028b838c01612e23565b975060408a013591508082111561331857600080fd5b6133248b838c01612e95565b965060608a013591508082111561333a57600080fd5b6133468b838c01612f47565b955060808a013591508082111561335c57600080fd5b506133698a828b01612fdb565b93505060a0880135915060c0880135905092959891949750929550565b60006020828403121561339857600080fd5b5035919050565b82815260408101610af1602083018461329b565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052601160045260246000fd5b60ff8181168382160190811115610649576106496133c7565b600181815b80851115613431578160001904821115613417576134176133c7565b8085161561342457918102915b93841c93908002906133fb565b509250929050565b60008261344857506001610649565b8161345557506000610649565b816001811461346b576002811461347557613491565b6001915050610649565b60ff841115613486576134866133c7565b50506001821b610649565b5060208310610133831016604e8410600b84101617156134b4575081810a610649565b6134be83836133f6565b80600019048211156134d2576134d26133c7565b029392505050565b600061064660ff841683613439565b81810381811115610649576106496133c7565b6000815180845260005b8181101561352257602081850181015186830182015201613506565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561358a5782840389526135788483516134fc565b98850198935090840190600101613560565b5091979650505050505050565b60a0815260006135aa60a08301886134fc565b602083018790526001600160a01b0386811660408501528516606084015282810360808401526135da8185613542565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161360e5761360e6133c7565b5060010190565b83815260608101600a841061362c5761362c613285565b602082019390935260400152919050565b60006020828403121561364f57600080fd5b5051919050565b60006020828403121561366857600080fd5b815165ffffffffffff81168114610af157600080fd5b60006020828403121561369057600080fd5b8151610af181612d9e565b600081518084526020808501945080840160005b838110156136d45781516001600160a01b0316875295820195908201906001016136af565b509495945050505050565b600081518084526020808501945080840160005b838110156136d4578151875295820195908201906001016136f3565b608081526000613722608083018761369b565b828103602084015261373481876136df565b905082810360408401526137488186613542565b91505082606083015295945050505050565b60208152600061064660208301846134fc565b8082028115828204841417610649576106496133c7565b80820180821115610649576106496133c7565b60a0815260006137aa60a083018861369b565b82810360208401526137bc81886136df565b905082810360408401526137d08187613542565b60608401959095525050608001529392505050565b60c0815260006137f860c083018961369b565b828103602084015261380a81896136df565b9050828103604084015261381e8188613542565b60608401969096525050608081019290925260a0909101529392505050565b634e487b7160e01b600052601260045260246000fd5b60008261387057634e487b7160e01b600052601260045260246000fd5b500490565b60ff929092168252602082015260400190565b6001600160d01b0381811683821601908082111561099c5761099c6133c7565b60c0815260006138bb60c083018961369b565b6020838203818501526138ce828a6136df565b915083820360408501528188518084528284019150828160051b850101838b0160005b8381101561391f57601f1987840301855261390d8383516134fc565b948601949250908501906001016138f1565b50508681036060880152613933818b613542565b945050505050828103608084015261394b81866134fc565b9150508260a0830152979650505050505050565b6020808252602b908201527f476f7665726e6f72436f6e666967757261746f723a20696e76616c696420707260408201526a6f706f73616c207479706560a81b60608201526080019056fea2646970667358221220e76b8ff07b1e23712f798e6281a74d4dcd0d933d47f476a802b6ccd14d4ddcf964736f6c63430008140033", "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100b95760003560e01c80633830cb6b146100be578063427f6ff5146100e0578063462e3084146101135780634ac8231b146101335780634b588c5a146101465780634e661ee71461016657806364621f2e146101865780637b819f9b146101a657806386e119ef146101b95780638a0aa279146101ed57806396d8a1571461020d578063b4aae8c514610230578063be9f66d614610250575b600080fd5b8180156100ca57600080fd5b506100de6100d9366004612d60565b610263565b005b8180156100ec57600080fd5b506101006100fb366004612ffb565b61038f565b6040519081526020015b60405180910390f35b81801561011f57600080fd5b506100de61012e366004612d60565b610588565b610100610141366004612d60565b61063a565b81801561015257600080fd5b506101006101613660046130dc565b61064f565b81801561017257600080fd5b506101006101813660046131db565b6106f8565b81801561019257600080fd5b506100de6101a1366004612d60565b610889565b6101006101b4366004612d60565b6108f3565b6101e06101c7366004612d60565b6000908152601591909101602052604090205460ff1690565b60405161010a91906132af565b8180156101f957600080fd5b506101006102083660046132bd565b6108ff565b61022061021b366004612d60565b61094f565b604051901515815260200161010a565b81801561023c57600080fd5b5061010061024b3660046131db565b6109a3565b61022061025e366004613386565b610a80565b600081815260158301602090815260408083205460018601909252822060ff9091169182600181111561029857610298613285565b146102c35782826040516344b7587b60e01b81526004016102ba92919061339f565b60405180910390fd5b6102e284846102d26004610a8b565b6102dc6006610a8b565b17610aae565b506002810154600160201b900460ff168015610318575060046103058585610af8565b600981111561031657610316613285565b145b1561033a5782826040516344b7587b60e01b81526004016102ba92919061339f565b6000838152601e85016020908152604091829020805460ff1916600117905590518481527fae96d9c307786efa9d87d53b27b247aa9ef9c3640c4d5065fddc861c71684ab0910160405180910390a150505050565b60008061039e87878787610ed9565b90506103aa8a82610f13565b6001600160a01b0316896001600160a01b0316141580156103c9575087155b156103e95788604051633733be5960e21b81526004016102ba91906133b3565b6104578a826103f86003610a8b565b6104026007610a8b565b61040c6009610a8b565b6104166008610a8b565b6104206006610a8b565b61042a6002610a8b565b60016104376009826133dd565b6104429060026134da565b61044c91906134e9565b181818181818610aae565b506104628a82610f13565b6001600160a01b0316896001600160a01b0316036104e45760006104868b83610af8565b600981111561049757610497613285565b146104e45760405162461bcd60e51b815260206004820152601e60248201527f476f7665726e6f723a2070726f706f73616c206e6f742070656e64696e67000060448201526064016102ba565b600081815260078b016020526040902054801561056d5760068b015460405163c4d252f560e01b8152600481018390526001600160a01b039091169063c4d252f590602401600060405180830381600087803b15801561054357600080fd5b505af1158015610557573d6000803e3d6000fd5b505050600083815260078d016020526040812055505b6105798b838c87610f32565b9b9a5050505050505050505050565b600081815260158301602052604081205460ff16908160018111156105af576105af613285565b146105d15781816040516344b7587b60e01b81526004016102ba92919061339f565b6105e583836105e06008610a8b565b610aae565b506000828152601e84016020908152604091829020805460ff1916600217905590518381527f71611adb0c8d2eea43359b2e41e5fdf96309ce734ed1eb78ceb763198c1b8967910160405180910390a1505050565b60006106468383610fda565b90505b92915050565b6000806106658a8a8a8a80519060200120610ed9565b90506106798b33888a8e8e8e8860016113b1565b601a8b015460405163808860a560e01b81526001600160a01b039091169063808860a5906106b3908690859033908a908f90600401613597565b600060405180830381600087803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b505050506105798b33838d8d8d8d8d8d6001611609565b60008061070786868686610ed9565b905061072288826107186005610a8b565b6102dc6004610a8b565b5060008181526001890160205260409020600201805460ff60281b1916600160281b1790556001600160a01b03871661075a896116f3565b6001600160a01b0316146107ee5760005b86518110156107ec57306001600160a01b0316878281518110610790576107906135e6565b60200260200101516001600160a01b0316036107dc576107dc8582815181106107bb576107bb6135e6565b6020026020010151805190602001208a60020161170390919063ffffffff16565b6107e5816135fc565b905061076b565b505b6107fd88888389898989611774565b866001600160a01b0316610810896116f3565b6001600160a01b03161415801561083e575060028801546001600160801b03808216600160801b9092041614155b1561084b57600060028901555b6040518181527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9060200160405180910390a1979650505050505050565b6108a282826108986009610a8b565b6102dc6008610a8b565b506000818152601e83016020908152604091829020805460ff1916905590518281527f89e9abefcace5d0e37429f32023df3d73c9a310923f6383fa778ec40c629df0e910160405180910390a15050565b60006106468383611802565b600080339050600061091a8989898980519060200120610ed9565b905061092e8a8387898d8d8d8860006113b1565b6109418a83838c8c8c8c8c8c6000611609565b9a9950505050505050505050565b6000818152600180840160205260408220908101548203610974576000915050610649565b6002810154600160201b900460ff1615610992576001915050610649565b6000915050610649565b5092915050565b6000806109b286868686610ed9565b90506109c388826105e06004610a8b565b5060006109d58989848a8a8a8a61195e565b905065ffffffffffff811615610a5b57600082815260018a016020908152604091829020600201805465ffffffffffff60381b1916600160381b65ffffffffffff8616908102919091179091558251858152918201527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892910160405180910390a1610a74565b604051634844252360e11b815260040160405180910390fd5b50979650505050505050565b600061064982611afa565b6000816009811115610a9f57610a9f613285565b600160ff919091161b92915050565b600080610abb8585610af8565b9050600083610ac983610a8b565b1603610aee578381846040516331b75e4d60e01b81526004016102ba93929190613615565b90505b9392505050565b6000818152600180840160209081526040808420601e87019092528320546002820154919260ff91821692600160281b8104831692600160301b9091041690836002811115610b4957610b49613285565b03610b5b576008945050505050610649565b6002836002811115610b6f57610b6f613285565b03610b81576009945050505050610649565b8115610b94576006945050505050610649565b8015610ba7576002945050505050610649565b8360010154600003610bcf57604051636ad0607560e01b8152600481018790526024016102ba565b836001015487600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4d919061363d565b1015610c60576000945050505050610649565b60405163287586e760e11b81526004810188905260009073__$52a1e9d9b08edd489cb2c18a0af4a1d43f$__906350eb0dce90602401602060405180830381865af4158015610cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd79190613656565b65ffffffffffff1690506000610ced8989611802565b600089815260018b016020526040902060048101546003909101549192501115610d205760079650505050505050610649565b818110610d365760019650505050505050610649565b610d408989611cb4565b1580610d6257506000888152600f8a0160205260409020805460019091015411155b15610d765760039650505050505050610649565b600088815260018a016020526040902060020154600160381b900465ffffffffffff16600003610daf5760049650505050505050610649565b600088815260078a016020526040908190205460068b01549151632c258a9f60e11b81526004810182905290916001600160a01b03169063584b153e90602401602060405180830381865afa158015610e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e30919061367e565b15610e45576005975050505050505050610649565b60068a0154604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa158015610e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb4919061367e565b15610ec9576006975050505050505050610649565b6002975050505050505050610649565b600084848484604051602001610ef2949392919061370f565b60408051601f19818403018152919052805160209091012095945050505050565b600090815260019190910160205260409020546001600160a01b031690565b6000838152600185016020526040808220600201805460ff60301b1916600160301b179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90610f879086815260200190565b60405180910390a1826001600160a01b0316847f93bcf40b1de68d22878e9394837dd4b08dae46ee73bc722cccffecdadbe4414584604051610fc9919061375a565b60405180910390a350919392505050565b600081815260018084016020908152604080842090920154600a8601548351639cbe5efd60e01b8152935191936001600160a01b0390911692639cbe5efd926004808401938290030181865afa158015611038573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105c919061363d565b106110f157600a83015460008381526001808601602052604091829020015490516368377f6d60e11b81526001600160a01b039092169163d06efeda916110a99160040190815260200190565b602060405180830381865afa1580156110c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ea919061363d565b9050610649565b600a83015460408051639cbe5efd60e01b815290516000926001600160a01b031691639cbe5efd9160048083019260209291908290030181865afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611161919061363d565b600084815260018087016020526040909120015461117f91906134e9565b9050600061118e6001836134e9565b85600a0160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611207919061363d565b611211919061376d565b9050600085600a0160009054906101000a90046001600160a01b03166001600160a01b031663593728126040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e919061363d565b60405163287586e760e11b81526004810188905290915073__$52a1e9d9b08edd489cb2c18a0af4a1d43f$__906350eb0dce90602401602060405180830381865af41580156112e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113059190613656565b65ffffffffffff1681116113925760405163287586e760e11b81526004810187905273__$52a1e9d9b08edd489cb2c18a0af4a1d43f$__906350eb0dce90602401602060405180830381865af4158015611363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113879190613656565b65ffffffffffff1690505b8261139d8383613784565b6113a79190613784565b9695505050505050565b6113ba81611cf6565b6113d95780604051633e4bbe1960e11b81526004016102ba91906132af565b88600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611452919061363d565b871161147457604051637a5d07d360e01b8152600481018890526024016102ba565b88600a0160009054906101000a90046001600160a01b03166001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ed919061363d565b6114f8906001613784565b87036115275761150789611afa565b61152757604051637a5d07d360e01b8152600481018890526024016102ba565b600081600181111561153b5761153b613285565b036115695761154a8887611d2d565b611569578760405163d9b3955760e