[ { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "address", "name": "_WETH9", "type": "address" }, { "internalType": "address", "name": "_tokenDescriptor", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Collect", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "DecreaseLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "IncreaseLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenDescriptor", "type": "address" } ], "name": "TokenDescriptorChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" } ], "name": "TransferOwnership", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "WETH9", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint128", "name": "amount0Max", "type": "uint128" }, { "internalType": "uint128", "name": "amount1Max", "type": "uint128" } ], "internalType": "struct INonfungiblePositionManager.CollectParams", "name": "params", "type": "tuple" } ], "name": "collect", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct INonfungiblePositionManager.DecreaseLiquidityParams", "name": "params", "type": "tuple" } ], "name": "decreaseLiquidity", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct INonfungiblePositionManager.IncreaseLiquidityParams", "name": "params", "type": "tuple" } ], "name": "increaseLiquidity", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "int24", "name": "tickSpacing", "type": "int24" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" } ], "internalType": "struct INonfungiblePositionManager.MintParams", "name": "params", "type": "tuple" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "positions", "outputs": [ { "internalType": "uint96", "name": "nonce", "type": "uint96" }, { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "int24", "name": "tickSpacing", "type": "int24" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "feeGrowthInside0LastX128", "type": "uint256" }, { "internalType": "uint256", "name": "feeGrowthInside1LastX128", "type": "uint256" }, { "internalType": "uint128", "name": "tokensOwed0", "type": "uint128" }, { "internalType": "uint128", "name": "tokensOwed1", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "refundETH", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowed", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowedIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenDescriptor", "type": "address" } ], "name": "setTokenDescriptor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "sweepToken", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenDescriptor", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "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": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Owed", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Owed", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3MintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "unwrapWETH9", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "pool", "type": "address" } ], "name": "userPositions", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
610100604052600f80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b50604051620063ff380380620063ff833981016040819052620000579162000349565b84848383604051806040016040528060018152602001603160f81b81525082826200008f6301ffc9a760e01b6200016060201b60201c565b8151620000a4906006906020850190620001e5565b508051620000ba906007906020840190620001e5565b50620000cd6380ac58cd60e01b62000160565b620000df635b5e139f60e01b62000160565b620000f163780e9d6360e01b62000160565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c052911b1660e05250506001600a55601080546001600160a01b039586166001600160a01b031991821617909155601180549290951691161790925550620003fa9050565b6001600160e01b03198082161415620001c0576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200021d576000855562000268565b82601f106200023857805160ff191683800117855562000268565b8280016001018555821562000268579182015b82811115620002685782518255916020019190600101906200024b565b50620002769291506200027a565b5090565b5b808211156200027657600081556001016200027b565b80516001600160a01b0381168114620002a957600080fd5b919050565b600082601f830112620002bf578081fd5b81516001600160401b0380821115620002d457fe5b6040516020601f8401601f1916820181018381118382101715620002f457fe5b60405283825285840181018710156200030b578485fd5b8492505b838310156200032e57858301810151828401820152918201916200030f565b838311156200033f57848185840101525b5095945050505050565b60008060008060008060c0878903121562000362578182fd5b6200036d8762000291565b95506200037d6020880162000291565b94506200038d6040880162000291565b93506200039d6060880162000291565b60808801519093506001600160401b0380821115620003ba578384fd5b620003c88a838b01620002ae565b935060a0890151915080821115620003de578283fd5b50620003ed89828a01620002ae565b9150509295509295509295565b60805160a05160c05160601c60e05160601c615f836200047c600039806102655280611684528061170e52806117a05280613e8b5280613ed15280613f45525080610a185280610f1d52806114c852806121235280612263528061289e528061296f5280612c79528061465552508061135f52508061133e5250615f836000f3fe6080604052600436106102555760003560e01c80636c0360eb11610139578063b5007d1f116100b6578063c87b56dd1161007a578063c87b56dd146106aa578063d3487997146106ca578063df2ab5bb146106ea578063e985e9c5146106fd578063f3995c671461071d578063fc6f78651461073057610291565b8063b5007d1f1461061f578063b6dc7ea314610642578063b88d4fde14610662578063c2e3140a14610682578063c45a01551461069557610291565b80639785a7df116100fd5780639785a7df1461056757806399fbab8814610594578063a22cb465146105cc578063a4a78f0c146105ec578063ac9650d8146105ff57610291565b80636c0360eb146104f557806370a082311461050a5780637ac2ff7b1461052a5780638da5cb5b1461053d57806395d89b411461055257610291565b80632f745c59116101d25780634659a494116101965780634659a4941461046557806349404b7c146104785780634aa4a4fc1461048b5780634f6ccce7146104a05780635a9d7a68146104c05780636352211e146104d557610291565b80632f745c59146103e857806330adf81f146104085780633644e5151461041d57806342842e0e1461043257806342966c681461045257610291565b806312210e8a1161021957806312210e8a1461035c57806313af40351461036457806318160ddd14610384578063219f5d17146103a657806323b872dd146103c857610291565b806301ffc9a71461029657806306fdde03146102cc578063081812fc146102ee578063095ea7b31461031b5780630c49ccbe1461033b57610291565b3661029157336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461028f57600080fd5b005b600080fd5b3480156102a257600080fd5b506102b66102b13660046154da565b610743565b6040516102c39190615aa0565b60405180910390f35b3480156102d857600080fd5b506102e1610766565b6040516102c39190615b35565b3480156102fa57600080fd5b5061030e6103093660046157ab565b6107fc565b6040516102c391906158ce565b34801561032757600080fd5b5061028f61033636600461539f565b610833565b61034e61034936600461559f565b610909565b6040516102c3929190615b27565b61028f610d97565b34801561037057600080fd5b5061028f61037f36600461521b565b610e0b565b34801561039057600080fd5b50610399610e7f565b6040516102c39190615aab565b6103b96103b43660046155b0565b610e90565b6040516102c393929190615b86565b3480156103d457600080fd5b5061028f6103e336600461528b565b611273565b3480156103f457600080fd5b5061039961040336600461539f565b6112ca565b34801561041457600080fd5b506103996112f5565b34801561042957600080fd5b50610399611319565b34801561043e57600080fd5b5061028f61044d36600461528b565b6113d7565b61028f6104603660046157ab565b6113f2565b61028f61047336600461540b565b61156a565b61028f6104863660046157c3565b611604565b34801561049757600080fd5b5061030e61179e565b3480156104ac57600080fd5b506103996104bb3660046157ab565b6117c2565b3480156104cc57600080fd5b5061030e6117d8565b3480156104e157600080fd5b5061030e6104f03660046157ab565b6117e7565b34801561050157600080fd5b506102e161180f565b34801561051657600080fd5b5061039961052536600461521b565b611814565b61028f61053836600461540b565b61187c565b34801561054957600080fd5b5061030e611b59565b34801561055e57600080fd5b506102e1611b68565b34801561057357600080fd5b50610587610582366004615253565b611bc9565b6040516102c39190615a5c565b3480156105a057600080fd5b506105b46105af3660046157ab565b611bfa565b6040516102c39c9b9a99989796959493929190615bcb565b3480156105d857600080fd5b5061028f6105e7366004615372565b611df2565b61028f6105fa36600461540b565b611ef7565b61061261060d36600461546b565b611f90565b6040516102c391906159fc565b61063261062d366004615672565b6120d9565b6040516102c39493929190615ba7565b34801561064e57600080fd5b5061028f61065d36600461521b565b6126f6565b34801561066e57600080fd5b5061028f61067d3660046152cb565b6127af565b61028f61069036600461540b565b61280d565b3480156106a157600080fd5b5061030e61289c565b3480156106b657600080fd5b506102e16106c53660046157ab565b6128c0565b3480156106d657600080fd5b5061028f6106e536600461580a565b61295a565b61028f6106f83660046153ca565b6129d1565b34801561070957600080fd5b506102b6610718366004615253565b612acf565b61028f61072b36600461540b565b612afd565b61034e61073e366004615588565b612b6f565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b600061080782613371565b61081057600080fd5b506000908152600d6020526040902054600160601b90046001600160a01b031690565b600061083e826117e7565b9050806001600160a01b0316836001600160a01b031614156108915760405162461bcd60e51b8152600401808060200182810382526021815260200180615efc6021913960400191505060405180910390fd5b806001600160a01b03166108a361337e565b6001600160a01b031614806108bf57506108bf8161071861337e565b6108fa5760405162461bcd60e51b8152600401808060200182810382526038815260200180615e266038913960400191505060405180910390fd5b6109048383613382565b505050565b600080823561091833826133f8565b61092157600080fd5b83608001358061092f61349c565b111561093a57600080fd5b600061094c6040870160208801615684565b6001600160801b03161161095f57600080fd5b84356000908152600d602090815260409182902060018101549092600160801b9091046001600160801b03169161099a918901908901615684565b6001600160801b0316816001600160801b031610156109b857600080fd5b6001808301546001600160501b03166000908152600c60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b909104600290810b810b900b90830152610a3d7f0000000000000000000000000000000000000000000000000000000000000000836134a0565b60018501549091506001600160a01b0382169063a34123a790600160501b8104600290810b91600160681b9004900b610a7c60408e0160208f01615684565b6040518463ffffffff1660e01b8152600401610a9a93929190615acd565b6040805180830381600087803b158015610ab357600080fd5b505af1158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb91906157e7565b909850965060408901358810801590610b08575088606001358710155b610b1157600080fd5b600184015460009081906001600160a01b0384169063514ea4bf90610b4d903090600160501b8104600290810b91600160681b9004900b613582565b6040518263ffffffff1660e01b8152600401610b699190615aab565b60a06040518083038186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb991906156ce565b50509250925050898660040160008282829054906101000a90046001600160801b03160192506101000a8154816001600160801b0302191690836001600160801b03160217905550888660040160108282829054906101000a90046001600160801b03160192506101000a8154816001600160801b0302191690836001600160801b03160217905550610c6086600201548303866001600160801b0316600160801b6135dc565b6004870180546001600160801b0380821690930183166001600160801b03199091161790556003870154610c9e91908303908716600160801b6135dc565b6004870180546001600160801b03600160801b8083048216909401811690930292169190911790556002860182905560038601819055610ce460408c0160208d01615684565b6001870180546001600160801b039288038316600160801b0292169190911790556040517ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790610d36908d3590615aab565b60405180910390a18a357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b4610d7160408e0160208f01615684565b8c8c604051610d8293929190615b86565b60405180910390a25050505050505050915091565b6002600a541415610def576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600a554715610e0457610e04334761368b565b6001600a55565b6010546001600160a01b03163314610e2257600080fd5b6001600160a01b038116610e3557600080fd5b601080546001600160a01b0319166001600160a01b0383169081179091556040517fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a490600090a250565b6000610e8b600261377a565b905090565b60008060008360a0013580610ea361349c565b1115610eae57600080fd5b84356000908152600d602090815260408083206001808201546001600160501b03168552600c8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b909304600290810b810b900b9183019190915291610f427f0000000000000000000000000000000000000000000000000000000000000000836134a0565b9050806001600160a01b031663a6f19c846040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7d57600080fd5b505afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615237565b6001600160a01b0316610fc889356117e7565b6001600160a01b03161415610fdc57600080fd5b60408051610120810182526001600160a01b0383168152602080820185905230828401526001860154600160501b8104600290810b810b606080860191909152600160681b909204810b900b608080850191909152918c013560a0840152928b013560c0830152918a013560e08201529089013561010082015261105f90613785565b6001860154929950909750955060009081906001600160a01b0384169063514ea4bf906110a3903090600160501b8104600290810b91600160681b9004900b613582565b6040518263ffffffff1660e01b81526004016110bf9190615aab565b60a06040518083038186803b1580156110d757600080fd5b505afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f91906156ce565b5050925092505061114b856002015483038660010160109054906101000a90046001600160801b03166001600160801b0316600160801b6135dc565b6004860180546001600160801b0380821690930183166001600160801b0319909116179055600386015460018701546111929291840391600160801b9182900416906135dc565b6004860180546001600160801b03600160801b80830482169094018116840291811691909117909155600287018490556003870183905560018701805483810483168d018316909302929091169190911790556111ed610d97565b6040517ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79061121e908c3590615aab565b60405180910390a189600001357f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a60405161125e93929190615b86565b60405180910390a25050505050509193909250565b61128461127e61337e565b826133f8565b6112bf5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f1d6031913960400191505060405180910390fd5b610904838383613948565b6001600160a01b03821660009081526001602052604081206112ec9083613a94565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611386613aa0565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b610904838383604051806020016040528060008152506127af565b806113fd33826133f8565b61140657600080fd5b6000828152600d602052604090206001810154600160801b90046001600160801b0316158015611441575060048101546001600160801b0316155b801561145f57506004810154600160801b90046001600160801b0316155b61146857600080fd5b6001808201546001600160501b03166000908152600c60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b909104600290810b810b900b908301526114ed7f0000000000000000000000000000000000000000000000000000000000000000836134a0565b905061152f85600e6000611500896117e7565b6001600160a01b0390811682526020808301939093526040918201600090812091871681529252902090613aa4565b506000858152600d602052604081208181556001810182905560028101829055600381018290556004015561156385613ab0565b5050505050565b604080516323f2ebc360e21b815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b1580156115e457600080fd5b505af11580156115f8573d6000803e3d6000fd5b50505050505050505050565b6002600a54141561165c576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600a55604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b1580156116cb57600080fd5b505afa1580156116df573d6000803e3d6000fd5b505050506040513d60208110156116f557600080fd5b505190508281101561170657600080fd5b8015611794577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561177257600080fd5b505af1158015611786573d6000803e3d6000fd5b50505050611794828261368b565b50506001600a5550565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806117d0600284613b7d565b509392505050565b6011546001600160a01b031681565b60006112ef82604051806060016040528060298152602001615e886029913960029190613b9b565b606090565b60006001600160a01b03821661185b5760405162461bcd60e51b815260040180806020018281038252602a815260200180615e5e602a913960400191505060405180910390fd5b6001600160a01b03821660009081526001602052604090206112ef9061377a565b8361188561349c565b111561189057600080fd5b600061189a611319565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad88886118c681613ba8565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018a90528151808403909101815260c08301825280519084012061190160f01b60e084015260e28301949094526101028083019490945280518083039094018452610122909101905281519101209050600061194e876117e7565b9050806001600160a01b0316886001600160a01b0316141561196f57600080fd5b61197881613be2565b15611aa9576040805160208082018790528183018690526001600160f81b031960f889901b1660608301528251604181840301815260618301808552630b135d3f60e11b90526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611a115781810151838201526020016119f9565b50505050905090810190601f168015611a3e5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611a5c57600080fd5b505afa158015611a70573d6000803e3d6000fd5b505050506040513d6020811015611a8657600080fd5b50516001600160e01b031916630b135d3f60e11b14611aa457600080fd5b611b45565b600060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611b05573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611b2557600080fd5b816001600160a01b0316816001600160a01b031614611b4357600080fd5b505b611b4f8888613382565b5050505050505050565b6010546001600160a01b031681565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107f25780601f106107c7576101008083540402835291602001916107f2565b6001600160a01b038083166000908152600e602090815260408083209385168352929052206060906112ec90613be8565b6000818152600d6020908152604080832081516101408101835281546001600160601b03811682526001600160a01b03600160601b909104169381019390935260018101546001600160501b038116928401839052600160501b8104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e086015260049092015480831661010086015204166101208301528291829182918291829182918291829182918291829190611cd857600080fd5b6000600c600083604001516001600160501b03166001600160501b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900460020b60020b60020b81525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b611dfa61337e565b6001600160a01b0316826001600160a01b03161415611e60576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060056000611e6d61337e565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611eb161337e565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b60408051636eb1769f60e11b81523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d6020811015611f7257600080fd5b50511015611f8857611f8886868686868661156a565b505050505050565b60608167ffffffffffffffff81118015611fa957600080fd5b50604051908082528060200260200182016040528015611fdd57816020015b6060815260200190600190039081611fc85790505b50905060005b828110156120d25760008030868685818110611ffb57fe5b905060200281019061200d9190615c5d565b60405161201b9291906158be565b600060405180830381855af49150503d8060008114612056576040519150601f19603f3d011682016040523d82523d6000602084013e61205b565b606091505b5091509150816120b05760448151101561207457600080fd5b6004810190508080602001905181019061208e919061551e565b60405162461bcd60e51b81526004016120a79190615b35565b60405180910390fd5b808484815181106120bd57fe5b60209081029190910101525050600101611fe3565b5092915050565b600080600080846101400135806120ee61349c565b11156120f957600080fd5b61210b6101808701610160880161521b565b6001600160a01b0316156121fa576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663232aa5ac612155602089018961521b565b61216560408a0160208b0161521b565b61217560608b0160408c01615502565b6121876101808c016101608d0161521b565b6040518563ffffffff1660e01b81526004016121a694939291906158e2565b602060405180830381600087803b1580156121c057600080fd5b505af11580156121d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f89190615237565b505b60408051606081019091526000908061221660208a018a61521b565b6001600160a01b03168152602001886020016020810190612237919061521b565b6001600160a01b0316815260200161225560608a0160408b01615502565b60020b9052905060006122887f0000000000000000000000000000000000000000000000000000000000000000836134a0565b905061231c604051806101200160405280836001600160a01b03168152602001848152602001306001600160a01b031681526020018a60600160208101906122d09190615502565b60020b81526020016122e860a08c0160808d01615502565b60020b81526020018a60a0013581526020018a60c0013581526020018a60e0013581526020018a6101000135815250613785565b919750955093506123666123386101408a016101208b0161521b565b600f80546001600160b01b0319811660016001600160b01b0392831690810190921617909155985088613bf5565b600080826001600160a01b031663514ea4bf6123a7308d606001602081019061238f9190615502565b8e60800160208101906123a29190615502565b613582565b6040518263ffffffff1660e01b81526004016123c39190615aab565b60a06040518083038186803b1580156123db57600080fd5b505afa1580156123ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241391906156ce565b5050925092505060006124268486613d23565b905060405180610140016040528060006001600160601b0316815260200160006001600160a01b03168152602001826001600160501b031681526020018c60600160208101906124769190615502565b60020b815260200161248e60a08e0160808f01615502565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600d60008c815260200190815260200160002060008201518160000160006101000a8154816001600160601b0302191690836001600160601b03160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160501b0302191690836001600160501b03160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055509050506126a48a600e60008e610120016020810190612675919061521b565b6001600160a01b03908116825260208083019390935260409182016000908120918a1681529252902090613e08565b506126ad610d97565b897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a6040516126e193929190615b86565b60405180910390a25050505050509193509193565b6010546001600160a01b0316331461270d57600080fd5b6001600160a01b03811661272057600080fd5b601180546001600160a01b0319166001600160a01b0383161790556040517f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c906127709060009060001990615b27565b60405180910390a16040516001600160a01b038216907f9a72f60932a1a6a1e1ceaa7a7dc51efcfe37685b729d8a680ab939f4612455a690600090a250565b6127c06127ba61337e565b836133f8565b6127fb5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f1d6031913960400191505060405180910390fd5b61280784848484613e14565b50505050565b60408051636eb1769f60e11b8152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b15801561285c57600080fd5b505afa158015612870573d6000803e3d6000fd5b505050506040513d602081101561288657600080fd5b50511015611f8857611f88868686868686612afd565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606128cb82613371565b6128d457600080fd5b60115460405163e9dc637560e01b81526001600160a01b039091169063e9dc6375906129069030908690600401615ab4565b60006040518083038186803b15801561291e57600080fd5b505afa158015612932573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ef919081019061551e565b6000612968828401846155c1565b90506129987f00000000000000000000000000000000000000000000000000000000000000008260000151613e66565b5084156129b35780515160208201516129b391903388613e89565b83156115635761156381600001516020015182602001513387613e89565b6002600a541415612a29576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600a55604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015612a7857600080fd5b505afa158015612a8c573d6000803e3d6000fd5b505050506040513d6020811015612aa257600080fd5b5051905082811015612ab357600080fd5b8015612ac457612ac4848383614019565b50506001600a555050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6040805163d505accf60e01b8152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b1580156115e457600080fd5b6000808235612b7e33826133f8565b612b8757600080fd5b6000612b996060860160408701615684565b6001600160801b03161180612bc657506000612bbb6080860160608701615684565b6001600160801b0316115b612bcf57600080fd5b600080612be2604087016020880161521b565b6001600160a01b031614612c0557612c00604086016020870161521b565b612c07565b305b85356000908152600d602090815260408083206001808201546001600160501b03168552600c8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b909304600290810b810b900b9183019190915292935090612c9e7f0000000000000000000000000000000000000000000000000000000000000000836134a0565b600480850154604080516329bc672160e21b815290519394506001600160801b0380831694600160801b90930416926000926001600160a01b0387169263a6f19c849281810192602092909190829003018186803b158015612cff57600080fd5b505afa158015612d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d379190615237565b905060006001600160a01b038216612d4f8d356117e7565b60018901546001600160a01b0391909116919091149150600160801b90046001600160801b0316156130905760008082612f3757600189015460405163a34123a760e01b81526001600160a01b0389169163a34123a791612dcd91600160501b8104600290810b92600160681b909204900b90600090600401615acd565b6040805180830381600087803b158015612de657600080fd5b505af1158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1e91906157e7565b505060018901546001600160a01b0388169063514ea4bf90612e57903090600160501b8104600290810b91600160681b9004900b613582565b6040518263ffffffff1660e01b8152600401612e739190615aab565b60a06040518083038186803b158015612e8b57600080fd5b505afa158015612e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec391906156ce565b505060028c015460018d0154929550909350612ef592508403906001600160801b03600160801b9182900416906135dc565b86019550612f2e896003015482038a60010160109054906101000a90046001600160801b03166001600160801b0316600160801b6135dc565b85019450613082565b6001890154604051631be2491360e21b81526001600160a01b03891691636f89244c91612f8391600160501b8104600290810b92600160681b909204900b906000908a90600401615af3565b6040805180830381600087803b158015612f9c57600080fd5b505af1158015612fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd491906157e7565b505060018901546001600160a01b0388169063514ea4bf9061300d908790600160501b8104600290810b91600160681b9004900b613582565b6040518263ffffffff1660e01b81526004016130299190615aab565b60a06040518083038186803b15801561304157600080fd5b505afa158015613055573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307991906156ce565b50919450925050505b600289019190915560038801555b600080856001600160801b03168e60400160208101906130b09190615684565b6001600160801b0316116130d6578d60400160208101906130d19190615684565b6130d8565b855b856001600160801b03168f60600160208101906130f59190615684565b6001600160801b03161161311b578e60600160208101906131169190615684565b61311d565b855b91509150826131d85760018901546040516309e3d67b60e31b81526001600160a01b03891691634f1eb3d891613172918e91600160501b8204600290810b92600160681b9004900b9088908890600401615952565b6040805180830381600087803b15801561318b57600080fd5b505af115801561319f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c391906156a0565b6001600160801b039182169e50169b50613288565b6001890154604051630c4ce0dd60e21b81526001600160a01b03891691633133837491613226918e91600160501b8204600290810b92600160681b9004900b90889088908c9060040161598f565b6040805180830381600087803b15801561323f57600080fd5b505af1158015613253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327791906156a0565b6001600160801b039182169e50169b505b8186038186038a60040160008c60040160108491906101000a8154816001600160801b0302191690836001600160801b031602179055508391906101000a8154816001600160801b0302191690836001600160801b0316021790555050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78e600001356040516133199190615aab565b60405180910390a18d600001357f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f018b8484604051613359939291906159d2565b60405180910390a25050505050505050505050915091565b60006112ef600283614160565b3390565b6000818152600d6020526040902080546001600160601b0316600160601b6001600160a01b0385169081029190911790915581906133bf826117e7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061340382613371565b61343e5760405162461bcd60e51b815260040180806020018281038252602c815260200180615dfa602c913960400191505060405180910390fd5b6000613449836117e7565b9050806001600160a01b0316846001600160a01b031614806134845750836001600160a01b0316613479846107fc565b6001600160a01b0316145b8061349457506134948185612acf565b949350505050565b4290565b600081602001516001600160a01b031682600001516001600160a01b0316106134c857600080fd5b6112ec836001600160a01b031663cefa77996040518163ffffffff1660e01b815260040160206040518083038186803b15801561350457600080fd5b505afa158015613518573d6000803e3d6000fd5b505050506040513d602081101561352e57600080fd5b5051835160208581015160408088015181516001600160a01b0395861681860152949092168482015260029190910b606080850191909152815180850390910181526080909301905281519101208561416c565b604080516bffffffffffffffffffffffff19606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b6000808060001985870986860292508281109083900303905080613612576000841161360757600080fd5b5082900490506135d5565b80841161361e57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106136d75780518252601f1990920191602091820191016136b8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613739576040519150601f19603f3d011682016040523d82523d6000602084013e61373e565b606091505b5050905080610904576040805162461bcd60e51b815260206004820152600360248201526253544560e81b604482015290519081900360640190fd5b60006112ef826141ca565b600080600080846000015190506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160c06040518083038186803b1580156137cd57600080fd5b505afa1580156137e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613805919061572f565b50505050509050600061381b87606001516141ce565b9050600061382c88608001516141ce565b90506138438383838b60a001518c60c00151614500565b9650505050806001600160a01b0316633c8a7d8d8660400151876060015188608001518860405180604001604052808c602001518152602001336001600160a01b03168152506040516020016138999190615b48565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016138c8959493929190615910565b6040805180830381600087803b1580156138e157600080fd5b505af11580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391991906157e7565b60e08701519194509250831080159061393757508461010001518210155b61394057600080fd5b509193909250565b826001600160a01b031661395b826117e7565b6001600160a01b0316146139a05760405162461bcd60e51b8152600401808060200182810382526029815260200180615ed36029913960400191505060405180910390fd5b6001600160a01b0382166139e55760405162461bcd60e51b8152600401808060200182810382526024815260200180615db06024913960400191505060405180910390fd5b6139f08383836145c4565b6139fb600082613382565b6001600160a01b0383166000908152600160205260409020613a1d90826146dc565b506001600160a01b0382166000908152600160205260409020613a409082613e08565b50613a4d600282846146e8565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006112ec83836146fe565b4690565b60006112ec8383614762565b6000613abb826117e7565b9050613ac9816000846145c4565b613ad4600083613382565b6000828152600860205260409020546002600019610100600184161502019091160415613b12576000828152600860205260408120613b129161519e565b6001600160a01b0381166000908152600160205260409020613b3490836146dc565b50613b4060028361482a565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000808080613b8c8686614836565b909450925050505b9250929050565b60006134948484846148b1565b6000908152600d6020526040902080546bffffffffffffffffffffffff19811660016001600160601b039283169081019092161790915590565b3b151590565b606060006135d58361497b565b6001600160a01b038216613c50576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613c5981613371565b15613cab576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613cb7600083836145c4565b6001600160a01b0382166000908152600160205260409020613cd99082613e08565b50613ce6600282846146e8565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166000908152600b60205260409020546001600160501b0316806112ef5750600f805460016001600160501b03600160b01b8084048216838101909216026001600160b01b03909316929092179092556001600160a01b038085166000908152600b60209081526040808320805469ffffffffffffffffffff191686179055848352600c825291829020865181549085166001600160a01b031991821617825591870151950180549287015160020b62ffffff16600160a01b0262ffffff60a01b19969094169290911691909117939093161790915592915050565b60006112ec83836149d7565b613e1f848484613948565b613e2b84848484614a21565b6128075760405162461bcd60e51b8152600401808060200182810382526032815260200180615d7e6032913960400191505060405180910390fd5b6000613e7283836134a0565b9050336001600160a01b038216146112ef57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015613eca5750804710155b15613fec577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613f2a57600080fd5b505af1158015613f3e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613fba57600080fd5b505af1158015613fce573d6000803e3d6000fd5b505050506040513d6020811015613fe457600080fd5b506128079050565b6001600160a01b03831630141561400d57614008848383614019565b612807565b61280784848484614b89565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106140955780518252601f199092019160209182019101614076565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146140f7576040519150601f19603f3d011682016040523d82523d6000602084013e6140fc565b606091505b509150915081801561412a57508051158061412a575080806020019051602081101561412757600080fd5b50515b611563576040805162461bcd60e51b815260206004820152600260248201526114d560f21b604482015290519081900360640190fd5b60006112ec8383614cd9565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b5490565b60008060008360020b126141e5578260020b6141ed565b8260020b6000035b9050620d89e881111561422b576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661423f57600160801b614251565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615614285576ffff97272373d413259a46990580e213a0260801c5b60048216156142a4576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156142c3576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156142e2576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615614301576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615614320576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561433f576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561435f576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561437f576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561439f576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156143bf576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156143df576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156143ff576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561441f576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561443f576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614460576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614480576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561449f576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156144bc576b048a170391f7dc42444e8fa20260801c5b60008460020b13156144d75780600019816144d357fe5b0490505b6401000000008106156144eb5760016144ee565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b03161115614520579293925b846001600160a01b0316866001600160a01b03161161454b57614544858585614cf1565b90506145bb565b836001600160a01b0316866001600160a01b031610156145ad576000614572878686614cf1565b90506000614581878986614d54565b9050806001600160801b0316826001600160801b0316106145a257806145a4565b815b925050506145bb565b6145b8858584614d54565b90505b95945050505050565b6001600160a01b03831615806145e157506001600160a01b038216155b156145eb57610904565b6000818152600d602090815260408083206001908101546001600160501b03168452600c8352818420825160608101845281546001600160a01b039081168252919092015490811693820193909352600160a01b909204600290810b810b900b9082015261467a907f0000000000000000000000000000000000000000000000000000000000000000906134a0565b6001600160a01b038086166000908152600e602090815260408083209385168352929052209091506146ac9083613aa4565b506001600160a01b038084166000908152600e602090815260408083209385168352929052206115639083613e08565b60006112ec8383614d91565b600061349484846001600160a01b038516614e4d565b815460009082106147405760405162461bcd60e51b8152600401808060200182810382526022815260200180615d5c6022913960400191505060405180910390fd5b82600001828154811061474f57fe5b9060005260206000200154905092915050565b6000818152600183016020526040812054801561482057835460001980830191018082146147da57600086600001828154811061479b57fe5b90600052602060002001549050808760000184815481106147b857fe5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806147e557fe5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506112ef565b60009150506112ef565b60006112ec8383614ee4565b81546000908190831061487a5760405162461bcd60e51b8152600401808060200182810382526022815260200180615eb16022913960400191505060405180910390fd5b600084600001848154811061488b57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000828152600184016020526040812054828161494c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156149115781810151838201526020016148f9565b50505050905090810190601f16801561493e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061495f57fe5b9060005260206000209060020201600101549150509392505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156149cb57602002820191906000526020600020905b8154815260200190600101908083116149b7575b50505050509050919050565b60006149e38383614cd9565b614a19575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556112ef565b5060006112ef565b6000614a35846001600160a01b0316613be2565b614a4157506001613494565b6000614b4f630a85bd0160e11b614a5661337e565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614abd578181015183820152602001614aa5565b50505050905090810190601f168015614aea5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001615d7e603291396001600160a01b0388169190614fb8565b90506000818060200190516020811015614b6857600080fd5b50516001600160e01b031916630a85bd0160e11b1492505050949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b60208310614c0d5780518252601f199092019160209182019101614bee565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614c6f576040519150601f19603f3d011682016040523d82523d6000602084013e614c74565b606091505b5091509150818015614ca2575080511580614ca25750808060200190516020811015614c9f57600080fd5b50515b611f88576040805162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614d11579192915b6000614d34856001600160a01b0316856001600160a01b0316600160601b6135dc565b90506145bb614d4f84838888036001600160a01b03166135dc565b614fc7565b6000826001600160a01b0316846001600160a01b03161115614d74579192915b613494614d4f83600160601b8787036001600160a01b03166135dc565b600081815260018301602052604081205480156148205783546000198083019190810190600090879083908110614dc457fe5b9060005260206000200154905080876000018481548110614de157fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614e1157fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506112ef565b600082815260018401602052604081205480614eb25750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556135d5565b82856000016001830381548110614ec557fe5b90600052602060002090600202016001018190555060009150506135d5565b600081815260018301602052604081205480156148205783546000198083019190810190600090879083908110614f1757fe5b9060005260206000209060020201905080876000018481548110614f3757fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614f7657fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506112ef9350505050565b60606134948484600085614fdd565b806001600160801b038116811461076157600080fd5b60608247101561501e5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dd46026913960400191505060405180910390fd5b61502785613be2565b615078576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106150b65780518252601f199092019160209182019101615097565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615118576040519150601f19603f3d011682016040523d82523d6000602084013e61511d565b606091505b509150915061512d828286615138565b979650505050505050565b606083156151475750816135d5565b8251156151575782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156149115781810151838201526020016148f9565b50805460018160011615610100020316600290046000825580601f106151c457506151e2565b601f0160209004906000526020600020908101906151e291906151e5565b50565b5b808211156151fa57600081556001016151e6565b5090565b803561076181615d14565b805161ffff8116811461076157600080fd5b60006020828403121561522c578081fd5b81356135d581615d14565b600060208284031215615248578081fd5b81516135d581615d14565b60008060408385031215615265578081fd5b823561527081615d14565b9150602083013561528081615d14565b809150509250929050565b60008060006060848603121561529f578081fd5b83356152aa81615d14565b925060208401356152ba81615d14565b929592945050506040919091013590565b600080600080608085870312156152e0578182fd5b84356152eb81615d14565b935060208501356152fb81615d14565b925060408501359150606085013567ffffffffffffffff81111561531d578182fd5b8501601f8101871361532d578182fd5b803561534061533b82615cc6565b615ca2565b818152886020838501011115615354578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215615384578182fd5b823561538f81615d14565b9150602083013561528081615d29565b600080604083850312156153b1578182fd5b82356153bc81615d14565b946020939093013593505050565b6000806000606084860312156153de578081fd5b83356153e981615d14565b925060208401359150604084013561540081615d14565b809150509250925092565b60008060008060008060c08789031215615423578384fd5b863561542e81615d14565b95506020870135945060408701359350606087013560ff81168114615451578283fd5b9598949750929560808101359460a0909101359350915050565b6000806020838503121561547d578182fd5b823567ffffffffffffffff80821115615494578384fd5b818501915085601f8301126154a7578384fd5b8135818111156154b5578485fd5b86602080830285010111156154c8578485fd5b60209290920196919550909350505050565b6000602082840312156154eb578081fd5b81356001600160e01b0319811681146135d5578182fd5b600060208284031215615513578081fd5b81356135d581615d37565b60006020828403121561552f578081fd5b815167ffffffffffffffff811115615545578182fd5b8201601f81018413615555578182fd5b805161556361533b82615cc6565b818152856020838501011115615577578384fd5b6145bb826020830160208601615ce8565b600060808284031215615599578081fd5b50919050565b600060a08284031215615599578081fd5b600060c08284031215615599578081fd5b600081830360808112156155d3578182fd5b6040516040810167ffffffffffffffff82821081831117156155f157fe5b816040526060841215615602578485fd5b60a083019350818410818511171561561657fe5b50826040528435925061562883615d14565b91825260208401359161563a83615d14565b8260608301526040850135925061565083615d37565b608082018390528152615665606085016151fe565b6020820152949350505050565b60006101808284031215615599578081fd5b600060208284031215615695578081fd5b81356135d581615d46565b600080604083850312156156b2578182fd5b82516156bd81615d46565b602084015190925061528081615d46565b600080600080600060a086880312156156e5578283fd5b85516156f081615d46565b809550506020860151935060408601519250606086015161571081615d46565b608087015190925061572181615d46565b809150509295509295909350565b60008060008060008060c08789031215615747578384fd5b865161575281615d14565b602088015190965061576381615d37565b945061577160408801615209565b935061577f60608801615209565b925061578d60808801615209565b915060a087015161579d81615d29565b809150509295509295509295565b6000602082840312156157bc578081fd5b5035919050565b600080604083850312156157d5578182fd5b82359150602083013561528081615d14565b600080604083850312156157f9578182fd5b505080516020909101519092909150565b6000806000806060858703121561581f578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115615844578384fd5b818701915087601f830112615857578384fd5b813581811115615865578485fd5b886020828501011115615876578485fd5b95989497505060200194505050565b6000815180845261589d816020860160208601615ce8565b601f01601f19169290920160200192915050565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015260029190910b6040830152909116606082015260800190565b600060018060a01b03871682528560020b60208301528460020b60408301526001600160801b038416606083015260a0608083015261512d60a0830184615885565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039687168152600295860b60208201529390940b60408401526001600160801b039182166060840152166080820152911660a082015260c00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615a4f57603f19888603018452615a3d858351615885565b94509285019290850190600101615a21565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615a9457835183529284019291840191600101615a78565b50909695505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b600294850b81529290930b60208301526001600160801b031660408201526001600160a01b03909116606082015260800190565b918252602082015260400190565b6000602082526112ec6020830184615885565b815180516001600160a01b03908116835260208083015182168185015260409283015160020b92840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b9384526001600160801b039290921660208401526040830152606082015260800190565b6001600160601b038d1681526001600160a01b038c811660208301528b811660408301528a166060820152600289810b608083015288810b60a083015287900b60c08201526101808101615c2260e08301886158b1565b8561010083015284610120830152615c3e6101408301856158b1565b615c4c6101608301846158b1565b9d9c50505050505050505050505050565b6000808335601e19843603018112615c73578283fd5b83018035915067ffffffffffffffff821115615c8d578283fd5b602001915036819003821315613b9457600080fd5b60405181810167ffffffffffffffff81118282101715615cbe57fe5b604052919050565b600067ffffffffffffffff821115615cda57fe5b50601f01601f191660200190565b60005b83811015615d03578181015183820152602001615ceb565b838111156128075750506000910152565b6001600160a01b03811681146151e257600080fd5b80151581146151e257600080fd5b8060020b81146151e257600080fd5b6001600160801b03811681146151e257600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220134174ae2840d286ca02ffaefe66be36b768237cba11bf7e013ce60c1bb1d4ff64736f6c63430007060033000000000000000000000000607eba808ef2685fac3da68ab96de961fa8f331200000000000000000000000004625b046c69577efc40e6c0bb83cdbafab5a55f000000000000000000000000fc00000000000000000000000000000000000006000000000000000000000000f13bd1afdf4f8b394928228f8fd122dc225f914000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001c536c697073747265616d20506f736974696f6e204e46542076312e3200000000000000000000000000000000000000000000000000000000000000000000000b56454c4f2d434c2d504f53000000000000000000000000000000000000000000