60806040526008805460ff19908116600117909155670f43fc2c04ee00006009908155670de444324c2a8000600a90815561270f600b55612710600c55600d80549093169092556014600e8190556019600f9081555f6010819055600260115560128590556013829055915560155561007791610352565b610083906103e8610367565b6016556100926009600a610352565b61009d906019610367565b6017556100ac6009600a610352565b6100b7906019610367565b6018556100c66009600a610352565b6100d190600a610367565b6019556100e06009600a610352565b6100eb906014610367565b601a55601c805465ffffffffffff60a81b19166201010160c01b1790556064601d5560c8601e5534801561011d575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d8054610100600160a81b03191661010033908102919091179091556016545f918252600260205260408220556001906005906101a35f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790553081526005909352818320805485166001908117909155600d54610100900490911683529120805490921617905543601f556102093390565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60165460405161024f91815260200190565b60405180910390a361037e565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156102aa57815f19048211156102905761029061025c565b8085161561029d57918102915b93841c9390800290610275565b509250929050565b5f826102c05750600161034c565b816102cc57505f61034c565b81600181146102e257600281146102ec57610308565b600191505061034c565b60ff8411156102fd576102fd61025c565b50506001821b61034c565b5060208310610133831016604e8410600b841016171561032b575081810a61034c565b6103358383610270565b805f19048211156103485761034861025c565b0290505b92915050565b5f61036060ff8416836102b2565b9392505050565b808202811582820484141761034c5761034c61025c565b6124728061038b5f395ff3fe608060405260043610610262575f3560e01c80637d1db4a51161013f578063a9c1f2f1116100b3578063c876d0b911610078578063c876d0b9146106a9578063c9567bf9146106c2578063d02b6078146106d6578063d4d7b19a146106ea578063dd62ed3e14610718578063f9dc53221461075c575f80fd5b8063a9c1f2f11461062b578063ad2961a314610640578063be69c2fe14610655578063bf474bed14610675578063c231e85c1461068a575f80fd5b806395d89b411161010457806395d89b411461057a57806396bb3d9c146105a55780639e78fb4f146105c4578063a05d2f77146105d8578063a218141b146105f7578063a9059cbb1461060c575f80fd5b80637d1db4a5146104f55780638da5cb5b1461050a5780638f9a55c0146105305780639079f93214610545578063931502c714610565575f80fd5b80633f95e273116101d65780635fe8e7cc1161019b5780635fe8e7cc1461044f57806364a72a6c1461047057806370a082311461048f578063715018a6146104ae578063751039fc146104c257806378b41d8b146104d6575f80fd5b80633f95e273146103cf5780634019a1db146103ee57806351bc3c85146104075780635392244d1461041b5780635e5616281461042f575f80fd5b80630b868277116102275780630b868277146103375780630faee56f1461034c57806318160ddd1461036157806323b872dd146103755780632b29026114610394578063313ce567146103b4575f80fd5b806304e7e0b91461026d57806305af07421461028e57806306fdde03146102b6578063095ea7b3146102f45780630a80402f14610323575f80fd5b3661026957005b5f80fd5b348015610278575f80fd5b5061028c6102873660046120d0565b610771565b005b348015610299575f80fd5b506102a3600c5481565b6040519081526020015b60405180910390f35b3480156102c1575f80fd5b5060408051808201909152600d81526c046616b654d61726b657443617609c1b60208201525b6040516102ad91906120e7565b3480156102ff575f80fd5b5061031361030e366004612130565b6107a8565b60405190151581526020016102ad565b34801561032e575f80fd5b5061028c6107be565b348015610342575f80fd5b506102a3601d5481565b348015610357575f80fd5b506102a3601a5481565b34801561036c575f80fd5b506016546102a3565b348015610380575f80fd5b5061031361038f36600461215a565b6107ed565b34801561039f575f80fd5b50601c5461031390600160d01b900460ff1681565b3480156103bf575f80fd5b50604051600981526020016102ad565b3480156103da575f80fd5b5061028c6103e93660046120d0565b610854565b3480156103f9575f80fd5b506008546103139060ff1681565b348015610412575f80fd5b5061028c61087d565b348015610426575f80fd5b506102a3600a81565b34801561043a575f80fd5b50601c5461031390600160c81b900460ff1681565b34801561045a575f80fd5b506104636108d0565b6040516102ad91906121db565b34801561047b575f80fd5b5061028c61048a3660046121fa565b610930565b34801561049a575f80fd5b506102a36104a9366004612215565b610977565b3480156104b9575f80fd5b5061028c610991565b3480156104cd575f80fd5b5061028c610a02565b3480156104e1575f80fd5b5061028c6104f03660046121fa565b610a77565b348015610500575f80fd5b506102a360175481565b348015610515575f80fd5b505f546040516001600160a01b0390911681526020016102ad565b34801561053b575f80fd5b506102a360185481565b348015610550575f80fd5b50601c5461031390600160c01b900460ff1681565b348015610570575f80fd5b506102a3600a5481565b348015610585575f80fd5b5060408051808201909152600381526204341560ec1b60208201526102e7565b3480156105b0575f80fd5b5061028c6105bf3660046120d0565b610ab3565b3480156105cf575f80fd5b5061028c610ae1565b3480156105e3575f80fd5b5061028c6105f23660046121fa565b610cc8565b348015610602575f80fd5b506102a3601f5481565b348015610617575f80fd5b50610313610626366004612130565b610d0f565b348015610636575f80fd5b506102a3600b5481565b34801561064b575f80fd5b506102a360095481565b348015610660575f80fd5b50601c5461031390600160b81b900460ff1681565b348015610680575f80fd5b506102a360195481565b348015610695575f80fd5b5061028c6106a43660046121fa565b610d1b565b3480156106b4575f80fd5b50600d546103139060ff1681565b3480156106cd575f80fd5b5061028c610d62565b3480156106e1575f80fd5b5061028c610f32565b3480156106f5575f80fd5b50610313610704366004612215565b60036020525f908152604090205460ff1681565b348015610723575f80fd5b506102a3610732366004612230565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b348015610767575f80fd5b506102a3601e5481565b5f546001600160a01b031633146107a35760405162461bcd60e51b815260040161079a90612267565b60405180910390fd5b600b55565b5f6107b4338484610fc2565b5060015b92915050565b600a5460095411156107eb57600c54600b546009546107dd91906122b0565b6107e791906122c7565b6009555b565b5f6107f98484846110e5565b61084a8433610845856040518060600160405280602881526020016123f5602891396001600160a01b038a165f90815260046020908152604080832033845290915290205491906118b7565b610fc2565b5060019392505050565b5f546001600160a01b031633146107e75760405162461bcd60e51b815260040161079a90612267565b600d5461010090046001600160a01b0316336001600160a01b0316146108a1575f80fd5b5f6108ab30610977565b905080156108bc576108bc816118ef565b4780156108cc576108cc81611a78565b5050565b6060600180548060200260200160405190810160405280929190818152602001828054801561092657602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610908575b5050505050905090565b5f546001600160a01b031633146109595760405162461bcd60e51b815260040161079a90612267565b601c8054911515600160b81b0260ff60b81b19909216919091179055565b6001600160a01b03165f9081526002602052604090205490565b5f546001600160a01b031633146109ba5760405162461bcd60e51b815260040161079a90612267565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610a2b5760405162461bcd60e51b815260040161079a90612267565b60165460178190556018819055600d805460ff191690556040519081527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9060200160405180910390a1565b5f546001600160a01b03163314610aa05760405162461bcd60e51b815260040161079a90612267565b6008805460ff1916911515919091179055565b5f546001600160a01b03163314610adc5760405162461bcd60e51b815260040161079a90612267565b601d55565b5f546001600160a01b03163314610b0a5760405162461bcd60e51b815260040161079a90612267565b601b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155601654610b41913091610fc2565b601b5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb591906122e6565b6001600160a01b031663c9c6539630601b5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3891906122e6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610c82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca691906122e6565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610cf15760405162461bcd60e51b815260040161079a90612267565b601c8054911515600160c01b0260ff60c01b19909216919091179055565b5f6107b43384846110e5565b5f546001600160a01b03163314610d445760405162461bcd60e51b815260040161079a90612267565b601c8054911515600160c81b0260ff60c81b19909216919091179055565b5f546001600160a01b03163314610d8b5760405162461bcd60e51b815260040161079a90612267565b601c54600160a01b900460ff1615610de55760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640161079a565b601b546001600160a01b031663f305d7194730610e0181610977565b5f80610e145f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610e7a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e9f9190612301565b5050601c54601b5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610ef4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f18919061232c565b50601c805462ff00ff60a01b19166201000160a01b179055565b5f546001600160a01b03163314610f5b5760405162461bcd60e51b815260040161079a90612267565b5f5b600154811015610fbf575f60018281548110610f7b57610f7b612347565b5f918252602080832091909101546040519283526001600160a01b03169250829182915f8051602061241d833981519152910160405180910390a350600101610f5d565b50565b6001600160a01b0383166110245760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161079a565b6001600160a01b0382166110855760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161079a565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111495760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161079a565b6001600160a01b0382166111ab5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161079a565b5f811161120c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161079a565b5f80546001600160a01b0385811691161480159061123757505f546001600160a01b03848116911614155b1561170457600d5460ff16156112f357601b546001600160a01b038481169116148015906112735750601c546001600160a01b03848116911614155b156112f357325f9081526007602052604090205443116112e15760405162461bcd60e51b8152602060048201526024808201527f4f6e6c79206f6e65207472616e736665722070657220626c6f636b20616c6c6f6044820152633bb2b21760e11b606482015260840161079a565b325f9081526007602052604090204390555b601c546001600160a01b03858116911614801561131e5750601b546001600160a01b03848116911614155b801561134257506001600160a01b0383165f9081526005602052604090205460ff16155b15611426576017548211156113955760405162461bcd60e51b815260206004820152601960248201527822bc31b2b2b239903a3432902fb6b0bc2a3c20b6b7bab73a1760391b604482015260640161079a565b601854826113a285610977565b6113ac919061235b565b11156113fa5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e000000000000604482015260640161079a565b601454601554101561141157823b15611411575f80fd5b60158054905f6114208361236e565b91905055505b611452606461144c6012546015541161144157600e54611445565b6010545b8590611ab3565b90611b38565b601c549091506001600160a01b03848116911614801561147b57506001600160a01b0384163014155b15611669576017548211156114ce5760405162461bcd60e51b815260206004820152601960248201527822bc31b2b2b239903a3432902fb6b0bc2a3c20b6b7bab73a1760391b604482015260640161079a565b6114f3606461144c601354601554116114e957600f54611445565b6011548590611ab3565b601c54909150600160c01b900460ff161561166957600a601f54611517919061235b565b431061166957601d54601c546001600160a01b03165f9081526002602052604081205490916127109161154a91906122b0565b61155491906122c7565b601c546001600160a01b03165f9081526002602052604090205490915061157b9082611b79565b601c546001600160a01b03165f9081526002602052604081209190915580525f805160206123d5833981519152546115b39082611bba565b5f80805260026020525f805160206123d583398151915291909155601c546040516001600160a01b0391909116905f8051602061241d833981519152906115fd9085815260200190565b60405180910390a3601c5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611651575f80fd5b505af1158015611663573d5f803e3d5ffd5b50505050505b5f61167330610977565b601c54909150600160a81b900460ff1615801561169d5750601c546001600160a01b038581169116145b80156116b25750601c54600160b01b900460ff165b80156116bf575060195481115b80156116ce5750601454601554115b15611702576116f06116eb846116e684601a54611c18565b611c18565b6118ef565b4780156117005761170047611a78565b505b505b801561176957305f908152600260205260409020546117239082611bba565b305f81815260026020526040908190209290925590516001600160a01b038616905f8051602061241d833981519152906117609085815260200190565b60405180910390a35b601c54600160c81b900460ff16156117845761178482611c2c565b6001600160a01b0384165f908152600260205260409020546117a69083611b79565b6001600160a01b0385165f908152600260205260409020556117e96117cb8383611b79565b6001600160a01b0385165f9081526002602052604090205490611bba565b6001600160a01b0384165f9081526002602052604090205561180a84611ca3565b61181383611ca3565b6001600160a01b038084169085165f8051602061241d8339815191526118398585611b79565b60405190815260200160405180910390a3601c54600160c01b900460ff1680156118705750601c546001600160a01b038481169116145b1561187d5761187d611d4f565b601c54600160c01b900460ff1680156118a35750601c546001600160a01b038581169116145b156118b1576118b183611ef7565b50505050565b5f81848411156118da5760405162461bcd60e51b815260040161079a91906120e7565b505f6118e68486612386565b95945050505050565b601c805460ff60a81b1916600160a81b1790558015611a6857601c54600160a01b900460ff1615611a68576040805160028082526060820183525f9260208301908036833701905050905030815f8151811061194d5761194d612347565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156119a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c891906122e6565b816001815181106119db576119db612347565b6001600160a01b039283166020918202929092010152601b54611a019130911684610fc2565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611a399085905f90869030904290600401612399565b5f604051808303815f87803b158015611a50575f80fd5b505af1158015611a62573d5f803e3d5ffd5b50505050505b50601c805460ff60a81b19169055565b600d546040516101009091046001600160a01b0316906108fc8315029083905f818181858888f193505050501580156108cc573d5f803e3d5ffd5b5f825f03611ac257505f6107b8565b5f611acd83856122b0565b905082611ada85836122c7565b14611b315760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161079a565b9392505050565b5f611b3183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120a4565b5f611b3183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118b7565b5f80611bc6838561235b565b905083811015611b315760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161079a565b5f818311611c265782611b31565b50919050565b60085460ff1615610fbf575f611c59670de0b6b3a764000061144c60095485611ab390919063ffffffff16565b90505f19611c7282601654611bba90919063ffffffff16565b1115611c8f575050601c805460ff60b81b1916600160b81b179055565b601654611c9c9082611bba565b6016555050565b5f611cad82610977565b118015611cc357506001600160a01b0381163014155b8015611ce757506001600160a01b0381165f9081526003602052604090205460ff16155b15610fbf576001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0384166001600160a01b031990911681179091555f908152600360205260409020805460ff1916909117905550565b600a601f54611d5e919061235b565b43106107eb576001545f5b81811015611eef575f60018281548110611d8557611d85612347565b5f9182526020822001546001600160a01b03169150611da382610977565b90505f612710601d5483611db791906122b0565b611dc191906122c7565b90505f81118015611de05750601c546001600160a01b03848116911614155b15611ee457808210611e76576001600160a01b0383165f9081526002602052604081208054839290611e13908490612386565b90915550505f80805260026020525f805160206123d58339815191528054839290611e3f90849061235b565b90915550506040518181525f906001600160a01b038516905f8051602061241d8339815191529060200160405180910390a3611ee4565b6001600160a01b0383165f9081526002602052604081208190558080525f805160206123d58339815191528054849290611eb190849061235b565b90915550506040518281525f906001600160a01b038516905f8051602061241d8339815191529060200160405180910390a35b505050600101611d69565b505043601f55565b6001545f5b8181101561209f575f60018281548110611f1857611f18612347565b5f9182526020822001546001600160a01b03169150611f3682610977565b90505f612710601e5483611f4a91906122b0565b611f5491906122c7565b90505f81118015611f735750601c546001600160a01b03848116911614155b8015611f905750856001600160a01b0316836001600160a01b0316145b1561209457808210612026576001600160a01b0383165f9081526002602052604081208054839290611fc3908490612386565b90915550505f80805260026020525f805160206123d58339815191528054839290611fef90849061235b565b90915550506040518181525f906001600160a01b038516905f8051602061241d8339815191529060200160405180910390a3612094565b6001600160a01b0383165f9081526002602052604081208190558080525f805160206123d5833981519152805484929061206190849061235b565b90915550506040518281525f906001600160a01b038516905f8051602061241d8339815191529060200160405180910390a35b505050600101611efc565b505050565b5f81836120c45760405162461bcd60e51b815260040161079a91906120e7565b505f6118e684866122c7565b5f602082840312156120e0575f80fd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610fbf575f80fd5b5f8060408385031215612141575f80fd5b823561214c8161211c565b946020939093013593505050565b5f805f6060848603121561216c575f80fd5b83356121778161211c565b925060208401356121878161211c565b929592945050506040919091013590565b5f815180845260208085019450602084015f5b838110156121d05781516001600160a01b0316875295820195908201906001016121ab565b509495945050505050565b602081525f611b316020830184612198565b8015158114610fbf575f80fd5b5f6020828403121561220a575f80fd5b8135611b31816121ed565b5f60208284031215612225575f80fd5b8135611b318161211c565b5f8060408385031215612241575f80fd5b823561224c8161211c565b9150602083013561225c8161211c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107b8576107b861229c565b5f826122e157634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156122f6575f80fd5b8151611b318161211c565b5f805f60608486031215612313575f80fd5b8351925060208401519150604084015190509250925092565b5f6020828403121561233c575f80fd5b8151611b31816121ed565b634e487b7160e01b5f52603260045260245ffd5b808201808211156107b8576107b861229c565b5f6001820161237f5761237f61229c565b5060010190565b818103818111156107b8576107b861229c565b85815284602082015260a060408201525f6123b760a0830186612198565b6001600160a01b039490941660608301525060800152939250505056feac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212206a3815ce146d031c43da5285b65733748f021d8e676001c642651502349b23f364736f6c63430008190033