60806040523480156200001157600080fd5b506040805160208101909152600081526200002c816200003e565b50620000383362000057565b6200018c565b805162000053906002906020840190620000a9565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000b7906200014f565b90600052602060002090601f016020900481019282620000db576000855562000126565b82601f10620000f657805160ff191683800117855562000126565b8280016001018555821562000126579182015b828111156200012657825182559160200191906001019062000109565b506200013492915062000138565b5090565b5b8082111562000134576000815560010162000139565b600181811c908216806200016457607f821691505b602082108114156200018657634e487b7160e01b600052602260045260246000fd5b50919050565b61204d806200019c6000396000f3fe60806040526004361061011e5760003560e01c8063853828b6116100a0578063daa2a43511610064578063daa2a4351461033c578063e985e9c51461035c578063f242432a146103a5578063f2fde38b146103c5578063faf5f6cc146103e557600080fd5b8063853828b61461029a5780638da5cb5b146102a257806392ab723e146102d4578063a22cb465146102f4578063bdf6ce611461031457600080fd5b80632eb2c2d6116100e75780632eb2c2d6146101e85780634e1273f4146102085780635e495d7414610235578063715018a61461026557806382afd23b1461027a57600080fd5b8062fdd58e1461012357806301ffc9a7146101565780630e89341c14610186578063156e29f6146101b35780632b57cfbb146101c8575b600080fd5b34801561012f57600080fd5b5061014361013e366004611937565b610405565b6040519081526020015b60405180910390f35b34801561016257600080fd5b50610176610171366004611a65565b61049c565b604051901515815260200161014d565b34801561019257600080fd5b506101a66101a1366004611a9f565b6104ee565b60405161014d9190611cee565b6101c66101c1366004611961565b610596565b005b3480156101d457600080fd5b506101436101e3366004611ad1565b6107cb565b3480156101f457600080fd5b506101c66102033660046117fe565b6108bc565b34801561021457600080fd5b50610228610223366004611994565b610956565b60405161014d9190611cad565b34801561024157600080fd5b50610143610250366004611a9f565b60009081526004602052604090206002015490565b34801561027157600080fd5b506101c6610a80565b34801561028657600080fd5b50610176610295366004611a9f565b610ab6565b6101c6610afd565b3480156102ae57600080fd5b506003546001600160a01b03165b6040516001600160a01b03909116815260200161014d565b3480156102e057600080fd5b506101436102ef366004611a9f565b610b4b565b34801561030057600080fd5b506101c661030f36600461190d565b610b8f565b34801561032057600080fd5b506102bc7310a0cf0fd3b9b2d575d78130b29d61252313423e81565b34801561034857600080fd5b506101c6610357366004611af4565b610b9e565b34801561036857600080fd5b506101766103773660046117cb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156103b157600080fd5b506101c66103c03660046118a8565b610c19565b3480156103d157600080fd5b506101c66103e03660046117b0565b610ca3565b3480156103f157600080fd5b506101c6610400366004611b17565b610d3e565b60006001600160a01b0383166104765760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806104cd57506001600160e01b031982166303a24d0760e21b145b806104e857506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060046000838152602001908152602001600020600401805461051190611e96565b80601f016020809104026020016040519081016040528092919081815260200182805461053d90611e96565b801561058a5780601f1061055f5761010080835404028352916020019161058a565b820191906000526020600020905b81548152906001019060200180831161056d57829003601f168201915b50505050509050919050565b600081815260046020526040902060020154826105b283610b4b565b6105bc9190611e5f565b11156106255760405162461bcd60e51b815260206004820152603260248201527f546f74616c20737570706c79206c696d69742072656163686564206f7220746f6044820152711ad95b88191bd95cc81b9bdd08195e1a5cdd60721b606482015260840161046d565b6003546001600160a01b031633146107855761064081610ab6565b6106835760405162461bcd60e51b815260206004820152601460248201527314d85b19481a185cc81b9bdd081cdd185c9d195960621b604482015260640161046d565b61068d8382610405565b156106da5760405162461bcd60e51b815260206004820152601f60248201527f4164647265737320616c726561647920686f6c64207468697320746f6b656e00604482015260640161046d565b816001146107185760405162461bcd60e51b815260206004820152600b60248201526a26b0bc1018903a37b5b2b760a91b604482015260640161046d565b8161072382856107cb565b61072d9190611e77565b34146107855760405162461bcd60e51b815260206004820152602160248201527f7468652056616c7565206973206c6f776572207468656e2074686520507269636044820152606560f81b606482015260840161046d565b6107a083828460405180602001604052806000815250610e47565b600081815260046020526040812060030180548492906107c1908490611e5f565b9091555050505050565b6000828152600460205260408120600201546107f95760405162461bcd60e51b815260040161046d90611d49565b6040516370a0823160e01b81526001600160a01b03831660048201526000907310a0cf0fd3b9b2d575d78130b29d61252313423e906370a082319060240160206040518083038186803b15801561084f57600080fd5b505afa158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190611ab8565b156108a457506000838152600460205260409020600101546108b5565b506000838152600460205260409020545b9392505050565b6001600160a01b0385163314806108d857506108d88533610377565b6109425760405162461bcd60e51b815260206004820152603560248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604482015274185b881bdddb995c881b9bdc88185c1c1c9bdd9959605a1b606482015260840161046d565b61094f8585858585610f51565b5050505050565b606081518351146109bb5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161046d565b6000835167ffffffffffffffff8111156109d7576109d7611f45565b604051908082528060200260200182016040528015610a00578160200160208202803683370190505b50905060005b8451811015610a7857610a4b858281518110610a2457610a24611f2f565b6020026020010151858381518110610a3e57610a3e611f2f565b6020026020010151610405565b828281518110610a5d57610a5d611f2f565b6020908102919091010152610a7181611efe565b9050610a06565b509392505050565b6003546001600160a01b03163314610aaa5760405162461bcd60e51b815260040161046d90611e06565b610ab46000611126565b565b600081815260046020526040812060020154610ae45760405162461bcd60e51b815260040161046d90611d49565b5060009081526004602052604090206005015460ff1690565b6003546001600160a01b03163314610b275760405162461bcd60e51b815260040161046d90611e06565b60405133904780156108fc02916000818181858888f19350505050610ab457600080fd5b600081815260046020526040812060020154610b795760405162461bcd60e51b815260040161046d90611d49565b5060009081526004602052604090206003015490565b610b9a338383611178565b5050565b6003546001600160a01b03163314610bc85760405162461bcd60e51b815260040161046d90611e06565b600082815260046020526040902060020154610bf65760405162461bcd60e51b815260040161046d90611d49565b600091825260046020526040909120600501805460ff1916911515919091179055565b6001600160a01b038516331480610c355750610c358533610377565b610c965760405162461bcd60e51b815260206004820152602c60248201527f455243313135353a2063616c6c6572206973206e6f7420616e206f776e65722060448201526b1b9bdc88185c1c1c9bdd995960a21b606482015260840161046d565b61094f8585858585611259565b6003546001600160a01b03163314610ccd5760405162461bcd60e51b815260040161046d90611e06565b6001600160a01b038116610d325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161046d565b610d3b81611126565b50565b6003546001600160a01b03163314610d685760405162461bcd60e51b815260040161046d90611e06565b60328510610db15760405162461bcd60e51b8152602060048201526016602482015275145d585b9d1a5d1e481b1a5b5a5d081c995858da195960521b604482015260640161046d565b60008581526004602052604090206002015415610e095760405162461bcd60e51b8152602060048201526016602482015275151bdad95b881a5cc8185b1c9958591e48195e1a5cdd60521b604482015260640161046d565b600085815260046020818152604090922086815560018101869055600281018590558351610e3f939190920191908401906115f6565b505050505050565b6001600160a01b038416610ea75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161046d565b33610ec181600087610eb888611376565b61094f88611376565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610ef1908490611e5f565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461094f816000878787876113c1565b8151835114610fb35760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161046d565b6001600160a01b038416610fd95760405162461bcd60e51b815260040161046d90611d77565b3360005b84518110156110c0576000858281518110610ffa57610ffa611f2f565b60200260200101519050600085838151811061101857611018611f2f565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110685760405162461bcd60e51b815260040161046d90611dbc565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110a5908490611e5f565b92505081905550505050806110b990611efe565b9050610fdd565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611110929190611cc0565b60405180910390a4610e3f81878787878761152c565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156111ec5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161046d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661127f5760405162461bcd60e51b815260040161046d90611d77565b3361128f818787610eb888611376565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156112d05760405162461bcd60e51b815260040161046d90611dbc565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061130d908490611e5f565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461136d8288888888886113c1565b50505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106113b0576113b0611f2f565b602090810291909101015292915050565b6001600160a01b0384163b15610e3f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906114059089908990889088908890600401611c68565b602060405180830381600087803b15801561141f57600080fd5b505af192505050801561144f575060408051601f3d908101601f1916820190925261144c91810190611a82565b60015b6114fc5761145b611f5b565b806308c379a014156114955750611470611f77565b8061147b5750611497565b8060405162461bcd60e51b815260040161046d9190611cee565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161046d565b6001600160e01b0319811663f23a6e6160e01b1461136d5760405162461bcd60e51b815260040161046d90611d01565b6001600160a01b0384163b15610e3f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906115709089908990889088908890600401611c0a565b602060405180830381600087803b15801561158a57600080fd5b505af19250505080156115ba575060408051601f3d908101601f191682019092526115b791810190611a82565b60015b6115c65761145b611f5b565b6001600160e01b0319811663bc197c8160e01b1461136d5760405162461bcd60e51b815260040161046d90611d01565b82805461160290611e96565b90600052602060002090601f016020900481019282611624576000855561166a565b82601f1061163d57805160ff191683800117855561166a565b8280016001018555821561166a579182015b8281111561166a57825182559160200191906001019061164f565b5061167692915061167a565b5090565b5b80821115611676576000815560010161167b565b600067ffffffffffffffff8311156116a9576116a9611f45565b6040516116c0601f8501601f191660200182611ed1565b8091508381528484840111156116d557600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461170457600080fd5b919050565b600082601f83011261171a57600080fd5b8135602061172782611e3b565b6040516117348282611ed1565b8381528281019150858301600585901b8701840188101561175457600080fd5b60005b8581101561177357813584529284019290840190600101611757565b5090979650505050505050565b8035801515811461170457600080fd5b600082601f8301126117a157600080fd5b6108b58383356020850161168f565b6000602082840312156117c257600080fd5b6108b5826116ed565b600080604083850312156117de57600080fd5b6117e7836116ed565b91506117f5602084016116ed565b90509250929050565b600080600080600060a0868803121561181657600080fd5b61181f866116ed565b945061182d602087016116ed565b9350604086013567ffffffffffffffff8082111561184a57600080fd5b61185689838a01611709565b9450606088013591508082111561186c57600080fd5b61187889838a01611709565b9350608088013591508082111561188e57600080fd5b5061189b88828901611790565b9150509295509295909350565b600080600080600060a086880312156118c057600080fd5b6118c9866116ed565b94506118d7602087016116ed565b93506040860135925060608601359150608086013567ffffffffffffffff81111561190157600080fd5b61189b88828901611790565b6000806040838503121561192057600080fd5b611929836116ed565b91506117f560208401611780565b6000806040838503121561194a57600080fd5b611953836116ed565b946020939093013593505050565b60008060006060848603121561197657600080fd5b61197f846116ed565b95602085013595506040909401359392505050565b600080604083850312156119a757600080fd5b823567ffffffffffffffff808211156119bf57600080fd5b818501915085601f8301126119d357600080fd5b813560206119e082611e3b565b6040516119ed8282611ed1565b8381528281019150858301600585901b870184018b1015611a0d57600080fd5b600096505b84871015611a3757611a23816116ed565b835260019690960195918301918301611a12565b5096505086013592505080821115611a4e57600080fd5b50611a5b85828601611709565b9150509250929050565b600060208284031215611a7757600080fd5b81356108b581612001565b600060208284031215611a9457600080fd5b81516108b581612001565b600060208284031215611ab157600080fd5b5035919050565b600060208284031215611aca57600080fd5b5051919050565b60008060408385031215611ae457600080fd5b823591506117f5602084016116ed565b60008060408385031215611b0757600080fd5b823591506117f560208401611780565b600080600080600060a08688031215611b2f57600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115611b6257600080fd5b8601601f81018813611b7357600080fd5b61189b8882356020840161168f565b600081518084526020808501945080840160005b83811015611bb257815187529582019590820190600101611b96565b509495945050505050565b6000815180845260005b81811015611be357602081850181015186830182015201611bc7565b81811115611bf5576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611c3690830186611b82565b8281036060840152611c488186611b82565b90508281036080840152611c5c8185611bbd565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ca290830184611bbd565b979650505050505050565b6020815260006108b56020830184611b82565b604081526000611cd36040830185611b82565b8281036020840152611ce58185611b82565b95945050505050565b6020815260006108b56020830184611bbd565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff821115611e5557611e55611f45565b5060051b60200190565b60008219821115611e7257611e72611f19565b500190565b6000816000190483118215151615611e9157611e91611f19565b500290565b600181811c90821680611eaa57607f821691505b60208210811415611ecb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611ef757611ef7611f45565b6040525050565b6000600019821415611f1257611f12611f19565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611f745760046000803e5060005160e01c5b90565b600060443d1015611f855790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611fb557505050505090565b8285019150815181811115611fcd5750505050505090565b843d8701016020828501011115611fe75750505050505090565b611ff660208286010187611ed1565b509095945050505050565b6001600160e01b031981168114610d3b57600080fdfea2646970667358221220cc4a9543132e1cca839c77b2ad942ec9881eeebd06136a83230aa1e77b98e9c864736f6c63430008070033