[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "AddToPosition", "type": "event" }, { "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": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "CreatePosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "EmergencyWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "pending", "type": "uint256" } ], "name": "HarvestPosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "LockPosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "MergePositions", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "lastRewardTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accRewardsPerShare", "type": "uint256" } ], "name": "PoolUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "boostPoints", "type": "uint256" } ], "name": "SetBoost", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "maxGlobalMultiplier", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "maxBoostMultiplier", "type": "uint256" } ], "name": "SetBoostMultiplierSettings", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "emergencyUnlock", "type": "bool" } ], "name": "SetEmergencyUnlock", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "maxLockDuration", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "maxLockMultiplier", "type": "uint256" } ], "name": "SetLockMultiplierSettings", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "operator", "type": "address" } ], "name": "SetOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isAdded", "type": "bool" } ], "name": "SetUnlockOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "xPlaneRewardsShare", "type": "uint256" } ], "name": "SetXPlaneRewardsShare", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "splitAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTokenId", "type": "uint256" } ], "name": "SplitPosition", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "WithdrawFromPosition", "type": "event" }, { "inputs": [], "name": "BLAST", "outputs": [ { "internalType": "contract IBlast", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_BOOST_MULTIPLIER_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_GLOBAL_MULTIPLIER_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_LOCK_MULTIPLIER_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amountToAdd", "type": "uint256" } ], "name": "addToPosition", "outputs": [], "stateMutability": "nonpayable", "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" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "boost", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "createPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "emergencyUnlock", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "boostPoints", "type": "uint256" } ], "name": "getMultiplierByBoostPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "getMultiplierByLockDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMultiplierSettings", "outputs": [ { "internalType": "uint256", "name": "maxGlobalMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "maxLockDuration", "type": "uint256" }, { "internalType": "uint256", "name": "maxLockMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "maxBoostMultiplier", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPoolInfo", "outputs": [ { "internalType": "address", "name": "lpToken", "type": "address" }, { "internalType": "address", "name": "planeToken", "type": "address" }, { "internalType": "address", "name": "xPlaneToken", "type": "address" }, { "internalType": "uint256", "name": "lastRewardTime", "type": "uint256" }, { "internalType": "uint256", "name": "accRewardsPerShare", "type": "uint256" }, { "internalType": "uint256", "name": "lpSupply", "type": "uint256" }, { "internalType": "uint256", "name": "lpSupplyWithMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "allocPoint", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getStakingPosition", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "amountWithMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startLockTime", "type": "uint256" }, { "internalType": "uint256", "name": "lockDuration", "type": "uint256" }, { "internalType": "uint256", "name": "lockMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "rewardDebt", "type": "uint256" }, { "internalType": "uint256", "name": "boostPoints", "type": "uint256" }, { "internalType": "uint256", "name": "totalMultiplier", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "harvestPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "harvestPositionTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "harvestPositionsTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "hasDeposits", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IPlanarMaster", "name": "master_", "type": "address" }, { "internalType": "contract IERC20", "name": "planeToken", "type": "address" }, { "internalType": "contract IXPlaneToken", "name": "xPlaneToken", "type": "address" }, { "internalType": "contract IERC20", "name": "lpToken", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": [ { "internalType": "address", "name": "_operator", "type": "address" } ], "name": "isUnlockOperator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isUnlocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "lockPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "master", "outputs": [ { "internalType": "contract IPlanarMaster", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "mergePositions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "pendingRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "renewLockPosition", "outputs": [], "stateMutability": "nonpayable", "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": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxGlobalMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "maxBoostMultiplier", "type": "uint256" } ], "name": "setBoostMultiplierSettings", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "emergencyUnlock_", "type": "bool" } ], "name": "setEmergencyUnlock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxLockDuration", "type": "uint256" }, { "internalType": "uint256", "name": "maxLockMultiplier", "type": "uint256" } ], "name": "setLockMultiplierSettings", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator_", "type": "address" } ], "name": "setOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_operator", "type": "address" }, { "internalType": "bool", "name": "add", "type": "bool" } ], "name": "setUnlockOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "xPlaneRewardsShare_", "type": "uint256" } ], "name": "setXPlaneRewardsShare", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "splitAmount", "type": "uint256" } ], "name": "splitPosition", "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": [], "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": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "unboost", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "unlockOperator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unlockOperatorsLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "updatePool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amountToWithdraw", "type": "uint256" } ], "name": "withdrawFromPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "xPlaneRewardsShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "yieldBooster", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60a0604052614e2060165562f14280601755612710601855612710601955611f40601a553480156200003057600080fd5b50604080518082018252601a81527f506c616e6172204c6f636b656420506f736974696f6e204e4654000000000000602080830191909152825180840190935260058352641b1c13919560da1b90830152600160005590620000996301ffc9a760e01b62000248565b8151620000ae906007906020850190620002d0565b508051620000c4906008906020840190620002d0565b50620000d76380ac58cd60e01b62000248565b620000e9635b5e139f60e01b62000248565b620000fb63780e9d6360e01b62000248565b50507343000000000000000000000000000000000000026001600160a01b031663f098767a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200014d57600080fd5b505af115801562000162573d6000803e3d6000fd5b505050507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001b657600080fd5b505af1158015620001cb573d6000803e3d6000fd5b505060408051631d70c8d360e31b81523360048201529051734300000000000000000000000000000000000002935063eb8646989250602480830192600092919082900301818387803b1580156200022257600080fd5b505af115801562000237573d6000803e3d6000fd5b5050503360601b608052506200037c565b6001600160e01b03198082161415620002a8576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000308576000855562000353565b82601f106200032357805160ff191683800117855562000353565b8280016001018555821562000353579182015b828111156200035357825182559160200191906001019062000336565b506200036192915062000365565b5090565b5b8082111562000361576000815560010162000366565b60805160601c61540b6200039f600039806127c95280612e95525061540b6000f3fe608060405234801561001057600080fd5b50600436106103c55760003560e01c80636e00e2da116101ff578063c00e53ea1161011a578063e61f927d116100ad578063f2e16b3c1161007c578063f2e16b3c14610c5a578063f84ddf0b14610c7d578063f8c8765e14610c85578063fdc5f93014610cc3576103c5565b8063e61f927d14610c14578063e985e9c514610c1c578063ee97f7f314610c4a578063f2c3999214610c52576103c5565b8063d4e32de6116100e9578063d4e32de614610405578063d5232dee14610be1578063dc6e15bd14610c04578063e3161ddd14610c0c576103c5565b8063c00e53ea14610b7c578063c45a015514610b99578063c87b56dd14610ba1578063d1aaef0514610bbe576103c5565b80639016f82211610192578063a6b0b2a811610161578063a6b0b2a814610a65578063a9a647e814610a88578063b3ab15fb14610a90578063b88d4fde14610ab6576103c5565b80639016f82214610a0457806395d89b4114610a2757806397d7577614610a2f578063a22cb46514610a37576103c5565b8063832c51f6116101ce578063832c51f6146109a95780638380edb7146109d7578063842072af146109df5780638da5cb5b146109fc576103c5565b80636e00e2da1461091d5780636f8297af1461094057806370a08231146109665780637dcb2abf1461098c576103c5565b80632f745c59116102ef5780634f6ccce71161028257806360246c881161025157806360246c88146108985780636352211e146108f057806368e5dab51461090d5780636c0360eb14610915576103c5565b80634f6ccce7146107e65780635312ea8e1461080357806356dd590b14610820578063570ca73514610890576103c5565b80634a256786116102be5780634a256786146106ff5780634cd5520b146107225780634d05c3181461079b5780634f558e79146107c9576103c5565b80632f745c591461064e5780633e9b453e1461067a57806340be7bec146106a657806342842e0e146106c9576103c5565b806313e46e841161036757806320f8e94e1161033657806320f8e94e146105b957806323b872dd146105d65780632c542ede1461060c5780632f38e0421461062f576103c5565b806313e46e8414610584578063158ef93e1461058c57806318160ddd146105945780631dc602071461059c576103c5565b806306fdde03116103a357806306fdde0314610444578063081812fc146104c157806308521f79146104fa578063095ea7b314610558576103c5565b806301ffc9a7146103ca5780630332f1141461040557806304d5b62d1461041f575b600080fd5b6103f1600480360360208110156103e057600080fd5b50356001600160e01b031916610ce0565b604080519115158252519081900360200190f35b61040d610d03565b60408051918252519081900360200190f35b6104426004803603604081101561043557600080fd5b5080359060200135610d09565b005b61044c610f57565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561048657818101518382015260200161046e565b50505050905090810190601f1680156104b35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104de600480360360208110156104d757600080fd5b5035610fed565b604080516001600160a01b039092168252519081900360200190f35b6105176004803603602081101561051057600080fd5b503561104f565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b6104426004803603604081101561056e57600080fd5b506001600160a01b038135169060200135611093565b61040d61116e565b6103f1611174565b61040d611184565b6104de600480360360208110156105b257600080fd5b5035611195565b610442600480360360208110156105cf57600080fd5b50356111c0565b610442600480360360608110156105ec57600080fd5b506001600160a01b03813581169160208101359091169060400135611248565b6104426004803603604081101561062257600080fd5b50803590602001356112a8565b6104426004803603602081101561064557600080fd5b50351515611425565b61040d6004803603604081101561066457600080fd5b506001600160a01b038135169060200135611479565b6104426004803603604081101561069057600080fd5b50803590602001356001600160a01b03166114a2565b610442600480360360408110156106bc57600080fd5b508035906020013561157f565b610442600480360360608110156106df57600080fd5b506001600160a01b038135811691602081013590911690604001356116a4565b6104426004803603604081101561071557600080fd5b50803590602001356116bf565b6104426004803603604081101561073857600080fd5b81019060208101813564010000000081111561075357600080fd5b82018360208201111561076557600080fd5b8035906020019184602083028401116401000000008311171561078757600080fd5b9193509150356001600160a01b03166117b4565b610442600480360360408110156107b157600080fd5b506001600160a01b03813516906020013515156118ec565b6103f1600480360360208110156107df57600080fd5b5035611961565b61040d600480360360208110156107fc57600080fd5b503561196c565b6104426004803603602081101561081957600080fd5b5035611982565b6104426004803603604081101561083657600080fd5b81019060208101813564010000000081111561085157600080fd5b82018360208201111561086357600080fd5b8035906020019184602083028401116401000000008311171561088557600080fd5b919350915035611ad9565b6104de611daf565b6108a0611dbe565b604080516001600160a01b03998a168152978916602089015295909716868601526060860193909352608085019190915260a084015260c083015260e08201929092529051908190036101000190f35b6104de6004803603602081101561090657600080fd5b5035611ea3565b6104de611ecb565b61044c611f41565b61040d6004803603604081101561093357600080fd5b5080359060200135611fa2565b6103f16004803603602081101561095657600080fd5b50356001600160a01b031661207b565b61040d6004803603602081101561097c57600080fd5b50356001600160a01b0316612088565b61040d600480360360208110156109a257600080fd5b50356120f0565b6109b1612261565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6103f1612273565b61040d600480360360208110156109f557600080fd5b50356122d0565b6104de61232e565b61044260048036036040811015610a1a57600080fd5b5080359060200135612373565b61044c6123f9565b6104de61245a565b61044260048036036040811015610a4d57600080fd5b506001600160a01b0381351690602001351515612465565b61044260048036036040811015610a7b57600080fd5b508035906020013561256a565b61040d61267e565b61044260048036036020811015610aa657600080fd5b50356001600160a01b0316612684565b61044260048036036080811015610acc57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610b0757600080fd5b820183602082011115610b1957600080fd5b80359060200191846001830284011164010000000083111715610b3b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506126e0945050505050565b61044260048036036020811015610b9257600080fd5b5035612742565b6104de6127c7565b61044c60048036036020811015610bb757600080fd5b50356127eb565b61044260048036036040811015610bd457600080fd5b5080359060200135612a6c565b61044260048036036040811015610bf757600080fd5b5080359060200135612ce5565b61040d612d4b565b610442612d57565b6103f1612db1565b6103f160048036036040811015610c3257600080fd5b506001600160a01b0381358116916020013516612db9565b6104de612de7565b6103f1612df6565b61044260048036036040811015610c7057600080fd5b5080359060200135612dff565b61040d612e7e565b61044260048036036080811015610c9b57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516612e8a565b61044260048036036020811015610cd957600080fd5b5035612fe2565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b613a9881565b60026000541415610d4f576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b6002600055610d5d8261305b565b610d656130e9565b610d7782610d7284611ea3565b6131d4565b6000828152601c6020526040902080548210610dd0576040805162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081cdc1b1a5d105b5bdd5b9d606a1b604482015290519081900360640190fd5b8054610ddc9083613375565b8155610de7816133d2565b6000610df233613475565b60038301546004840154919250906000610e22612710610e1c610e158583613497565b89906134f1565b9061354a565b905060405180610140016040528087815260200182815260200186600201548152602001848152602001838152602001610e73670de0b6b3a7640000610e1c601554866134f190919063ffffffff16565b815260006020808301829052604080840187905260608085018490526080948501849052898452601c83529281902085518155918501516001830155840151600282015590830151600382015590820151600482015560a0820151600582015560c0820151600682015560e08201516007820155610100820151600882015561012090910151600990910155601454610f0c9082613497565b6014556040805187815260208101869052815189927f83ad7662a93cf58f10a379c6370e942debc7c8cb1cffb157f519b12973264a4c928290030190a2505060016000555050505050565b60078054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fe35780601f10610fb857610100808354040283529160200191610fe3565b820191906000526020600020905b815481529060010190602001808311610fc657829003601f168201915b5050505050905090565b6000610ff8826135b1565b6110335760405162461bcd60e51b815260040180806020018281038252602c8152602001806152d6602c913960400191505060405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000908152601c6020526040902080546001820154600283015460038401546004850154600586015460068701546007909701549597949693959294919390929091565b600061109e82611ea3565b9050806001600160a01b0316836001600160a01b031614156110f15760405162461bcd60e51b815260040180806020018281038252602181526020018061535a6021913960400191505060405180910390fd5b806001600160a01b03166111036135be565b6001600160a01b0316148061112457506111248161111f6135be565b612db9565b61115f5760405162461bcd60e51b81526004018080602001828103825260388152602001806152086038913960400191505060405180910390fd5b61116983836135c2565b505050565b6161a881565b600f54600160a01b900460ff1681565b60006111906003613630565b905090565b6000816111a2600c613630565b116111af57506000610cfe565b6111ba600c8361363b565b92915050565b60026000541415611206576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b600260005561121481613647565b61121c6130e9565b61122981610d7283611ea3565b6000818152601c60205260409020611240906133d2565b506001600055565b6002600054141561128e576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b600260005561129e8383836136ed565b5050600160005550565b600260005414156112ee576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b60026000556112fc82613744565b6000811161133c576040805162461bcd60e51b81526020600482015260086024820152670c08185b5bdd5b9d60c21b604482015290519081900360640190fd5b6113446130e9565b600061134f83611ea3565b905061135b83826131d4565b6000838152601c602052604090206003810154156113945761137b61374e565b6002820155600381015461138e906122d0565b60048201555b6010546113ab906001600160a01b03163385613752565b81549093506113ba9084613497565b81556013546113c99084613497565b6013556113d5816133d2565b6113e0828585613871565b6040805133815260208101859052815186927f2bc3f231118d71058e11ae6ae9f199b789d86a7012a9d45f4c2ed7d7016478c2928290030190a2505060016000555050565b61142d613963565b601b805460ff191682151517908190556040805160ff90921615158252517f1545be19b3ba6f2e76454d1b8b59529cbbbdf7af9046fd49bd86c17314a5509d916020908290030190a150565b6001600160a01b038216600090815260026020526040812061149b908361363b565b9392505050565b600260005414156114e8576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b60026000556114f682613647565b61151061150283611ea3565b6001600160a01b03166139be565b61154d576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6115556130e9565b61155f82826131d4565b6000828152601c60205260409020611576906133d2565b50506001600055565b600260005414156115c5576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b60026000556115d26139c4565b6115db826135b1565b61161e576040805162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a59081d1bdad95b9259608a1b604482015290519081900360640190fd5b6116266130e9565b6116318260006131d4565b6000828152601c6020526040812060068101549091906116519084613497565b600683018190559050611663826133d2565b60408051828152905185917fe96d35ce795c2d6a754b1bf60d2ea30785c5a460b6d4bf0e5b48190e5084860d919081900360200190a2505060016000555050565b611169838383604051806020016040528060008152506126e0565b6116c7613963565b6161a8821115611709576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b613a98811115801561172f57508161172c6018548361349790919063ffffffff16565b11155b61176b576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b60168290556019819055604080518381526020810183905281517fde0bddf440a694ffa55b73c57fcb0c32fc9794b258c4e71ca2c867f6d7137f05929181900390910190a15050565b600260005414156117fa576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b60026000556118076130e9565b8160005b818110156118e057600085858381811061182157fe5b90506020020135905061183381613647565b600061183e82611ea3565b9050336001600160a01b0382161480156118605750336001600160a01b038616145b806118785750611878816001600160a01b03166139be565b6118b5576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6118bf82866131d4565b6000828152601c602052604090206118d6906133d2565b505060010161180b565b50506001600055505050565b6118f4613963565b801561190b57611905600c836139cc565b50611918565b611916600c836139e1565b505b604080516001600160a01b0384168152821515602082015281517f28d57a4483d2172573741520aa0af0c5ac1e83cb2523c0d1a37c07b90a2e9395929181900390910190a15050565b60006111ba826135b1565b60008061197a6003846139f6565b509392505050565b600260005414156119c8576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b60026000556119d68161305b565b6000818152601c602052604090206119ef600c33613a12565b80611a1357506119fd61374e565b60038201546002830154611a1091613497565b11155b80611a215750611a21612273565b611a5b576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b8054601354611a6a9082613375565b6013556001820154601454611a7e91613375565b601455611a8c836000613a27565b60408051828152905184917fb073e6fbd06d7557d2c82f414fee57de28e7fb517ecc0afdd6b1fc57034a9cb8919081900360200190a260105461129e906001600160a01b03163383613afe565b60026000541415611b1f576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b6002600055611b2c6130e9565b8160018111611b6c576040805162461bcd60e51b81526020600482015260076024820152661a5b9d985b1a5960ca1b604482015290519081900360640190fd5b600084846000818110611b7b57fe5b905060200201359050611b8d8161305b565b6000818152601c602052604090206003810154841015611be2576040805162461bcd60e51b815260206004820152600b60248201526a63616e2774206d6572676560a81b604482015290519081900360640190fd5b611bec82336131d4565b60038101849055611bfc846122d0565b600482015560015b83811015611d2b576000878783818110611c1a57fe5b905060200201359050611c2c8161305b565b83811415611c74576040805162461bcd60e51b815260206004820152601060248201526f1a5b9d985b1a59081d1bdad95b881a5960821b604482015290519081900360640190fd5b611c7e81336131d4565b6000818152601c602052604090206003810154871015611cd3576040805162461bcd60e51b815260206004820152600b60248201526a63616e2774206d6572676560a81b604482015290519081900360640190fd5b806002015484600201541015611cee57600280820154908501555b80548454611cfb91613497565b84556001810154601454611d0e91613375565b6014556006810154611d21908390613a27565b5050600101611c04565b50611d35816133d2565b336001600160a01b03167f1b6a7445053b0df83054e159a97edc3f3aad4284adaece07bef2fca11928a930878760405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a25050600160005550505050565b600e546001600160a01b031681565b600080600080600080600080600f60009054906101000a90046001600160a01b03166001600160a01b03166306bfa938306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060a06040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d60a0811015611e5657600080fd5b5060208101516040909101516010546011546012546015546013546014546001600160a01b039586169f509385169d50919093169a50929850909650909450925090509091929394959697565b60006111ba8260405180606001604052806029815260200161526a6029913960039190613b50565b600f54604080516368e5dab560e01b815290516000926001600160a01b0316916368e5dab5916004808301926020929190829003018186803b158015611f1057600080fd5b505afa158015611f24573d6000803e3d6000fd5b505050506040513d6020811015611f3a57600080fd5b5051905090565b600a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fe35780601f10610fb857610100808354040283529160200191610fe3565b6000811580611faf575082155b15611fbc575060006111ba565b6000611fc6611ecb565b90506001600160a01b038116611fdd576000612073565b6019546013546040805163d2eec6ff60e01b8152306004820152602481019390935260448301879052606483019190915260848201859052516001600160a01b0383169163d2eec6ff9160a4808301926020929190829003018186803b15801561204657600080fd5b505afa15801561205a573d6000803e3d6000fd5b505050506040513d602081101561207057600080fd5b50515b949350505050565b60006111ba600c83613a12565b60006001600160a01b0382166120cf5760405162461bcd60e51b815260040180806020018281038252602a815260200180615240602a913960400191505060405180910390fd5b6001600160a01b03821660009081526002602052604090206111ba90613630565b6000818152601c6020526040808220601554600f54835162d7f52760e31b81523060048201529351929391928592839283926001600160a01b03909116916306bfa9389160248083019260a0929190829003018186803b15801561215357600080fd5b505afa158015612167573d6000803e3d6000fd5b505050506040513d60a081101561217d57600080fd5b50604081015160608201516080909201519094509092509050811515806121aa5750826121a861374e565b115b80156121b857506000601454115b1561221b5760006121d1846121cb61374e565b90613375565b905060006121e9846121e384866134f1565b90613497565b905061221661220f601454610e1c670de0b6b3a7640000856134f190919063ffffffff16565b8790613497565b955050505b61225685600901546121e387600801546121e389600501546121cb670de0b6b3a7640000610e1c8c8e600101546134f190919063ffffffff16565b979650505050505050565b60165460175460185460195490919293565b601b5460009060ff16806111905750600f60009054906101000a90046001600160a01b03166001600160a01b031663f2c399926040518163ffffffff1660e01b815260040160206040518083038186803b158015611f1057600080fd5b60006122da612273565b156122e757506000610cfe565b60175415806122f4575081155b1561230157506000610cfe565b60175482106123135750601854610cfe565b6111ba601754610e1c846018546134f190919063ffffffff16565b600f5460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015611f1057600080fd5b600260005414156123b9576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b60026000556123c66139c4565b6123ce6130e9565b6123d98260006131d4565b6000828152601c6020526040812060068101549091906116519084613375565b60088054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fe35780601f10610fb857610100808354040283529160200191610fe3565b6002604360981b0181565b61246d6135be565b6001600160a01b0316826001600160a01b031614156124d3576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80600660006124e06135be565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556125246135be565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b61257261232e565b6001600160a01b0316336001600160a01b0316148061259b5750600e546001600160a01b031633145b6125d8576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b613a9881111580156125f957506016546019546125f6908390613497565b11155b612635576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b60178290556018819055604080518381526020810183905281517f46cf6b9b4ec75e8786b2e93d4beb426d70d56d9b0eb9bfd40e975f9dc59d7703929181900390910190a15050565b601a5481565b61268c613963565b600e80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdbebfba65bd6398fb722063efc10c99f624f9cd8ba657201056af918a676d5ee9181900360200190a150565b60026000541415612726576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b600260005561273784848484613b5d565b505060016000555050565b61274a613963565b61271081111561278c576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b601a8190556040805182815290517fb687d8869370f5739d066db2d7b4aa5ddf6822cf68f318fb48e3db7f3c4c8f289181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606127f6826135b1565b6128315760405162461bcd60e51b815260040180806020018281038252602f81526020018061532b602f913960400191505060405180910390fd5b60008281526009602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156128c45780601f10612899576101008083540402835291602001916128c4565b820191906000526020600020905b8154815290600101906020018083116128a757829003601f168201915b5050505050905060006128d5611f41565b90508051600014156128e957509050610cfe565b8151156129aa5780826040516020018083805190602001908083835b602083106129245780518252601f199092019160209182019101612905565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061296c5780518252601f19909201916020918201910161294d565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610cfe565b806129b485613bb5565b6040516020018083805190602001908083835b602083106129e65780518252601f1990920191602091820191016129c7565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612a2e5780518252601f199092019160209182019101612a0f565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b60026000541415612ab2576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b6002600055612abf612273565b15612b08578015612b08576040805162461bcd60e51b815260206004820152600e60248201526d1b1bd8dadcc8191a5cd8589b195960921b604482015290519081900360640190fd5b612b106130e9565b601054612b27906001600160a01b03163384613752565b915081612b69576040805162461bcd60e51b815260206004820152600b60248201526a1e995c9bc8185b5bdd5b9d60aa1b604482015290519081900360640190fd5b6000612b7433613475565b90506000612b81836122d0565b90506000612b9f612710610e1c612b988583613497565b88906134f1565b9050604051806101400160405280868152602001828152602001612bc161374e565b8152602001858152602001838152602001612bf3670de0b6b3a7640000610e1c601554866134f190919063ffffffff16565b815260006020808301829052604080840187905260608085018490526080948501849052888452601c83529281902085518155918501516001830155840151600282015590830151600382015590820151600482015560a0820151600582015560c0820151600682015560e08201516007820155610100820151600882015561012090910151600990910155601354612c8c9086613497565b601355601454612c9c9082613497565b6014556040805186815260208101869052815185927fc75220a9dbab7c65d9cc87d8534accb348d3f151ee2afccfb42e6ccf75556f23928290030190a250506001600055505050565b60026000541415612d2b576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b6002600055612d3982613647565b612d416130e9565b6115768282613c90565b6000611190600c613630565b60026000541415612d9d576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b6002600055612daa6130e9565b6001600055565b601454151590565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b600f546001600160a01b031681565b601b5460ff1681565b60026000541415612e45576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b6002600055612e5382613647565b612e5b6130e9565b6000612e6683611ea3565b9050612e73818484613dd5565b61129e818484613f85565b6000611190600b61401b565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612ecc5750600f54600160a01b900460ff16155b612f09576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b601080546001600160a01b03199081166001600160a01b0384811691909117909255600f805460118054841688861617908190556012805485168887161790819055600160a01b929094168986161760ff60a01b1916919091179091556040805163095ea7b360e01b8152928416600484015260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b158015612fb057600080fd5b505af1158015612fc4573d6000803e3d6000fd5b505050506040513d6020811015612fda57600080fd5b505050505050565b60026000541415613028576040805162461bcd60e51b815260206004820152601f6024820152600080516020615140833981519152604482015290519081900360640190fd5b600260005561303681613647565b61303e6130e9565b6000818152601c6020526040902060030154611240908290613c90565b613064816135b1565b61309f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806151dc602c913960400191505060405180910390fd5b6130a9338261401f565b6130e6576040805162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015290519081900360640190fd5b50565b600f546040805163372500ab60e01b815290516000926001600160a01b03169163372500ab91600480830192602092919082900301818787803b15801561312f57600080fd5b505af1158015613143573d6000803e3d6000fd5b505050506040513d602081101561315957600080fd5b50519050801561318d576014546131899061318090610e1c84670de0b6b3a76400006134f1565b60155490613497565b6015555b7f7fa9647ec1cc14e3822b46d05a2b9d4e019bde8875c0088c46b6503d71bf17226131b661374e565b6015546040805192835260208301919091528051918290030190a150565b6000828152601c602052604081206005810154601554600183015492939261320f92916121cb91670de0b6b3a764000091610e1c91906134f1565b9050613219612273565b8061323d575061322761374e565b6003830154600284015461323a91613497565b11155b156132515760006003830181905560048301555b6000811180613264575060008260080154115b80613273575060008260090154115b1561332c576000613295612710610e1c601a54856134f190919063ffffffff16565b905060006132b4826121cb86600901548661349790919063ffffffff16565b90506132cd84600801548361349790919063ffffffff16565b91506001600160a01b0385166132f0576008840182905560098401819055613329565b600060088501819055600985015581156133115761330e8583614046565b91505b61331b858261414c565b9050613329858783856141ed565b50505b604080516001600160a01b038516815260208101839052815186927fcc70d7e29d5f6e6a993743a891f22f70aee482bafb25b00b8909ee1bf9028ae2928290030190a250505050565b6000828211156133cc576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006133ee82600401546121e384600001548560060154611fa2565b90506016548111156133ff57506016545b600782018190556000613423612710610e1c61341b8583613497565b8654906134f1565b9050613442816121e3856001015460145461337590919063ffffffff16565b6014556001830181905560155461346890670de0b6b3a764000090610e1c9084906134f1565b8360050181905550505050565b6000613481600b6142fe565b61348b600b61401b565b9050610cfe8282614307565b60008282018381101561149b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082613500575060006111ba565b8282028284828161350d57fe5b041461149b5760405162461bcd60e51b81526004018080602001828103825260218152602001806152b56021913960400191505060405180910390fd5b60008082116135a0576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816135a957fe5b049392505050565b60006111ba600383614321565b3390565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906135f782611ea3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006111ba8261401b565b600061149b838361432d565b613650816135b1565b61368b5760405162461bcd60e51b815260040180806020018281038252602c8152602001806151dc602c913960400191505060405180910390fd5b613695338261401f565b806136b05750336136a582610fed565b6001600160a01b0316145b6130e6576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6136fe6136f86135be565b82614391565b6137395760405162461bcd60e51b815260040180806020018281038252603181526020018061537b6031913960400191505060405180910390fd5b61116983838361442d565b6136b03382614391565b4290565b600080846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156137a257600080fd5b505afa1580156137b6573d6000803e3d6000fd5b505050506040513d60208110156137cc57600080fd5b505190506137e56001600160a01b038616853086614579565b61386881866001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561383657600080fd5b505afa15801561384a573d6000803e3d6000fd5b505050506040513d602081101561386057600080fd5b505190613375565b95945050505050565b613883836001600160a01b03166139be565b1561116957604080513360248201526044810184905260648082018490528251808303909101815260849091018252602081810180516001600160e01b031663326180a360e11b1790528251808401909352600f83526e1b9bdb881a5b5c1b195b595b9d1959608a1b90830152600091613907916001600160a01b038716916145d3565b905080806020019051602081101561391e57600080fd5b505161395d576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b50505050565b61396b61232e565b6001600160a01b0316336001600160a01b0316146139bc576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b565b3b151590565b61396b611ecb565b600061149b836001600160a01b0384166145e2565b600061149b836001600160a01b03841661462c565b6000808080613a0586866146f2565b9097909650945050505050565b600061149b836001600160a01b03841661476d565b8015613aa457613a35611ecb565b6001600160a01b0316635485435433846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015613a8b57600080fd5b505af1158015613a9f573d6000803e3d6000fd5b505050505b6000828152601c60205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560090155613afa82614785565b5050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611169908490614852565b6000612073848484614903565b613b6e613b686135be565b83614391565b613ba95760405162461bcd60e51b815260040180806020018281038252603181526020018061537b6031913960400191505060405180910390fd5b61395d848484846149cd565b606081613bda57506040805180820190915260018152600360fc1b6020820152610cfe565b8160005b8115613bf257600101600a82049150613bde565b60008167ffffffffffffffff81118015613c0b57600080fd5b506040519080825280601f01601f191660200182016040528015613c36576020820181803683370190505b50859350905060001982015b8315613c8757600a840660300160f81b82828060019003935081518110613c6557fe5b60200101906001600160f81b031916908160001a905350600a84049350613c42565b50949350505050565b613c98612273565b15613cdb576040805162461bcd60e51b815260206004820152600e60248201526d1b1bd8dadcc8191a5cd8589b195960921b604482015290519081900360640190fd5b6000828152601c6020526040812060038101546002820154919291613cff91613497565b90506000613d0b61374e565b905080821115613d6957613d1f8282613375565b8410158015613d2e5750600084115b613d69576040805162461bcd60e51b81526020600482015260076024820152661a5b9d985b1a5960ca1b604482015290519081900360640190fd5b613d7385336131d4565b60038301849055613d83846122d0565b600484015560028301819055613d98836133d2565b60408051858152905186917f817ea9dab606b88f1d3b71d35f23e301a95c27058f35c39acf502f471feb03b8919081900360200190a25050505050565b60008111613e13576040805162461bcd60e51b815260206004808301919091526024820152631b9d5b1b60e21b604482015290519081900360640190fd5b6000828152601c60205260409020613e2c600c85613a12565b80613e505750613e3a61374e565b60038201546002830154613e4d91613497565b11155b80613e5e5750613e5e612273565b613e98576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b8054821115613ed8576040805162461bcd60e51b81526020600482015260076024820152661a5b9d985b1a5960ca1b604482015290519081900360640190fd5b613ee283856131d4565b8054613eee9083613375565b8155601354613efd9083613375565b6013558054613f2f576001810154601454613f1791613375565b6014556006810154613f2a908490613a27565b613f38565b613f38816133d2565b60408051838152905184917f10b3873e32aa5edce774b02db517f3bde3429d0e97b57b74cb569ba85ce69a58919081900360200190a260105461395d906001600160a01b03168584613afe565b613f97836001600160a01b03166139be565b1561116957604080513360248201526044810184905260648082018490528251808303909101815260849091018252602081810180516001600160e01b031663257605ab60e21b1790528251808401909352600f83526e1b9bdb881a5b5c1b195b595b9d1959608a1b90830152600091613907916001600160a01b038716916145d3565b5490565b600061402a82611ea3565b6001600160a01b0316836001600160a01b031614905092915050565b601154604080516370a0823160e01b8152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561409657600080fd5b505afa1580156140aa573d6000803e3d6000fd5b505050506040513d60208110156140c057600080fd5b50519050808311156140d0578092505b821561414457601254604080516316874d3760e21b8152600481018690526001600160a01b03878116602483015291519190921691635a1d34dc91604480830192600092919082900301818387803b15801561412b57600080fd5b505af115801561413f573d6000803e3d6000fd5b505050505b509092915050565b601154604080516370a0823160e01b8152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561419c57600080fd5b505afa1580156141b0573d6000803e3d6000fd5b505050506040513d60208110156141c657600080fd5b50519050808311156141d6578092505b601154614144906001600160a01b03168585613afe565b60006141f884611ea3565b905061420c816001600160a01b03166139be565b156142f757604080513360248201526001600160a01b038088166044830152606482018790526084820186905260a48083018690528351808403909101815260c49092018352602082810180516001600160e01b0316631ecb1ddb60e21b1790528351808501909452600f84526e1b9bdb881a5b5c1b195b595b9d1959608a1b908401526000926142a19291851691906145d3565b90508080602001905160208110156142b857600080fd5b5051612fda576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b5050505050565b80546001019055565b613afa828260405180602001604052806000815250614a1f565b600061149b838361476d565b8154600090821061436f5760405162461bcd60e51b815260040180806020018281038252602281526020018061511e6022913960400191505060405180910390fd5b82600001828154811061437e57fe5b9060005260206000200154905092915050565b600061439c826135b1565b6143d75760405162461bcd60e51b815260040180806020018281038252602c8152602001806151dc602c913960400191505060405180910390fd5b60006143e283611ea3565b9050806001600160a01b0316846001600160a01b0316148061441d5750836001600160a01b031661441284610fed565b6001600160a01b0316145b8061207357506120738185612db9565b826001600160a01b031661444082611ea3565b6001600160a01b0316146144855760405162461bcd60e51b81526004018080602001828103825260298152602001806153026029913960400191505060405180910390fd5b6001600160a01b0382166144ca5760405162461bcd60e51b81526004018080602001828103825260248152602001806151926024913960400191505060405180910390fd5b6144d5838383614a71565b6144e06000826135c2565b6001600160a01b03831660009081526002602052604090206145029082614ad4565b506001600160a01b03821660009081526002602052604090206145259082614ae0565b5061453260038284614aec565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261395d908590614852565b60606120738484600085614b02565b60006145ee838361476d565b614624575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111ba565b5060006111ba565b600081815260018301602052604081205480156146e8578354600019808301919081019060009087908390811061465f57fe5b906000526020600020015490508087600001848154811061467c57fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806146ac57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506111ba565b60009150506111ba565b8154600090819083106147365760405162461bcd60e51b81526004018080602001828103825260228152602001806152936022913960400191505060405180910390fd5b600084600001848154811061474757fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60009081526001919091016020526040902054151590565b600061479082611ea3565b905061479e81600084614a71565b6147a96000836135c2565b60008281526009602052604090205460026000196101006001841615020190911604156147e75760008281526009602052604081206147e7916150c5565b6001600160a01b03811660009081526002602052604090206148099083614ad4565b50614815600383614c52565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006148a7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145d39092919063ffffffff16565b805190915015611169578080602001905160208110156148c657600080fd5b50516111695760405162461bcd60e51b815260040180806020018281038252602a8152602001806153ac602a913960400191505060405180910390fd5b6000828152600184016020526040812054828161499e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561496357818101518382015260200161494b565b50505050905090810190601f1680156149905780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508460000160018203815481106149b157fe5b9060005260206000209060020201600101549150509392505050565b6149d884848461442d565b6149e484848484614c5e565b61395d5760405162461bcd60e51b81526004018080602001828103825260328152602001806151606032913960400191505060405180910390fd5b614a298383614dc6565b614a366000848484614c5e565b6111695760405162461bcd60e51b81526004018080602001828103825260328152602001806151606032913960400191505060405180910390fd5b614a83836001600160a01b03166139be565b1580614a975750336001600160a01b038416145b611169576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b600061149b838361462c565b600061149b83836145e2565b600061207384846001600160a01b038516614ef4565b606082471015614b435760405162461bcd60e51b81526004018080602001828103825260268152602001806151b66026913960400191505060405180910390fd5b614b4c856139be565b614b9d576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614bdb5780518252601f199092019160209182019101614bbc565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614c3d576040519150601f19603f3d011682016040523d82523d6000602084013e614c42565b606091505b5091509150612256828286614f8b565b600061149b8383614ff1565b6000614c72846001600160a01b03166139be565b614c7e57506001612073565b6000614d8c630a85bd0160e11b614c936135be565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614cfa578181015183820152602001614ce2565b50505050905090810190601f168015614d275780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001615160603291396001600160a01b03881691906145d3565b90506000818060200190516020811015614da557600080fd5b50516001600160e01b031916630a85bd0160e11b1492505050949350505050565b6001600160a01b038216614e21576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b614e2a816135b1565b15614e7c576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b614e8860008383614a71565b6001600160a01b0382166000908152600260205260409020614eaa9082614ae0565b50614eb760038284614aec565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600082815260018401602052604081205480614f5957505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561149b565b82856000016001830381548110614f6c57fe5b906000526020600020906002020160010181905550600091505061149b565b60608315614f9a57508161149b565b825115614faa5782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561496357818101518382015260200161494b565b600081815260018301602052604081205480156146e8578354600019808301919081019060009087908390811061502457fe5b906000526020600020906002020190508087600001848154811061504457fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061508357fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506111ba9350505050565b50805460018160011615610100020316600290046000825580601f106150eb57506130e6565b601f0160209004906000526020600020908101906130e691905b808211156151195760008155600101615105565b509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64735265656e7472616e637947756172643a207265656e7472616e742063616c6c004552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212209004f4e302bfd43f8d09c4381a9f3a67616de6460c744a09e27050b6e29a38ac64736f6c63430007060033