60806040523480156200001157600080fd5b50604051620028183803806200281883398101604081905262000034916200016d565b3360405180604001604052806009815260200168135a5b995c881b999d60ba1b8152506040518060400160405280600581526020016426a4a722a960d91b8152508160009081620000869190620002f4565b506001620000958282620002f4565b5050506001600160a01b038116620000c757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000d28162000105565b50600980546001600160a01b0319166001600160a01b038416179055600a620000fc8282620002f4565b505050620003c0565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200018157600080fd5b82516001600160a01b03811681146200019957600080fd5b602084810151919350906001600160401b0380821115620001b957600080fd5b818601915086601f830112620001ce57600080fd5b815181811115620001e357620001e362000157565b604051601f8201601f19908116603f011681019083821181831017156200020e576200020e62000157565b8160405282815289868487010111156200022757600080fd5b600093505b828410156200024b57848401860151818501870152928501926200022c565b60008684830101528096505050505050509250929050565b600181811c908216806200027857607f821691505b6020821081036200029957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ef576000816000526020600020601f850160051c81016020861015620002ca5750805b601f850160051c820191505b81811015620002eb57828155600101620002d6565b5050505b505050565b81516001600160401b0381111562000310576200031062000157565b620003288162000321845462000263565b846200029f565b602080601f831160018114620003605760008415620003475750858301515b600019600386901b1c1916600185901b178555620002eb565b600085815260208120601f198616915b82811015620003915788860151825594840194600190910190840162000370565b5085821015620003b05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61244880620003d06000396000f3fe60806040526004361061026a5760003560e01c806370a0823111610153578063a0e67e2b116100cb578063d08f6b641161007f578063e985e9c511610064578063e985e9c514610682578063f2fde38b146106cb578063fc0c546a146106eb57600080fd5b8063d08f6b641461064c578063d1b68aac1461066c57600080fd5b8063b88d4fde116100b0578063b88d4fde146105f7578063bcc78bf014610617578063c87b56dd1461062c57600080fd5b8063a0e67e2b146105b5578063a22cb465146105d757600080fd5b8063806c440d116101225780638da5cb5b116101075780638da5cb5b1461056257806395d89b41146105805780639c83e8481461059557600080fd5b8063806c440d1461051b57806384a81a541461054857600080fd5b806370a08231146104b3578063715018a6146104d357806371646f5b146104e8578063774731b0146104fb57600080fd5b80633c130d90116101e6578063545e1f0a116101b55780636352211e1161019a5780636352211e1461045957806364627ee81461047957806369020b941461049957600080fd5b8063545e1f0a14610423578063626be5671461044357600080fd5b80633c130d90146103d157806341476a41146103e657806342842e0e146103ee5780634395acf91461040e57600080fd5b8063179750ec1161023d57806323b872dd1161022257806323b872dd146103645780632c043bdf1461038457806336e986ef146103b157600080fd5b8063179750ec146103205780631bfd3cc31461034057600080fd5b806301ffc9a71461026f57806306fdde03146102a4578063081812fc146102c6578063095ea7b3146102fe575b600080fd5b34801561027b57600080fd5b5061028f61028a366004611dee565b610710565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102b961076c565b60405161029b9190611e5b565b3480156102d257600080fd5b506102e66102e1366004611e6e565b6107fe565b6040516001600160a01b03909116815260200161029b565b34801561030a57600080fd5b5061031e610319366004611e9e565b610827565b005b34801561032c57600080fd5b5061031e61033b366004611e9e565b610836565b34801561034c57600080fd5b50610356600e5481565b60405190815260200161029b565b34801561037057600080fd5b5061031e61037f366004611ec8565b610881565b34801561039057600080fd5b5061035661039f366004611e6e565b600b6020526000908152604090205481565b3480156103bd57600080fd5b506103566103cc366004611f04565b61092a565b3480156103dd57600080fd5b506102b9610942565b6103566109d0565b3480156103fa57600080fd5b5061031e610409366004611ec8565b610aa7565b34801561041a57600080fd5b5061031e610ac7565b34801561042f57600080fd5b5061031e61043e366004611e6e565b610b76565b34801561044f57600080fd5b5061035660085481565b34801561046557600080fd5b506102e6610474366004611e6e565b610b83565b34801561048557600080fd5b506009546102e6906001600160a01b031681565b3480156104a557600080fd5b50600f5461028f9060ff1681565b3480156104bf57600080fd5b506103566104ce366004611f04565b610b8e565b3480156104df57600080fd5b5061031e610bef565b3480156104f457600080fd5b5047610356565b34801561050757600080fd5b5061031e610516366004611e9e565b610c03565b34801561052757600080fd5b5061053b610536366004611f04565b610d14565b60405161029b9190611f1f565b34801561055457600080fd5b50600d5461028f9060ff1681565b34801561056e57600080fd5b506007546001600160a01b03166102e6565b34801561058c57600080fd5b506102b9610e67565b3480156105a157600080fd5b5061031e6105b0366004611f71565b610e76565b3480156105c157600080fd5b506105ca610e91565b60405161029b9190611f8e565b3480156105e357600080fd5b5061031e6105f2366004611ff0565b610fcf565b34801561060357600080fd5b5061031e61061236600461203d565b610fda565b34801561062357600080fd5b50610356610ff1565b34801561063857600080fd5b506102b9610647366004611e6e565b611156565b34801561065857600080fd5b5061031e610667366004611f71565b611267565b34801561067857600080fd5b50610356600c5481565b34801561068e57600080fd5b5061028f61069d366004612119565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106d757600080fd5b5061031e6106e6366004611f04565b611282565b3480156106f757600080fd5b50600d546102e69061010090046001600160a01b031681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f490649060000000000000000000000000000000000000000000000000000000014806107665750610766826112d6565b92915050565b60606000805461077b9061214c565b80601f01602080910402602001604051908101604052809291908181526020018280546107a79061214c565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b5050505050905090565b6000610809826113b9565b506000828152600460205260409020546001600160a01b0316610766565b61083282823361140b565b5050565b61083e611418565b600d80546001600160a01b03909316610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff90931692909217909155600e55565b6001600160a01b0382166108b057604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006108bd83833361145e565b9050836001600160a01b0316816001600160a01b031614610924576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b03808616600483015260248201849052821660448201526064016108a7565b50505050565b6000610934611418565b6107668261156f565b919050565b600a805461094f9061214c565b80601f016020809104026020016040519081016040528092919081815260200182805461097b9061214c565b80156109c85780601f1061099d576101008083540402835291602001916109c8565b820191906000526020600020905b8154815290600101906020018083116109ab57829003601f168201915b505050505081565b600d5460009060ff16610a255760405162461bcd60e51b815260206004820181905260248201527f4e6f7420616c6c6f77206d696e742077697468206e617469766520746f6b656e60448201526064016108a7565b600c543414610a9c5760405162461bcd60e51b815260206004820152602a60248201527f53656e74204574686572206d757374206d61746368207468652073706563696660448201527f69656420616d6f756e740000000000000000000000000000000000000000000060648201526084016108a7565b60006107663361156f565b610ac283838360405180602001604052806000815250610fda565b505050565b6009546001600160a01b03163314610b475760405162461bcd60e51b815260206004820152602a60248201527f5769746864726177206661696c7572652c20796f7520617265206d757374206660448201527f756e6420686f6c6465720000000000000000000000000000000000000000000060648201526084016108a7565b60405133904780156108fc02916000818181858888f19350505050158015610b73573d6000803e3d6000fd5b50565b610b7e611418565b600c55565b6000610766826113b9565b60006001600160a01b038216610bd3576040517f89c62b64000000000000000000000000000000000000000000000000000000008152600060048201526024016108a7565b506001600160a01b031660009081526003602052604090205490565b610bf7611418565b610c0160006115f7565b565b6009546001600160a01b03163314610c835760405162461bcd60e51b815260206004820152602a60248201527f5769746864726177206661696c7572652c20796f7520617265206d757374206660448201527f756e6420686f6c6465720000000000000000000000000000000000000000000060648201526084016108a7565b6009546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101839052839182169063a9059cbb906044016020604051808303816000875af1158015610cf0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109249190612186565b6060600060085467ffffffffffffffff811115610d3357610d33612027565b604051908082528060200260200182016040528015610d5c578160200160208202803683370190505b509050600060015b6008548111610dcc576000818152600260205260409020546001600160a01b03868116911603610dba5780838381518110610da157610da16121a3565b602090810291909101015281610db6816121cf565b9250505b80610dc4816121cf565b915050610d64565b5060008167ffffffffffffffff811115610de857610de8612027565b604051908082528060200260200182016040528015610e11578160200160208202803683370190505b50905060005b82811015610e5e57838181518110610e3157610e316121a3565b6020026020010151828281518110610e4b57610e4b6121a3565b6020908102919091010152600101610e17565b50949350505050565b60606001805461077b9061214c565b610e7e611418565b600d805460ff1916911515919091179055565b606060085467ffffffffffffffff811115610eae57610eae612027565b604051908082528060200260200182016040528015610f0c57816020015b610ef960405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b815260200190600190039081610ecc5790505b50905060005b600854811015610fcb576000610f298260016121e9565b6000818152600260205260409020549091506001600160a01b031615610fc25760006040518060600160405280838152602001610f7b846000908152600260205260409020546001600160a01b031690565b6001600160a01b03168152602001600b600085815260200190815260200160002054815250905080848481518110610fb557610fb56121a3565b6020026020010181905250505b50600101610f12565b5090565b610832338383611661565b610fe5848484610881565b61092484848484611719565b600f5460009060ff166110465760405162461bcd60e51b815260206004820152601960248201527f4e6f7420616c6c6f77206d696e7420776974682045524332300000000000000060448201526064016108a7565b600d54600e546040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101919091526101009091046001600160a01b0316906323b872dd906064016020604051808303816000875af11580156110be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e29190612186565b610a9c576040805162461bcd60e51b81526020600482015260248101919091527f5472616e73666572206661696c65642e20456e7375726520796f75206861766560448201527f20617070726f7665642074686520636f727265637420616c6c6f77616e63652e60648201526084016108a7565b6060611161826113b9565b506000828152600660205260408120805461117b9061214c565b80601f01602080910402602001604051908101604052809291908181526020018280546111a79061214c565b80156111f45780601f106111c9576101008083540402835291602001916111f4565b820191906000526020600020905b8154815290600101906020018083116111d757829003601f168201915b50505050509050600061121260408051602081019091526000815290565b90508051600003611224575092915050565b81511561125657808260405160200161123e9291906121fc565b60405160208183030381529060405292505050919050565b61125f8461188c565b949350505050565b61126f611418565b600f805460ff1916911515919091179055565b61128a611418565b6001600160a01b0381166112cd576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016108a7565b610b73816115f7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061136957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061076657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610766565b6000818152600260205260408120546001600160a01b031680610766576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018490526024016108a7565b610ac28383836001611901565b6007546001600160a01b03163314610c01576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108a7565b6000828152600260205260408120546001600160a01b039081169083161561148b5761148b818486611a57565b6001600160a01b038116156114c9576114a8600085600080611901565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b038516156114f8576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600080600854600161158191906121e9565b905061158d8382611aed565b6000600a61159a83611b6b565b6040516020016115ab92919061222b565b60405160208183030381529060405290506115c68282611c0b565b6000828152600b6020526040812042905560088054600192906115ea9084906121e9565b9091555091949350505050565b600780546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166116ac576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016108a7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610924576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a02906117749033908890879087906004016122a9565b6020604051808303816000875af19250505080156117af575060408051601f3d908101601f191682019092526117ac918101906122e5565b60015b611818573d8080156117dd576040519150601f19603f3d011682016040523d82523d6000602084013e6117e2565b606091505b50805160000361181057604051633250574960e11b81526001600160a01b03851660048201526024016108a7565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a02000000000000000000000000000000000000000000000000000000001461188557604051633250574960e11b81526001600160a01b03851660048201526024016108a7565b5050505050565b6060611897826113b9565b5060006118af60408051602081019091526000815290565b905060008151116118cf57604051806020016040528060008152506118fa565b806118d984611b6b565b6040516020016118ea9291906121fc565b6040516020818303038152906040525b9392505050565b808061191557506001600160a01b03821615155b15611a0f576000611925846113b9565b90506001600160a01b038316158015906119515750826001600160a01b0316816001600160a01b031614155b801561198357506001600160a01b0380821660009081526005602090815260408083209387168352929052205460ff16155b156119c5576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016108a7565b8115611a0d5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b611a62838383611c5b565b610ac2576001600160a01b038316611aa9576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018290526024016108a7565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602481018290526044016108a7565b6001600160a01b038216611b1757604051633250574960e11b8152600060048201526024016108a7565b6000611b258383600061145e565b90506001600160a01b03811615610ac2576040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600060048201526024016108a7565b60606000611b7883611cde565b600101905060008167ffffffffffffffff811115611b9857611b98612027565b6040519080825280601f01601f191660200182016040528015611bc2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611bcc57509392505050565b6000828152600660205260409020611c238282612352565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60006001600160a01b0383161580159061125f5750826001600160a01b0316846001600160a01b03161480611cb557506001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b8061125f5750506000908152600460205260409020546001600160a01b03908116911614919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611d27577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611d53576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611d7157662386f26fc10000830492506010015b6305f5e1008310611d89576305f5e100830492506008015b6127108310611d9d57612710830492506004015b60648310611daf576064830492506002015b600a83106107665760010192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b7357600080fd5b600060208284031215611e0057600080fd5b81356118fa81611dc0565b60005b83811015611e26578181015183820152602001611e0e565b50506000910152565b60008151808452611e47816020860160208601611e0b565b601f01601f19169290920160200192915050565b6020815260006118fa6020830184611e2f565b600060208284031215611e8057600080fd5b5035919050565b80356001600160a01b038116811461093d57600080fd5b60008060408385031215611eb157600080fd5b611eba83611e87565b946020939093013593505050565b600080600060608486031215611edd57600080fd5b611ee684611e87565b9250611ef460208501611e87565b9150604084013590509250925092565b600060208284031215611f1657600080fd5b6118fa82611e87565b6020808252825182820181905260009190848201906040850190845b81811015611f5757835183529284019291840191600101611f3b565b50909695505050505050565b8015158114610b7357600080fd5b600060208284031215611f8357600080fd5b81356118fa81611f63565b602080825282518282018190526000919060409081850190868401855b82811015611fe357815180518552868101516001600160a01b0316878601528501518585015260609093019290850190600101611fab565b5091979650505050505050565b6000806040838503121561200357600080fd5b61200c83611e87565b9150602083013561201c81611f63565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561205357600080fd5b61205c85611e87565b935061206a60208601611e87565b925060408501359150606085013567ffffffffffffffff8082111561208e57600080fd5b818701915087601f8301126120a257600080fd5b8135818111156120b4576120b4612027565b604051601f8201601f19908116603f011681019083821181831017156120dc576120dc612027565b816040528281528a60208487010111156120f557600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561212c57600080fd5b61213583611e87565b915061214360208401611e87565b90509250929050565b600181811c9082168061216057607f821691505b60208210810361218057634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561219857600080fd5b81516118fa81611f63565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982036121e2576121e26121b9565b5060010190565b80820180821115610766576107666121b9565b6000835161220e818460208801611e0b565b835190830190612222818360208801611e0b565b01949350505050565b60008084546122398161214c565b60018281168015612251576001811461226657612295565b60ff1984168752821515830287019450612295565b8860005260208060002060005b8581101561228c5781548a820152908401908201612273565b50505082870194505b505050508351612222818360208801611e0b565b60006001600160a01b038087168352808616602084015250836040830152608060608301526122db6080830184611e2f565b9695505050505050565b6000602082840312156122f757600080fd5b81516118fa81611dc0565b601f821115610ac2576000816000526020600020601f850160051c8101602086101561232b5750805b601f850160051c820191505b8181101561234a57828155600101612337565b505050505050565b815167ffffffffffffffff81111561236c5761236c612027565b6123808161237a845461214c565b84612302565b602080601f8311600181146123b5576000841561239d5750858301515b600019600386901b1c1916600185901b17855561234a565b600085815260208120601f198616915b828110156123e4578886015182559484019460019091019084016123c5565b50858210156124025787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212209a670fedfdc60cdc40b73b0ade5efbbf4613746b8acf9a3e32af170b4f9e111064736f6c6343000818003300000000000000000000000014ce292cdf59f1d9816ed57183c94e5d4868ecbd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002e68747470733a2f2f6274632d67616d652e6b6172646961636861696e2e696f2f6170692f76312f6d696e6572732f000000000000000000000000000000000000