[ { "inputs": [ { "internalType": "address", "name": "_protocolFeeRecipient", "type": "address" }, { "internalType": "address", "name": "_protocolRewards", "type": "address" }, { "internalType": "address", "name": "_weth", "type": "address" }, { "internalType": "address", "name": "_nonfungiblePositionManager", "type": "address" }, { "internalType": "address", "name": "_swapRouter", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "AddressZero", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [], "name": "EthAmountTooSmall", "type": "error" }, { "inputs": [], "name": "EthTransferFailed", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InitialOrderSizeTooLarge", "type": "error" }, { "inputs": [], "name": "InsufficientFunds", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidity", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidMarketType", "type": "error" }, { "inputs": [], "name": "MarketAlreadyGraduated", "type": "error" }, { "inputs": [], "name": "MarketNotGraduated", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "OnlyPool", "type": "error" }, { "inputs": [], "name": "OnlyWeth", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "SlippageBoundsExceeded", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "poolAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalEthLiquidity", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalTokenLiquidity", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lpPositionId", "type": "uint256" }, { "indexed": false, "internalType": "enum IWow.MarketType", "name": "marketType", "type": "uint8" } ], "name": "WowMarketGraduated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": true, "internalType": "address", "name": "orderReferrer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalEth", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethSold", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokensBought", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "buyerTokenBalance", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "comment", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "indexed": false, "internalType": "enum IWow.MarketType", "name": "marketType", "type": "uint8" } ], "name": "WowTokenBuy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenCreator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "platformReferrer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "orderReferrer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "protocolFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenCreatorFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "platformReferrerFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "orderReferrerFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "protocolFee", "type": "uint256" } ], "name": "WowTokenFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "seller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": true, "internalType": "address", "name": "orderReferrer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalEth", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethBought", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokensSold", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sellerTokenBalance", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "comment", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "indexed": false, "internalType": "enum IWow.MarketType", "name": "marketType", "type": "uint8" } ], "name": "WowTokenSell", "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": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "fromTokenBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "WowTokenTransfer", "type": "event" }, { "inputs": [], "name": "MAX_TOTAL_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_ORDER_SIZE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ORDER_REFERRER_FEE_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PLATFORM_REFERRER_FEE_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PROTOCOL_FEE_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOKEN_CREATOR_FEE_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOTAL_FEE_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "WETH", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "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": [], "name": "bondingCurve", "outputs": [ { "internalType": "contract BondingCurve", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokensToBurn", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "address", "name": "refundRecipient", "type": "address" }, { "internalType": "address", "name": "orderReferrer", "type": "address" }, { "internalType": "string", "name": "comment", "type": "string" }, { "internalType": "enum IWow.MarketType", "name": "expectedMarketType", "type": "uint8" }, { "internalType": "uint256", "name": "minOrderSize", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" } ], "name": "buy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "currentExchangeRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ethOrderSize", "type": "uint256" } ], "name": "getEthBuyQuote", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ethOrderSize", "type": "uint256" } ], "name": "getEthSellQuote", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenOrderSize", "type": "uint256" } ], "name": "getTokenBuyQuote", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenOrderSize", "type": "uint256" } ], "name": "getTokenSellQuote", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenCreator", "type": "address" }, { "internalType": "address", "name": "_platformReferrer", "type": "address" }, { "internalType": "address", "name": "_bondingCurve", "type": "address" }, { "internalType": "string", "name": "_tokenURI", "type": "string" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "marketType", "outputs": [ { "internalType": "enum IWow.MarketType", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nonfungiblePositionManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "platformReferrer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolFeeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolRewards", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokensToSell", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "address", "name": "orderReferrer", "type": "address" }, { "internalType": "string", "name": "comment", "type": "string" }, { "internalType": "enum IWow.MarketType", "name": "expectedMarketType", "type": "uint8" }, { "internalType": "uint256", "name": "minPayoutSize", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" } ], "name": "sell", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "state", "outputs": [ { "components": [ { "internalType": "enum IWow.MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "address", "name": "marketAddress", "type": "address" } ], "internalType": "struct IWow.MarketState", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swapRouter", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenCreator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "uniswapV3SwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6101203461046157601f6160fe38819003918201601f19168301916001600160401b039182841185851017610466578160a092869260409687528339810103126104615761004c8361047c565b906100596020850161047c565b9361006584820161047c565b9061007e60806100776060840161047c565b920161047c565b917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0094855460ff81891c161595811680159081610459575b600114908161044f575b159081610446575b50610435576001600160401b03198116600117875585610418575b506001600160a01b0381811615610407578089161561040757808316156104075780841615610407578416156103f65760e05261010096875260805260a05260c0526103b6575b5051615c6d918261049183396080518281816105a7015281816105d1015281816105f4015281816106310152818161086e015281816108b10152818161091b01528181610975015281816109a5015281816109c9015281816109fc01528181610a2f01528181610aaf01528181610eb101528181611166015281816111aa01528181611230015281816112800152818161145601528181611acf01528181611f9c0152818161243c01528181612481015281816124e8015281816125420152818161257201528181612596015281816125c9015281816125fc0152818161267d01528181612a6b01528181612cee01528181612d3101528181612db801528181612e0b015281816138720152818161399f015281816139e201528181613a4c01528181613aa601528181613ad601528181613afa01528181613b2d01528181613b6001528181613be001528181613fb7015281816148cd015281816149110152818161499701526149e7015260a0518281816106ad015281816108fa0152818161094d01528181610c1401528181611a6f015281816124c70152818161251a015281816127e201528181613a2b01528181613a7e0152613d45015260c0518281816111f7015281816112ee0152818161189c01528181611f2f01528181612d7e01528181612e7c0152818161495e0152614a4d015260e0518281816117e5015281816122ad015281816141d20152818161421a01528181614385015281816146ae015281816146f60152818161486901528181614f9d015281816153170152818161549c015261554f01525181818161312401528181614271015281816143460152818161474d0152818161482201528181615012015281816150dc0152818161536201526154370152f35b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26020825160018152a13861012a565b8651639fabe1c160e01b8152600490fd5b8751639fabe1c160e01b8152600490fd5b6001600160481b03191668010000000000000001178655386100e3565b875163f92ee8a960e01b8152600490fd5b905015386100c8565b303b1591506100c0565b8791506100b6565b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036104615756fe6080806040526004361015610025575b50361561001b57600080fd5b61002361386f565b005b6000803560e01c91826306fdde03146133b257508163095ea7b314613302578163150b7a02146132885781631755ff211461326057816318160ddd1461323657816323b872dd1461315357816329df64791461310f5781632dd48909146130e6578163313ce567146130cb57816333039d3d146130a557816336480dd5146130275781633c130d9014612f8d57816342966c6814612f45578163472e64901461230457816351845bf6146122dc57816364df049e146122985781636c1f20d11461221a5781636f28507c146121ff57816370a08231146121ba578163810a94d71461210b5781639352c82514611cc757816395d89b4114611be3578163a368497714611b2f578163a9059cbb14611afe578163ad5c464814611aba578163b0604fcb14611a9e578163b44a272214611a5a578163b69f9d561461197e578163be37822814611962578163c19d93fb146118cb578163c2f30aea146101e1578163c31c9c0714611887578163cd28eb80146102d8578163d3f82d8e146102b9578163db84252c14610291578163dd62ed3e14610248578163eff1d50e14610222578163fa461e33146101e6575063fcdc67cf146101e1573861000f565b6136d7565b3461021f57606036600319011261021f576044356001600160401b03811161021b576102169036906004016134fe565b505080f35b5080fd5b80fd5b3461021f578060031936011261021f57546040516001600160a01b039091168152602090f35b3461021f57604036600319011261021f576102616134bc565b61027261026c6134d2565b916137e2565b9060018060a01b03166000526020526020604060002054604051908152f35b3461021f578060031936011261021f576003546040516001600160a01b039091168152602090f35b3461021f578060031936011261021f57602060405164174876e8008152f35b60c036600319011261021f576102ec6134bc565b906102f56134d2565b6102fd6134e8565b6064356001600160401b0381116118835761031c90369060040161367a565b6084356001600160401b03811161187f5761033b90369060040161367a565b9260a4356001600160401b038111610ef05761035b90369060040161367a565b600080516020615c1883398151915254946001600160401b0386168015908161186f575b6001149081611865575b15908161185c575b5061184a5760016001600160401b0319871617600080516020615c188339815191525560ff8660401c161561181d575b826001600160a01b0389161561180b576001600160a01b0386161561180b576001600160a01b0316156117e3575b6103f761598b565b6103ff61598b565b8051906001600160401b0382116117cf57819061042a600080516020615ad883398151915254613538565b601f8111611750575b50602090601f83116001146116c05789926116b5575b50508160011b916000199060031b1c191617600080516020615ad8833981519152555b8051906001600160401b0382116116a1578190610497600080516020615b1883398151915254613538565b601f8111611622575b50602090601f8311600114611592578892611587575b50508160011b916000199060031b1c191617600080516020615b18833981519152555b6104e161598b565b6104e961598b565b6001600080516020615bf88339815191528190556000805460ff60a01b1916905580546001600160a01b03199081166001600160a01b0393841617909155600380549091169187169190911790558051906001600160401b038211611573578190610555600454613538565b601f8111611501575b50602090601f831160011461148b578692611480575b50508160011b916000199060031b1c1916176004555b82546001600160a01b0319166001600160a01b03918216178355307f0000000000000000000000000000000000000000000000000000000000000000909116101561147a577f00000000000000000000000000000000000000000000000000000000000000005b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316101561145457305b6001600160a01b038281167f000000000000000000000000000000000000000000000000000000000000000090911603611442576d13c4b57968ceb7aab7ea377e80c9905b6040516309f56ab160e11b81526001600160a01b03938416600482015290831660248201526101f460448201529082166064820152906020908290608490829087907f0000000000000000000000000000000000000000000000000000000000000000165af19081156114375783916113f1575b5060018060a01b03166bffffffffffffffffffffffff60a01b60025416176002553461076f575b60ff91925060401c16156107155780f35b68ff000000000000000019600080516020615c188339815191525416600080516020615c18833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b6040519261077c846135ed565b82845260009061078a614df3565b8154600260ff8260a01c1610156113db5760ff8160a01c166113c95764174876e80034106113b75760009182968392600160ff869260a01c161461113c575b855460ff8160a01c1660028110156111285715610ef4575b50610858575b968161083b60ff9899610808600080516020615ab88339815191529561381b565b5490600080516020615b3883398151915254908b8a5460a01c169260405196879660018060a01b03169a339a348961379a565b0390a46001600080516020615bf883398151915255829150610704565b6000805460ff60a01b1916600160a01b179055477f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15610ef057604051630d0e30db60e41b81528681600481857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610d1c57908791610edc575b50506108f430615573565b610948817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166158d0565b6109727f000000000000000000000000000000000000000000000000000000000000000030615751565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015610ed5577f0000000000000000000000000000000000000000000000000000000000000000905b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015610eaf57305b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015610e9e57815b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015610e97576aa56fa5b99019a5c8000000915b600254604051633850c7bd60e01b81526001600160a01b039091169060e081600481855afa908115610e8c578c91610dc6575b50516001600160a01b0390811690307f00000000000000000000000000000000000000000000000000000000000000009091161015610db4578b6d13c4b57968ceb7aab7ea377e80c95b6001600160a01b031692838303610d27575b5050505060405194610b0b866135d1565b60018060a01b0316855260018060a01b031660208501526101f46040850152620d899f196060850152620d89a0608085015260a084015260c08301528660e083015286610100830152306101208301524261014083015261014060405192634418b22b60e11b845260018060a01b03815116600485015260018060a01b03602082015116602485015262ffffff6040820151166044850152606081015160020b6064850152608081015160020b608485015260a081015160a485015260c081015160c485015260e081015160e485015261010081015161010485015260018060a01b03610120820151166101248501520151610144830152608082610164818a60018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215610d1c578792610cce575b5060ff989992600080516020615ab8833981519152949261083b92610c9c60018060a01b0360025416928d8c5460a01c16906040519384526aa56fa5b99019a5c800000060208501526040840152606083019061352b565b7f9b932ef08aec7b34ee4d1c09579d92521b437379b5cab356f34588f1cdbbf96860803092a3929998505091506107e7565b9091506080813d608011610d14575b81610cea6080938361363e565b81010312610d1057602081519101516001600160801b03811603610d10579060ff610c44565b8680fd5b3d9150610cdd565b6040513d89823e3d90fd5b604092849260c49285519687958694630251596160e31b865230600487015211602485015260646044850152606484015260a060848401528160a48401525af18015610da957610d7a575b808b81610afa565b604090813d8311610da2575b610d90818361363e565b81010312610d9e578d610d72565b8980fd5b503d610d86565b6040513d8d823e3d90fd5b8b6a0cf330de50b81bb3db441b610ae8565b905060e0813d60e011610e84575b81610de160e0938361363e565b81010312610e805760405190610df682613572565b80516001600160a01b0381168103610e7c57825260208101518060020b8103610e7c576020830152610e2a60408201615742565b6040830152610e3b60608201615742565b6060830152610e4c60808201615742565b608083015260a081015160ff81168103610e7c5760a0830152610e719060c001613701565b60c08201528f610a9e565b8d80fd5b8b80fd5b3d9150610dd4565b6040513d8e823e3d90fd5b8291610a6b565b6aa56fa5b99019a5c8000000610a2c565b7f00000000000000000000000000000000000000000000000000000000000000006109f9565b30906109c6565b610ee5906135a3565b610ef057858a6108e9565b8580fd5b60049950349897969550935084905080612710610f108a613842565b0494610f1c86346136f4565b600080516020615b388339815191525460405163486b050760e11b81529c8d0181905260248d01919091529060208c6044816001600160a01b0385165afa91821561111d5788999a9b9c89936110e6575b5082986110d5576b0295be96e6406697200000009283828103116110bf5781840381146110b6575b81840310610fec575b50505090610fb785610fb2889c988761566d565b614e83565b80156107e157600080808093875af1610fce61376a565b5015610fda57896107e1565b604051630db2c7f160e31b8152600490fd5b60405163447df22960e01b815260048101829052920360248301819052939b50929650945060209185915060449082906001600160a01b03165afa9283156110aa57600093611071575b5061104e61271061104685613842565b048094614e23565b97883411611061575b60018a8080610f9e565b5061106c88346136f4565b611057565b9092506020813d6020116110a2575b8161108d6020938361363e565b8101031261109d57519188611036565b600080fd5b3d9150611080565b6040513d6000823e3d90fd5b60019450610f95565b634e487b7160e01b600052601160045260246000fd5b60405162be12ab60e31b8152600490fd5b985091506020883d602011611115575b816111036020938361363e565b8101031261109d57889751918d610f6d565b3d91506110f6565b6040513d8a823e3d90fd5b634e487b7160e01b88526021600452602488fd5b97509250905061271061114e34613842565b049061115a82346136f4565b9261116483614e83565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561109d57604051630d0e30db60e41b8152600081600481887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156110aa576113a3575b5060405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201526024810185905260208180604481010381897f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561135f5761136a575b506112e9602060405161127781613572565b60018060a01b037f000000000000000000000000000000000000000000000000000000000000000016815230828201526101f4604082015260018060a01b03851660608201528660808201528760a08201528760c0820152604051809381926304e45aaf60e01b83526004830161370e565b0381897f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561135f57869161132d575b50976107c9565b90506020813d602011611357575b816113486020938361363e565b8101031261109d575189611326565b3d915061133b565b6040513d88823e3d90fd5b6020813d60201161139b575b816113836020938361363e565b81010312610ef05761139490613701565b5088611265565b3d9150611376565b6113ae9195506135a3565b600093886111df565b6040516303c2e61b60e61b8152600490fd5b60405163b7c0802f60e01b8152600490fd5b634e487b7160e01b600052602160045260246000fd5b90506020813d60201161142f575b8161140c6020938361363e565b8101031261142b57516001600160a01b038116810361142b57846106dd565b8280fd5b3d91506113ff565b6040513d85823e3d90fd5b6a0cf330de50b81bb3db441b90610669565b7f0000000000000000000000000000000000000000000000000000000000000000610624565b306105f1565b015190508680610574565b925060048652600080516020615bd88339815191529086935b601f19841685106114e6576001945083601f198116106114cd575b505050811b0160045561058a565b015160001960f88460031b161c191690558680806114bf565b818101518355602094850194600190930192909101906114a4565b90915060048652601f830160051c600080516020615bd8833981519152016020841061155e575b908392915b601f820160051c600080516020615bd8833981519152018110611550575061055e565b87815584935060010161152d565b50600080516020615bd8833981519152611528565b634e487b7160e01b85526041600452602485fd5b0151905088806104b6565b9250600080516020615b188339815191528852600080516020615bb88339815191529088935b601f1984168510611607576001945083601f198116106115ee575b505050811b01600080516020615b18833981519152556104d9565b015160001960f88460031b161c191690558880806115d3565b818101518355602094850194600190930192909101906115b8565b909150600080516020615b188339815191528852601f830160051c600080516020615bb8833981519152016020841061168c575b908392915b601f820160051c600080516020615bb883398151915201811061167e57506104a0565b89815584935060010161165b565b50600080516020615bb8833981519152611656565b634e487b7160e01b87526041600452602487fd5b015190508980610449565b9250600080516020615ad88339815191528952600080516020615a988339815191529089935b601f1984168510611735576001945083601f1981161061171c575b505050811b01600080516020615ad88339815191525561046c565b015160001960f88460031b161c19169055898080611701565b818101518355602094850194600190930192909101906116e6565b909150600080516020615ad88339815191528952601f830160051c600080516020615a9883398151915201602084106117ba575b908392915b601f820160051c600080516020615a988339815191520181106117ac5750610433565b8a8155849350600101611789565b50600080516020615a98833981519152611784565b634e487b7160e01b88526041600452602488fd5b7f000000000000000000000000000000000000000000000000000000000000000092506103ef565b604051639fabe1c160e01b8152600490fd5b68ffffffffffffffffff1986166801000000000000000117600080516020615c18833981519152556103c1565b60405163f92ee8a960e01b8152600490fd5b90501589610391565b303b159150610389565b604088901c60ff1615915061037f565b8480fd5b8380fd5b3461021f578060031936011261021f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461021f578060031936011261021f578060206040516118ea816135b6565b828152015260ff815460a01c16600281101561194e57604091508061193d57305b60208351611918816135b6565b8381520160018060a01b0380921681526119348451809461352b565b51166020820152f35b6002546001600160a01b031661190b565b634e487b7160e01b82526021600452602482fd5b3461021f578060031936011261021f5760206040516107d08152f35b3461021f576020908160031936011261021f57805460ff8160a01c166002811015611a4657600114611a345782600080516020615b3883398151915254604460405180948193631ccc5c5960e21b83526004830152600435602483015260018060a01b03165afa918215611a2857916119fb575b50604051908152f35b90508181813d8311611a21575b611a12818361363e565b8101031261109d5751826119f2565b503d611a08565b604051903d90823e3d90fd5b60405163032c737760e31b8152600490fd5b634e487b7160e01b83526021600452602483fd5b3461021f578060031936011261021f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461021f578060031936011261021f5760206040516113888152f35b3461021f578060031936011261021f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461021f57604036600319011261021f57611b24611b1a6134bc565b6024359033614b78565b602060405160018152f35b3461021f578060031936011261021f5760ff815460a01c16600281101561194e57600114611a3457308152600080516020615af883398151915260205260408120544791662386f26fc10000808410611bdb575b50670de0b6b3a764000091828102928184041490151715611bc757508115611bb15760209160405191048152f35b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b81526011600452602490fd5b925083611b83565b3461021f578060031936011261021f57604051600080516020615b188339815191528054826000611c1383613538565b9283835260209460019186600182169182600014611ca5575050600114611c5b575b5050611c439250038361363e565b611c5760405192828493845283019061347c565b0390f35b859250600052600080516020615bb8833981519152906000915b858310611c8d575050611c4393508201018580611c35565b80548389018501528794508693909201918101611c75565b9250935050611c4394915060ff191682840152151560051b8201018580611c35565b3461021f5760e036600319011261021f57600435611ce36134d2565b611ceb6134e8565b6064356001600160401b03811161187f57611d0a90369060040161367a565b608435936002851015610ef05760a435611d226136c1565b93611d2b614df3565b60ff885460a01c169660028810156120f75787036113c957338852600080516020615af8833981519152602098818a52604081205485116120e5576001600160a01b0388811697909490881561180b576001839b14611f12575b50815460ff8160a01c166002811015611efe57908c9115611e5a575b505050808080808c9487611db487613842565b61271090049d611dc58f80996136f4565b978892611dd1916151c0565b5af1611ddb61376a565b5015610fda5789967f0693c83d190a3d36d2ed6c3ac51b1335d2a3588d96f3f3601c8b1e780d0f952a96611e3d948a84528d5260408320549060ff600080516020615b3883398151915254945460a01c1694604051988998169c339b8961379a565b0390a46001600080516020615bf883398151915255604051908152f35b86939b506044600080516020615b38833981519152546040519586938492633079372f60e21b845260048401528b6024840152165afa918215611ef3578a92611ec4575b5081106110d55764174876e80081106113b757611ebb8533614ccc565b978a8a81611da1565b9091508a81813d8311611eec575b611edc818361363e565b8101031261109d5751908b611e9e565b503d611ed2565b6040513d8c823e3d90fd5b634e487b7160e01b84526021600452602484fd5b909950611f20863033614b78565b60405163095ea7b360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811660048301526024820188905291908c8160448187305af180156120da57928c928e92899695612094575b5090611ffe918660405191611f9683613572565b308352817f0000000000000000000000000000000000000000000000000000000000000000169687878501526101f460408501523060608501528d608085015260a08401521660c0820152856040519788809581946304e45aaf60e01b83526004830161370e565b0393165af192831561205a578293612065575b50803b1561021b57818091602460405180948193632e1a7d4d60e01b83528860048401525af1801561205a5761204b575b5090988b611d85565b612054906135a3565b8b612042565b6040513d84823e3d90fd5b9092508b81813d831161208d575b61207d818361363e565b8101031261021b5751918c612011565b503d612073565b928092959650839194503d83116120d3575b6120b0818361363e565b8101031261188357611ffe8794938d938f936120cb90613701565b509091611f82565b503d6120a6565b6040513d86823e3d90fd5b60405163bb55fd2760e01b8152600490fd5b634e487b7160e01b89526021600452602489fd5b3461021f576020908160031936011261021f57805460ff8160a01c166002811015611a4657600114611a345782600080516020615b3883398151915254604460405180948193633079372f60e21b83526004830152600435602483015260018060a01b03165afa918215611a2857809261218a575b5050604051908152f35b9091508282813d83116121b3575b6121a2818361363e565b8101031261021f5750518280612180565b503d612198565b3461021f57602036600319011261021f576020906040906001600160a01b036121e16134bc565b168152600080516020615af883398151915283522054604051908152f35b3461021f578060031936011261021f57602060405160648152f35b3461021f576020908160031936011261021f57805460ff8160a01c166002811015611a4657600114611a345782600080516020615b388339815191525460446040518094819363486b050760e11b83526004830152600435602483015260018060a01b03165afa918215611a2857809261218a575050604051908152f35b3461021f578060031936011261021f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461021f578060031936011261021f576001546040516001600160a01b039091168152602090f35b60e036600319011261021f576123186134bc565b6123206134d2565b906123296134e8565b6064356001600160401b03811161187f5761234890369060040161367a565b608435916002831015610ef05761235d6136c1565b9186612367614df3565b60ff815460a01c1694600286101561194e5785036113c95764174876e80034106113b7576001600160a01b0386161561180b578094819782956001849314612cc3575b50895460ff8160a01c166002811015612caf5715612aae575b5050612428575b50600080516020615ab883398151915291611e3d87926020996123ec8961381b565b549160ff600080516020615b3883398151915254925460a01c169260405196879660018060a01b03169b60018060a01b03169a339a348961379a565b805460ff60a01b1916600160a01b179055477f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15612aaa57604051630d0e30db60e41b815288908181600481867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561205a57612a96575b50506124c130615573565b612515817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166158d0565b61253f7f000000000000000000000000000000000000000000000000000000000000000030615751565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015612a8f577f0000000000000000000000000000000000000000000000000000000000000000905b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015612a6957305b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015612a5857815b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015612a51576aa56fa5b99019a5c8000000915b600254604051633850c7bd60e01b81526001600160a01b03909116908d9060e081600481865afa918215611a28579161298f575b50516001600160a01b0390811690307f0000000000000000000000000000000000000000000000000000000000000000909116101561297d578d6d13c4b57968ceb7aab7ea377e80c95b6001600160a01b0316928383036128f4575b50505050604051946126d9866135d1565b60018060a01b0316855260018060a01b031660208501526101f46040850152620d899f196060850152620d89a0608085015260a084015260c08301528860e083015288610100830152306101208301524261014083015261014060405192634418b22b60e11b845260018060a01b03815116600485015260018060a01b03602082015116602485015262ffffff6040820151166044850152606081015160020b6064850152608081015160020b608485015260a081015160a485015260c081015160c485015260e081015160e485015261010081015161010485015260018060a01b03610120820151166101248501520151610144830152608082610164818c60018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156128e957899261289c575b508792602099600080516020615ab88339815191529593611e3d9361286b60018060a01b03600254169260ff855460a01c16906040519384528f6aa56fa5b99019a5c8000000908501526040840152606083019061352b565b7f9b932ef08aec7b34ee4d1c09579d92521b437379b5cab356f34588f1cdbbf96860803092a39950925050916123ca565b9091506080813d6080116128e1575b816128b86080938361363e565b810103126128dd57602081519101516001600160801b038116036128dd579087612812565b8880fd5b3d91506128ab565b6040513d8b823e3d90fd5b604092849260c49285519687958694630251596160e31b865230600487015211602485015260646044850152606484015260a060848401528160a48401525af1801561297257612947575b808d816126c8565b604090813d831161296b575b61295d818361363e565b81010312610e80578c61293f565b503d612953565b6040513d8f823e3d90fd5b8d6a0cf330de50b81bb3db441b6126b6565b905060e0813d60e011612a49575b816129aa60e0938361363e565b81010312610e7c57604051906129bf82613572565b80516001600160a01b0381168103612a4557825260208101518060020b8103612a455760208301526129f360408201615742565b6040830152612a0460608201615742565b6060830152612a1560808201615742565b608083015260a081015160ff81168103612a455760a0830152612a3a9060c001613701565b60c08201528e61266c565b8f80fd5b3d915061299d565b8291612638565b6aa56fa5b99019a5c80000006125f9565b7f00000000000000000000000000000000000000000000000000000000000000006125c6565b3090612593565b612a9f906135a3565b612aaa5787896124b6565b8780fd5b8a9950349897509550889150612710612ac689613842565b0491612ad283346136f4565b600080516020615b388339815191525460405163486b050760e11b815260048101829052602481019290925297906020816044816001600160a01b0386165afa908115610e8c578c91612c7d575b50809860a43582106110d5576b0295be96e640669720000000918282810311612c69578183038114612c60575b81830310612ba1575b50505090899a612b77878a9b9c9495612b72819b809f9d61566d565b6151c0565b80612b83575b506123c3565b8280929181925af1612b9361376a565b5015610fda57888a80612b7d565b60405163447df22960e01b815260048101829052910360248201819052909c9a5097509192506020918b915060449082906001600160a01b03165afa98891561111d578899612c2c575b50978786979899612c0161271061104685613842565b998a3411612c1c575b9a999850905060018a612b7787612b56565b50612c278a346136f4565b612c0a565b98506020893d602011612c58575b81612c476020938361363e565b8101031261021b5797519787612beb565b3d9150612c3a565b60019450612b4d565b634e487b7160e01b8e52601160045260248efd5b90506020813d602011612ca7575b81612c986020938361363e565b81010312610ef057518d612b20565b3d9150612c8b565b634e487b7160e01b8c52602160045260248cfd5b965097509350612710612cd534613842565b0493612ce185346136f4565b95612cec85876151c0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561142b57604051630d0e30db60e41b815283816004818b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156120da57612f32575b5060405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602481018890526020818c81806044810103917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610da957612eee575b506020612e779160405190612e0182613572565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116835230848401526101f46040808501919091528c82166060850152608084018c905260a43560a0850152911660c0830152516304e45aaf60e01b81529283918291906004830161370e565b03818d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115611ef3578a91612ebc575b50978a6123aa565b90506020813d602011612ee6575b81612ed76020938361363e565b8101031261142b57518a612eb4565b3d9150612eca565b6020813d602011612f2a575b81612f076020938361363e565b81010312612f2657612e7791612f1e602092613701565b509150612ded565b8a80fd5b3d9150612efa565b612f3d919a506135a3565b81988a612d66565b3461021f57602036600319011261021f5760ff815460a01c16600281101561194e5715612f7b57612f7860043533614ccc565b80f35b604051630522bdf560e31b8152600490fd5b3461021f578060031936011261021f5760405190808260045491612fb083613538565b9283835260209460019186600182169182600014611ca5575050600114612fdf575050611c439250038361363e565b9085925060048252600080516020615bd88339815191525b85831061300f575050611c4393508201018580611c35565b80548389018501528794508693909201918101612ff7565b3461021f576020908160031936011261021f57805460ff8160a01c166002811015611a4657600114611a345782600080516020615b388339815191525460446040518094819363447df22960e01b83526004830152600435602483015260018060a01b03165afa918215611a2857809261218a575050604051908152f35b3461021f578060031936011261021f5760206040516b033b2e3c9fd0803ce80000008152f35b3461021f578060031936011261021f57602060405160128152f35b3461021f578060031936011261021f5760ff6020915460a01c1661310d604051809261352b565bf35b3461021f578060031936011261021f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461021f57606036600319011261021f5761316c6134bc565b6131746134d2565b60443591613181816137e2565b3385526020526040842054600181016131a0575b50611b249350614b78565b83811061320f576001600160a01b038216156131f65733156131dd5793604084611b24966131cd856137e2565b3385526020520391205584613195565b604051634a1406b160e11b815260048101869052602490fd5b60405163e602df0560e01b815260048101869052602490fd5b604051637dc7a0d960e11b8152336004820152602481019190915260448101849052606490fd5b3461021f578060031936011261021f576020600080516020615b3883398151915254604051908152f35b3461021f578060031936011261021f576002546040516001600160a01b039091168152602090f35b3461021f57608036600319011261021f576132a16134bc565b506132aa6134d2565b506064356001600160401b03811161021b576132ca9036906004016134fe565b50506002546001600160a01b031633036132f057604051630a85bd0160e11b8152602090f35b604051634b60273560e01b8152600490fd5b3461021f57604036600319011261021f5761331b6134bc565b602435903315613399576001600160a01b03169182156133815760408291613342336137e2565b85825260205220556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b60249060405190634a1406b160e11b82526004820152fd5b60405163e602df0560e01b815260048101849052602490fd5b903461021f578060031936011261021f578082600080516020615ad88339815191529283546133e081613538565b9384845260209560019287600182169182600014613458575050600114613411575b505050611c439250038361363e565b815285925090600080516020615a988339815191525b858310613440575050611c439350820101858080613402565b80548389018501528794508693909201918101613427565b935094505050611c4394915060ff191682840152151560051b820101858080613402565b919082519283825260005b8481106134a8575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201613487565b600435906001600160a01b038216820361109d57565b602435906001600160a01b038216820361109d57565b604435906001600160a01b038216820361109d57565b9181601f8401121561109d578235916001600160401b03831161109d576020838186019501011161109d57565b9060028210156113db5752565b90600182811c92168015613568575b602083101461355257565b634e487b7160e01b600052602260045260246000fd5b91607f1691613547565b60e081019081106001600160401b0382111761358d57604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161358d57604052565b604081019081106001600160401b0382111761358d57604052565b61016081019081106001600160401b0382111761358d57604052565b602081019081106001600160401b0382111761358d57604052565b60a081019081106001600160401b0382111761358d57604052565b608081019081106001600160401b0382111761358d57604052565b90601f801991011681019081106001600160401b0382111761358d57604052565b6001600160401b03811161358d57601f01601f191660200190565b81601f8201121561109d578035906136918261365f565b9261369f604051948561363e565b8284526020838301011161109d57816000926020809301838601378301015290565b60c435906001600160a01b038216820361109d57565b3461109d57600036600319011261109d5760206040516105dc8152f35b919082039182116110bf57565b5190811515820361109d57565b91909160c060e08201938160018060a01b039182815116855282602082015116602086015262ffffff60408201511660408601528260608201511660608601526080810151608086015260a081015160a0860152015116910152565b3d15613795573d9061377b8261365f565b91613789604051938461363e565b82523d6000602084013e565b606090565b939460e0956137d3946137e0999b9a989461010094885260208801526040870152606086015260808501528060a085015283019061347c565b9560c0820152019061352b565b565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b03166000908152600080516020615af88339815191526020526040902090565b906064820291808304606414901517156110bf57565b906105dc918281029281840414901517156110bf57565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146137e05760ff60005460a01c166040516138b4816135ed565b600081526000916138c3614df3565b60ff60005460a01c169060028110156113db5760028210156113db5781036113c95764174876e80034106113b757331561180b57600091600090600092600160009114614572575b855460ff8160a01c1660028110156111285715613ff6575b50613988575b600080516020615ab8833981519152916139716139453361381b565b5492600080516020615b388339815191525460ff895460a01c1691604051958695339a339a348961379a565b0390a46001600080516020615bf883398151915255565b6000805460ff60a01b1916600160a01b17905547917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15610ef057604051630d0e30db60e41b81528681600481877f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610d1c57908791613fe2575b5050613a2530615573565b613a79837f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166158d0565b613aa37f000000000000000000000000000000000000000000000000000000000000000030615751565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015613fdb577f0000000000000000000000000000000000000000000000000000000000000000925b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015613fb557305b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015613fa457815b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161015613f9d576aa56fa5b99019a5c8000000915b600254604051633850c7bd60e01b81526001600160a01b039091169060e081600481855afa908115610e8c578c91613edf575b50516001600160a01b0390811690307f00000000000000000000000000000000000000000000000000000000000000009091161015613ecd578b6d13c4b57968ceb7aab7ea377e80c95b6001600160a01b031692838303613e4f575b5050505060405196613c3c886135d1565b60018060a01b0316875260018060a01b031660208701526101f46040870152620d899f196060870152620d89a0608087015260a086015260c08501528660e085015286610100850152306101208501524261014085015261014060405194634418b22b60e11b865260018060a01b03815116600487015260018060a01b03602082015116602487015262ffffff6040820151166044870152606081015160020b6064870152608081015160020b608487015260a081015160a487015260c081015160c487015260e081015160e487015261010081015161010487015260018060a01b03610120820151166101248701520151610144850152608084610164818a60018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610d1c578791613df4575b6002548854604080519384526aa56fa5b99019a5c80000006020850152830193909352600080516020615ab883398151915295506001600160a01b031691613dc790606083019060a01c60ff1661352b565b7f9b932ef08aec7b34ee4d1c09579d92521b437379b5cab356f34588f1cdbbf96860803092a39150613929565b91929390506080813d608011613e47575b81613e126080938361363e565b81010312610d1057602081519101516001600160801b03811603610d1057600080516020615ab8833981519152939291613d75565b3d9150613e05565b604092849260c49285519687958694630251596160e31b865230600487015211602485015260646044850152606484015260a060848401528160a48401525af18015610da957613ea2575b808b81613c2b565b604090813d8311613ec6575b613eb8818361363e565b81010312610d9e5738613e9a565b503d613eae565b8b6a0cf330de50b81bb3db441b613c19565b905060e0813d60e011613f95575b81613efa60e0938361363e565b81010312610e805760405190613f0f82613572565b80516001600160a01b0381168103610e7c57825260208101518060020b8103610e7c576020830152613f4360408201615742565b6040830152613f5460608201615742565b6060830152613f6560808201615742565b608083015260a081015160ff81168103610e7c5760a0830152613f8a9060c001613701565b60c082015238613bcf565b3d9150613eed565b8291613b9c565b6aa56fa5b99019a5c8000000613b5d565b7f0000000000000000000000000000000000000000000000000000000000000000613b2a565b3092613af7565b613feb906135a3565b610ef0578538613a1a565b9695945050915050818291349161271061400f34613842565b049361401b85346136f4565b600080516020615b388339815191525460405163486b050760e11b8152600481018290526024810192909252909860208a6044816001600160a01b0385165afa91821561111d5788999a899361453b575b5082986110d5576b0295be96e6406697200000009283828103116110bf578184038114614532575b81840310614481575b50505090846140ae8795973361566d565b6113889081810291811590828404148117156110bf576127106140d083613858565b04916127106140de82613858565b04916107d0908282810204821417156110bf576141126127108284020461410d8561410d886127108b04614e23565b614e23565b916040519261412084613608565b60048452608036602086013760405161413881613608565b6004815260803660208301376040519061415182613608565b6004825260803660208401376003546001600160a01b031661417287614e30565b52612710890461418182614e30565b526303a5d31160e21b61419383614e30565b526001546001600160a01b03166141a987614e53565b52876141b482614e53565b526305c67f0f60e01b6141c683614e53565b526141d086614e63565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690528661420682614e63565b52622eb61160e21b61421783614e63565b527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661424b87614e73565b526127108585020461425c82614e73565b5263105b063b60e21b61426e83614e73565b527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561109d5760405163300def9560e01b81526080600482015286516084820181905290968793929160a48501916020019060005b81811061445f575050506003198482030160248501526020808351928381520192019060005b818110614446575050506003198382030160448401526020808351928381520192019060005b818110614423575050509181602084600083819703916003198301606486015252019160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156110aa5761271093614414575b50600354600154604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168083529a889004602083015291810198909852606088019690965292909102929092046080850152821692911690600080516020615b788339815191529060a090a4801561392357600080808093335af161440861376a565b5015610fda5738613923565b61441d906135a3565b38614378565b82516001600160e01b03191684528894506020938401939092019160010161431a565b82518452899550602093840193909201916001016142f4565b82516001600160a01b031684528a9650602093840193909201916001016142ce565b60405163447df22960e01b815260048101829052920360248301819052975090955091935060209185915060449082906001600160a01b03165afa9283156110aa576000936144fe575b506144db61271061104685613842565b918234116144ee575b600138808061409d565b506144f982346136f4565b6144e4565b9092506020813d60201161452a575b8161451a6020938361363e565b8101031261109d575191386144cb565b3d915061450d565b60019450614094565b985091506020883d60201161456a575b816145586020938361363e565b8101031261109d57889751913861406c565b3d915061454b565b925092505061271061458334613842565b049061458f82346136f4565b9261138880840290841590858304148117156110bf576127106145b186613858565b04906127106145bf87613858565b04906107d0908782810204821417156110bf576145ee6127108289020461410d8461410d876127108a04614e23565b90604051916145fc83613608565b60048352608036602085013760405161461481613608565b6004815260803660208301376040519061462d82613608565b6004825260803660208401376003546001600160a01b031661464e86614e30565b52612710880461465d82614e30565b526303a5d31160e21b61466f83614e30565b526001546001600160a01b031661468586614e53565b528661469082614e53565b526305c67f0f60e01b6146a283614e53565b526146ac85614e63565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169052856146e282614e63565b52622eb61160e21b6146f383614e63565b527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661472786614e73565b52612710848c020461473882614e73565b5263105b063b60e21b61474a83614e73565b527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561109d5760405163300def9560e01b81526080600482015285516084820181905290958693929160a48501916020019060005b818110614b56575050506003198482030160248501526020808351928381520192019060005b818110614b3d575050506003198382030160448401526020808351928381520192019060005b818110614b1a575050509181602084600083819703916003198301606486015252019160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156110aa5761271092614b0b575b50600354600154604080516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116808352998790046020830152918101979097526060870195909552918902929092046080850152821692911690600080516020615b788339815191529060a090a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561109d57604051630d0e30db60e41b8152600081600481887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156110aa57614af7575b5060405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201526024810185905260208180604481010381897f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561135f57614abe575b50614a4860206040516149de81613572565b60018060a01b037f000000000000000000000000000000000000000000000000000000000000000016815230828201526101f460408201523360608201528660808201528760a08201528760c0820152604051809381926304e45aaf60e01b83526004830161370e565b0381897f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561135f578691614a8c575b509161390b565b90506020813d602011614ab6575b81614aa76020938361363e565b8101031261109d575138614a85565b3d9150614a9a565b6020813d602011614aef575b81614ad76020938361363e565b81010312610ef057614ae890613701565b50386149cc565b3d9150614aca565b614b029195506135a3565b60009338614946565b614b14906135a3565b38614854565b82516001600160e01b0319168452879450602093840193909201916001016147f6565b82518452889550602093840193909201916001016147d0565b82516001600160a01b03168452899650602093840193909201916001016147aa565b916001600160a01b03808416928315614cb3578116938415614c9a5760009160ff835460a01c166002811015611efe57159081614c8c575b50612f7b57838252600080516020615af8833981519152806020526040918284205490858210614c5b575091839185600080516020615b58833981519152969488608097528260205203828420558783528183208481540190558787600080516020615b9883398151915260208551888152a3868352602052808083205492888152205490600080516020615b388339815191525492815194855260208501528301526060820152a3565b835163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101859052606490fd5b905060025416851438614bb0565b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b6001600160a01b0391818316918215614cb35760009360ff855460a01c166002811015614ddf57159081614dd2575b50612f7b57828452600080516020615af883398151915290816020526040908186205490848210614da15750918391600080516020615b5883398151915294608094878952836020520381882055600080516020615b3883398151915291838354038093558787600080516020615b9883398151915260208551888152a386885260205280872054908780528088205491815194855260208501528301526060820152a3565b825163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101849052606490fd5b9050600254161538614cfb565b634e487b7160e01b86526021600452602486fd5b600080516020615bf88339815191526002815414614e115760029055565b604051633ee5aeb560e01b8152600490fd5b919082018092116110bf57565b805115614e3d5760200190565b634e487b7160e01b600052603260045260246000fd5b805160011015614e3d5760400190565b805160021015614e3d5760600190565b805160031015614e3d5760800190565b6113889081810291811590828404148117156110bf576127108093049280614eaa84613858565b049281614eb682613858565b04926107d08083029283041417156110bf57614edc82820461410d8561410d888a614e23565b9460405192614eea84613608565b6004845260208401966080368937604051614f0481613608565b6004815260208101608036823760405190614f1e82613608565b60048252602082019160803684376003546001600160a01b0316614f418a614e30565b5286614f4c85614e30565b526303a5d31160e21b614f5e82614e30565b526001546001600160a01b0316614f748a614e53565b528a614f7f85614e53565b526305c67f0f60e01b614f9182614e53565b52614f9b89614e63565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316908190529b8a614fd486614e63565b52622eb61160e21b614fe583614e63565b528c614ff08b614e73565b52868904614ffd86614e73565b5263105b063b60e21b61500f83614e73565b527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561109d5760405163300def9560e01b815260806004820152995160848b018190528a959493929160a487019160005b81811061519e5750505060206003199586888403016024890152519182815201929060005b8181106151855750505060209084868403016044870152519182815201919060005b81811061516257505050602060009492858386809503928301606486015252019160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156110aa57600080516020615b788339815191529460a094615153575b50600180851b036003541695600180861b036001541697604051948a8652602086015260408501526060840152046080820152a4565b61515c906135a3565b3861511d565b82516001600160e01b03191684528a9550602093840193909201916001016150b2565b825185528c975060209485019490920191600101615090565b82516001600160a01b031684528d98506020938401939092019160010161506b565b906001600160a01b0381161561554c575b61138880830292801591818504148217156110bf5761271090816151f482613858565b04938261520083613858565b04936107d08084029384041417156110bf5761522883830461410d8661410d89888c04614e23565b926040519361523685613608565b60048552608036602087013760405161524e81613608565b6004815260803660208301376040519061526782613608565b6004825260803660208401376003546001600160a01b031661528888614e30565b52838a0461529582614e30565b526303a5d31160e21b6152a783614e30565b526001546001600160a01b03166152bd88614e53565b52886152c882614e53565b526305c67f0f60e01b6152da83614e53565b526152e487614e63565b6001600160a01b0386169052876152fa82614e63565b52622eb61160e21b61530b83614e63565b5261531587614e73565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316905283860461534d82614e73565b5263105b063b60e21b61535f83614e73565b527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561109d5760405163300def9560e01b81526080600482015287516084820181905290978893929160a48501916020019060005b81811061552a575050506003198482030160248501526020808351928381520192019060005b818110615511575050506003198382030160448401526020808351928381520192019060005b8181106154ee575050509181602084600083819703916003198301606486015252019160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156110aa57600080516020615b788339815191529460a0946154df575b50600180851b036003541695600180861b036001541697836040519a600180891b037f0000000000000000000000000000000000000000000000000000000000000000168c520460208b015260408a01526060890152046080870152600180831b031694a4565b6154e8906135a3565b38615478565b82516001600160e01b03191684528994506020938401939092019160010161540b565b825184528a9550602093840193909201916001016153e5565b82516001600160a01b031684528b9650602093840193909201916001016153bf565b507f00000000000000000000000000000000000000000000000000000000000000006151d1565b6001600160a01b03908116908115614c9a5760009060ff825460a01c166002811015611a465715908161565f575b50612f7b57600080516020615b388339815191528054906aa56fa5b99019a5c80000009182810180911161564b579181600080516020615b588339815191529360809355858552600080516020615af883398151915290816020526040918287208481540190558787600080516020615b9883398151915260208651888152a3868052602052818620549187875280872054915492815194855260208501528301526060820152a3565b634e487b7160e01b84526011600452602484fd5b9050600254168214386155a1565b6001600160a01b03908116918215614c9a5760009160ff835460a01c166002811015611efe57159081615734575b50612f7b576080600080516020615b5883398151915291600080516020615b388339815191526156cc828254614e23565b8155858552600080516020615af883398151915290816020526040918287208481540190558787600080516020615b9883398151915260208651888152a3868052602052818620549187875280872054915492815194855260208501528301526060820152a3565b90506002541683143861569b565b519061ffff8216820361109d57565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301819052939192919060209083168185604481845afa9485156110aa576000956158a1575b506aa56fa5b99019a5c800000085018095116110bf5760405163095ea7b360e01b8382018181526001600160a01b0390951660248301526044820196909652949260009081906157f488606481015b03601f1981018a528961363e565b87519082855af19061580461376a565b82615867575b508161585c575b501561581f575b5050505050565b6158529461584d92604051928301526024820152600060448201526044815261584781613623565b826159ba565b6159ba565b3880808080615818565b90503b151538615811565b8091925051838115918215615882575b50509050903861580a565b838092935001031261109d57826158999101613701565b808338615877565b9094508181813d83116158c9575b6158b9818361363e565b8101031261109d57519338615797565b503d6158af565b604051636eb1769f60e11b81523060048201526001600160a01b03808416602483018190529490831693916020918282604481895afa80156110aa5760009061595c575b61591e9250614e23565b60405163095ea7b360e01b8382018181526001600160a01b039095166024830152604482019290925294909260009081906157f488606481016157e6565b508282813d8311615984575b615972818361363e565b8101031261109d5761591e9151615914565b503d615968565b60ff600080516020615c188339815191525460401c16156159a857565b604051631afcd79f60e31b8152600490fd5b6000806159e39260018060a01b03169360208151910182865af16159dc61376a565b9083615a34565b8051908115159182615a11575b50506159f95750565b60249060405190635274afe760e01b82526004820152fd5b819250906020918101031261109d576020615a2c9101613701565b1538806159f0565b90615a5b5750805115615a4957805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580615a8e575b615a6c575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15615a6456fe2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab049c4606c4f7f601127761fb65a512e6bca424f62b165476cf1cfdfa51772a6ab52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0452c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02d19736ba1cd2ffc8c99f90d6c6163e59274d333c89e471cd6668d93849835ac5f349fe0373a901f0506d5343f4a872f385a7f0c26371d7b9e6bf5584b69d75fcddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220aa545f820ae5e00a748d54129883606154b8bdf1b9933155401f303249c0c9ec64736f6c63430008190033000000000000000000000000c1f98958fd29e9f2a5a4a01e9330263944c9b6d20000000000000000000000007777777f279eba3d3ad8f4e708545291a6fdba8b000000000000000000000000420000000000000000000000000000000000000600000000000000000000000003a520b32c04bf3beef7beb72e919cf822ed34f10000000000000000000000002626664c2603336e57b271c5c0b26f421741e481