[ { "inputs": [ { "internalType": "contract IGrailTokenV2", "name": "grailToken_", "type": "address" }, { "internalType": "contract IXGrailToken", "name": "xGrailToken_", "type": "address" }, { "internalType": "address", "name": "emergencyRecoveryAddress_", "type": "address" }, { "internalType": "address", "name": "feeAddress_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "nitroAddress", "type": "address" } ], "name": "CreateNitroPool", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "nitroAddress", "type": "address" } ], "name": "PublishNitroPool", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "fee", "type": "uint256" } ], "name": "SetDefaultFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "emergencyRecoveryAddress", "type": "address" } ], "name": "SetEmergencyRecoveryAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "exemptedAddress", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isExempted", "type": "bool" } ], "name": "SetExemptedAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "feeAddress", "type": "address" } ], "name": "SetFeeAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "SetNitroPoolOwner", "type": "event" }, { "inputs": [], "name": "MAX_DEFAULT_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "nftPoolAddress", "type": "address" }, { "internalType": "contract IERC20", "name": "rewardsToken1", "type": "address" }, { "internalType": "contract IERC20", "name": "rewardsToken2", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "harvestStartTime", "type": "uint256" }, { "internalType": "uint256", "name": "depositEndTime", "type": "uint256" }, { "internalType": "uint256", "name": "lockDurationReq", "type": "uint256" }, { "internalType": "uint256", "name": "lockEndReq", "type": "uint256" }, { "internalType": "uint256", "name": "depositAmountReq", "type": "uint256" }, { "internalType": "bool", "name": "whitelist", "type": "bool" }, { "internalType": "string", "name": "description", "type": "string" } ], "internalType": "struct NitroPool.Settings", "name": "settings", "type": "tuple" } ], "name": "createNitroPool", "outputs": [ { "internalType": "address", "name": "nitroPool", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "defaultFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "emergencyRecoveryAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exemptedAddressesLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getExemptedAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "nftPoolAddress", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getNftPoolPublishedNitroPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getNitroPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "nitroPoolAddress", "type": "address" }, { "internalType": "address", "name": "ownerAddress", "type": "address" } ], "name": "getNitroPoolFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getOwnerNitroPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getPublishedNitroPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "grailToken", "outputs": [ { "internalType": "contract IGrailTokenV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "checkedAddress", "type": "address" } ], "name": "isExemptedAddress", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "nftPoolAddress", "type": "address" } ], "name": "nftPoolPublishedNitroPoolsLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nitroPoolsLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress", "type": "address" } ], "name": "ownerNitroPoolsLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "nftAddress", "type": "address" } ], "name": "publishNitroPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "publishedNitroPoolsLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "setDefaultFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "emergencyRecoveryAddress_", "type": "address" } ], "name": "setEmergencyRecoveryAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "exemptedAddress", "type": "address" }, { "internalType": "bool", "name": "isExempted", "type": "bool" } ], "name": "setExemptedAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "feeAddress_", "type": "address" } ], "name": "setFeeAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "previousOwner", "type": "address" }, { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "setNitroPoolOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "xGrailToken", "outputs": [ { "internalType": "contract IXGrailToken", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b50604051620061c1380380620061c183398101604081905262000034916200012b565b60006200004062000127565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03821615801590620000ab57506001600160a01b03811615155b620000d35760405162461bcd60e51b8152600401620000ca9062000192565b60405180910390fd5b600180546001600160a01b039586166001600160a01b0319918216179091556002805494861694821694909417909355600d805492851692841692909217909155600a8054919093169116179055620001cc565b3390565b6000806000806080858703121562000141578384fd5b84516200014e81620001b3565b60208601519094506200016181620001b3565b60408601519093506200017481620001b3565b60608601519092506200018781620001b3565b939692955090935050565b6020808252600790820152661a5b9d985b1a5960ca1b604082015260600190565b6001600160a01b0381168114620001c957600080fd5b50565b615fe580620001dc6000396000f3fe60806040523480156200001157600080fd5b5060043610620001725760003560e01c8063060488c614620001775780630ddbb9d814620001995780631af6ae0f14620001a3578063231ee4cc14620001ad5780634127535814620001d357806346fa466a14620001dd57806353f7366c14620001e75780635a6c72d014620001fe5780636d337e621462000208578063715018a6146200021f57806372097361146200022b57806385f390fd14620002425780638705fcd414620002595780638a2779cd14620002705780638ad93a1014620002875780638be1cdac146200029e5780638c67a0c214620002b55780638da5cb5b14620002bf578063929f635714620002c9578063a57e0f4f14620002ef578063ac7517dc1462000306578063c414c584146200031d578063c93a6c841462000327578063d1941528146200033e578063dd4f6af61462000355578063df136cfe146200036c578063f2fde38b1462000383578063fb7393f2146200039a575b600080fd5b62000181620003a4565b60405162000190919062001205565b60405180910390f35b62000181620003b7565b62000181620003bc565b620001c4620001be36600462000ff7565b620003ca565b6040516200019091906200103a565b620001c4620003e1565b620001c4620003f0565b620001c4620001f836600462000ff7565b620003ff565b620001816200040e565b620001816200021936600462000eb4565b62000414565b6200022962000437565b005b620001816200023c36600462000ed3565b620004d8565b620002296200025336600462000f10565b62000515565b620002296200026a36600462000eb4565b62000618565b620001c46200028136600462000ff7565b62000701565b620001c46200029836600462000fc9565b62000710565b620001c4620002af36600462000f49565b6200073b565b620001c462000807565b620001c462000816565b620002e0620002da36600462000eb4565b62000825565b60405162000190919062001083565b620001816200030036600462000eb4565b62000834565b620001c46200031736600462000fc9565b62000857565b620001c46200087b565b620002296200033836600462000ff7565b6200088a565b620002296200034f36600462000eb4565b6200094d565b620002296200036636600462000eb4565b620009de565b620002296200037d36600462000ed3565b62000abc565b620002296200039436600462000eb4565b62000b91565b6200018162000c8a565b6000620003b2600362000c93565b905090565b606481565b6000620003b2600562000c93565b6000620003d960038362000ca0565b90505b919050565b600a546001600160a01b031681565b6002546001600160a01b031681565b6000620003d960058362000ca0565b60095481565b6001600160a01b0381166000908152600860205260408120620003d99062000c93565b6200044162000cae565b6001600160a01b03166200045462000816565b6001600160a01b0316146200049f576040805162461bcd60e51b8152602060048201819052602482015260008051602062005f70833981519152604482015290519081900360640190fd5b600080546040516001600160a01b039091169060008051602062005f90833981519152908390a3600080546001600160a01b0319169055565b6000620004e7600b8462000cb2565b80620004fb5750620004fb600b8362000cb2565b156200050a575060006200050f565b506009545b92915050565b6200051f62000cae565b6001600160a01b03166200053262000816565b6001600160a01b0316146200057d576040805162461bcd60e51b8152602060048201819052602482015260008051602062005f70833981519152604482015290519081900360640190fd5b6001600160a01b038216620005af5760405162461bcd60e51b8152600401620005a690620011b4565b60405180910390fd5b8015620005ca57620005c3600b8362000cc9565b50620005d9565b620005d7600b8362000ce0565b505b7f6846b2c9ff87fefdeb93357820cd156a78eeabaeb15cd6faba2350eab3cc668882826040516200060c92919062001068565b60405180910390a15050565b6200062262000cae565b6001600160a01b03166200063562000816565b6001600160a01b03161462000680576040805162461bcd60e51b8152602060048201819052602482015260008051602062005f70833981519152604482015290519081900360640190fd5b6001600160a01b038116620006a95760405162461bcd60e51b8152600401620005a690620011b4565b600a80546001600160a01b0319166001600160a01b0383161790556040517ffcb8a963756b148f85a52537b63147b6c4b40af694099c901ac3b99d317a2db890620006f69083906200103a565b60405180910390a150565b6000620003d9600b8362000ca0565b6001600160a01b038216600090815260076020526040812062000734908362000ca0565b9392505050565b6001546002546040516000926001600160a01b03908116921690339088908890889088906200076a9062000e95565b6200077c97969594939291906200108e565b604051809103906000f08015801562000799573d6000803e3d6000fd5b509050620007a960038262000cc9565b50336000908152600860205260409020620007c5908262000cc9565b507f8aa56bb136f7211bffb8ef78bf44374cd151ec6b910a5c5dc45b5ae4481e27dd81604051620007f791906200103a565b60405180910390a1949350505050565b600d546001600160a01b031681565b6000546001600160a01b031690565b6000620003d9600b8362000cb2565b6001600160a01b0381166000908152600760205260408120620003d99062000c93565b6001600160a01b038216600090815260086020526040812062000734908362000ca0565b6001546001600160a01b031681565b6200089462000cae565b6001600160a01b0316620008a762000816565b6001600160a01b031614620008f2576040805162461bcd60e51b8152602060048201819052602482015260008051602062005f70833981519152604482015290519081900360640190fd5b6064811115620009165760405162461bcd60e51b8152600401620005a69062001165565b60098190556040517f51de95b18d7cedb4ab77c8de227822bc1a76e45e8f04983f27472cf847126cc090620006f690839062001205565b336200095b60038262000cb2565b6200097a5760405162461bcd60e51b8152600401620005a690620011da565b6200098760053362000cc9565b506001600160a01b0382166000908152600760205260409020620009ac903362000cc9565b507f6f59fe680a798e0837ddaae83122588c09ce9022ce65c971eeb1bd6d17e220b9336040516200060c91906200103a565b620009e862000cae565b6001600160a01b0316620009fb62000816565b6001600160a01b03161462000a46576040805162461bcd60e51b8152602060048201819052602482015260008051602062005f70833981519152604482015290519081900360640190fd5b6001600160a01b03811662000a6f5760405162461bcd60e51b8152600401620005a690620011b4565b600d80546001600160a01b0319166001600160a01b0383161790556040517f143cbda11019f61b7117840c50e3a997d14f4e0ab489bb55236cfa8f982aeeeb90620006f69083906200103a565b3362000aca60038262000cb2565b62000ae95760405162461bcd60e51b8152600401620005a690620011da565b6001600160a01b038316600090815260086020526040902062000b0d903362000ce0565b62000b2c5760405162461bcd60e51b8152600401620005a6906200118d565b6001600160a01b038216600090815260086020526040902062000b50903362000cc9565b507f10c9e44c93441322145ec7d5391a7e52275e0dbccbc06c016bf6bdd3eade5683838360405162000b849291906200104e565b60405180910390a1505050565b62000b9b62000cae565b6001600160a01b031662000bae62000816565b6001600160a01b03161462000bf9576040805162461bcd60e51b8152602060048201819052602482015260008051602062005f70833981519152604482015290519081900360640190fd5b6001600160a01b03811662000c405760405162461bcd60e51b815260040180806020018281038252602681526020018062005f4a6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602062005f9083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000620003b2600b5b6000620003d98262000cf7565b600062000734838362000cfb565b3390565b600062000734836001600160a01b03841662000d62565b600062000734836001600160a01b03841662000d7a565b600062000734836001600160a01b03841662000dc9565b5490565b8154600090821062000d3f5760405162461bcd60e51b815260040180806020018281038252602281526020018062005f286022913960400191505060405180910390fd5b82600001828154811062000d4f57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b600062000d88838362000d62565b62000dc0575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200050f565b5060006200050f565b6000818152600183016020526040812054801562000e8a578354600019808301919081019060009087908390811062000dfe57fe5b906000526020600020015490508087600001848154811062000e1c57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908062000e4d57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506200050f565b60009150506200050f565b614cb2806200127683390190565b80358015158114620003dc57600080fd5b60006020828403121562000ec6578081fd5b813562000734816200125c565b6000806040838503121562000ee6578081fd5b823562000ef3816200125c565b9150602083013562000f05816200125c565b809150509250929050565b6000806040838503121562000f23578182fd5b823562000f30816200125c565b915062000f406020840162000ea3565b90509250929050565b6000806000806080858703121562000f5f578182fd5b843562000f6c816200125c565b9350602085013562000f7e816200125c565b9250604085013562000f90816200125c565b915060608501356001600160401b0381111562000fab578182fd5b8501610120818803121562000fbe578182fd5b939692955090935050565b6000806040838503121562000fdc578182fd5b823562000fe9816200125c565b946020939093013593505050565b60006020828403121562001009578081fd5b5035919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b901515815260200190565b600060018060a01b03808a168352808916602084015280881660408401528087166060840152808616608084015280851660a08401525060e060c0830152823560e08301526101006020840135818401526101206040850135818501526060850135610140850152608085013561016085015260a085013561018085015260c08501356101a08501526200112560e0860162000ea3565b15156101c08501526200113b828601866200120e565b9250816101e0860152620011556102008601848362001010565b9c9b505050505050505050505050565b6020808252600e908201526d1a5b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b6020808252600d908201526c34b73b30b634b21037bbb732b960991b604082015260600190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b6020808252601190820152701d5b9adb9bdddb881b9a5d1c9bd41bdbdb607a1b604082015260600190565b90815260200190565b6000808335601e1984360301811262001225578283fd5b83016020810192503590506001600160401b038111156200124557600080fd5b8036038313156200125557600080fd5b9250929050565b6001600160a01b03811681146200127257600080fd5b5056fe60806040523480156200001157600080fd5b5060405162004cb238038062004cb28339810160408190526200003491620006d0565b60016000908155620000456200031d565b600180546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004c92833981519152908290a3506001600160a01b03871615801590620000a357506001600160a01b03861615155b8015620000b857506001600160a01b03851615155b8015620000cd57506001600160a01b03841615155b8015620000e257506001600160a01b03831615155b6200010a5760405162461bcd60e51b815260040162000101906200093a565b60405180910390fd5b80516200011662000321565b10620001365760405162461bcd60e51b8152600401620001019062000825565b60208101518151106200015d5760405162461bcd60e51b8152600401620001019062000997565b606081015115806200017457506060810151815111155b620001935760405162461bcd60e51b81526004016200010190620009c0565b60408101511580620001aa57506040810151815111155b620001c95760405162461bcd60e51b8152600401620001019062000960565b816001600160a01b0316836001600160a01b03161415620001fe5760405162461bcd60e51b8152600401620001019062000879565b60028054336001600160a01b0319918216179091556003805482166001600160a01b038a811691909117909155600480548316898316179055600580549092169086161790556200024e62000321565b600755600b80546001600160a01b038086166001600160a01b031992831617909255600f8054928516929091169190911790558051601a8190556020820151601b556014556040810151620002a8578051601c55620002b1565b6040810151601c555b6060810151601d556101008101518051620002d59160229160209091019062000585565b50620002fa81608001518260a001518360c001518460e001516200032560201b60201c565b62000310856200046b60201b620022ec1760201c565b5050505050505062000a51565b3390565b4290565b821580620003345750601a5483115b620003535760405162461bcd60e51b8152600401620001019062000850565b60085460ff16156200040857601e54841015620003845760405162461bcd60e51b81526004016200010190620008a1565b601f54831015620003a95760405162461bcd60e51b8152600401620001019062000850565b602054821015620003ce5760405162461bcd60e51b81526004016200010190620008d8565b60215460ff161580620003e9575060215460ff161515811515145b620004085760405162461bcd60e51b815260040162000101906200090f565b601e849055601f83905560208290556021805460ff19168215151790556040517f4f49c49ff16acb310d9b9b87703c99594e407985b787e282988a4389faba8bc6906200045d908690869086908690620009f7565b60405180910390a150505050565b620004756200031d565b6001600160a01b03166200048862000576565b6001600160a01b031614620004e4576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200052b5760405162461bcd60e51b815260040180806020018281038252602681526020018062004c6c6026913960400191505060405180910390fd5b6001546040516001600160a01b0380841692169060008051602062004c9283398151915290600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620005bd576000855562000608565b82601f10620005d857805160ff191683800117855562000608565b8280016001018555821562000608579182015b8281111562000608578251825591602001919060010190620005eb565b50620006169291506200061a565b5090565b5b808211156200061657600081556001016200061b565b805180151581146200064257600080fd5b919050565b600082601f83011262000658578081fd5b81516001600160401b038111156200066c57fe5b602062000682601f8301601f1916820162000a14565b828152858284870101111562000696578384fd5b835b83811015620006b557858101830151828201840152820162000698565b83811115620006c657848385840101525b5095945050505050565b600080600080600080600060e0888a031215620006eb578283fd5b8751620006f88162000a38565b60208901519097506200070b8162000a38565b60408901519096506200071e8162000a38565b6060890151909550620007318162000a38565b6080890151909450620007448162000a38565b60a0890151909350620007578162000a38565b60c08901519092506001600160401b038082111562000774578283fd5b818a01915061012080838d0312156200078b578384fd5b620007968162000a14565b9050825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152620007e660e0840162000631565b60e08201526101008084015183811115620007ff578586fd5b6200080d8e82870162000647565b82840152505080935050505092959891949750929550565b602080825260119082015270696e76616c696420737461727454696d6560781b604082015260600190565b6020808252600f908201526e1a5b9d985b1a59081b1bd8dad15b99608a1b604082015260600190565b6020808252600e908201526d696e76616c696420746f6b656e7360901b604082015260600190565b60208082526014908201527f696e76616c6964206c6f636b4475726174696f6e000000000000000000000000604082015260600190565b60208082526015908201527f696e76616c6964206465706f736974416d6f756e740000000000000000000000604082015260600190565b6020808252601190820152701a5b9d985b1a59081dda1a5d195b1a5cdd607a1b604082015260600190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b60208082526018908201527f696e76616c69642068617276657374537461727454696d650000000000000000604082015260600190565b6020808252600f908201526e696e76616c696420656e6454696d6560881b604082015260600190565b60208082526016908201527f696e76616c6964206465706f736974456e6454696d6500000000000000000000604082015260600190565b938452602084019290925260408301521515606082015260800190565b6040518181016001600160401b038111828210171562000a3057fe5b604052919050565b6001600160a01b038116811462000a4e57600080fd5b50565b61420b8062000a616000396000f3fe608060405234801561001057600080fd5b506004361061021a5760003560e01c8063075d47821461021f5780630828862d14610229578063150b7a02146102475780631959a0021461026757806321b4921c1461028b578063248a56c0146102ab5780632c2a5928146102b35780632e1a7d4d146102c65780632e3c5919146102d957806331d7a262146102ec57806334677c7a1461030d5780633af32abf1461032d5780634641257d1461034057806346fa466a1461034857806352cb5133146103505780635312ea8e146103635780635909865a14610376578063715018a61461037e57806378bb5164146103865780637c042d611461038e5780638950b9a6146103a15780638d4d2b0c146103b95780638da5cb5b146103c15780638e3291c9146103c957806390c3f38f146103dc5780639231cf74146103ef578063961938f1146103f7578063a9cc9ae91461040a578063ada278ef14610412578063b92ca1971461041a578063bc13c46e14610422578063bf1e33321461042a578063c414c5841461043d578063c45a015514610445578063c5408d501461044d578063c933934a14610455578063d8270dce14610468578063e06174e414610470578063e2b36dc31461048d578063e3161ddd146104a0578063e467fa80146104a8578063f2961711146104b0578063f2fde38b146104c3578063f533c96a146104d6578063fc41aa09146104de578063fe4ee967146104f1575b600080fd5b610227610504565b005b610231610682565b60405161023e9190613a4e565b60405180910390f35b61025a610255366004613731565b610691565b60405161023e9190613ac4565b61027a6102753660046136f9565b610850565b60405161023e959493929190613f7f565b61029e6102993660046136f9565b61087f565b60405161023e9190613f35565b6102276108a6565b6102316102c1366004613936565b610a73565b6102276102d4366004613936565b610a80565b61029e6102e73660046137f1565b610c44565b6102ff6102fa3660046136f9565b610c6d565b60405161023e929190613f3e565b61032061031b36600461381c565b610e18565b60405161023e9190613ab9565b61032061033b3660046136f9565b610e21565b610227610e2e565b610231610ead565b61022761035e366004613966565b610ebc565b610227610371366004613936565b611120565b6102276112c0565b610227611375565b61029e6113eb565b61022761039c366004613850565b6113fd565b6103a9611530565b60405161023e9493929190613ad9565b61032061154b565b610231611554565b6102316103d7366004613936565b611563565b6102276103ea3660046138f7565b61157e565b61029e61162a565b6102276104053660046136f9565b611630565b61032061171d565b61029e611726565b61023161175b565b6103a961176a565b6102276104383660046136f9565b611785565b610231611907565b610231611916565b61029e611925565b6102276104633660046139b2565b61192b565b61029e61199f565b6104786119a5565b60405161023e99989796959493929190613fa2565b61032061049b36600461381c565b611a62565b610227611b30565b61029e611b8a565b6102276104be366004613987565b611b90565b6102276104d13660046136f9565b611db2565b61029e611e29565b6102276104ec366004613966565b611e5e565b6103206104ff3660046137a1565b612188565b61050c6123dd565b6001600160a01b031661051d611554565b6001600160a01b031614610566576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b60085460ff16156105925760405162461bcd60e51b815260040161058990613cb0565b60405180910390fd5b61059a6123e1565b601a54116105ba5760405162461bcd60e51b815260040161058990613b57565b600c546105d95760405162461bcd60e51b815260040161058990613c8c565b6008805460ff191660011790556105ee6123e1565b600955600254600554604051631a3282a560e31b81526001600160a01b039283169263d19415289261062592911690600401613a4e565b600060405180830381600087803b15801561063f57600080fd5b505af1158015610653573d6000803e3d6000fd5b50506040517f12e60d2b86077411e0638198488616eb20137be7d4543ffde74a18c60d840788925060009150a1565b6005546001600160a01b031681565b6000600260005414156106d9576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b600260005560055433906001600160a01b0316811461070a5760405162461bcd60e51b815260040161058990613d93565b60085460ff1661072c5760405162461bcd60e51b815260040161058990613bed565b60215460ff16158061074457506107446018876123e5565b6107605760405162461bcd60e51b815260040161058990613e96565b6001600160a01b038616600090815260176020526040902061078290866123fa565b50600085815260166020526040812080546001600160a01b0319166001600160a01b03891617905580806107b588612406565b9250925092506107c683838361249f565b6107d1898985612546565b60055460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390610803908c908c90600401613aa0565b600060405180830381600087803b15801561081d57600080fd5b505af1158015610831573d6000803e3d6000fd5b5050600160005550630a85bd0160e11b9b9a5050505050505050505050565b601560205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b6001600160a01b03811660009081526017602052604081206108a0906126d2565b92915050565b600260005414156108ec576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b60026000556108f96123dd565b6001600160a01b031661090a611554565b6001600160a01b031614610953576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b60025460408051634633d06160e11b815290516000926001600160a01b031691638c67a0c2916004808301926020929190829003018186803b15801561099857600080fd5b505afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190613715565b600d54601154600c5492935090916109e890836126dd565b600c556000600d556010546109fd90826126dd565b60105560006011819055600a805460ff191660011790556040517f8f2074b85901276b66e93d26866fda1a15b75609ce29ee820a90c3eb1eab2efc9190a1600b54610a52906001600160a01b0316848461273a565b600f54610a69906001600160a01b0316848361273a565b5050600160005550565b60006108a06018836127e5565b60026000541415610ac6576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b60026000908155818152601660205260409020546001600160a01b03163314610b015760405162461bcd60e51b815260040161058990613c14565b6000610b0c82612406565b50509050610b186127f1565b33600081815260156020526040902090610b3390829061292f565b8054610b3f90836126dd565b8155601354610b4e90836126dd565b601355610b5a81612b69565b336000908152601760205260409020610b739084612bd3565b506000838152601660205260409081902080546001600160a01b03191690556005549051632142170760e11b81526001600160a01b03909116906342842e0e90610bc590309033908890600401613a7c565b600060405180830381600087803b158015610bdf57600080fd5b505af1158015610bf3573d6000803e3d6000fd5b50505050336001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688484604051610c32929190613f3e565b60405180910390a25050600160005550565b6001600160a01b0382166000908152601760205260408120610c6690836127e5565b9392505050565b6001600160a01b0381166000908152601560209081526040808320815160a0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600401546080820152600e5460125483929190610cd16123e1565b601454108015610ce357506000601354115b15610da0576000610d0f610d01601454610cfb6123e1565b906126dd565b610d09611e29565b90612bdf565b600d54909150811115610d215750600d545b601354610d4b90610d4490610d3e84670de0b6b3a7640000612bdf565b90612c38565b8490612c9c565b9250610d66610d5e601454610cfb6123e1565b610d09611726565b601154909150811115610d7857506011545b601354610d9c90610d9590610d3e84670de0b6b3a7640000612bdf565b8390612c9c565b9150505b610dd98360600151610dd38560200151610cfb670de0b6b3a7640000610d3e888a60000151612bdf90919063ffffffff16565b90612c9c565b9450610e0e8360800151610dd38560400151610cfb670de0b6b3a7640000610d3e878a60000151612bdf90919063ffffffff16565b9350505050915091565b60009392505050565b60006108a06018836123e5565b60026000541415610e74576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b6002600055610e816127f1565b33600081815260156020526040902090610e9c90829061292f565b610ea581612b69565b506001600055565b6004546001600160a01b031681565b610ec46123dd565b6001600160a01b0316610ed5611554565b6001600160a01b031614610f1e576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b60026000541415610f64576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b600260005560085460ff1615610f8c5760405162461bcd60e51b815260040161058990613cb0565b8115611045576040805180820190915260088152670e8dede40d0d2ced60c31b6020820152600c54610fbf918490612cf4565b600c556040805180820190915260088152670e8dede40d0d2ced60c31b6020820152600d54610fef918490612cf4565b600d55600c546040517f7ae1cbfc94d111a288e93adca547fd53d15f17df6bca73e865c13805ca7222649161102691859190613f3e565b60405180910390a1600b54611045906001600160a01b0316338461273a565b60008111801561105f5750600f546001600160a01b031615155b15611117576040805180820190915260088152670e8dede40d0d2ced60c31b6020820152601054611091918390612cf4565b6010556040805180820190915260088152670e8dede40d0d2ced60c31b60208201526011546110c1918390612cf4565b6011556010546040517f55638f4a6d3d291dc7d21ee797dd02f3e9b84117ac89d4dd1a066ac015a53b26916110f891849190613f3e565b60405180910390a1600f54611117906001600160a01b0316338361273a565b50506001600055565b60026000541415611166576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b60026000908155818152601660205260409020546001600160a01b031633146111a15760405162461bcd60e51b815260040161058990613c14565b60006111ac82612406565b50503360009081526015602052604090208054919250906111cd90836126dd565b81556013546111dc90836126dd565b6013556111e881612b69565b3360009081526017602052604090206112019084612bd3565b506000838152601660205260409081902080546001600160a01b03191690556005549051632142170760e11b81526001600160a01b03909116906342842e0e9061125390309033908890600401613a7c565b600060405180830381600087803b15801561126d57600080fd5b505af1158015611281573d6000803e3d6000fd5b50505050336001600160a01b03167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05958484604051610c32929190613f3e565b6112c86123dd565b6001600160a01b03166112d9611554565b6001600160a01b031614611322576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b600061132e60186126d2565b90505b801561135b57611351611349601860001984016127e5565b601890612d8b565b5060001901611331565b60405160008051602061416c83398151915290600090a150565b61137d6123dd565b6001600160a01b031661138e611554565b6001600160a01b0316146113d7576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b6113e16000612da0565b6113e9612e0c565b565b60006113f760186126d2565b90505b90565b6114056123dd565b6001600160a01b0316611416611554565b6001600160a01b03161461145f576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b808061147d5760405162461bcd60e51b815260040161058990613c39565b60005b818110156115135783838281811061149457fe5b90506040020160200160208101906114ac91906138bf565b156114e4576114de8484838181106114c057fe5b6114d692602060409092020190810191506136f9565b601890612ea6565b5061150b565b6115098484838181106114f357fe5b61134992602060409092020190810191506136f9565b505b600101611480565b5060405160008051602061416c83398151915290600090a1505050565b600b54600c54600d54600e546001600160a01b039093169284565b60085460ff1681565b6001546001600160a01b031690565b6016602052600090815260409020546001600160a01b031681565b6115866123dd565b6001600160a01b0316611597611554565b6001600160a01b0316146115e0576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b6115ec60228383613619565b507fab7dca68789bfbe74d09f14600944885d215fdf09987a0aba59a2df718577241828260405161161e929190613aff565b60405180910390a15050565b60145481565b6116386123dd565b6001600160a01b0316611649611554565b6001600160a01b031614611692576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b60085460ff1615806116ab57506001600160a01b038116155b6116c75760405162461bcd60e51b815260040161058990613cb0565b600680546001600160a01b0319166001600160a01b0383161790556040517f070ac22faf9ccb6c368b4dc940445967905c3cd9f50459204e09e30ac382c73290611712908390613a4e565b60405180910390a150565b600a5460ff1681565b6000601454601a600101541161173e575060006113fa565b601454601b546113f79161175291906126dd565b60115490612c38565b6006546001600160a01b031681565b600f546010546011546012546001600160a01b039093169284565b61178d6123dd565b6001600160a01b031661179e611554565b6001600160a01b0316146117e7576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b6002600054141561182d576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b600260005560085460ff16156118555760405162461bcd60e51b815260040161058990613cb0565b600f546001600160a01b03161561187e5760405162461bcd60e51b815260040161058990613eef565b600b546001600160a01b03828116911614156118ac5760405162461bcd60e51b815260040161058990613f14565b600f80546001600160a01b0319166001600160a01b0383161790556040517f5e11eef9026871e4634731ac8981015002d27a183f26034f4f6466e62f0eeb6f906118f7908390613a4e565b60405180910390a1506001600055565b6003546001600160a01b031681565b6002546001600160a01b031681565b60135481565b6119336123dd565b6001600160a01b0316611944611554565b6001600160a01b03161461198d576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b61199984848484612ebb565b50505050565b60075481565b601a8054601b54601c54601d54601e54601f80546020805460215460228054604080516002600019600185161561010002019093169290920497880186900486028201860190528681529a9b999a9899979896979496929560ff9092169493909190830182828015611a585780601f10611a2d57610100808354040283529160200191611a58565b820191906000526020600020905b815481529060010190602001808311611a3b57829003601f168201915b5050505050905089565b600060026000541415611aaa576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b600260005560055433906001600160a01b03168114611adb5760405162461bcd60e51b815260040161058990613d93565b6000848152601660205260409020546001600160a01b03868116911614611b145760405162461bcd60e51b815260040161058990613c14565b611b1f858585612546565b600191505060016000559392505050565b60026000541415611b76576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b6002600055611b836127f1565b6001600055565b60095481565b60026000541415611bd6576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b6002600055611be36123dd565b6001600160a01b0316611bf4611554565b6001600160a01b031614611c3d576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b601a548311611c5e5760405162461bcd60e51b815260040161058990613e6d565b601b54611c696123e1565b1115611c875760405162461bcd60e51b815260040161058990613bc9565b801580611c965750601a548110155b611cb25760405162461bcd60e51b815260040161058990613ebf565b811580611cc15750601a548210155b611cdd5760405162461bcd60e51b815260040161058990613e3b565b60085460ff1615611d4c57601b54831015611d0a5760405162461bcd60e51b815260040161058990613e0e565b601d548114611d2b5760405162461bcd60e51b815260040161058990613c58565b601c548214611d4c5760405162461bcd60e51b815260040161058990613d5d565b601b83905581611d6157601a54601c55611d67565b601c8290555b601d8190556040517f7861cb8c66210f838711e11fe52412c9757ae520575ceee7ee008cbbe57f762290611da090859085908590613f4c565b60405180910390a15050600160005550565b611dba6123dd565b6001600160a01b0316611dcb611554565b6001600160a01b031614611e14576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b611e1d81612da0565b611e26816122ec565b50565b6000601454601a6001015411611e41575060006113fa565b601454601b546113f791611e5591906126dd565b600d5490612c38565b60026000541415611ea4576040805162461bcd60e51b815260206004820152601f602482015260008051602061407f833981519152604482015290519081900360640190fd5b6002600055601b54611eb46123e1565b10611ed15760405162461bcd60e51b815260040161058990613bc9565b611ed96127f1565b6002546000906001600160a01b0316637209736130611ef6611554565b6040518363ffffffff1660e01b8152600401611f13929190613a62565b60206040518083038186803b158015611f2b57600080fd5b505afa158015611f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f63919061394e565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663412753586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fb557600080fd5b505afa158015611fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fed9190613715565b9050600084156120a557612007612710610d3e8786612bdf565b600b5490915061202a906001600160a01b03163361202588856126dd565b612fed565b600c5490955061203a9086612c9c565b600c55600d5461204a9086612c9c565b600d556040517f5066830ee857f8185d6b00ef7557246e98fd7fc2ac0528a4fffe7500533137769061207f9087908490613f3e565b60405180910390a180156120a557600b546120a5906001600160a01b031633848461310c565b831561217c57600f546001600160a01b03166120d35760405162461bcd60e51b815260040161058990613de7565b6120e3612710610d3e8686612bdf565b600f54909150612101906001600160a01b03163361202587856126dd565b6010549094506121119085612c9c565b6010556011546121219085612c9c565b6011556040517f45241e302e41254ac31ac15e7346d8b7e83b49610507828c043e75d97b1ea0d5906121569086908490613f3e565b60405180910390a1801561217c57600f5461217c906001600160a01b031633848461310c565b50506001600055505050565b60055460009033906001600160a01b031681146121b75760405162461bcd60e51b815260040161058990613d93565b6000858152601660205260409020546001600160a01b0390811690881681146121f25760405162461bcd60e51b815260040161058990613c14565b6001600160a01b0387163014158061228357506004805460405162f773f360e51b81526001600160a01b0390911691631eee7e609161223391309101613a4e565b60206040518083038186803b15801561224b57600080fd5b505afa15801561225f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228391906138db565b61229f5760405162461bcd60e51b815260040161058990613cd3565b6001600160a01b0387163014156122de576003546122c7906001600160a01b03168287613166565b6004546122de906001600160a01b03168286613166565b506001979650505050505050565b6122f46123dd565b6001600160a01b0316612305611554565b6001600160a01b03161461234e576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b6001600160a01b0381166123935760405162461bcd60e51b815260040180806020018281038252602681526020018061409f6026913960400191505060405180910390fd5b6001546040516001600160a01b0380841692169060008051602061414c83398151915290600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b4290565b6000610c66836001600160a01b0384166131b8565b6000610c6683836131d0565b6005546040516308521f7960e01b8152600091829182916001600160a01b0316906308521f799061243b908790600401613f35565b6101006040518083038186803b15801561245457600080fd5b505afa158015612468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248c91906139f2565b50959a9399509197509195505050505050565b601e54156124e4576124b18282612c9c565b6124b96123e1565b1080156124c85750601e548110155b6124e45760405162461bcd60e51b815260040161058990613d00565b601f5415612517576124f68282612c9c565b601f5411156125175760405162461bcd60e51b815260040161058990613b2e565b60205415612541576020548310156125415760405162461bcd60e51b815260040161058990613b76565b505050565b601d54158061255e57506125586123e1565b601d5410155b801561256d5750600a5460ff16155b6125895760405162461bcd60e51b815260040161058990613c14565b6006546001600160a01b0316156126385760065460405163387777d760e21b81526001600160a01b039091169063e1dddf5c906125cc9086908690600401613aa0565b60206040518083038186803b1580156125e457600080fd5b505afa1580156125f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261c91906138db565b6126385760405162461bcd60e51b815260040161058990613b9e565b6126406127f1565b6001600160a01b0383166000908152601560205260409020612662818561292f565b805461266e9083612c9c565b815560135461267d9083612c9c565b60135561268981612b69565b836001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1584846040516126c4929190613f3e565b60405180910390a250505050565b60006108a08261321a565b600082821115612734576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b8061274457612541565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190612773903090600401613a4e565b60206040518083038186803b15801561278b57600080fd5b505afa15801561279f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c3919061394e565b9050808211156127d1578091505b6119996001600160a01b0385168484613166565b6000610c66838361321e565b60006127fb6123e1565b9050601454811161280c57506113e9565b6013546128355760148190556040516000805160206140eb83398151915290600090a1506113e9565b600061284f610d01601454846126dd90919063ffffffff16565b600d549091508111156128615750600d545b600d5461286e90826126dd565b600d556013546128979061288e90610d3e84670de0b6b3a7640000612bdf565b600e5490612c9c565b600e55600f546001600160a01b03161561290f576128c3610d5e601454846126dd90919063ffffffff16565b6011549091508111156128d557506011545b6011546128e290826126dd565b60115560135461290b9061290290610d3e84670de0b6b3a7640000612bdf565b60125490612c9c565b6012555b60148290556040516000805160206140eb83398151915290600090a15050565b6006546001906001600160a01b0316156129c657600654604051637db8130d60e11b81526001600160a01b039091169063fb70261a90612973908590600401613a4e565b60206040518083038186803b15801561298b57600080fd5b505afa15801561299f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c391906138db565b90505b60006129f88460010154610cfb670de0b6b3a7640000610d3e600b600301548960000154612bdf90919063ffffffff16565b601c54909150612a066123e1565b1080612a10575081155b15612a2e576003840154612a249082612c9c565b6003850155612a99565b6003840154612a3e908290612c9c565b60006003860155600b54909150612a5f906001600160a01b0316848361273a565b600b546040516001600160a01b03858116926000805160206141b683398151915292612a9092909116908590613aa0565b60405180910390a25b600f546001600160a01b0316156119995760028401546012548554612ad19291610cfb91670de0b6b3a764000091610d3e9190612bdf565b601c54909150612adf6123e1565b1080612ae9575081155b15612b07576004840154612afd9082612c9c565b6004850155611999565b6004840154612b17908290612c9c565b60006004860155600f54909150612b38906001600160a01b0316848361273a565b600f546040516001600160a01b03858116926000805160206141b6833981519152926126c492909116908590613aa0565b600e5481546000918291612b7c91613282565b915091508115612b9e57612b9881670de0b6b3a7640000612c38565b60018401555b6012548354612bac91613282565b9092509050811561254157612bc981670de0b6b3a7640000612c38565b6002840155505050565b6000610c6683836132c4565b600082612bee575060006108a0565b82820282848281612bfb57fe5b0414610c665760405162461bcd60e51b815260040180806020018281038252602181526020018061410b6021913960400191505060405180910390fd5b6000808211612c8b576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b818381612c9457fe5b049392505050565b600082820183811015610c66576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008184841115612d835760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d48578181015183820152602001612d30565b50505050905090810190601f168015612d755780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000610c66836001600160a01b0384166132c4565b6002546001600160a01b031663df136cfe612db9611554565b836040518363ffffffff1660e01b8152600401612dd7929190613a62565b600060405180830381600087803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b5050505050565b612e146123dd565b6001600160a01b0316612e25611554565b6001600160a01b031614612e6e576040805162461bcd60e51b8152602060048201819052602482015260008051602061412c833981519152604482015290519081900360640190fd5b6001546040516000916001600160a01b03169060008051602061414c833981519152908390a3600180546001600160a01b0319169055565b6000610c66836001600160a01b0384166131d0565b821580612ec95750601a5483115b612ee55760405162461bcd60e51b815260040161058990613b2e565b60085460ff1615612f8c57601e54841015612f125760405162461bcd60e51b815260040161058990613d00565b601f54831015612f345760405162461bcd60e51b815260040161058990613b2e565b602054821015612f565760405162461bcd60e51b815260040161058990613d2e565b60215460ff161580612f70575060215460ff161515811515145b612f8c5760405162461bcd60e51b815260040161058990613dbc565b601e849055601f83905560208290556021805460ff19168215151790556040517f4f49c49ff16acb310d9b9b87703c99594e407985b787e282988a4389faba8bc690612fdf908690869086908690613f62565b60405180910390a150505050565b600080846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161301c9190613a4e565b60206040518083038186803b15801561303457600080fd5b505afa158015613048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306c919061394e565b90506130836001600160a01b03861685308661310c565b61310381866001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016130b39190613a4e565b60206040518083038186803b1580156130cb57600080fd5b505afa1580156130df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb919061394e565b95945050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261199990859061338a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261254190849061338a565b60009081526001919091016020526040902054151590565b60006131dc83836131b8565b613212575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108a0565b5060006108a0565b5490565b815460009082106132605760405162461bcd60e51b815260040180806020018281038252602281526020018061405d6022913960400191505060405180910390fd5b82600001828154811061326f57fe5b9060005260206000200154905092915050565b6000808361329657506001905060006132bd565b838302838582816132a357fe5b04146132b65760008092509250506132bd565b6001925090505b9250929050565b6000818152600183016020526040812054801561338057835460001980830191908101906000908790839081106132f757fe5b906000526020600020015490508087600001848154811061331457fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061334457fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506108a0565b60009150506108a0565b60006133df826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661343b9092919063ffffffff16565b805190915015612541578080602001905160208110156133fe57600080fd5b50516125415760405162461bcd60e51b815260040180806020018281038252602a81526020018061418c602a913960400191505060405180910390fd5b606061344a8484600085613452565b949350505050565b6060824710156134935760405162461bcd60e51b81526004018080602001828103825260268152602001806140c56026913960400191505060405180910390fd5b61349c856135ad565b6134ed576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831061352b5780518252601f19909201916020918201910161350c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461358d576040519150601f19603f3d011682016040523d82523d6000602084013e613592565b606091505b50915091506135a28282866135b3565b979650505050505050565b3b151590565b606083156135c2575081610c66565b8251156135d25782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612d48578181015183820152602001612d30565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261364f5760008555613695565b82601f106136685782800160ff19823516178555613695565b82800160010185558215613695579182015b8281111561369557823582559160200191906001019061367a565b506136a19291506136a5565b5090565b5b808211156136a157600081556001016136a6565b60008083601f8401126136cb578182fd5b5081356001600160401b038111156136e1578182fd5b6020830191508360208285010111156132bd57600080fd5b60006020828403121561370a578081fd5b8135610c6681614039565b600060208284031215613726578081fd5b8151610c6681614039565b600080600080600060808688031215613748578081fd5b853561375381614039565b9450602086013561376381614039565b93506040860135925060608601356001600160401b03811115613784578182fd5b613790888289016136ba565b969995985093965092949392505050565b600080600080600060a086880312156137b8578081fd5b85356137c381614039565b945060208601356137d381614039565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215613803578182fd5b823561380e81614039565b946020939093013593505050565b600080600060608486031215613830578283fd5b833561383b81614039565b95602085013595506040909401359392505050565b60008060208385031215613862578182fd5b82356001600160401b0380821115613878578384fd5b818501915085601f83011261388b578384fd5b813581811115613899578485fd5b8660206040830285010111156138ad578485fd5b60209290920196919550909350505050565b6000602082840312156138d0578081fd5b8135610c668161404e565b6000602082840312156138ec578081fd5b8151610c668161404e565b60008060208385031215613909578182fd5b82356001600160401b0381111561391e578283fd5b61392a858286016136ba565b90969095509350505050565b600060208284031215613947578081fd5b5035919050565b60006020828403121561395f578081fd5b5051919050565b60008060408385031215613978578081fd5b50508035926020909101359150565b60008060006060848603121561399b578081fd5b505081359360208301359350604090920135919050565b600080600080608085870312156139c7578182fd5b84359350602085013592506040850135915060608501356139e78161404e565b939692955090935050565b600080600080600080600080610100898b031215613a0e578586fd5b505086516020880151604089015160608a015160808b015160a08c015160c08d015160e0909d0151959e949d50929b919a50985090965094509092509050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b6020808252600f908201526e1a5b9d985b1a59081b1bd8dad15b99608a1b604082015260600190565b6020808252600590820152647374616c6560d81b604082015260600190565b6020808252600e908201526d1a5b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b602080825260119082015270696e76616c696420637573746f6d52657160781b604082015260600190565b6020808252600a90820152691c1bdbdb08195b99195960b21b604082015260600190565b6020808252600d908201526c1b9bdd081c1d589b1a5cda1959609a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b602080825260059082015264656d70747960d81b604082015260600190565b6020808252601a90820152796e6f7420616c6c6f776564206465706f736974456e6454696d6560301b604082015260600190565b6020808252600a90820152696e6f207265776172647360b01b604082015260600190565b6020808252600990820152681c1d589b1a5cda195960ba1b604082015260600190565b60208082526013908201527263616e742068616e646c65207265776172647360681b604082015260600190565b60208082526014908201527334b73b30b634b2103637b1b5a23ab930ba34b7b760611b604082015260600190565b6020808252601590820152741a5b9d985b1a590819195c1bdcda5d105b5bdd5b9d605a1b604082015260600190565b6020808252601c908201527b6e6f7420616c6c6f7765642068617276657374537461727454696d6560201b604082015260600190565b6020808252600f908201526e1a5b9d985b1a5908139195141bdbdb608a1b604082015260600190565b6020808252601190820152701a5b9d985b1a59081dda1a5d195b1a5cdd607a1b604082015260600190565b6020808252600d908201526c3932bbb0b93239aa37b5b2b71960991b604082015260600190565b6020808252601390820152726e6f7420616c6c6f77656420656e6454696d6560681b604082015260600190565b602080825260189082015277696e76616c69642068617276657374537461727454696d6560401b604082015260600190565b6020808252600f908201526e696e76616c696420656e6454696d6560881b604082015260600190565b6020808252600f908201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b602080825260169082015275696e76616c6964206465706f736974456e6454696d6560501b604082015260600190565b6020808252600b908201526a185b1c9958591e481cd95d60aa1b604082015260600190565b6020808252600790820152661a5b9d985b1a5960ca1b604082015260600190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b938452602084019290925260408301521515606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b60006101208b835260208b818501528a60408501528960608501528860808501528760a08501528660c085015285151560e085015281610100850152845180838601528392505b8083101561400857858301820151858401610140015291810191613fe9565b8083111561401a578361014082870101525b601f01601f191693909301610140019c9b505050505050505050505050565b6001600160a01b0381168114611e2657600080fd5b8015158114611e2657600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64735265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c3b995fb49557022d683e66ab27e0339ab7db40111da9b4f57765b99e20f78686536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e022f196d9cf5ab2abfb5e4f2e291a2452f5c28d88e99b62b74b9c6e62ab231a445361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a0306f61d3fafe13787b78e276cb6b644382854a66cb46daae14227d3ec26797a2646970667358221220e7860112e737493a5c76ad9a4e50eb2c8da061fddba3bc2bb630ad76c01f49c164736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212207e41ca22d3a3f1920b62f4acd5d6b9b9027e984b292a05da30b65dfa32c08fd564736f6c63430007060033000000000000000000000000bb1676046c36bcd2f6fd08d8f60672c7087d9adf000000000000000000000000f192897fc39bf766f1011a858de964457bca5832000000000000000000000000f40165556aa00242f4458416ef7d3cac80f2e93e000000000000000000000000c28232384826997d80edd541b5e04b3daf0dd8c2