[ { "inputs": [ { "internalType": "contract ITwapStrategyFactory", "name": "_factory", "type": "address" }, { "internalType": "contract IUniswapV3Pool", "name": "_pool", "type": "address" }, { "internalType": "contract FeedRegistryInterface", "name": "_chainlinkRegistry", "type": "address" }, { "internalType": "contract ITwapStrategyManager", "name": "_manager", "type": "address" }, { "internalType": "bool[2]", "name": "_useTwap", "type": "bool[2]" }, { "components": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" } ], "internalType": "struct ITwapStrategyBase.Tick[]", "name": "_ticks", "type": "tuple[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "share", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "managerFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "protocolFee", "type": "uint256" } ], "name": "ClaimFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "FeesClaim", "type": "event" }, { "anonymous": false, "inputs": [], "name": "Hold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "share", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bool", "name": "burn", "type": "bool" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "indexed": false, "internalType": "struct DefiEdgeTwapStrategy.PartialTick[]", "name": "ticks", "type": "tuple[]" } ], "name": "PartialRebalance", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "indexed": false, "internalType": "struct DefiEdgeTwapStrategy.NewTick[]", "name": "ticks", "type": "tuple[]" } ], "name": "Rebalance", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "_zeroForOne", "type": "bool" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "reserve0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "reserve1", "type": "uint256" } ], "name": "Sync", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "FEE_PRECISION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_TICK_LENGTH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accManagementFeeShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "airdropWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "uint256", "name": "_amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "_amount1Min", "type": "uint256" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "collect0", "type": "uint256" }, { "internalType": "uint256", "name": "collect1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tickIndex", "type": "uint256" } ], "name": "burnLiquiditySingle", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "uint256", "name": "fee0", "type": "uint256" }, { "internalType": "uint256", "name": "fee1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "elixirMintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "components": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "internalType": "struct DefiEdgeTwapStrategy.NewTick[]", "name": "_newTicks", "type": "tuple[]" } ], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "contract ITwapStrategyFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_includeFee", "type": "bool" } ], "name": "getAUMWithFees", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "uint256", "name": "totalFee0", "type": "uint256" }, { "internalType": "uint256", "name": "totalFee1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getTicks", "outputs": [ { "components": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" } ], "internalType": "struct ITwapStrategyBase.Tick[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "manager", "outputs": [ { "internalType": "contract ITwapStrategyManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount0", "type": "uint256" }, { "internalType": "uint256", "name": "_amount1", "type": "uint256" }, { "internalType": "uint256", "name": "_amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "_amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "_minShare", "type": "uint256" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "uint256", "name": "share", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "onHold", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "contract IUniswapV3Pool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_zeroToOne", "type": "bool" }, { "internalType": "uint256", "name": "_amountIn", "type": "uint256" }, { "internalType": "bool", "name": "_isOneInchSwap", "type": "bool" }, { "internalType": "bytes", "name": "_swapData", "type": "bytes" }, { "components": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bool", "name": "burn", "type": "bool" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "internalType": "struct DefiEdgeTwapStrategy.PartialTick[]", "name": "_existingTicks", "type": "tuple[]" }, { "components": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "internalType": "struct DefiEdgeTwapStrategy.NewTick[]", "name": "_newTicks", "type": "tuple[]" }, { "internalType": "bool", "name": "_burnAll", "type": "bool" } ], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reserve0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "zeroToOne", "type": "bool" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "bool", "name": "isOneInchSwap", "type": "bool" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "ticks", "outputs": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "useTwap", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162005bba38038062005bba833981016040819052620000349162000550565b6001600f556200004481620002d5565b156200006d5760405162461bcd60e51b8152600401620000649062000669565b60405180910390fd5b601481511115620000925760405162461bcd60e51b815260040162000064906200064c565b600b80546001600160a01b03199081166001600160a01b0386811691909117909255600680548216898416179055600a8054821687841617905560078054909116878316179081905560408051630dfe168160e01b815290519190921691630dfe1681916004828101926020929190829003018186803b1580156200011657600080fd5b505afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015191906200052a565b600880546001600160a01b0319166001600160a01b039283161790556007546040805163d21220a760e01b81529051919092169163d21220a7916004808301926020929190829003018186803b158015620001ab57600080fd5b505afa158015620001c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e691906200052a565b600980546001600160a01b0319166001600160a01b039290921691909117905562000215600c836002620003a1565b5060005b8151811015620002c857600460405180604001604052808484815181106200023d57fe5b60200260200101516000015160020b81526020018484815181106200025e57fe5b602090810291909101810151810151600290810b9092528354600181810186556000958652948290208451910180549490920151830b62ffffff90811663010000000265ffffff000000199290940b1662ffffff1990941693909317929092161790550162000219565b50505050505050620006c2565b6000805b82518110156200039a576000838281518110620002f257fe5b602002602001015160000151905060008483815181106200030f57fe5b602002602001015160200151905060005b838110156200038e578581815181106200033657fe5b60200260200101516000015160020b8360020b141562000385578581815181106200035d57fe5b60200260200101516020015160020b8260020b1415620003855760019450505050506200039c565b60010162000320565b505050600101620002d9565b505b919050565b600183019183908215620004285791602002820160005b83821115620003f757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302620003b8565b8015620004265782816101000a81549060ff0219169055600101602081600001049283019260010302620003f7565b505b50620004369291506200043a565b5090565b5b808211156200043657600081556001016200043b565b600082601f83011262000462578081fd5b815160206001600160401b03808311156200047957fe5b62000488828385020162000685565b838152828101908684016040808702890186018a1015620004a7578788fd5b875b87811015620005085781838c031215620004c1578889fd5b81518281018181108882111715620004d557fe5b8352620004e28462000517565b8152620004f188850162000517565b8189015285529386019391810191600101620004a9565b50919998505050505050505050565b8051600281900b81146200039c57600080fd5b6000602082840312156200053c578081fd5b81516200054981620006a9565b9392505050565b60008060008060008060e0878903121562000569578182fd5b86516200057681620006a9565b809650506020808801516200058b81620006a9565b60408901519096506200059e81620006a9565b6060890151909550620005b181620006a9565b9350609f88018913620005c2578283fd5b620005ce604062000685565b8060808a0160c08b018c811115620005e4578687fd5b865b600281101562000613578251801515811462000600578889fd5b85529385019391850191600101620005e6565b505191955090925050506001600160401b0381111562000631578182fd5b6200063f89828a0162000451565b9150509295509295509295565b60208082526003908201526212551360ea1b604082015260600190565b602080825260029082015261125560f21b604082015260600190565b6040518181016001600160401b0381118282101715620006a157fe5b604052919050565b6001600160a01b0381168114620006bf57600080fd5b50565b6154e880620006d26000396000f3fe608060405234801561001057600080fd5b50600436106101ac5760003560e01c806305a10028146101b157806306fdde03146101db578063095ea7b3146101f05780631507a8f41461021057806316f0115b1461022557806318160ddd1461023a57806323b872dd14610242578063313ce56714610255578063395093511461026a5780633d1c387b1461027d578063443cb4bc14610292578063481c6a751461029a578063534cb30d146102a257806356e3f54e146102c357806359a73bf7146102d65780635a76f25e146102e95780636462e501146102f157806370a08231146103045780637fc50545146103175780638579f7ca1461031f57806395d89b411461032757806399d32fc41461032f5780639f9275ef14610337578063a457c2d71461034a578063a637196c1461035d578063a9059cbb14610380578063ae3dfa2814610393578063ba9a7a56146103b5578063bc191148146103bd578063bc25cf77146103d0578063c45a0155146103e3578063ce52f63c146103eb578063daf20a57146103f3578063dd62ed3e14610406578063e63a391f14610419578063fff6cae914610421575b600080fd5b6101c46101bf366004614c5f565b610429565b6040516101d292919061529a565b60405180910390f35b6101e36106a3565b6040516101d29190614f12565b6102036101fe36600461482d565b6106b8565b6040516101d29190614f07565b61022361021e366004614c0f565b6106d6565b005b61022d610773565b6040516101d29190614d50565b6101e3610782565b6102036102503660046146d9565b6107a1565b61025d610838565b6040516101d29190615301565b61020361027836600461482d565b61083d565b61028561088b565b6040516101d29190614eb0565b6101e3610904565b61022d61090a565b6102b56102b0366004614bbc565b610919565b6040516101d29291906150bd565b6102236102d1366004614719565b610949565b6102236102e43660046146a1565b610d05565b6101e3610df5565b6102036102ff366004614bbc565b610dfb565b6101e3610312366004614669565b610e25565b610203610e44565b6101e3610e4d565b6101e3610e52565b610223610e60565b6102236103453660046148ef565b610f78565b61020361035836600461482d565b611606565b61037061036b366004614bbc565b61166f565b6040516101d294939291906152be565b61020361038e36600461482d565b61183b565b6103a66103a1366004614cbf565b61184f565b6040516101d2939291906152a8565b6101e3611cac565b6103706103cb366004614858565b611cb5565b6102236103de366004614669565b612093565b61022d612209565b6101e3612218565b610223610401366004614890565b61221e565b6101e36104143660046146a1565b6123bb565b6101e36123d8565b6102236123e0565b6000806002600f541415610472576040805162461bcd60e51b815260206004820152601f602482015260008051602061535f833981519152604482015290519081900360640190fd5b6002600f558461048133610e25565b1015801561048e57508415155b6104b35760405162461bcd60e51b81526004016104aa9061510a565b60405180910390fd5b60008060008060005b600454811015610549576000600482815481106104d557fe5b600091825260208220018054909250819061050090600281810b9163010000009004900b8f846125c0565b929a509098509250905061051486836128b3565b955061052085826128b3565b945061052c8a896128b3565b995061053889886128b3565b985050600190920191506104bc9050565b5060008211806105595750600081115b1561056857610568828261290b565b600d54600e546000610578610782565b90508883111561059c576105996105928a85038e84612abb565b8a906128b3565b98505b878211156105be576105bb6105b48984038e84612abb565b89906128b3565b97505b888b111580156105ce5750878a11155b6105ea5760405162461bcd60e51b81526004016104aa906151b3565b6105f4338d612b6a565b881561061157600854610611906001600160a01b0316338b612c10565b871561062e5760095461062e906001600160a01b0316338a612c10565b600d5461063b908a612d57565b600d55600e5461064b9089612d57565b600e5560405133907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b464490610684908f908d908d906152a8565b60405180910390a2505050505050506001600f81905550935093915050565b6d446566694564676520536861726560901b81565b60006106cc6106c5612db4565b8484612db8565b5060015b92915050565b6007546001600160a01b031633146106ed57600080fd5b60006106fb82840184614a59565b80519091506001600160a01b031630141561076c57841561073e5760085461072d906001600160a01b03163387612c10565b600d5461073a9086612d57565b600d555b831561076c5760095461075b906001600160a01b03163386612c10565b600e546107689085612d57565b600e555b5050505050565b6007546001600160a01b031681565b600061079b6005546002546128b390919063ffffffff16565b90505b90565b60006107ae848484612e1a565b61082d846107ba612db4565b61082885604051806040016040528060018152602001606160f81b815250600160008b6001600160a01b03166001600160a01b031681526020019081526020016000206000610807612db4565b6001600160a01b031681526020810191909152604001600020549190612ed9565b612db8565b5060015b9392505050565b601281565b60006106cc61084a612db4565b84610828856001600061085b612db4565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906128b3565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156108fb5760008481526020908190206040805180820190915290840154600281810b810b810b83526301000000909104810b810b900b818301528252600190920191016108af565b50505050905090565b600d5481565b600b546001600160a01b031681565b6004818154811061092957600080fd5b600091825260209091200154600281810b92506301000000909104900b82565b610951612f70565b80156109e05750600660009054906101000a90046001600160a01b03166001600160a01b03166313a82bc56040518163ffffffff1660e01b815260040160206040518083038186803b1580156109a657600080fd5b505afa1580156109ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109de9190614874565b155b6109e957600080fd5b8015610bf15760005b81811015610bef576000838383818110610a0857fe5b905060800201803603810190610a1e9190614ab0565b600754815160208301519293506000926001600160a01b039092169163514ea4bf91610a4c9130919061300c565b6040518263ffffffff1660e01b8152600401610a689190614f12565b60a06040518083038186803b158015610a8057600080fd5b505afa158015610a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab89190614b66565b50506007548551602087015160405163a34123a760e01b81529596506001600160a01b039092169463a34123a79450610af9935090919086906004016150d1565b6040805180830381600087803b158015610b1257600080fd5b505af1158015610b26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4a9190614bec565b5050600754825160208401516040516309e3d67b60e31b81526001600160a01b0390931692634f1eb3d892610b8e9230926001600160801b03908190600401614da9565b6040805180830381600087803b158015610ba757600080fd5b505af1158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf9190614b34565b5050600190920191506109f29050565b505b8215610c0257610c02858585612c10565b6008546040516370a0823160e01b81526001600160a01b03909116906370a0823190610c32903090600401614d50565b60206040518083038186803b158015610c4a57600080fd5b505afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c829190614bd4565b600d556009546040516370a0823160e01b81526001600160a01b03909116906370a0823190610cb5903090600401614d50565b60206040518083038186803b158015610ccd57600080fd5b505afa158015610ce1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107689190614bd4565b610d0d612f70565b610d1657600080fd5b6008546001600160a01b03838116911614801590610d4257506009546001600160a01b03838116911614155b610d5e5760405162461bcd60e51b81526004016104aa90615223565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190610d8d903090600401614d50565b60206040518083038186803b158015610da557600080fd5b505afa158015610db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddd9190614bd4565b90508015610df057610df0838383612c10565b505050565b600e5481565b600c8160028110610e0b57600080fd5b60209182820401919006915054906101000a900460ff1681565b6001600160a01b0381166000908152602081905260409020545b919050565b60035460ff1681565b601481565b664445536861726560c81b81565b600654600b54600554604051636fc017b360e01b815260009384938493849373dd22e94a8c717abc0a0ae6dc9dd327da9c34528f93636fc017b393610eb8936001600160a01b03928316939290911691600401614fd9565b60806040518083038186803b158015610ed057600080fd5b505af4158015610ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f089190614789565b93509350935093506000821115610f2357610f23848361305d565b8015610f3357610f33838261305d565b60006005556040517f48b06b1a71c95ebd2ca58625da601bd9103a72670daa6d769054365cd81d5e3990610f6a908490849061529a565b60405180910390a150505050565b600b5460405163de33b11b60e01b81526001600160a01b039091169063de33b11b90610fa8903390600401614d50565b60206040518083038186803b158015610fc057600080fd5b505afa158015610fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff89190614874565b6110145760405162461bcd60e51b81526004016104aa90615161565b600654604051637e4ecb5d60e11b81526001600160a01b039091169063fc9d96ba90611044903090600401614d50565b60206040518083038186803b15801561105c57600080fd5b505afa158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190614874565b156110b15760405162461bcd60e51b81526004016104aa9061525b565b6002600f5414156110f7576040805162461bcd60e51b815260206004820152601f602482015260008051602061535f833981519152604482015290519081900360640190fd5b6002600f5560008082156111905785156111235760405162461bcd60e51b81526004016104aa90615197565b6003805460ff191660011790556111386130e0565b90925090508115158061114b5750600081115b1561115a5761115a828261290b565b61116660046000614542565b6040517f11f465e766ea3db0c8e7ec9feeeb4a40a061dd0d533d8e238d8e51627e34846990600090a15b87156111a3576111a38c8c8c8c8c61321c565b851561149e5760005b86811015611445578015611206578787828181106111c657fe5b905060800201600001358888600184038181106111df57fe5b90506080020160000135116112065760405162461bcd60e51b81526004016104aa90615127565b6000600489898481811061121657fe5b905060800201600001358154811061122a57fe5b600091825260209182902060408051808201909152910154600281810b810b810b83526301000000909104810b810b900b91810191909152905088888381811061127057fe5b90506080020160200160208101906112889190614858565b156112d8576000806112ae8b8b8681811061129f57fe5b9050608002016000013561386f565b9350935050506112c782876128b390919063ffffffff16565b95506112d385826128b3565b945050505b60008989848181106112e657fe5b9050608002016040013511806113115750600089898481811061130557fe5b90506080020160600135115b1561135c57611355816000015182602001518b8b8681811061132f57fe5b905060800201604001358c8c8781811061134557fe5b9050608002016060013530613978565b505061143c565b88888381811061136857fe5b90506080020160200160208101906113809190614858565b1561143c5760048054600019810190811061139757fe5b9060005260206000200160048a8a858181106113af57fe5b90506080020160000135815481106113c357fe5b6000918252602090912082549101805462ffffff191662ffffff600293840b840b811691909117808355935465ffffff00000019909416630100000094859004840b90930b16909202179055600480548061141a57fe5b6000828152602090208101600019908101805465ffffffffffff191690550190555b506001016111ac565b5060008211806114555750600081115b1561146457611464828261290b565b7fc164ad37eb8a406203b8ca3874be2fcb034f4eeb7db0ef3478359e329b4eb3518787604051611495929190614e57565b60405180910390a15b8315611539576114ff8585808060200260200160405190810160405280939291908181526020016000905b828210156114f5576114e660808302860136819003810190614ab0565b815260200190600101906114c9565b5050505050613aec565b7f852383cff866ad1535b2b0a4d3b1e6b4d46d064745e607b3c6daa715af9b412d8585604051611530929190614de6565b60405180910390a15b6115b36004805480602002602001604051908101604052809291908181526020016000905b828210156115aa5760008481526020908190206040805180820190915290840154600281810b810b810b83526301000000909104810b810b900b8183015282526001909201910161155e565b50505050613bcf565b156115d05760405162461bcd60e51b81526004016104aa90615223565b600454601e10156115f35760405162461bcd60e51b81526004016104aa90615206565b50506001600f5550505050505050505050565b60006106cc611613612db4565b8461082885604051806040016040528060018152602001606160f81b8152506001600061163e612db4565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612ed9565b6000806000806002600f5414156116bb576040805162461bcd60e51b815260206004820152601f602482015260008051602061535f833981519152604482015290519081900360640190fd5b6002600f55600b54604051631ca536b960e01b81526001600160a01b0390911690631ca536b9906116f0903390600401614d50565b60206040518083038186803b15801561170857600080fd5b505afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190614874565b61175c5760405162461bcd60e51b81526004016104aa90615161565b6117658561386f565b929650909450925090508115158061177d5750600081115b1561178c5761178c828261290b565b60048054600019810190811061179e57fe5b90600052602060002001600486815481106117b557fe5b6000918252602090912082549101805462ffffff191662ffffff600293840b840b811691909117808355935465ffffff00000019909416630100000094859004840b90930b16909202179055600480548061180c57fe5b6000828152602090208101600019908101805465ffffffffffff191690550190556001600f5592949193509190565b60006106cc611848612db4565b8484612e1a565b600654604051637e4ecb5d60e11b8152600091829182916001600160a01b03169063fc9d96ba90611884903090600401614d50565b60206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d49190614874565b156118f15760405162461bcd60e51b81526004016104aa9061525b565b6002600f541415611937576040805162461bcd60e51b815260206004820152601f602482015260008051602061535f833981519152604482015290519081900360640190fd5b6002600f55600b54604051631a7cd8dd60e11b81526001600160a01b03909116906334f9b1ba9061196c903390600401614d50565b60206040518083038186803b15801561198457600080fd5b505afa158015611998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bc9190614874565b6119d85760405162461bcd60e51b81526004016104aa906151ce565b604051631783222960e31b81526000908190309063bc19114890611a0190600190600401614f07565b608060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a539190614c8a565b50506040516314cb824960e01b8152919350915073dd22e94a8c717abc0a0ae6dc9dd327da9c34528f906314cb824990611a9b908d908d908d908d90899089906004016152d9565b604080518083038186803b158015611ab257600080fd5b505af4158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190614bec565b909a5098508994508893508415611b1357600854611b13906001600160a01b0316333088613c8f565b8315611b3157600954611b31906001600160a01b0316333087613c8f565b611b3e8585848433613de7565b925085831015611b605760405162461bcd60e51b81526004016104aa9061523f565b878510158015611b705750868410155b611b8c5760405162461bcd60e51b81526004016104aa906151b3565b600b546040805163a4d66daf60e01b815290516000926001600160a01b03169163a4d66daf916004808301926020929190829003018186803b158015611bd157600080fd5b505afa158015611be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c099190614bd4565b90508015611c385780611c1a610782565b1115611c385760405162461bcd60e51b81526004016104aa9061517c565b600d54611c4590876128b3565b600d55600e54611c5590866128b3565b600e5560405133907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90611c8e9087908a908a906152a8565b60405180910390a25050506001600f81905550955095509592505050565b64e8d4a5100081565b60008060008060005b60045481101561201e57600060048281548110611cd757fe5b6000918252602080832060408051808201909152920154600281810b810b810b8085526301000000909204810b810b900b9183018290526007549294506001600160a01b039092169163514ea4bf91611d3191309161300c565b6040518263ffffffff1660e01b8152600401611d4d9190614f12565b60a06040518083038186803b158015611d6557600080fd5b505afa158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d9190614b66565b5050505090506000816001600160801b03161115611e7657600754825160208401516040516362891e0b60e01b81526000938493730b9ea70e9e4b3049f333a8a383ba724463aecf1b936362891e0b93611e07936001600160a01b03169291908990600401615056565b604080518083038186803b158015611e1e57600080fd5b505af4158015611e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e569190614bec565b9092509050611e6589836128b3565b9850611e7188826128b3565b975050505b878015611e8c57506000816001600160801b0316115b15612014576007548251602084015160405163a34123a760e01b81526001600160a01b039093169263a34123a792611ecb9290916000906004016150d1565b6040805180830381600087803b158015611ee457600080fd5b505af1158015611ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1c9190614bec565b5050600754825160208401516040516309e3d67b60e31b815260009384936001600160a01b0390911692634f1eb3d892611f6792309290916001600160801b03908190600401614da9565b6040805180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190614b34565b6001600160801b039182169350169050611fd287836128b3565b9650611fde86826128b3565b9550306001600160a01b031660008051602061537f833981519152888860405161200992919061529a565b60405180910390a250505b5050600101611cbe565b50600d5461202c90836128b3565b600d55600e5461203c90826128b3565b600e55848015612056575060008211806120565750600081115b1561206557612065828261290b565b600d546120739085906128b3565b935061208a600e54846128b390919063ffffffff16565b92509193509193565b600b5460405163de33b11b60e01b81526001600160a01b039091169063de33b11b906120c3903390600401614d50565b60206040518083038186803b1580156120db57600080fd5b505afa1580156120ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121139190614874565b61212f5760405162461bcd60e51b81526004016104aa90615161565b600854600d546040516370a0823160e01b81526121c8926001600160a01b03169184916121c3919084906370a082319061216d903090600401614d50565b60206040518083038186803b15801561218557600080fd5b505afa158015612199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bd9190614bd4565b90612d57565b612c10565b600954600e546040516370a0823160e01b8152612206926001600160a01b03169184916121c3919084906370a082319061216d903090600401614d50565b50565b6006546001600160a01b031681565b60055481565b600b5460405163de33b11b60e01b81526001600160a01b039091169063de33b11b9061224e903390600401614d50565b60206040518083038186803b15801561226657600080fd5b505afa15801561227a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229e9190614874565b6122ba5760405162461bcd60e51b81526004016104aa90615161565b600654604051637e4ecb5d60e11b81526001600160a01b039091169063fc9d96ba906122ea903090600401614d50565b60206040518083038186803b15801561230257600080fd5b505afa158015612316573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233a9190614874565b156123575760405162461bcd60e51b81526004016104aa9061525b565b6002600f54141561239d576040805162461bcd60e51b815260206004820152601f602482015260008051602061535f833981519152604482015290519081900360640190fd5b6002600f556123af858585858561321c565b50506001600f55505050565b600160209081526000928352604080842090915290825290205481565b6305f5e10081565b600b5460405163de33b11b60e01b81526001600160a01b039091169063de33b11b90612410903390600401614d50565b60206040518083038186803b15801561242857600080fd5b505afa15801561243c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124609190614874565b61247c5760405162461bcd60e51b81526004016104aa90615161565b6008546040516370a0823160e01b81526001600160a01b03909116906370a08231906124ac903090600401614d50565b60206040518083038186803b1580156124c457600080fd5b505afa1580156124d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fc9190614bd4565b600d556009546040516370a0823160e01b81526001600160a01b03909116906370a082319061252f903090600401614d50565b60206040518083038186803b15801561254757600080fd5b505afa15801561255b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257f9190614bd4565b600e819055600d546040517fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a926125b6929161529a565b60405180910390a1565b600080808080808715612723576007546001600160a01b031663514ea4bf6125e9308d8d61300c565b6040518263ffffffff1660e01b81526004016126059190614f12565b60a06040518083038186803b15801561261d57600080fd5b505afa158015612631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126559190614b66565b5092995050506001600160801b03881615905061271e576000612689886001600160801b03168a612684610782565b612abb565b6007549091506001600160a01b031663a34123a78c8c6126a885613faa565b6040518463ffffffff1660e01b81526004016126c6939291906150d1565b6040805180830381600087803b1580156126df57600080fd5b505af11580156126f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127179190614bec565b9097509550505b6127ae565b60075460405163a34123a760e01b81526001600160a01b039091169063a34123a790612757908d908d908c906004016150d1565b6040805180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190614bec565b90965094505b6007546040516309e3d67b60e31b81526001600160a01b0390911690634f1eb3d8906127ed9030908e908e906001600160801b03908190600401614da9565b6040805180830381600087803b15801561280657600080fd5b505af115801561281a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283e9190614b34565b6001600160801b03918216935016905085821161285c576000612866565b6128668287612d57565b9350848111612876576000612880565b6128808186612d57565b600d5490935061289090836128b3565b600d55600e546128a090826128b3565b600e819055505050945094509450949050565b600082820183811015610831576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600654600b5460405163cc3f989b60e01b81526000928392839283928392839273dd22e94a8c717abc0a0ae6dc9dd327da9c34528f9263cc3f989b92612969926001600160a01b03928316929091169030908e908e90600401614fa5565b60c06040518083038186803b15801561298157600080fd5b505af4158015612995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b991906147d0565b95509550955095509550955060008411156129f6576008546129e5906001600160a01b03168786612c10565b600d546129f29085612d57565b600d555b8215612a2457600954612a13906001600160a01b03168785612c10565b600e54612a209084612d57565b600e555b8115612a5257600854612a41906001600160a01b03168684612c10565b600d54612a4e9083612d57565b600d555b8015612a8057600954612a6f906001600160a01b03168683612c10565b600e54612a7c9082612d57565b600e555b306001600160a01b031660008051602061537f8339815191528989604051612aa992919061529a565b60405180910390a25050505050505050565b6000808060001985870986860292508281109083900303905080612af15760008411612ae657600080fd5b508290049050610831565b808411612afd57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b612b7682600083610df0565b60408051808201825260018152603160f91b6020808301919091526001600160a01b0385166000908152908190529190912054612bb4918390612ed9565b6001600160a01b038316600090815260208190526040902055600254612bda9082612d57565b6002556040805182815290516000916001600160a01b038516916000805160206154338339815191529181900360200190a35050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310612c8c5780518252601f199092019160209182019101612c6d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612cee576040519150601f19603f3d011682016040523d82523d6000602084013e612cf3565b606091505b5091509150818015612d21575080511580612d215750808060200190516020811015612d1e57600080fd5b50515b61076c576040805162461bcd60e51b815260206004820152600260248201526114d560f21b604482015290519081900360640190fd5b600082821115612dae576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3390565b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b612e25838383610df0565b612e628160405180606001604052806026815260200161539f602691396001600160a01b0386166000908152602081905260409020549190612ed9565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612e9190826128b3565b6001600160a01b0380841660008181526020818152604091829020949094558051858152905191939287169260008051602061543383398151915292918290030190a3505050565b60008184841115612f685760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f2d578181015183820152602001612f15565b50505050905090810190601f168015612f5a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60065460408051635aa6e67560e01b815290516000926001600160a01b031691635aa6e675916004808301926020929190829003018186803b158015612fb557600080fd5b505afa158015612fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fed9190614685565b6001600160a01b0316336001600160a01b0316141561079e5750600190565b6040805160609490941b6001600160601b031916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a9093019052815191012090565b61306960008383610df0565b60025461307690826128b3565b6002556001600160a01b03821660009081526020819052604090205461309c90826128b3565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391926000805160206154338339815191529281900390910190a35050565b60008060005b600454811015613217576000600482815481106130ff57fe5b600091825260208220600754910180549093506001600160a01b039091169063514ea4bf9061313e903090600281810b9163010000009004900b61300c565b6040518263ffffffff1660e01b815260040161315a9190614f12565b60a06040518083038186803b15801561317257600080fd5b505afa158015613186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131aa9190614b66565b5050505090506000816001600160801b0316111561320d57815460009081906131e390600281810b9163010000009004900b83866125c0565b9350935050506131fc82886128b390919063ffffffff16565b965061320886826128b3565b955050505b50506001016130e6565b509091565b613224614560565b600654604080516306ec4be960e41b815290516000926001600160a01b031691636ec4be90916004808301926020929190829003018186803b15801561326957600080fd5b505afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a19190614685565b905060008088156132dd576008546132c3906001600160a01b0316848a613ff2565b50506008546009546001600160a01b03918216911661330a565b6009546132f4906001600160a01b0316848a613ff2565b50506009546008546001600160a01b0391821691165b6040516370a0823160e01b81526001600160a01b038316906370a0823190613336903090600401614d50565b60206040518083038186803b15801561334e57600080fd5b505afa158015613362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133869190614bd4565b84526040516370a0823160e01b81526001600160a01b038216906370a08231906133b4903090600401614d50565b60206040518083038186803b1580156133cc57600080fd5b505afa1580156133e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134049190614bd4565b6020850152613411610782565b608085015286156134815760405163fa85d9b960e01b81526001600160a01b0384169063fa85d9b99061344a9089908990600401614f1b565b600060405180830381600087803b15801561346457600080fd5b505af1158015613478573d6000803e3d6000fd5b50505050613554565b600080846001600160a01b0316888860405161349e929190614d40565b6000604051808303816000865af19150503d80600081146134db576040519150601f19603f3d011682016040523d82523d6000602084013e6134e0565b606091505b509150915081613551578051604481101561350d5760405162461bcd60e51b81526004016104aa90615143565b60048201805160031983018252909260009061353290848101602001906024016149c3565b90508184528060405162461bcd60e51b81526004016104aa91906150f7565b50505b61355c610782565b84608001511461357e5760405162461bcd60e51b81526004016104aa906151ea565b6040516370a0823160e01b81526001600160a01b038316906370a08231906135aa903090600401614d50565b60206040518083038186803b1580156135c257600080fd5b505afa1580156135d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135fa9190614bd4565b604080860191909152516370a0823160e01b81526001600160a01b038216906370a082319061362d903090600401614d50565b60206040518083038186803b15801561364557600080fd5b505afa158015613659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367d9190614bd4565b6060850152604084015184516000916136969190612d57565b905060006136b586602001518760600151612d5790919063ffffffff16565b90508a156136fa576008546136d5906001600160a01b03168660006140e3565b600d546136e29083612d57565b600d55600e546136f290826128b3565b600e55613733565b600954613712906001600160a01b03168660006140e3565b600d5461371f90826128b3565b600d55600e5461372f9083612d57565b600e555b600b60009054906101000a90046001600160a01b03166001600160a01b031663e19fd10b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561378357600080fd5b505af1158015613797573d6000803e3d6000fd5b5050600754600654600b5460405163929c3e5560e01b815273adf7acb68985789ca494d9e2ad7656e315359e1e955063929c3e5594506137f6936001600160a01b0390811693811692899289928d928d92911690600c90600401614ffd565b60206040518083038186803b15801561380e57600080fd5b505af4158015613822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138469190614874565b6138625760405162461bcd60e51b81526004016104aa906151b3565b5050505050505050505050565b60008060008060006004868154811061388457fe5b600091825260208220600754910180549093506001600160a01b039091169063514ea4bf906138c3903090600281810b9163010000009004900b61300c565b6040518263ffffffff1660e01b81526004016138df9190614f12565b60a06040518083038186803b1580156138f757600080fd5b505afa15801561390b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392f9190614b66565b5050505090506000816001600160801b0316111561396f57815461396490600281810b9163010000009004900b6000846125c0565b929850909650945092505b50509193509193565b60075460405163361d23b760e21b815260009182918291730b9ea70e9e4b3049f333a8a383ba724463aecf1b9163d8748edc916139cb916001600160a01b03909116908c908c908c908c90600401615089565b60206040518083038186803b1580156139e357600080fd5b505af41580156139f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1b9190614b1a565b6007546040805180820182526001600160a01b0388811682529092166020808401829052915193945092633c8a7d8d9230928d928d928892613a5d9201615277565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401613a8c959493929190614d64565b6040805180830381600087803b158015613aa557600080fd5b505af1158015613ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613add9190614bec565b90999098509650505050505050565b6003805460ff1916905560005b8151811015613bcb576000828281518110613b1057fe5b60200260200101519050613b37816000015182602001518360400151846060015130613978565b5050604080518082019091528151600290810b8252602092830151810b928201928352600480546001818101835560009290925292517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90930180549451830b62ffffff90811663010000000265ffffff000000199590940b1662ffffff1990951694909417929092161790915501613af9565b5050565b6000805b8251811015613c89576000838281518110613bea57fe5b60200260200101516000015190506000848381518110613c0657fe5b602002602001015160200151905060005b83811015613c7e57858181518110613c2b57fe5b60200260200101516000015160020b8360020b1415613c7657858181518110613c5057fe5b60200260200101516020015160020b8260020b1415613c76576001945050505050610e3f565b600101613c17565b505050600101613bd3565b50919050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b60208310613d135780518252601f199092019160209182019101613cf4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613d75576040519150601f19603f3d011682016040523d82523d6000602084013e613d7a565b606091505b5091509150818015613da8575080511580613da85750808060200190516020811015613da557600080fd5b50515b613ddf576040805162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015290519081900360640190fd5b505050505050565b600080613df2610782565b600a54600754600b546040516323f64c2360e11b815293945073dd22e94a8c717abc0a0ae6dc9dd327da9c34528f936347ec984693613e53936001600160a01b039182169390821692911690600c908e908e908e908e908c90600401614f4a565b60206040518083038186803b158015613e6b57600080fd5b505af4158015613e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea39190614bd4565b9150600080600b60009054906101000a90046001600160a01b03166001600160a01b03166391a543b66040518163ffffffff1660e01b815260040160206040518083038186803b158015613ef657600080fd5b505afa158015613f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f2e9190614bd4565b905082613f5657613f448464e8d4a51000612d57565b9350613f56600064e8d4a5100061305d565b8015613f9457613f746305f5e100613f6e86846141f6565b9061424f565b600554909250613f8490836128b3565b600555613f918483612d57565b93505b613f9e858561305d565b50505095945050505050565b6000600160801b8210613fee5760405162461bcd60e51b81526004018080602001828103825260278152602001806153c56027913960400191505060405180910390fd5b5090565b600061408882856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561405657600080fd5b505afa15801561406a573d6000803e3d6000fd5b505050506040513d602081101561408057600080fd5b5051906128b3565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506140dd9085906142b3565b50505050565b801580614169575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561413b57600080fd5b505afa15801561414f573d6000803e3d6000fd5b505050506040513d602081101561416557600080fd5b5051155b6141a45760405162461bcd60e51b815260040180806020018281038252603681526020018061547d6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610df09084906142b3565b600082614205575060006106d0565b8282028284828161421257fe5b04146108315760405162461bcd60e51b81526004018080602001828103825260218152602001806154126021913960400191505060405180910390fd5b60008082116142a2576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b8183816142ab57fe5b049392505050565b6000614308826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166143649092919063ffffffff16565b805190915015610df05780806020019051602081101561432757600080fd5b5051610df05760405162461bcd60e51b815260040180806020018281038252602a815260200180615453602a913960400191505060405180910390fd5b6060614373848460008561437b565b949350505050565b6060824710156143bc5760405162461bcd60e51b81526004018080602001828103825260268152602001806153ec6026913960400191505060405180910390fd5b6143c5856144d6565b614416576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106144545780518252601f199092019160209182019101614435565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146144b6576040519150601f19603f3d011682016040523d82523d6000602084013e6144bb565b606091505b50915091506144cb8282866144dc565b979650505050505050565b3b151590565b606083156144eb575081610831565b8251156144fb5782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612f2d578181015183820152602001612f15565b5080546000825590600052602060002090810190612206919061458f565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b5b80821115613fee57805465ffffffffffff19168155600101614590565b60008083601f8401126145be578081fd5b5081356001600160401b038111156145d4578182fd5b6020830191508360206080830285010111156145ef57600080fd5b9250929050565b8035610e3f81615350565b60008083601f840112614612578182fd5b5081356001600160401b03811115614628578182fd5b6020830191508360208285010111156145ef57600080fd5b8035600281900b8114610e3f57600080fd5b80516001600160801b0381168114610e3f57600080fd5b60006020828403121561467a578081fd5b81356108318161533b565b600060208284031215614696578081fd5b81516108318161533b565b600080604083850312156146b3578081fd5b82356146be8161533b565b915060208301356146ce8161533b565b809150509250929050565b6000806000606084860312156146ed578081fd5b83356146f88161533b565b925060208401356147088161533b565b929592945050506040919091013590565b600080600080600060808688031215614730578081fd5b853561473b8161533b565b9450602086013561474b8161533b565b93506040860135925060608601356001600160401b0381111561476c578182fd5b614778888289016145ad565b969995985093965092949392505050565b6000806000806080858703121561479e578384fd5b84516147a98161533b565b60208601519094506147ba8161533b565b6040860151606090960151949790965092505050565b60008060008060008060c087890312156147e8578081fd5b86516147f38161533b565b60208801519096506148048161533b565b6040880151606089015160808a015160a0909a0151989b929a5090989097909650945092505050565b6000806040838503121561483f578182fd5b823561484a8161533b565b946020939093013593505050565b600060208284031215614869578081fd5b813561083181615350565b600060208284031215614885578081fd5b815161083181615350565b6000806000806000608086880312156148a7578283fd5b85356148b281615350565b94506020860135935060408601356148c981615350565b925060608601356001600160401b038111156148e3578182fd5b61477888828901614601565b60008060008060008060008060008060e08b8d03121561490d578788fd5b8a3561491881615350565b995060208b0135985060408b013561492f81615350565b975060608b01356001600160401b038082111561494a578586fd5b6149568e838f01614601565b909950975060808d013591508082111561496e578586fd5b61497a8e838f016145ad565b909750955060a08d0135915080821115614992578485fd5b5061499f8d828e016145ad565b90945092506149b2905060c08c016145f6565b90509295989b9194979a5092959850565b6000602082840312156149d4578081fd5b81516001600160401b03808211156149ea578283fd5b818401915084601f8301126149fd578283fd5b815181811115614a0957fe5b604051601f8201601f191681016020018381118282101715614a2757fe5b604052818152838201602001871015614a3e578485fd5b614a4f82602083016020870161530f565b9695505050505050565b600060408284031215614a6a578081fd5b604080519081016001600160401b0381118282101715614a8657fe5b6040528235614a948161533b565b81526020830135614aa48161533b565b60208201529392505050565b600060808284031215614ac1578081fd5b604051608081016001600160401b0381118282101715614add57fe5b604052614ae983614640565b8152614af760208401614640565b602082015260408301356040820152606083013560608201528091505092915050565b600060208284031215614b2b578081fd5b61083182614652565b60008060408385031215614b46578182fd5b614b4f83614652565b9150614b5d60208401614652565b90509250929050565b600080600080600060a08688031215614b7d578283fd5b614b8686614652565b94506020860151935060408601519250614ba260608701614652565b9150614bb060808701614652565b90509295509295909350565b600060208284031215614bcd578081fd5b5035919050565b600060208284031215614be5578081fd5b5051919050565b60008060408385031215614bfe578182fd5b505080516020909101519092909150565b60008060008060608587031215614c24578182fd5b843593506020850135925060408501356001600160401b03811115614c47578283fd5b614c5387828801614601565b95989497509550505050565b600080600060608486031215614c73578081fd5b505081359360208301359350604090920135919050565b60008060008060808587031215614c9f578182fd5b505082516020840151604085015160609095015191969095509092509050565b600080600080600060a08688031215614cd6578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b5460ff8082161515835260089190911c161515602090910152565b60008151808452614d2c81602086016020860161530f565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a0608082018190526000906144cb90830184614d14565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020808252818101839052600090604080840186845b87811015614e4a57614e0d82614640565b600281810b8552614e1f878501614640565b900b848701525081840135848401526060808301359084015260809283019290910190600101614dfc565b5090979650505050505050565b6020808252818101839052600090604080840186845b87811015614e4a578135835284820135614e8681615350565b15158386015281840135848401526060808301359084015260809283019290910190600101614e6d565b602080825282518282018190526000919060409081850190868401855b82811015614efa5781518051600290810b865290870151900b868501529284019290850190600101614ecd565b5091979650505050505050565b901515815260200190565b90815260200190565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b6001600160a01b038a811682528981166020830152881660408201526101408101614f786060830189614cf9565b60a082019690965260c081019490945260e084019290925261010083015261012090910152949350505050565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03898116825288811660208301526040820188905260608201879052858116608083015284811660a0830152831660c0820152610120810161504960e0830184614cf9565b9998505050505050505050565b6001600160a01b03949094168452600292830b6020850152910b60408301526001600160801b0316606082015260800190565b6001600160a01b03959095168552600293840b60208601529190920b60408401526060830191909152608082015260a00190565b600292830b8152910b602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b6000602082526108316020830184614d14565b602080825260039082015262494e5360e81b604082015260600190565b602080825260029082015261494f60f01b604082015260600190565b6020808252600490820152630737761760e41b604082015260600190565b6020808252600190820152602760f91b604082015260600190565b6020808252600190820152601360fa1b604082015260600190565b602080825260029082015261494160f01b604082015260600190565b6020808252600190820152605360f81b604082015260600190565b602080825260029082015261554160f01b604082015260600190565b6020808252600290820152614d5360f01b604082015260600190565b60208082526003908201526212551360ea1b604082015260600190565b602080825260029082015261125560f21b604082015260600190565b602080825260029082015261534360f01b604082015260600190565b602080825260029082015261111360f21b604082015260600190565b81516001600160a01b039081168252602092830151169181019190915260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60ff91909116815260200190565b60005b8381101561532a578181015183820152602001615312565b838111156140dd5750506000910152565b6001600160a01b038116811461220657600080fd5b801515811461220657600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c007a6996f208e1f74222a1b84b080a89f0b84e81ec5bed570e1c232950014ecc6f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636553616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212205b51a64c6eae17702cdb8d858ccdb80d3e41949a026bab0b29dfec150d438f1764736f6c634300070600330000000000000000000000007fbf00017c094e6b9398e27a105eca71d3d2acbb000000000000000000000000abe0465dc7d62c0949d3b31cdcc7322e385e5d0a000000000000000000000000d7cf8dc79b15a61714061c5b7a1c12dde9f3f08800000000000000000000000044a23b8a407df11b87f7adee9554052d82ade1890000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2f6cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3728
0xa26469706673582212205b51a64c6eae17702cdb8d858ccdb80d3e41949a026bab0b29dfec150d438f1764736f6c634300070600330000000000000000000000007fbf00017c094e6b9398e27a105eca71d3d2acbb000000000000000000000000abe0465dc7d62c0949d3b31cdcc7322e385e5d0a000000000000000000000000d7cf8dc79b15a61714061c5b7a1c12dde9f3f08800000000000000000000000044a23b8a407df11b87f7adee9554052d82ade1890000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2f6cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3728