[ { "inputs": [ { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "address", "name": "_WETH9", "type": "address" }, { "internalType": "string", "name": "uri", "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": 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": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerChanged", "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" }, { "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": "view", "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": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" } ], "name": "createAndInitializePoolIfNecessary", "outputs": [ { "internalType": "address", "name": "pool", "type": "address" } ], "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": "address", "name": "v3Pool", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "internalType": "struct NonfungiblePositionManager.HarvestParams", "name": "params", "type": "tuple" } ], "name": "harvest", "outputs": [ { "internalType": "uint256", "name": "reward", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "v3Pool", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "internalType": "struct NonfungiblePositionManager.HarvestParams[]", "name": "params", "type": "tuple[]" } ], "name": "harvestBatch", "outputs": [ { "internalType": "uint256", "name": "reward", "type": "uint256" } ], "stateMutability": "nonpayable", "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": "uint24", "name": "fee", "type": "uint24" }, { "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": "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": "uint24", "name": "fee", "type": "uint24" }, { "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": [ { "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" }, { "stateMutability": "payable", "type": "receive" } ]
610100604052600e80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b50604051620064953803806200649583398101604081905262000057916200033a565b82826040518060400160405280601a81526020017f554e5877617020563320506f736974696f6e73204e46542d56310000000000008152506040518060400160405280600a815260200169554e582d56332d504f5360b01b815250604051806040016040528060018152602001603160f81b8152508282620000e66301ffc9a760e01b620001d360201b60201c565b8151620000fb90600690602085019062000271565b5080516200011190600790602084019062000271565b50620001246380ac58cd60e01b620001d3565b62000136635b5e139f60e01b620001d3565b6200014863780e9d6360e01b620001d3565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c052911b1660e0526001600a556200018a8162000258565b601080546001600160a01b031916339081179091556040516000907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c908290a350505062000421565b6001600160e01b0319808216141562000233576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200026d90600990602084019062000271565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002a95760008555620002f4565b82601f10620002c457805160ff1916838001178555620002f4565b82800160010185558215620002f4579182015b82811115620002f4578251825591602001919060010190620002d7565b506200030292915062000306565b5090565b5b8082111562000302576000815560010162000307565b80516001600160a01b03811681146200033557600080fd5b919050565b6000806000606084860312156200034f578283fd5b6200035a846200031d565b925060206200036b8186016200031d565b60408601519093506001600160401b038082111562000388578384fd5b818701915087601f8301126200039c578384fd5b815181811115620003a957fe5b604051601f8201601f1916810185018381118282101715620003c757fe5b60405281815283820185018a1015620003de578586fd5b8592505b81831015620004015783830185015181840186015291840191620003e2565b818311156200041257858583830101525b80955050505050509250925092565b60805160a05160c05160601c60e05160601c615ffc62000499600039806102005280611879528061196452806119ec5280613fb55280613ffb528061406f525080610bb75280610f55528061101c5280612c1b5280612d0c528061300652806138eb5250806116795250806116585250615ffc6000f3fe6080604052600436106101f05760003560e01c806301ffc9a71461026557806306fdde031461029b578063081812fc146102bd578063095ea7b3146102ea5780630c1b9fd01461030a5780630c49ccbe1461033757806312210e8a1461035857806313af40351461036057806313ead5621461038057806318160ddd14610393578063219f5d17146103a857806323b872dd146103ca5780632f745c59146103ea57806330adf81f1461040a5780633644e5151461041f57806342842e0e1461043457806342966c68146104545780634659a4941461046757806349404b7c1461047a5780634aa4a4fc1461048d5780634f6ccce7146104a25780636352211e146104c25780636c0360eb146104e257806370a08231146104f75780637ac2ff7b146105175780637b7ca2001461052a578063883164561461054a5780638da5cb5b1461056d57806395d89b411461058257806399fbab8814610597578063a22cb465146105cf578063a4a78f0c146105ef578063ac9650d814610602578063b6dc7ea314610622578063b88d4fde14610642578063c2e3140a14610662578063c45a015514610675578063c87b56dd1461068a578063d3487997146106aa578063df2ab5bb146106ca578063e985e9c5146106dd578063f3995c67146106fd578063fc6f78651461071057610260565b3661026057336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461025e576040805162461bcd60e51b81526020600482015260096024820152684e6f7420574554483960b81b604482015290519081900360640190fd5b005b600080fd5b34801561027157600080fd5b5061028561028036600461541b565b610723565b60405161029291906159ba565b60405180910390f35b3480156102a757600080fd5b506102b0610746565b60405161029291906159f4565b3480156102c957600080fd5b506102dd6102d8366004615740565b6107dc565b6040516102929190615881565b3480156102f657600080fd5b5061025e610305366004615289565b61082f565b34801561031657600080fd5b5061032a61032536600461550c565b610905565b60405161029291906159c5565b61034a6103453660046154fb565b610a5b565b604051610292929190615b7b565b61025e610eae565b34801561036c57600080fd5b5061025e61037b3660046150c9565b610ec0565b6102dd61038e36600461511d565b610f33565b34801561039f57600080fd5b5061032a611280565b6103bb6103b636600461551d565b611291565b60405161029293929190615b36565b3480156103d657600080fd5b5061025e6103e5366004615176565b61159f565b3480156103f657600080fd5b5061032a610405366004615289565b6115f6565b34801561041657600080fd5b5061032a611621565b34801561042b57600080fd5b5061032a611633565b34801561044057600080fd5b5061025e61044f366004615176565b6116f1565b61025e610462366004615740565b61170c565b61025e6104753660046152f5565b6117db565b61025e610488366004615770565b611875565b34801561049957600080fd5b506102dd6119ea565b3480156104ae57600080fd5b5061032a6104bd366004615740565b611a0e565b3480156104ce57600080fd5b506102dd6104dd366004615740565b611a24565b3480156104ee57600080fd5b506102b0611a4c565b34801561050357600080fd5b5061032a6105123660046150c9565b611aad565b61025e6105253660046152f5565b611b15565b34801561053657600080fd5b5061032a6105453660046153be565b611ef5565b61055d6105583660046155d8565b612089565b6040516102929493929190615b57565b34801561057957600080fd5b506102dd612599565b34801561058e57600080fd5b506102b06125a8565b3480156105a357600080fd5b506105b76105b2366004615740565b612609565b6040516102929c9b9a99989796959493929190615b89565b3480156105db57600080fd5b5061025e6105ea36600461525c565b61281a565b61025e6105fd3660046152f5565b61291b565b610615610610366004615350565b6129b4565b604051610292919061595a565b34801561062e57600080fd5b5061025e61063d3660046150c9565b612af3565b34801561064e57600080fd5b5061025e61065d3660046151b6565b612b2c565b61025e6106703660046152f5565b612b8a565b34801561068157600080fd5b506102dd612c19565b34801561069657600080fd5b506102b06106a5366004615740565b612c3d565b3480156106b657600080fd5b5061025e6106c53660046157b7565b612cf7565b61025e6106d83660046152b4565b612d75565b3480156106e957600080fd5b506102856106f83660046150e5565b612e4d565b61025e61070b3660046152f5565b612e7b565b61034a61071e3660046154e4565b612eed565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d25780601f106107a7576101008083540402835291602001916107d2565b820191906000526020600020905b8154815290600101906020018083116107b557829003601f168201915b5050505050905090565b60006107e7826133ce565b61080c5760405162461bcd60e51b815260040161080390615a2d565b60405180910390fd5b506000908152600d6020526040902054600160601b90046001600160a01b031690565b600061083a82611a24565b9050806001600160a01b0316836001600160a01b0316141561088d5760405162461bcd60e51b8152600401808060200182810382526021815260200180615f756021913960400191505060405180910390fd5b806001600160a01b031661089f6133db565b6001600160a01b031614806108bb57506108bb816106f86133db565b6108f65760405162461bcd60e51b8152600401808060200182810382526038815260200180615e3f6038913960400191505060405180910390fd5b61090083836133df565b505050565b60006002600a54141561094d576040805162461bcd60e51b815260206004820152601f6024820152600080516020615d50833981519152604482015290519081900360640190fd5b6002600a5561095f60208301836150c9565b6001600160a01b031663540d49186040518163ffffffff1660e01b815260040160206040518083038186803b15801561099757600080fd5b505afa1580156109ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cf9190615443565b6001600160a01b031663ddc6326283602001356040518263ffffffff1660e01b81526004016109fe91906159c5565b602060405180830381600087803b158015610a1857600080fd5b505af1158015610a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a509190615758565b6001600a5592915050565b6000808235610a6a3382613455565b610a865760405162461bcd60e51b815260040161080390615a07565b836080013580610a946134f1565b1115610add576040805162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015290519081900360640190fd5b6000610aef60408701602088016155ea565b6001600160801b031611610b0257600080fd5b84356000908152600d602090815260409182902060018101549092600160801b9091046001600160801b031691610b3d9189019089016155ea565b6001600160801b0316816001600160801b03161015610b5b57600080fd5b6001828101546001600160501b03166000908152600c60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610bdc7f0000000000000000000000000000000000000000000000000000000000000000836134f5565b60018501549091506001600160a01b0382169063a34123a790600160501b8104600290810b91600160681b9004900b610c1b60408e0160208f016155ea565b6040518463ffffffff1660e01b8152600401610c39939291906159ce565b6040805180830381600087803b158015610c5257600080fd5b505af1158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190615794565b909850965060408901358810801590610ca7575088606001358710155b610cc35760405162461bcd60e51b815260040161080390615a79565b6001840154600090610cec903090600160501b8104600290810b91600160681b9004900b6135d4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610d1d91906159c5565b60a06040518083038186803b158015610d3557600080fd5b505afa158015610d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6d9190615634565b50509250925050610d9287600201548303876001600160801b0316600160801b613629565b6004880180546001600160801b03198116928e016001600160801b039182160181169290921790556003880154610dd391908303908816600160801b613629565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610e1960408d0160208e016155ea565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610e7c91906155ea565b8d8d604051610e8d93929190615b36565b60405180910390a2610ea0848d356136d8565b505050505050505050915091565b4715610ebe57610ebe33476137a4565b565b6010546001600160a01b03163314610ed757600080fd5b6010546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000836001600160a01b0316856001600160a01b031610610f5357600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610fde57600080fd5b505afa158015610ff2573d6000803e3d6000fd5b505050506040513d602081101561100857600080fd5b505190506001600160a01b038116611197577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561107357600080fd5b505afa158015611087573d6000803e3d6000fd5b505050506040513d602081101561109d57600080fd5b50516040805163ba8265bf60e01b81526001600160a01b038881166004830152878116602483015233604483015262ffffff87166064830152825193169263ba8265bf926084808401939192918290030181600087803b15801561110057600080fd5b505af1158015611114573d6000803e3d6000fd5b505050506040513d604081101561112a57600080fd5b50516040805163f637731d60e01b81526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b50505050611278565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156111d257600080fd5b505afa1580156111e6573d6000803e3d6000fd5b505050506040513d60e08110156111fc57600080fd5b505190506001600160a01b03811661127657816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561125d57600080fd5b505af1158015611271573d6000803e3d6000fd5b505050505b505b949350505050565b600061128c6002613893565b905090565b60008060008360a00135806112a46134f1565b11156112ed576040805162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015290519081900360640190fd5b84356000908152600d602090815260408083206001808201546001600160501b0381168652600c855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a0152925116828701523082850152600160501b8304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a013561010084015289013561012083015292906113cf9061389e565b6001870154939a5091985096509150600090611402903090600160501b8104600290810b91600160681b9004900b6135d4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b815260040161143391906159c5565b60a06040518083038186803b15801561144b57600080fd5b505afa15801561145f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114839190615634565b505092509250506114bf866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b613629565b6004870180546001600160801b0380821690930183166001600160801b0319909116179055600387015460018801546115069291840391600160801b918290041690613629565b6004870180546001600160801b03600160801b80830482169094018116840291811691909117909155600288018490556003880183905560018801805483810483168e018316909302929091169190911790556040518b3590600080516020615eec8339815191529061157e908d908d908d90615b36565b60405180910390a2611591848c356136d8565b505050505050509193909250565b6115b06115aa6133db565b82613455565b6115eb5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f966031913960400191505060405180910390fd5b610900838383613ad9565b6001600160a01b03821660009081526001602052604081206116189083613c13565b90505b92915050565b600080516020615f3583398151915281565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006116a0613c1f565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b61090083838360405180602001604052806000815250612b2c565b806117173382613455565b6117335760405162461bcd60e51b815260040161080390615a07565b6000828152600d602052604090206001810154600160801b90046001600160801b031615801561176e575060048101546001600160801b0316155b801561178c57506004810154600160801b90046001600160801b0316155b6117a85760405162461bcd60e51b815260040161080390615ad1565b6000838152600d602052604081208181556001810182905560028101829055600381018290556004015561090083613c23565b604080516323f2ebc360e21b815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118e457600080fd5b505afa1580156118f8573d6000803e3d6000fd5b505050506040513d602081101561190e57600080fd5b505190508281101561195c576040805162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e7420574554483960701b604482015290519081900360640190fd5b8015610900577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156119c857600080fd5b505af11580156119dc573d6000803e3d6000fd5b5050505061090082826137a4565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080611a1c600284613cde565b509392505050565b600061161b82604051806060016040528060298152602001615ea16029913960029190613cfc565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d25780601f106107a7576101008083540402835291602001916107d2565b60006001600160a01b038216611af45760405162461bcd60e51b815260040180806020018281038252602a815260200180615e77602a913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902061161b90613893565b83611b1e6134f1565b1115611b62576040805162461bcd60e51b815260206004820152600e60248201526d14195c9b5a5d08195e1c1a5c995960921b604482015290519081900360640190fd5b6000611b6c611633565b600080516020615f358339815191528888611b8681613d09565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018a90528151808403909101815260c08301825280519084012061190160f01b60e084015260e283019490945261010280830194909452805180830390940184526101229091019052815191012090506000611c0e87611a24565b9050806001600160a01b0316886001600160a01b03161415611c615760405162461bcd60e51b8152600401808060200182810382526027815260200180615da26027913960400191505060405180910390fd5b611c6a81613d3e565b15611dd2576040805160208082018790528183018690526001600160f81b031960f889901b1660608301528251604181840301815260618301808552630b135d3f60e11b90526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611d03578181015183820152602001611ceb565b50505050905090810190601f168015611d305780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611d4e57600080fd5b505afa158015611d62573d6000803e3d6000fd5b505050506040513d6020811015611d7857600080fd5b50516001600160e01b031916630b135d3f60e11b14611dcd576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b611ee1565b600060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611e2e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e8a576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b031614611edf576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b505b611eeb88886133df565b5050505050505050565b60006002600a541415611f3d576040805162461bcd60e51b815260206004820152601f6024820152600080516020615d50833981519152604482015290519081900360640190fd5b6002600a5560005b8281101561207d57838382818110611f5957fe5b611f6f92602060409092020190810191506150c9565b6001600160a01b031663540d49186040518163ffffffff1660e01b815260040160206040518083038186803b158015611fa757600080fd5b505afa158015611fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdf9190615443565b6001600160a01b031663ddc63262858584818110611ff957fe5b905060400201602001356040518263ffffffff1660e01b815260040161201f91906159c5565b602060405180830381600087803b15801561203957600080fd5b505af115801561204d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120719190615758565b90910190600101611f45565b506001600a5592915050565b6000806000808461014001358061209e6134f1565b11156120e7576040805162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015290519081900360640190fd5b6040805161014081019091526000906121b3908061210860208b018b6150c9565b6001600160a01b0316815260200189602001602081019061212991906150c9565b6001600160a01b0316815260200161214760608b0160408c01615726565b62ffffff16815230602082015260400161216760808b0160608c0161545f565b60020b815260200161217f60a08b0160808c0161545f565b60020b81526020018960a0013581526020018960c0013581526020018960e00135815260200189610100013581525061389e565b929750909550935090506122006121d261014089016101208a016150c9565b600e80546001600160b01b0319811660016001600160b01b0392831690810190921617909155975087613d44565b600061222b3061221660808b0160608c0161545f565b61222660a08c0160808d0161545f565b6135d4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b815260040161225c91906159c5565b60a06040518083038186803b15801561227457600080fd5b505afa158015612288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ac9190615634565b5050925092505060006123258560405180606001604052808e60000160208101906122d791906150c9565b6001600160a01b031681526020018e60200160208101906122f891906150c9565b6001600160a01b031681526020018e60400160208101906123199190615726565b62ffffff169052613e5f565b905060405180610140016040528060006001600160601b0316815260200160006001600160a01b03168152602001826001600160501b031681526020018c6060016020810190612375919061545f565b60020b815260200161238d60a08e0160808f0161545f565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600d60008c815260200190815260200160002060008201518160000160006101000a8154816001600160601b0302191690836001600160601b03160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160501b0302191690836001600160501b03160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b0316021790555090505089600080516020615eec8339815191528a8a8a60405161257a93929190615b36565b60405180910390a261258c858b6136d8565b5050505050509193509193565b6010546001600160a01b031681565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d25780601f106107a7576101008083540402835291602001916107d2565b6000818152600d6020908152604080832081516101408101835281546001600160601b03811682526001600160a01b03600160601b909104169381019390935260018101546001600160501b038116928401839052600160501b8104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e0860152600490920154808316610100860152041661012083015282918291829182918291829182918291829182918291906126fa5760405162461bcd60e51b815260040161080390615aa7565b6000600c600083604001516001600160501b03166001600160501b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b6128226133db565b6001600160a01b0316826001600160a01b03161415612884576040805162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b604482015290519081900360640190fd5b80600560006128916133db565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556128d56133db565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b60408051636eb1769f60e11b81523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b15801561296c57600080fd5b505afa158015612980573d6000803e3d6000fd5b505050506040513d602081101561299657600080fd5b505110156129ac576129ac8686868686866117db565b505050505050565b6060816001600160401b03811180156129cc57600080fd5b50604051908082528060200260200182016040528015612a0057816020015b60608152602001906001900390816129eb5790505b50905060005b82811015612aec5760008030868685818110612a1e57fe5b9050602002810190612a309190615c23565b604051612a3e929190615871565b600060405180830381855af49150503d8060008114612a79576040519150601f19603f3d011682016040523d82523d6000602084013e612a7e565b606091505b509150915081612aca57604481511015612a9757600080fd5b60048101905080806020019051810190612ab1919061547b565b60405162461bcd60e51b815260040161080391906159f4565b80848481518110612ad757fe5b60209081029190910101525050600101612a06565b5092915050565b6010546001600160a01b03163314612b0a57600080fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b612b3d612b376133db565b83613455565b612b785760405162461bcd60e51b8152600401808060200182810382526031815260200180615f966031913960400191505060405180910390fd5b612b8484848484613f3e565b50505050565b60408051636eb1769f60e11b8152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b158015612bd957600080fd5b505afa158015612bed573d6000803e3d6000fd5b505050506040513d6020811015612c0357600080fd5b505110156129ac576129ac868686868686612e7b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060612c48826133ce565b612c5157600080fd5b600f546001600160a01b031615612cef57600f5460405163e9dc637560e01b81526001600160a01b039091169063e9dc637590612c949030908690600401615895565b60006040518083038186803b158015612cac57600080fd5b505afa158015612cc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ce8919081019061547b565b9050610741565b612ce8611a4c565b6000612d058284018461552e565b9050612d357f00000000000000000000000000000000000000000000000000000000000000008260000151613f90565b508415612d50578051516020820151612d5091903388613fb3565b8315612d6e57612d6e81600001516020015182602001513387613fb3565b5050505050565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612dc457600080fd5b505afa158015612dd8573d6000803e3d6000fd5b505050506040513d6020811015612dee57600080fd5b5051905082811015612e3c576040805162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a103a37b5b2b760711b604482015290519081900360640190fd5b8015612b8457612b84848383614143565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6040805163d505accf60e01b8152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b15801561185557600080fd5b6000808235612efc3382613455565b612f185760405162461bcd60e51b815260040161080390615a07565b6000612f2a60608601604087016155ea565b6001600160801b03161180612f5757506000612f4c60808601606087016155ea565b6001600160801b0316115b612f6057600080fd5b600080612f7360408701602088016150c9565b6001600160a01b031614612f9657612f9160408601602087016150c9565b612f98565b305b85356000908152600d602090815260408083206001808201546001600160501b03168552600c8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff16918301919091529293509061302b7f0000000000000000000000000000000000000000000000000000000000000000836134f5565b600484015460018501549192506001600160801b0380821692600160801b928390048216929004161561322157600185015460405163a34123a760e01b81526001600160a01b0385169163a34123a7916130a291600160501b8104600290810b92600160681b909204900b906000906004016159ce565b6040805180830381600087803b1580156130bb57600080fd5b505af11580156130cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f39190615794565b5050600185015460009081906001600160a01b0386169063514ea4bf90613131903090600160501b8104600290810b91600160681b9004900b6135d4565b6040518263ffffffff1660e01b815260040161314d91906159c5565b60a06040518083038186803b15801561316557600080fd5b505afa158015613179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319d9190615634565b505092509250506131d9876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613629565b84019350613212876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613629565b60028801929092556003870155015b6000806001600160801b03841661323e60608e0160408f016155ea565b6001600160801b0316116132615761325c60608d0160408e016155ea565b613263565b835b836001600160801b03168d606001602081019061328091906155ea565b6001600160801b0316116132a35761329e60808e0160608f016155ea565b6132a5565b835b60018901546040516309e3d67b60e31b81529294509092506001600160a01b03871691634f1eb3d8916132f8918c91600160501b8104600290810b92600160681b909204900b90889088906004016158f3565b6040805180830381600087803b15801561331157600080fd5b505af1158015613325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133499190615606565b6004890180546001600160801b03196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f01906133b8908b9086908690615930565b60405180910390a2505050505050505050915091565b600061161b60028361428a565b3390565b6000818152600d6020526040902080546001600160601b0316600160601b6001600160a01b03851690810291909117909155819061341c82611a24565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000613460826133ce565b61349b5760405162461bcd60e51b815260040180806020018281038252602c815260200180615e13602c913960400191505060405180910390fd5b60006134a683611a24565b9050806001600160a01b0316846001600160a01b031614806134e15750836001600160a01b03166134d6846107dc565b6001600160a01b0316145b8061127857506112788185612e4d565b4290565b600081602001516001600160a01b031682600001516001600160a01b03161061351d57600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301206001600160f81b031960a085015294901b6001600160601b03191660a183015260b58201939093527fc13ff1403cc9ff4c5fe6163a8a95f13059dd8c2a37de80fe0ff009ccc34dc10660d5808301919091528251808303909101815260f5909101909152805191012090565b604080516001600160601b0319606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b600080806000198587098686029250828110908390030390508061365f576000841161365457600080fd5b508290049050613622565b80841161366b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b816001600160a01b031663540d49186040518163ffffffff1660e01b815260040160206040518083038186803b15801561371157600080fd5b505afa158015613725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137499190615443565b6001600160a01b0316630ef65e1b33836040518363ffffffff1660e01b8152600401613776929190615895565b600060405180830381600087803b15801561379057600080fd5b505af11580156129ac573d6000803e3d6000fd5b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106137f05780518252601f1990920191602091820191016137d1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613852576040519150601f19603f3d011682016040523d82523d6000602084013e613857565b606091505b5050905080610900576040805162461bcd60e51b815260206004820152600360248201526253544560e81b604482015290519081900360640190fd5b600061161b82614296565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff1681525090506139107f0000000000000000000000000000000000000000000000000000000000000000826134f5565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561394d57600080fd5b505afa158015613961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139859190615695565b5050505050509050600061399c886080015161429a565b905060006139ad8960a0015161429a565b90506139c48383838c60c001518d60e001516145c1565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b0316815250604051602001613a169190615af6565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401613a459594939291906158ae565b6040805180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a969190615794565b61010088015191955093508410801590613ab557508561012001518310155b613ad15760405162461bcd60e51b815260040161080390615a79565b509193509193565b826001600160a01b0316613aec82611a24565b6001600160a01b031614613b315760405162461bcd60e51b8152600401808060200182810382526029815260200180615f0c6029913960400191505060405180910390fd5b6001600160a01b038216613b765760405162461bcd60e51b8152600401808060200182810382526024815260200180615dc96024913960400191505060405180910390fd5b613b81838383610900565b613b8c6000826133df565b6001600160a01b0383166000908152600160205260409020613bae9082614685565b506001600160a01b0382166000908152600160205260409020613bd19082614691565b50613bde6002828461469d565b5080826001600160a01b0316846001600160a01b0316600080516020615f5583398151915260405160405180910390a4505050565b600061161883836146b3565b4690565b6000613c2e82611a24565b9050613c3c81600084610900565b613c476000836133df565b6000828152600860205260409020546002600019610100600184161502019091160415613c85576000828152600860205260408120613c8591615039565b6001600160a01b0381166000908152600160205260409020613ca79083614685565b50613cb3600283614717565b5060405182906000906001600160a01b03841690600080516020615f55833981519152908390a45050565b6000808080613ced8686614723565b909450925050505b9250929050565b600061127884848461479e565b6000908152600d6020526040902080546001600160601b0319811660016001600160601b039283169081019092161790915590565b3b151590565b6001600160a01b038216613d9f576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613da8816133ce565b15613df9576040805162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604482015290519081900360640190fd5b613e0560008383610900565b6001600160a01b0382166000908152600160205260409020613e279082614691565b50613e346002828461469d565b5060405181906001600160a01b03841690600090600080516020615f55833981519152908290a45050565b6001600160a01b0382166000908152600b60205260409020546001600160501b03168061161b5750600e805460016001600160501b03600160b01b8084048216838101909216026001600160b01b03909316929092179092556001600160a01b038085166000908152600b6020908152604080832080546001600160501b03191686179055848352600c825291829020865181549085166001600160a01b031991821617825591870151950180549287015162ffffff16600160a01b0262ffffff60a01b19969094169290911691909117939093161790915592915050565b613f49848484613ad9565b613f5584848484614868565b612b845760405162461bcd60e51b8152600401808060200182810382526032815260200180615d706032913960400191505060405180910390fd5b6000613f9c83836134f5565b9050336001600160a01b0382161461161b57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015613ff45750804710155b15614116577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561405457600080fd5b505af1158015614068573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156140e457600080fd5b505af11580156140f8573d6000803e3d6000fd5b505050506040513d602081101561410e57600080fd5b50612b849050565b6001600160a01b03831630141561413757614132848383614143565b612b84565b612b84848484846149d0565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106141bf5780518252601f1990920191602091820191016141a0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614221576040519150601f19603f3d011682016040523d82523d6000602084013e614226565b606091505b5091509150818015614254575080511580614254575080806020019051602081101561425157600080fd5b50515b612d6e576040805162461bcd60e51b815260206004820152600260248201526114d560f21b604482015290519081900360640190fd5b60006116188383614b20565b5490565b60008060008360020b126142b1578260020b6142b9565b8260020b6000035b9050620d89e88111156142f7576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661430b57600160801b61431d565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615614347576ffff97272373d413259a46990580e213a0260801c5b6004821615614366576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615614385576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156143a4576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156143c3576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156143e2576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615614401576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615614421576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614441576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614461576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614481576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156144a1576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156144c1576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156144e1576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614501576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614522576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614542576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614561576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561457e576b048a170391f7dc42444e8fa20260801c5b60008460020b131561459957806000198161459557fe5b0490505b600160201b8106156145ac5760016145af565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b031611156145e1579293925b846001600160a01b0316866001600160a01b03161161460c57614605858585614b38565b905061467c565b836001600160a01b0316866001600160a01b0316101561466e576000614633878686614b38565b90506000614642878986614b9b565b9050806001600160801b0316826001600160801b0316106146635780614665565b815b9250505061467c565b614679858584614b9b565b90505b95945050505050565b60006116188383614bd8565b60006116188383614c9e565b600061127884846001600160a01b038516614ce8565b815460009082106146f55760405162461bcd60e51b8152600401808060200182810382526022815260200180615d2e6022913960400191505060405180910390fd5b82600001828154811061470457fe5b9060005260206000200154905092915050565b60006116188383614d7f565b8154600090819083106147675760405162461bcd60e51b8152600401808060200182810382526022815260200180615eca6022913960400191505060405180910390fd5b600084600001848154811061477857fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816148395760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156147fe5781810151838201526020016147e6565b50505050905090810190601f16801561482b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061484c57fe5b9060005260206000209060020201600101549150509392505050565b600061487c846001600160a01b0316613d3e565b61488857506001611278565b6000614996630a85bd0160e11b61489d6133db565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156149045781810151838201526020016148ec565b50505050905090810190601f1680156149315780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001615d70603291396001600160a01b0388169190614e53565b905060008180602001905160208110156149af57600080fd5b50516001600160e01b031916630a85bd0160e11b1492505050949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b60208310614a545780518252601f199092019160209182019101614a35565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614ab6576040519150601f19603f3d011682016040523d82523d6000602084013e614abb565b606091505b5091509150818015614ae9575080511580614ae95750808060200190516020811015614ae657600080fd5b50515b6129ac576040805162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614b58579192915b6000614b7b856001600160a01b0316856001600160a01b0316600160601b613629565b905061467c614b9684838888036001600160a01b0316613629565b614e62565b6000826001600160a01b0316846001600160a01b03161115614bbb579192915b611278614b9683600160601b8787036001600160a01b0316613629565b60008181526001830160205260408120548015614c945783546000198083019190810190600090879083908110614c0b57fe5b9060005260206000200154905080876000018481548110614c2857fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614c5857fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061161b565b600091505061161b565b6000614caa8383614b20565b614ce05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561161b565b50600061161b565b600082815260018401602052604081205480614d4d575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055613622565b82856000016001830381548110614d6057fe5b9060005260206000209060020201600101819055506000915050613622565b60008181526001830160205260408120548015614c945783546000198083019190810190600090879083908110614db257fe5b9060005260206000209060020201905080876000018481548110614dd257fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614e1157fe5b600082815260208082206002600019909401938402018281556001908101839055929093558881528982019092526040822091909155945061161b9350505050565b60606112788484600085614e78565b806001600160801b038116811461074157600080fd5b606082471015614eb95760405162461bcd60e51b8152600401808060200182810382526026815260200180615ded6026913960400191505060405180910390fd5b614ec285613d3e565b614f13576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614f515780518252601f199092019160209182019101614f32565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614fb3576040519150601f19603f3d011682016040523d82523d6000602084013e614fb8565b606091505b5091509150614fc8828286614fd3565b979650505050505050565b60608315614fe2575081613622565b825115614ff25782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156147fe5781810151838201526020016147e6565b50805460018160011615610100020316600290046000825580601f1061505f575061507d565b601f01602090049060005260206000209081019061507d9190615080565b50565b5b808211156150955760008155600101615081565b5090565b803561074181615cd7565b805161ffff8116811461074157600080fd5b803562ffffff8116811461074157600080fd5b6000602082840312156150da578081fd5b813561362281615cd7565b600080604083850312156150f7578081fd5b823561510281615cd7565b9150602083013561511281615cd7565b809150509250929050565b60008060008060808587031215615132578182fd5b843561513d81615cd7565b9350602085013561514d81615cd7565b925061515b604086016150b6565b9150606085013561516b81615cd7565b939692955090935050565b60008060006060848603121561518a578081fd5b833561519581615cd7565b925060208401356151a581615cd7565b929592945050506040919091013590565b600080600080608085870312156151cb578182fd5b84356151d681615cd7565b935060208501356151e681615cd7565b92506040850135915060608501356001600160401b03811115615207578182fd5b8501601f81018713615217578182fd5b803561522a61522582615c8a565b615c67565b81815288602083850101111561523e578384fd5b81602084016020830137908101602001929092525092959194509250565b6000806040838503121561526e578182fd5b823561527981615cd7565b9150602083013561511281615cec565b6000806040838503121561529b578182fd5b82356152a681615cd7565b946020939093013593505050565b6000806000606084860312156152c8578081fd5b83356152d381615cd7565b92506020840135915060408401356152ea81615cd7565b809150509250925092565b60008060008060008060c0878903121561530d578384fd5b863561531881615cd7565b95506020870135945060408701359350606087013561533681615d1e565b9598949750929560808101359460a0909101359350915050565b60008060208385031215615362578182fd5b82356001600160401b0380821115615378578384fd5b818501915085601f83011261538b578384fd5b813581811115615399578485fd5b86602080830285010111156153ac578485fd5b60209290920196919550909350505050565b600080602083850312156153d0578182fd5b82356001600160401b03808211156153e6578384fd5b818501915085601f8301126153f9578384fd5b813581811115615407578485fd5b8660206040830285010111156153ac578485fd5b60006020828403121561542c578081fd5b81356001600160e01b031981168114613622578182fd5b600060208284031215615454578081fd5b815161362281615cd7565b600060208284031215615470578081fd5b813561362281615cfa565b60006020828403121561548c578081fd5b81516001600160401b038111156154a1578182fd5b8201601f810184136154b1578182fd5b80516154bf61522582615c8a565b8181528560208385010111156154d3578384fd5b61467c826020830160208601615cab565b6000608082840312156154f5578081fd5b50919050565b600060a082840312156154f5578081fd5b6000604082840312156154f5578081fd5b600060c082840312156154f5578081fd5b60008183036080811215615540578182fd5b604080519081016001600160401b03808211838310171561555d57fe5b81604052606084121561556e578485fd5b60a083019350818410818511171561558257fe5b50826040528435925061559483615cd7565b9182526020840135916155a683615cd7565b8260608301526155b8604086016150b6565b608083015281526155cb60608501615099565b6020820152949350505050565b600061016082840312156154f5578081fd5b6000602082840312156155fb578081fd5b813561362281615d09565b60008060408385031215615618578182fd5b825161562381615d09565b602084015190925061511281615d09565b600080600080600060a0868803121561564b578283fd5b855161565681615d09565b809550506020860151935060408601519250606086015161567681615d09565b608087015190925061568781615d09565b809150509295509295909350565b600080600080600080600060e0888a0312156156af578485fd5b87516156ba81615cd7565b60208901519097506156cb81615cfa565b95506156d9604089016150a4565b94506156e7606089016150a4565b93506156f5608089016150a4565b925060a088015161570581615d1e565b60c089015190925061571681615cec565b8091505092959891949750929550565b600060208284031215615737578081fd5b611618826150b6565b600060208284031215615751578081fd5b5035919050565b600060208284031215615769578081fd5b5051919050565b60008060408385031215615782578182fd5b82359150602083013561511281615cd7565b600080604083850312156157a6578182fd5b505080516020909101519092909150565b600080600080606085870312156157cc578182fd5b843593506020850135925060408501356001600160401b03808211156157f0578384fd5b818701915087601f830112615803578384fd5b813581811115615811578485fd5b886020828501011115615822578485fd5b95989497505060200194505050565b60008151808452615849816020860160208601615cab565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a060808201819052600090614fc890830184615831565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156159ad57603f1988860301845261599b858351615831565b9450928501929085019060010161597f565b5092979650505050505050565b901515815260200190565b90815260200190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b6000602082526116186020830184615831565b6020808252600c908201526b139bdd08185c1c1c9bdd995960a21b604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b602080825260149082015273507269636520736c69707061676520636865636b60601b604082015260600190565b60208082526010908201526f125b9d985b1a59081d1bdad95b88125160821b604082015260600190565b6020808252600b908201526a139bdd0818db19585c995960aa1b604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6001600160601b038d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a08201526101808101615bdb60c083018961585d565b615be860e0830188615864565b8561010083015284610120830152615c04610140830185615864565b615c12610160830184615864565b9d9c50505050505050505050505050565b6000808335601e19843603018112615c39578283fd5b8301803591506001600160401b03821115615c52578283fd5b602001915036819003821315613cf557600080fd5b6040518181016001600160401b0381118282101715615c8257fe5b604052919050565b60006001600160401b03821115615c9d57fe5b50601f01601f191660200190565b60005b83811015615cc6578181015183820152602001615cae565b83811115612b845750506000910152565b6001600160a01b038116811461507d57600080fd5b801515811461507d57600080fd5b8060020b811461507d57600080fd5b6001600160801b038116811461507d57600080fd5b60ff8116811461507d57600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64735265656e7472616e637947756172643a207265656e7472616e742063616c6c004552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315065726d69743a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64733067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9adddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220ee976eefd6bf08305aab8f0d506c93615ac904a839563960078801067607d7c064736f6c634300070600330000000000000000000000002e9fdba6b22581c3167e0bde9a127e751327f84b000000000000000000000000a74dee2c0338b57aa11c9793cc016a301d320cb20000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f737461746963732e756e636861696e782e696f2f38343533322f706f736974696f6e73000000000000000000000000000000000000000000