60806040526007805473a0a7c77ec2713ac3036f309bfae7e81b4ccee70b6001600160a01b031991821681179092556008805490911690911790556a3913517ebd3c0c6500000060098190556103e8906200005c90600462000489565b620000689190620004a9565b600a5561271060095460146200007f919062000489565b6200008b9190620004a9565b600b556103e86009546014620000a2919062000489565b620000ae9190620004a9565b600c55600d805462ffffff19166001179055600f600e8190556019905560326010819055601155348015620000e1575f80fd5b50604051806040016040528060048152602001634d79726f60e01b815250604051806040016040528060048152602001634d59524f60e01b81525081600390816200012d919062000568565b5060046200013c828262000568565b50505062000159620001536200024d60201b60201c565b62000251565b62000178620001706005546001600160a01b031690565b6001620002a2565b60075462000191906001600160a01b03166001620002a2565b600854620001aa906001600160a01b03166001620002a2565b620001b7306001620002a2565b620001c661dead6001620002a2565b620001e5620001dd6005546001600160a01b031690565b60016200031a565b600754620001fe906001600160a01b031660016200031a565b60085462000217906001600160a01b031660016200031a565b620002243060016200031a565b6200023361dead60016200031a565b62000247306009546200038e60201b60201c565b62000646565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b03163314620002f05760405162461bcd60e51b815260206004820181905260248201525f80516020620025ae83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620003645760405162461bcd60e51b815260206004820181905260248201525f80516020620025ae8339815191526044820152606401620002e7565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b6001600160a01b038216620003e65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620002e7565b8060025f828254620003f9919062000630565b90915550506001600160a01b0382165f90815260208190526040812080548392906200042790849062000630565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620004a357620004a362000475565b92915050565b5f82620004c457634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620004f257607f821691505b6020821081036200051157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000470575f81815260208120601f850160051c810160208610156200053f5750805b601f850160051c820191505b8181101562000560578281556001016200054b565b505050505050565b81516001600160401b03811115620005845762000584620004c9565b6200059c81620005958454620004dd565b8462000517565b602080601f831160018114620005d2575f8415620005ba5750858301515b5f19600386901b1c1916600185901b17855562000560565b5f85815260208120601f198616915b828110156200060257888601518255948401946001909101908401620005e1565b50858210156200062057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620004a357620004a362000475565b611f5a80620006545f395ff3fe608060405260043610610241575f3560e01c806375f0a87411610134578063bbc0c742116100b3578063e0f3ccf511610078578063e0f3ccf5146106c1578063e2f45605146106d6578063e4748b9e146106eb578063ed99530714610700578063f2fde38b14610708578063f8b45b0514610727575f80fd5b8063bbc0c74214610617578063c024666814610635578063c8c8ebe414610654578063dd09cd7b14610669578063dd62ed3e1461067d575f80fd5b806395d89b41116100f957806395d89b41146105785780639a7a23d61461058c578063a457c2d7146105ab578063a9059cbb146105ca578063b62496f5146105e9575f80fd5b806375f0a874146104ea5780638a8c523c146105095780638da5cb5b1461051d5780638ea5220f1461053a578063924de9b714610559575f80fd5b8063360bfd54116101c05780636ddd1713116101855780636ddd17131461045057806370a082311461046f578063715018a6146104a3578063751039fc146104b75780637571336a146104cb575f80fd5b8063360bfd54146103ad57806339509351146103c257806349bd5a5e146103e15780634a62bb65146104005780634fbee19314610419575f80fd5b806323b872dd1161020657806323b872dd1461032857806325d92ee21461034757806327c8f835146103685780632b3459641461037d578063313ce56714610392575f80fd5b806306fdde031461024c578063095ea7b31461027657806310d5de53146102a55780631694505e146102d357806318160ddd1461030a575f80fd5b3661024857005b5f80fd5b348015610257575f80fd5b5061026061073c565b60405161026d9190611b7d565b60405180910390f35b348015610281575f80fd5b50610295610290366004611bdc565b6107cc565b604051901515815260200161026d565b3480156102b0575f80fd5b506102956102bf366004611c06565b60156020525f908152604090205460ff1681565b3480156102de575f80fd5b506012546102f2906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b348015610315575f80fd5b506002545b60405190815260200161026d565b348015610333575f80fd5b50610295610342366004611c21565b6107e2565b348015610352575f80fd5b50610366610361366004611c5f565b61088f565b005b348015610373575f80fd5b506102f261dead81565b348015610388575f80fd5b5061031a60115481565b34801561039d575f80fd5b506040516012815260200161026d565b3480156103b8575f80fd5b5061031a60105481565b3480156103cd575f80fd5b506102956103dc366004611bdc565b6108ea565b3480156103ec575f80fd5b506013546102f2906001600160a01b031681565b34801561040b575f80fd5b50600d546102959060ff1681565b348015610424575f80fd5b50610295610433366004611c06565b6001600160a01b03165f9081526014602052604090205460ff1690565b34801561045b575f80fd5b50600d546102959062010000900460ff1681565b34801561047a575f80fd5b5061031a610489366004611c06565b6001600160a01b03165f9081526020819052604090205490565b3480156104ae575f80fd5b50610366610925565b3480156104c2575f80fd5b5061029561095a565b3480156104d6575f80fd5b506103666104e5366004611caa565b61099f565b3480156104f5575f80fd5b506007546102f2906001600160a01b031681565b348015610514575f80fd5b506103666109f3565b348015610528575f80fd5b506005546001600160a01b03166102f2565b348015610545575f80fd5b506008546102f2906001600160a01b031681565b348015610564575f80fd5b50610366610573366004611cdd565b610a30565b348015610583575f80fd5b50610260610a76565b348015610597575f80fd5b506103666105a6366004611caa565b610a85565b3480156105b6575f80fd5b506102956105c5366004611bdc565b610b41565b3480156105d5575f80fd5b506102956105e4366004611bdc565b610bd9565b3480156105f4575f80fd5b50610295610603366004611c06565b60166020525f908152604090205460ff1681565b348015610622575f80fd5b50600d5461029590610100900460ff1681565b348015610640575f80fd5b5061036661064f366004611caa565b610be5565b34801561065f575f80fd5b5061031a600a5481565b348015610674575f80fd5b50610366610c39565b348015610688575f80fd5b5061031a610697366004611c5f565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156106cc575f80fd5b5061031a600f5481565b3480156106e1575f80fd5b5061031a600b5481565b3480156106f6575f80fd5b5061031a600e5481565b610366610c72565b348015610713575f80fd5b50610366610722366004611c06565b610f2a565b348015610732575f80fd5b5061031a600c5481565b60606003805461074b90611cf6565b80601f016020809104026020016040519081016040528092919081815260200182805461077790611cf6565b80156107c25780601f10610799576101008083540402835291602001916107c2565b820191905f5260205f20905b8154815290600101906020018083116107a557829003601f168201915b5050505050905090565b5f6107d8338484610fc2565b5060015b92915050565b5f6107ee8484846110e5565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156108775760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6108848533858403610fc2565b506001949350505050565b6005546001600160a01b031633146108b95760405162461bcd60e51b815260040161086e90611d2e565b600880546001600160a01b039283166001600160a01b03199182161790915560078054939092169216919091179055565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107d8918590610920908690611d77565b610fc2565b6005546001600160a01b0316331461094f5760405162461bcd60e51b815260040161086e90611d2e565b6109585f6116eb565b565b6005545f906001600160a01b031633146109865760405162461bcd60e51b815260040161086e90611d2e565b50600d805460ff191690556063600f555f600e55600190565b6005546001600160a01b031633146109c95760405162461bcd60e51b815260040161086e90611d2e565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610a1d5760405162461bcd60e51b815260040161086e90611d2e565b600d805462ffff00191662010100179055565b6005546001600160a01b03163314610a5a5760405162461bcd60e51b815260040161086e90611d2e565b600d8054911515620100000262ff000019909216919091179055565b60606004805461074b90611cf6565b6005546001600160a01b03163314610aaf5760405162461bcd60e51b815260040161086e90611d2e565b6013546001600160a01b0390811690831603610b335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161086e565b610b3d828261173c565b5050565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610bc25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161086e565b610bcf3385858403610fc2565b5060019392505050565b5f6107d83384846110e5565b6005546001600160a01b03163314610c0f5760405162461bcd60e51b815260040161086e90611d2e565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c635760405162461bcd60e51b815260040161086e90611d2e565b610c6f33600954610bd9565b50565b6005546001600160a01b03163314610c9c5760405162461bcd60e51b815260040161086e90611d2e565b601280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610cd081600161099f565b601254610ceb9030906001600160a01b031661092060025490565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4b9190611d8a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dba9190611d8a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610e04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e289190611d8a565b601380546001600160a01b0319166001600160a01b03929092169182179055610e5290600161099f565b601354610e69906001600160a01b0316600161173c565b6012546001600160a01b031663f305d7193430610e8560025490565b5f80610e996005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610eff573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f249190611da5565b50505050565b6005546001600160a01b03163314610f545760405162461bcd60e51b815260040161086e90611d2e565b6001600160a01b038116610fb95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161086e565b610c6f816116eb565b6001600160a01b0383166110245760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161086e565b6001600160a01b0382166110855760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161086e565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661110b5760405162461bcd60e51b815260040161086e90611dd0565b6001600160a01b0382166111315760405162461bcd60e51b815260040161086e90611e15565b5f81116111925760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161086e565b600d5460ff1615611506576005546001600160a01b038481169116148015906111c957506005546001600160a01b03838116911614155b80156111dd57506001600160a01b03821615155b80156111f457506001600160a01b03821661dead14155b801561120a5750600654600160a01b900460ff16155b1561150657600d54610100900460ff166112a7576001600160a01b0383165f9081526014602052604090205460ff168061125b57506001600160a01b0382165f9081526014602052604090205460ff165b6112a75760405162461bcd60e51b815260206004820152601b60248201527f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000604482015260640161086e565b6001600160a01b0383165f9081526016602052604090205460ff1680156112e657506001600160a01b0382165f9081526015602052604090205460ff16155b156113c957600a5481111561135b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161086e565b600c546001600160a01b0383165f908152602081905260409020546113809083611d77565b11156113c45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161086e565b611506565b6001600160a01b0382165f9081526016602052604090205460ff16801561140857506001600160a01b0383165f9081526015602052604090205460ff16155b1561147e57600a548111156113c45760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606482015260840161086e565b6001600160a01b0382165f9081526015602052604090205460ff1661150657600c546001600160a01b0383165f908152602081905260409020546114c29083611d77565b11156115065760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161086e565b600d5462010000900460ff1680156115285750600654600160a01b900460ff16155b801561154c57506001600160a01b0383165f9081526016602052604090205460ff16155b801561157057506001600160a01b0383165f9081526014602052604090205460ff16155b801561159457506001600160a01b0382165f9081526014602052604090205460ff16155b156115c2576006805460ff60a01b1916600160a01b1790556115b4611766565b6006805460ff60a01b191690555b6006546001600160a01b0384165f9081526014602052604090205460ff600160a01b90920482161591168061160e57506001600160a01b0383165f9081526014602052604090205460ff165b1561161657505f5b5f81156116d9576001600160a01b0384165f9081526016602052604090205460ff16801561164557505f600f54115b156116715761166a6064611664600f54866118b390919063ffffffff16565b906118c5565b90506116bb565b6001600160a01b0385165f9081526016602052604090205460ff16801561169957505f600e54115b156116bb576116b86064611664600e54866118b390919063ffffffff16565b90505b80156116cc576116cc8530836118d0565b6116d68184611e58565b92505b6116e48585856118d0565b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b305f9081526020819052604081205490818103611781575050565b600b548210610b3d57600b5461179681611a22565b5f4790505f6117b56064611664601054856118b390919063ffffffff16565b90505f6117c28383611b72565b6007546040519192506001600160a01b03169083905f81818185875af1925050503d805f811461180d576040519150601f19603f3d011682016040523d82523d5f602084013e611812565b606091505b50506008546040519196506001600160a01b03169082905f81818185875af1925050503d805f811461185f576040519150601f19603f3d011682016040523d82523d5f602084013e611864565b606091505b505060408051868152602081018690528215158183015290519196507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff919081900360600190a1505050505050565b5f6118be8284611e6b565b9392505050565b5f6118be8284611e82565b6001600160a01b0383166118f65760405162461bcd60e51b815260040161086e90611dd0565b6001600160a01b03821661191c5760405162461bcd60e51b815260040161086e90611e15565b6001600160a01b0383165f90815260208190526040902054818110156119935760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161086e565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906119c9908490611d77565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a1591815260200190565b60405180910390a3610f24565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611a5557611a55611ea1565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611aac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad09190611d8a565b81600181518110611ae357611ae3611ea1565b6001600160a01b039283166020918202929092010152601254611b099130911684610fc2565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b419085905f90869030904290600401611eb5565b5f604051808303815f87803b158015611b58575f80fd5b505af1158015611b6a573d5f803e3d5ffd5b505050505050565b5f6118be8284611e58565b5f6020808352835180828501525f5b81811015611ba857858101830151858201604001528201611b8c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c6f575f80fd5b5f8060408385031215611bed575f80fd5b8235611bf881611bc8565b946020939093013593505050565b5f60208284031215611c16575f80fd5b81356118be81611bc8565b5f805f60608486031215611c33575f80fd5b8335611c3e81611bc8565b92506020840135611c4e81611bc8565b929592945050506040919091013590565b5f8060408385031215611c70575f80fd5b8235611c7b81611bc8565b91506020830135611c8b81611bc8565b809150509250929050565b80358015158114611ca5575f80fd5b919050565b5f8060408385031215611cbb575f80fd5b8235611cc681611bc8565b9150611cd460208401611c96565b90509250929050565b5f60208284031215611ced575f80fd5b6118be82611c96565b600181811c90821680611d0a57607f821691505b602082108103611d2857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156107dc576107dc611d63565b5f60208284031215611d9a575f80fd5b81516118be81611bc8565b5f805f60608486031215611db7575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156107dc576107dc611d63565b80820281158282048414176107dc576107dc611d63565b5f82611e9c57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611f035784516001600160a01b031683529383019391830191600101611ede565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220b3928366a46a397e2e337a6f05a49853f451e36690f3a193710f7c0fc11967f564736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572