0 txs
90 calls
constructor
constructor(address _pool, uint256 _protocolFee, uint256 _maxTotalSupply)
functions
accruedProtocolFees0
viewfunction accruedProtocolFees0() view returns (uint256)
accruedProtocolFees1
viewfunction accruedProtocolFees1() view returns (uint256)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
baseLower
viewfunction baseLower() view returns (int24)
baseUpper
viewfunction baseUpper() view returns (int24)
decimals
viewfunction decimals() view returns (uint8)
getBalance0
viewfunction getBalance0() view returns (uint256)
getBalance1
viewfunction getBalance1() view returns (uint256)
getPositionAmounts
viewfunction getPositionAmounts(int24 tickLower, int24 tickUpper) view returns (uint256 amount0, uint256 amount1)
getTotalAmounts
viewfunction getTotalAmounts() view returns (uint256 total0, uint256 total1)
governance
viewfunction governance() view returns (address)
limitLower
viewfunction limitLower() view returns (int24)
limitUpper
viewfunction limitUpper() view returns (int24)
maxTotalSupply
viewfunction maxTotalSupply() view returns (uint256)
name
viewfunction name() view returns (string)
pendingGovernance
viewfunction pendingGovernance() view returns (address)
pool
viewfunction pool() view returns (address)
protocolFee
viewfunction protocolFee() view returns (uint256)
SharpeKeeper
viewfunction SharpeKeeper() view returns (address)
symbol
viewfunction symbol() view returns (string)
tickSpacing
viewfunction tickSpacing() view returns (int24)
token0
viewfunction token0() view returns (address)
token1
viewfunction token1() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256)
acceptGovernance
nonpayablefunction acceptGovernance()
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
collectProtocol
nonpayablefunction collectProtocol(uint256 amount0, uint256 amount1, address to)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
deposit
nonpayablefunction deposit(uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min, address to) returns (uint256 shares, uint256 amount0, uint256 amount1)
emergencyBurn
nonpayablefunction emergencyBurn(int24 tickLower, int24 tickUpper, uint128 liquidity)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
rebalance
nonpayablefunction rebalance(int256 swapAmount, uint160 sqrtPriceLimitX96, int24 _baseLower, int24 _baseUpper, int24 _bidLower, int24 _bidUpper, int24 _askLower, int24 _askUpper)
setGovernance
nonpayablefunction setGovernance(address _governance)
setMaxTotalSupply
nonpayablefunction setMaxTotalSupply(uint256 _maxTotalSupply)
setProtocolFee
nonpayablefunction setProtocolFee(uint256 _protocolFee)
setSharpeKeeper
nonpayablefunction setSharpeKeeper(address _SharpeKeeper)
sweep
nonpayablefunction sweep(address token, uint256 amount, address to)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
uniswapV3MintCallback
nonpayablefunction uniswapV3MintCallback(uint256 amount0, uint256 amount1, bytes data)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes data)
withdraw
nonpayablefunction withdraw(uint256 shares, uint256 amount0Min, uint256 amount1Min, address to) returns (uint256 amount0, uint256 amount1)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
CollectFees
event CollectFees(uint256 feesToVault0, uint256 feesToVault1, uint256 feesToProtocol0, uint256 feesToProtocol1)
Deposit
event Deposit(address indexed sender, address indexed to, uint256 shares, uint256 amount0, uint256 amount1)
Snapshot
event Snapshot(int24 tick, uint256 totalAmount0, uint256 totalAmount1, uint256 totalSupply)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed to, uint256 shares, uint256 amount0, uint256 amount1)
errors
No errors.
creation bytecode
0x6101006040523480156200001257600080fd5b506040516200460638038062004606833981016040819052620000359162000394565b6040805180820182526008815267536861727065414960c01b602080830191825283518085019094526002845261414960f01b9084015281519192916200007f91600391620002ad565b50805162000095906004906020840190620002ad565b50506001600555506001600160601b0319606084901b1660805260408051630dfe168160e01b815290516001600160a01b03851691630dfe1681916004808301926020929190829003018186803b158015620000f057600080fd5b505afa15801562000105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012b919062000370565b6001600160a01b031660a0816001600160a01b031660601b81525050826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200018157600080fd5b505afa15801562000196573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bc919062000370565b6001600160a01b031660c0816001600160a01b031660601b81525050826001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021257600080fd5b505afa15801562000227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024d9190620003cb565b600290810b900b60e81b60e05260068290556007819055600980546001600160a01b03191633179055620f42408210620002a45760405162461bcd60e51b81526004016200029b90620003ee565b60405180910390fd5b50505062000450565b828054620002bb9062000413565b90600052602060002090601f016020900481019282620002df57600085556200032a565b82601f10620002fa57805160ff19168380011785556200032a565b828001600101855582156200032a579182015b828111156200032a5782518255916020019190600101906200030d565b50620003389291506200033c565b5090565b5b808211156200033857600081556001016200033d565b80516001600160a01b03811681146200036b57600080fd5b919050565b60006020828403121562000382578081fd5b6200038d8262000353565b9392505050565b600080600060608486031215620003a9578182fd5b620003b48462000353565b925060208401519150604084015190509250925092565b600060208284031215620003dd578081fd5b81518060020b81146200038d578182fd5b6020808252600b908201526a70726f746f636f6c46656560a81b604082015260600190565b6002810460018216806200042857607f821691505b602082108114156200044a57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160601c60c05160601c60e05160e81c6140ac6200055a600039600081816114580152611ed50152600081816105b80152818161091201528181610a540152818161147c015281816116710152818161178101528181611817015261195401526000818161057e015281816106a9015281816108d701528181610b220152818161163701528181611747015281816117da01526119170152600081816106dd01528181610c5001528181610e4a01528181611238015281816112db0152818161170a015281816118d701528181611c3801528181611ff6015281816120ba0152818161214f015281816122e0015281816123c4015261240601526140ac6000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c806387e5e08311610151578063c4a7761e116100c3578063dc2c256f11610087578063dc2c256f146104c7578063dd62ed3e146104da578063eae989a2146104ed578063f39c38a0146104f5578063fa082743146104fd578063fa461e331461050557610269565b8063c4a7761e14610489578063d0c93a7c14610491578063d21220a714610499578063d331bef7146104a1578063d3487997146104b457610269565b8063a9059cbb11610115578063a9059cbb14610414578063a91ef6eb14610427578063ab033ea914610448578063abbffcb91461045b578063b0e21e8a1461046e578063b3a3d00c1461047657610269565b806387e5e083146103d6578063888a9134146103e957806395d89b41146103f1578063a00fa77f146103f9578063a457c2d71461040157610269565b80632ab4d052116101ea57806341aec538116101ae57806341aec5381461039057806351e87af7146103985780635aa6e675146103a0578063629d9405146103a857806370a08231146103b0578063787dce3d146103c357610269565b80632ab4d0521461032b578063313ce56714610333578063365d0ed714610348578063395093511461036a5780633f3e4c111461037d57610269565b80630f35bcac116102315780630f35bcac146102de57806316f0115b146102f357806318160ddd146102fb578063238efcbc1461031057806323b872dd1461031857610269565b80630430c1301461026e57806306fdde0314610283578063095ea7b3146102a15780630c42383a146102c15780630dfe1681146102d6575b600080fd5b61028161027c366004613545565b610518565b005b61028b6105e4565b60405161029891906137b3565b60405180910390f35b6102b46102af3660046131f0565b610676565b604051610298919061374b565b6102c9610698565b6040516102989190613641565b6102c96106a7565b6102e66106cb565b604051610298919061375f565b6102c96106db565b6103036106ff565b6040516102989190613756565b610281610705565b6102b46103263660046131b0565b610743565b610303610773565b61033b610779565b6040516102989190613e9e565b61035b6103563660046135b2565b61077e565b60405161029893929190613e6d565b6102b46103783660046131f0565b6109cf565b61028161038b366004613515565b610a1b565b610303610a4a565b6102e6610af9565b6102c9610b09565b610303610b18565b6103036103be36600461315c565b610b6c565b6102816103d1366004613515565b610b8b565b6102816103e4366004613356565b610bdc565b6102e6611065565b61028b611075565b610303611084565b6102b461040f3660046131f0565b61108a565b6102b46104223660046131f0565b6110f6565b61043a610435366004613276565b61110e565b604051610298929190613e5f565b61028161045636600461315c565b6111ab565b6102816104693660046132a3565b6111f7565b610303611377565b61028161048436600461315c565b61137d565b61043a6113c9565b6102e6611456565b6102c961147a565b61043a6104af366004613572565b61149e565b6102816104c2366004613305565b6116ff565b6102816104d5366004613235565b6117ae565b6103036104e8366004613178565b61187c565b6103036118a7565b6102c96118ad565b6102e66118bc565b610281610513366004613305565b6118cc565b6009546001600160a01b0316331461054b5760405162461bcd60e51b815260040161054290613b39565b60405180910390fd5b600b54610558908461197b565b600b55600c54610568908361197b565b600c5582156105a5576105a56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168285611987565b81156105df576105df6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284611987565b505050565b6060600380546105f390613f62565b80601f016020809104026020016040519081016040528092919081815260200182805461061f90613f62565b801561066c5780601f106106415761010080835404028352916020019161066c565b820191906000526020600020905b81548152906001019060200180831161064f57829003601f168201915b5050505050905090565b6000806106816119dd565b905061068e8185856119e1565b5060019392505050565b6008546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a54600160e81b900460020b81565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b600a546001600160a01b0316331461072f5760405162461bcd60e51b815260040161054290613aa4565b600980546001600160a01b03191633179055565b60008061074e6119dd565b905061075b858285611a95565b610766858585611ad9565b60019150505b9392505050565b60075481565b601290565b6000806000600260055414156107a65760405162461bcd60e51b815260040161054290613dac565b6002600555871515806107b95750600087115b6107d55760405162461bcd60e51b815260040161054290613a6f565b6001600160a01b038416158015906107f657506001600160a01b0384163014155b6108125760405162461bcd60e51b81526004016105429061388f565b600a5461083490600160a01b8104600290810b91600160b81b9004900b611bfd565b600a5461085690600160d01b8104600290810b91600160e81b9004900b611bfd565b6108608888611cc3565b91945092509050826108845760405162461bcd60e51b815260040161054290613b5d565b858210156108a45760405162461bcd60e51b815260040161054290613829565b848110156108c45760405162461bcd60e51b815260040161054290613c22565b81156108ff576108ff6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085611de6565b801561093a5761093a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084611de6565b6109448484611e07565b836001600160a01b0316336001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f685858560405161098b93929190613e6d565b60405180910390a360075461099e6106ff565b11156109bc5760405162461bcd60e51b815260040161054290613d3a565b6001600581905550955095509592505050565b6000806109da6119dd565b6001600160a01b0380821660009081526001602090815260408083209389168352929052205490915061068e9082908690610a16908790613eac565b6119e1565b6009546001600160a01b03163314610a455760405162461bcd60e51b815260040161054290613b39565b600755565b6000610af4600c547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610a9e9190613641565b60206040518083038186803b158015610ab657600080fd5b505afa158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee919061352d565b9061197b565b905090565b600a54600160d01b900460020b81565b6009546001600160a01b031681565b6000610af4600b547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610a9e9190613641565b6001600160a01b0381166000908152602081905260409020545b919050565b6009546001600160a01b03163314610bb55760405162461bcd60e51b815260040161054290613b39565b620f42408110610bd75760405162461bcd60e51b815260040161054290613acf565b600655565b60026005541415610bff5760405162461bcd60e51b815260040161054290613dac565b60026005556008546001600160a01b03163314610c2e5760405162461bcd60e51b815260040161054290613b13565b610c388686611ed3565b610c428484611ed3565b610c4c8282611ed3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610ca757600080fd5b505afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190613484565b50505050509150508060020b8460020b1315610d0d5760405162461bcd60e51b815260040161054290613a07565b8060020b8360020b13610d325760405162461bcd60e51b815260040161054290613c46565b600a54600090610d5790600160a01b8104600290810b91600160b81b9004900b611fc8565b5050600a54929350600092610d849250600160d01b8104600290810b9250600160e81b909104900b611fc8565b5050600a54929350610db092600160a01b8104600290810b9350600160b81b909104900b90508461208f565b5050600a54610dd89250600160d01b8104600290810b9250600160e81b909104900b8361208f565b5050505050506000610de8610b18565b90506000610df4610a4a565b90507f210f60adf1db7a02e9db9a49ec7c2eb2060c516cbcfd01a0c05288144738ee5d838383610e226106ff565b604051610e329493929190613793565b60405180910390a18a15610f11576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663128acb083060008e1380610e8757610e828f613ff4565b610e89565b8e5b8e6040518563ffffffff1660e01b8152600401610ea99493929190613679565b6040805180830381600087803b158015610ec257600080fd5b505af1158015610ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efa91906132e2565b5050610f04610b18565b9150610f0e610a4a565b90505b6000610f1f8a8a85856122db565b9050610f2c8a8a8361239e565b600a805460028c810b62ffffff908116600160a01b0262ffffff60a01b19928e900b909116600160b81b0262ffffff60b81b199093169290921716179055610f72610b18565b9250610f7c610a4a565b91506000610f8c898986866122db565b90506000610f9c888887876122db565b9050806001600160801b0316826001600160801b0316111561100657610fc38a8a8461239e565b600a805460028c810b62ffffff908116600160d01b0262ffffff60d01b19928e900b909116600160e81b026001600160e81b039093169290921716179055611050565b61101188888361239e565b600a805460028a810b62ffffff908116600160d01b0262ffffff60d01b19928c900b909116600160e81b026001600160e81b0390931692909217161790555b50506001600555505050505050505050505050565b600a54600160b81b900460020b81565b6060600480546105f390613f62565b600c5481565b6000806110956119dd565b6001600160a01b03808216600090815260016020908152604080832093891683529290522054909150838110156110de5760405162461bcd60e51b815260040161054290613de3565b6110eb82868684036119e1565b506001949350505050565b6000806111016119dd565b905061068e818585611ad9565b60008060008060006111208787611fc8565b94509450505092506111338787856123ff565b600654919650945060009061114c90620f42409061197b565b9050611178611171620f424061116b6001600160801b038716856124c6565b906124d2565b87906124de565b955061119e611197620f424061116b6001600160801b038616856124c6565b86906124de565b9450505050509250929050565b6009546001600160a01b031633146111d55760405162461bcd60e51b815260040161054290613b39565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031633146112215760405162461bcd60e51b815260040161054290613b39565b60405163a34123a760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a34123a7906112719086908690869060040161376d565b6040805180830381600087803b15801561128a57600080fd5b505af115801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c291906132e2565b50506040516309e3d67b60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634f1eb3d89061131f903090879087906001600160801b039081906004016136f5565b6040805180830381600087803b15801561133857600080fd5b505af115801561134c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137091906133f5565b5050505050565b60065481565b6009546001600160a01b031633146113a75760405162461bcd60e51b815260040161054290613b39565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600a546000908190819081906113f490600160a01b8104600290810b91600160b81b9004900b61110e565b600a549193509150600090819061142090600160d01b8104600290810b91600160e81b9004900b61110e565b9150915061143a8261143486611434610b18565b906124de565b955061144c8161143485611434610a4a565b9450505050509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600260055414156114c45760405162461bcd60e51b815260040161054290613dac565b6002600555856114e65760405162461bcd60e51b815260040161054290613b5d565b6001600160a01b0383161580159061150757506001600160a01b0383163014155b6115235760405162461bcd60e51b81526004016105429061388f565b600061152d6106ff565b905061153933886124ea565b60006115518261116b8a61154b610b18565b906124c6565b905060006115658361116b8b61154b610a4a565b600a54909150600090819061159190600160a01b8104600290810b91600160b81b9004900b8d886125db565b600a54919350915060009081906115bf90600160d01b8104600290810b91600160e81b9004900b8f8a6125db565b90925090506115d28261143488876124de565b98506115e28161143487866124de565b97508b8910156116045760405162461bcd60e51b815260040161054290613829565b8a8810156116245760405162461bcd60e51b815260040161054290613c22565b881561165e5761165e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b8b611987565b8715611698576116986001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b8a611987565b896001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8f8c8c6040516116df93929190613e6d565b60405180910390a350505050505050600160058190555094509492505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461173457600080fd5b831561176e5761176e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163386611987565b82156117a8576117a86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385611987565b50505050565b6009546001600160a01b031633146117d85760405162461bcd60e51b815260040161054290613b39565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415801561184c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b6118685760405162461bcd60e51b815260040161054290613af4565b6105df6001600160a01b0384168284611987565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600b5481565b600a546001600160a01b031681565b600a54600160a01b900460020b81565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461190157600080fd5b600084131561193e5761193e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163386611987565b60008313156117a8576117a86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385611987565b600061076c8284613f1f565b6105df8363a9059cbb60e01b84846040516024016119a6929190613732565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612681565b3390565b6001600160a01b038316611a075760405162461bcd60e51b815260040161054290613c93565b6001600160a01b038216611a2d5760405162461bcd60e51b8152600401610542906138da565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611a88908590613756565b60405180910390a3505050565b6000611aa1848461187c565b905060001981146117a85781811015611acc5760405162461bcd60e51b815260040161054290613953565b6117a884848484036119e1565b6001600160a01b038316611aff5760405162461bcd60e51b815260040161054290613bdd565b6001600160a01b038216611b255760405162461bcd60e51b8152600401610542906137e6565b611b308383836105df565b6001600160a01b03831660009081526020819052604090205481811015611b695760405162461bcd60e51b8152600401610542906139c1565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611ba0908490613eac565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bea9190613756565b60405180910390a36117a88484846105df565b6000611c098383611fc8565b5050505090506000816001600160801b031611156105df5760405163a34123a760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a34123a790611c72908690869060009060040161376d565b6040805180830381600087803b158015611c8b57600080fd5b505af1158015611c9f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137091906132e2565b600080600080611cd16106ff565b9050600080611cde6113c9565b915091508260001480611cf15750600082115b80611cfc5750600081115b611d1657634e487b7160e01b600052600160045260246000fd5b82611d3257879450869350611d2b8585612710565b9550611ddc565b81611d4857869350611d2b8161116b86866124c6565b80611d5e57879450611d2b8261116b87866124c6565b6000611d7c611d6d8a846124c6565b611d778a866124c6565b612727565b905060008111611d9e5760405162461bcd60e51b815260040161054290613bbe565b611db160016114348461116b858461197b565b9550611dc660016114348561116b858461197b565b9450611dd88261116b858185896124c6565b9650505b5050509250925092565b6117a8846323b872dd60e01b8585856040516024016119a693929190613655565b6001600160a01b038216611e2d5760405162461bcd60e51b815260040161054290613e28565b611e39600083836105df565b8060026000828254611e4b9190613eac565b90915550506001600160a01b03821660009081526020819052604081208054839290611e78908490613eac565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ebb908590613756565b60405180910390a3611ecf600083836105df565b5050565b7f0000000000000000000000000000000000000000000000000000000000000000600282810b9084900b12611f1a5760405162461bcd60e51b8152600401610542906138ab565b620d89e719600284900b1215611f425760405162461bcd60e51b815260040161054290613c68565b611f4f620d89e719613fd3565b60020b8260020b1315611f745760405162461bcd60e51b815260040161054290613cd7565b611f7e8184613f9d565b60020b15611f9e5760405162461bcd60e51b81526004016105429061391c565b611fa88183613f9d565b60020b156105df5760405162461bcd60e51b81526004016105429061398a565b600080600080600080611fdc308989612736565b60405163514ea4bf60e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063514ea4bf9061202b908490600401613756565b60a06040518083038186803b15801561204357600080fd5b505afa158015612057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207b9190613423565b939c929b5090995097509095509350505050565b60008080806001600160801b0385161561214a5760405163a34123a760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a34123a7906120f3908a908a908a9060040161376d565b6040805180830381600087803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214491906132e2565b90945092505b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634f1eb3d8308b8b6001600160801b03806040518663ffffffff1660e01b81526004016121a89594939291906136f5565b6040805180830381600087803b1580156121c157600080fd5b505af11580156121d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f991906133f5565b6001600160801b039182169350169050612213828761197b565b935061221f818661197b565b6006549093506000908190801561229057612241620f424061116b89846124c6565b9250612254620f424061116b88846124c6565b9150612260878461197b565b965061226c868361197b565b600b5490965061227c90846124de565b600b55600c5461228c90836124de565b600c555b7f1ac56d7e866e3f5ea9aa92aa11758ead39a0a5f013f3fefb0f47cb9d008edd27878785856040516122c59493929190613e83565b60405180910390a1505050505093509350935093565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561233757600080fd5b505afa15801561234b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236f9190613484565b5050505050509050612394816123848861276c565b61238d8861276c565b8787612b46565b9695505050505050565b6001600160801b038116156105df57604051633c8a7d8d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633c8a7d8d90611c729030908790879087906004016136b3565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561245d57600080fd5b505afa158015612471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124959190613484565b50505050505090506124b9816124aa8861276c565b6124b38861276c565b87612c0a565b9250925050935093915050565b600061076c8284613ed8565b600061076c8284613ec4565b600061076c8284613eac565b6001600160a01b0382166125105760405162461bcd60e51b815260040161054290613b7d565b61251c826000836105df565b6001600160a01b038216600090815260208190526040902054818110156125555760405162461bcd60e51b81526004016105429061384d565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612584908490613f1f565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906125c7908690613756565b60405180910390a36105df836000846105df565b60008060006125ea8787611fc8565b50505050905060006126128561116b88856001600160801b03166124c690919063ffffffff16565b90508015612676576000806000806126338c8c61262e88612ca6565b61208f565b9296509094509250905061265561264e8a61116b858e6124c6565b85906124de565b975061266f6126688a61116b848e6124c6565b84906124de565b9650505050505b505094509492505050565b60006126d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612cd19092919063ffffffff16565b8051909150156105df57808060200190518101906126f4919061321b565b6105df5760405162461bcd60e51b815260040161054290613d62565b600081831015612720578161076c565b5090919050565b6000818310612720578161076c565b600083838360405160200161274d939291906135f0565b6040516020818303038152906040528051906020012090509392505050565b60008060008360020b12612783578260020b612790565b8260020b61279090613ff4565b90506000600182166127a657600160801b6127b8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156127f75760806127f2826ffff97272373d413259a46990580e213a613ed8565b901c90505b600482161561282157608061281c826ffff2e50f5f656932ef12357cf3c7fdcc613ed8565b901c90505b600882161561284b576080612846826fffe5caca7e10e4e61c3624eaa0941cd0613ed8565b901c90505b6010821615612875576080612870826fffcb9843d60f6159c9db58835c926644613ed8565b901c90505b602082161561289f57608061289a826fff973b41fa98c081472e6896dfb254c0613ed8565b901c90505b60408216156128c95760806128c4826fff2ea16466c96a3843ec78b326b52861613ed8565b901c90505b60808216156128f35760806128ee826ffe5dee046a99a2a811c461f1969c3053613ed8565b901c90505b61010082161561291e576080612919826ffcbe86c7900a88aedcffc83b479aa3a4613ed8565b901c90505b610200821615612949576080612944826ff987a7253ac413176f2b074cf7815e54613ed8565b901c90505b61040082161561297457608061296f826ff3392b0822b70005940c7a398e4b70f3613ed8565b901c90505b61080082161561299f57608061299a826fe7159475a2c29b7443b29c7fa6e889d9613ed8565b901c90505b6110008216156129ca5760806129c5826fd097f3bdfd2022b8845ad8f792aa5825613ed8565b901c90505b6120008216156129f55760806129f0826fa9f746462d870fdf8a65dc1f90e061e5613ed8565b901c90505b614000821615612a20576080612a1b826f70d869a156d2a1b890bb3df62baf32f7613ed8565b901c90505b618000821615612a4b576080612a46826f31be135f97d08fd981231505542fcfa6613ed8565b901c90505b62010000821615612a77576080612a72826f09aa508b5b7a84e1c677de54f3e99bc9613ed8565b901c90505b62020000821615612aa2576080612a9d826e5d6af8dedb81196699c329225ee604613ed8565b901c90505b62040000821615612acc576080612ac7826d2216e584f5fa1ea926041bedfe98613ed8565b901c90505b62080000821615612af4576080612aef826b048a170391f7dc42444e8fa2613ed8565b901c90505b60008460020b1315612b0f57612b0c81600019613ec4565b90505b612b1e64010000000082613fbf565b15612b2a576001612b2d565b60005b612b3e9060ff16602083901c613eac565b949350505050565b6000836001600160a01b0316856001600160a01b03161115612b66579293925b846001600160a01b0316866001600160a01b031611612b9157612b8a858585612ce0565b9050612c01565b836001600160a01b0316866001600160a01b03161015612bf3576000612bb8878686612ce0565b90506000612bc7878986612d4a565b9050806001600160801b0316826001600160801b031610612be85780612bea565b815b92505050612c01565b612bfe858584612d4a565b90505b95945050505050565b600080836001600160a01b0316856001600160a01b03161115612c2b579293925b846001600160a01b0316866001600160a01b031611612c5657612c4f858585612d80565b9150612c9d565b836001600160a01b0316866001600160a01b03161015612c8f57612c7b868585612d80565b9150612c88858785612df3565b9050612c9d565b612c9a858585612df3565b90505b94509492505050565b60006001600160801b03821115612ccd57634e487b7160e01b600052600160045260246000fd5b5090565b6060612b3e8484600085612e3d565b6000826001600160a01b0316846001600160a01b03161115612d00579192915b6000612d23856001600160a01b0316856001600160a01b0316600160601b612efd565b9050612c01612d458483612d378989613ef7565b6001600160a01b0316612efd565b613073565b6000826001600160a01b0316846001600160a01b03161115612d6a579192915b612b3e612d4583600160601b612d378888613ef7565b6000826001600160a01b0316846001600160a01b03161115612da0579192915b6001600160a01b038416612de96fffffffffffffffffffffffffffffffff60601b606085901b16612dd18787613ef7565b6001600160a01b0316866001600160a01b0316612efd565b612b3e9190613ec4565b6000826001600160a01b0316846001600160a01b03161115612e13579192915b612b3e6001600160801b038316612e2a8686613ef7565b6001600160a01b0316600160601b612efd565b606082471015612e5f5760405162461bcd60e51b815260040161054290613a29565b612e6885613089565b612e845760405162461bcd60e51b815260040161054290613d03565b600080866001600160a01b03168587604051612ea09190613625565b60006040518083038185875af1925050503d8060008114612edd576040519150601f19603f3d011682016040523d82523d6000602084013e612ee2565b606091505b5091509150612ef28282866130ba565b979650505050505050565b6000808060001985870986860292508281109083900303905080612f335760008411612f2857600080fd5b50829004905061076c565b808411612f3f57600080fd5b6000848688098084039381119092039190506000612f5f86196001613eac565b8616958690049593849004936000819003046001019050612f808184613ed8565b909317926000612f91876003613ed8565b6002189050612fa08188613ed8565b612fab906002613f1f565b612fb59082613ed8565b9050612fc18188613ed8565b612fcc906002613f1f565b612fd69082613ed8565b9050612fe28188613ed8565b612fed906002613f1f565b612ff79082613ed8565b90506130038188613ed8565b61300e906002613f1f565b6130189082613ed8565b90506130248188613ed8565b61302f906002613f1f565b6130399082613ed8565b90506130458188613ed8565b613050906002613f1f565b61305a9082613ed8565b90506130668186613ed8565b9998505050505050505050565b806001600160801b0381168114610b8657600080fd5b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b606083156130c957508161076c565b8251156130d95782518084602001fd5b8160405162461bcd60e51b815260040161054291906137b3565b80518015158114610b8657600080fd5b60008083601f840112613114578182fd5b50813567ffffffffffffffff81111561312b578182fd5b60208301915083602082850101111561314357600080fd5b9250929050565b805161ffff81168114610b8657600080fd5b60006020828403121561316d578081fd5b813561076c8161403a565b6000806040838503121561318a578081fd5b82356131958161403a565b915060208301356131a58161403a565b809150509250929050565b6000806000606084860312156131c4578081fd5b83356131cf8161403a565b925060208401356131df8161403a565b929592945050506040919091013590565b60008060408385031215613202578182fd5b823561320d8161403a565b946020939093013593505050565b60006020828403121561322c578081fd5b61076c826130f3565b600080600060608486031215613249578283fd5b83356132548161403a565b925060208401359150604084013561326b8161403a565b809150509250925092565b60008060408385031215613288578182fd5b823561329381614052565b915060208301356131a581614052565b6000806000606084860312156132b7578283fd5b83356132c281614052565b925060208401356132d281614052565b9150604084013561326b81614061565b600080604083850312156132f4578182fd5b505080516020909101519092909150565b6000806000806060858703121561331a578182fd5b8435935060208501359250604085013567ffffffffffffffff81111561333e578283fd5b61334a87828801613103565b95989497509550505050565b600080600080600080600080610100898b031215613372578586fd5b8835975060208901356133848161403a565b9650604089013561339481614052565b955060608901356133a481614052565b945060808901356133b481614052565b935060a08901356133c481614052565b925060c08901356133d481614052565b915060e08901356133e481614052565b809150509295985092959890939650565b60008060408385031215613407578182fd5b825161341281614061565b60208401519092506131a581614061565b600080600080600060a0868803121561343a578283fd5b855161344581614061565b809550506020860151935060408601519250606086015161346581614061565b608087015190925061347681614061565b809150509295509295909350565b600080600080600080600060e0888a03121561349e578081fd5b87516134a98161403a565b60208901519097506134ba81614052565b95506134c86040890161314a565b94506134d66060890161314a565b93506134e46080890161314a565b925060a088015160ff811681146134f9578182fd5b915061350760c089016130f3565b905092959891949750929550565b600060208284031215613526578081fd5b5035919050565b60006020828403121561353e578081fd5b5051919050565b600080600060608486031215613559578081fd5b8335925060208401359150604084013561326b8161403a565b60008060008060808587031215613587578182fd5b84359350602085013592506040850135915060608501356135a78161403a565b939692955090935050565b600080600080600060a086880312156135c9578283fd5b8535945060208601359350604086013592506060860135915060808601356134768161403a565b60609390931b6bffffffffffffffffffffffff19168352600291820b60e890811b6014850152910b901b6017820152601a0190565b60008251613637818460208701613f36565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03948516815292151560208401526040830191909152909116606082015260a06080820181905260009082015260c00190565b6001600160a01b03949094168452600292830b6020850152910b60408301526001600160801b0316606082015260a06080820181905260009082015260c00190565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60029190910b815260200190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60029490940b845260208401929092526040830152606082015260800190565b60006020825282518060208401526137d2816040850160208701613f36565b601f01601f19169190910160400192915050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600a908201526930b6b7bab73a1826b4b760b11b604082015260600190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b602080825260029082015261746f60f01b604082015260600190565b6020808252601590820152743a34b1b5a637bbb2b9101e103a34b1b5aab83832b960591b604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526017908201527f7469636b4c6f7765722025207469636b53706163696e67000000000000000000604082015260600190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526017908201527f7469636b55707065722025207469636b53706163696e67000000000000000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252600890820152673134b22ab83832b960c11b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252818101527f616d6f756e743044657369726564206f7220616d6f756e743144657369726564604082015260600190565b60208082526011908201527070656e64696e67476f7665726e616e636560781b604082015260600190565b6020808252600b908201526a70726f746f636f6c46656560a81b604082015260600190565b6020808252600590820152643a37b5b2b760d91b604082015260600190565b6020808252600c908201526b29b430b93832a5b2b2b832b960a11b604082015260600190565b6020808252600a9082015269676f7665726e616e636560b01b604082015260600190565b60208082526006908201526573686172657360d01b604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526005908201526463726f737360d81b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600a908201526930b6b7bab73a18a6b4b760b11b604082015260600190565b60208082526008908201526730b9b5a637bbb2b960c11b604082015260600190565b6020808252601190820152707469636b4c6f77657220746f6f206c6f7760781b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601290820152710e8d2c6d6aae0e0cae440e8dede40d0d2ced60731b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600e908201526d6d6178546f74616c537570706c7960901b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60008219821115613ebf57613ebf61400e565b500190565b600082613ed357613ed3614024565b500490565b6000816000190483118215151615613ef257613ef261400e565b500290565b60006001600160a01b0383811690831681811015613f1757613f1761400e565b039392505050565b600082821015613f3157613f3161400e565b500390565b60005b83811015613f51578181015183820152602001613f39565b838111156117a85750506000910152565b600281046001821680613f7657607f821691505b60208210811415613f9757634e487b7160e01b600052602260045260246000fd5b50919050565b60008260020b80613fb057613fb0614024565b808360020b0791505092915050565b600082613fce57613fce614024565b500690565b60008160020b627fffff19811415613fed57613fed61400e565b9003919050565b6000600160ff1b82141561400a5761400a61400e565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b038116811461404f57600080fd5b50565b8060020b811461404f57600080fd5b6001600160801b038116811461404f57600080fdfea2646970667358221220b6c0a93d24cb21be5566f8bef62bec6da63d110e5b85ad6c0e14459d6a78436664736f6c63430008000033000000000000000000000000beaf7156ba07c3df8fac42e90188c5a752470db700000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000db8f3882a27cb75d00