60806040526007805460ff191660011790556200001f6009600a62000968565b620000309064e8d4a5100062000a27565b6200003e9060001962000a63565b6200004c9060001962000a49565b6008556008600b556002600c55600a600d556002600e556009600a62000073919062000968565b620000849064e8d4a5100062000a27565b601355620000956009600a62000968565b620000a69064e8d4a5100062000a27565b6014556015805461ffff19169055348015620000c157600080fd5b5060405162002b5638038062002b56833981016040819052620000e49162000896565b600080546001600160a01b03199081163390811783558252600160208190526040909220805460ff191690921790915560118054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556200015e3082620001476009600a62000968565b620001589064e8d4a5100062000a27565b62000519565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200019857600080fd5b505afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000847565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021c57600080fd5b505afa15801562000231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000257919062000847565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002a057600080fd5b505af1158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db919062000847565b601280546001600160a01b0319166001600160a01b0392831690811790915560405163095ea7b360e01b8152918316600483015260001960248301529063095ea7b390604401602060405180830381600087803b1580156200033c57600080fd5b505af115801562000351573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000377919062000872565b50601080546001600160a01b03191633908117909155620003eb6200039e84606462000a49565b620003d76064620003b26009600a62000968565b620003c39064e8d4a5100062000a27565b6200064560201b62000c721790919060201c565b6200069860201b62000cbb1790919060201c565b60065560105462000407906001600160a01b031660016200071f565b6200042983620003d760646008546200064560201b62000c721790919060201c565b6001600160a01b03821660009081526002602090815260409091208290556008546200046092909162000d3a6200078b821b17901c565b306000818152600260209081526040808320949094556001600160a01b0385811680845260059092528483208054600160ff1991821681179092559484528584208054861682179055601054909116835293822080549093169093179091557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620004ee6009600a62000968565b620004ff9064e8d4a5100062000a27565b60405190815260200160405180910390a350505062000aa6565b6001600160a01b038316620005815760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000578565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006200068f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007d560201b60201c565b90505b92915050565b600082620006a95750600062000692565b6000620006b7838562000a27565b905082620006c6858362000908565b146200068f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840162000578565b6000546001600160a01b03163314620007605760405162461bcd60e51b8152602060048201526002602482015261085160f21b604482015260640162000578565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b60006200068f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200081160201b60201c565b60008183620007f95760405162461bcd60e51b8152600401620005789190620008b0565b50600062000808848662000908565b95945050505050565b60008184841115620008385760405162461bcd60e51b8152600401620005789190620008b0565b50600062000808848662000a49565b6000602082840312156200085a57600080fd5b81516001600160a01b03811681146200068f57600080fd5b6000602082840312156200088557600080fd5b815180151581146200068f57600080fd5b600060208284031215620008a957600080fd5b5051919050565b600060208083528351808285015260005b81811015620008df57858101830151858201604001528201620008c1565b81811115620008f2576000604083870101525b50601f01601f1916929092016040019392505050565b6000826200091a576200091a62000a90565b500490565b600181815b808511156200096057816000190482111562000944576200094462000a7a565b808516156200095257918102915b93841c939080029062000924565b509250929050565b60006200068f60ff841683600082620009845750600162000692565b81620009935750600062000692565b8160018114620009ac5760028114620009b757620009d7565b600191505062000692565b60ff841115620009cb57620009cb62000a7a565b50506001821b62000692565b5060208310610133831016604e8410600b8410161715620009fc575081810a62000692565b62000a0883836200091f565b806000190482111562000a1f5762000a1f62000a7a565b029392505050565b600081600019048311821515161562000a445762000a4462000a7a565b500290565b60008282101562000a5e5762000a5e62000a7a565b500390565b60008262000a755762000a7562000a90565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6120a08062000ab66000396000f3fe6080604052600436106101a05760003560e01c806373d46b07116100ec578063ef422a181161008a578063f2fde38b11610064578063f2fde38b1461051d578063f8e5884b1461053d578063fab355f21461055d578063fceade721461057d57600080fd5b8063ef422a18146104bd578063efdcd974146104dd578063efe23e86146104fd57600080fd5b8063a12a7d61116100c6578063a12a7d6114610417578063a9059cbb14610437578063d163364914610457578063dd62ed3e1461047757600080fd5b806373d46b07146103a9578063943620db146103c957806395d89b41146103e957600080fd5b80632f54bf6e116101595780635d2c76b0116101335780635d2c76b0146103335780636883b831146103535780636a01f09c1461037357806370a082311461038957600080fd5b80632f54bf6e146102b0578063313ce567146102df57806349bd5a5e146102fb57600080fd5b8063069c9fae146101ac57806306fdde03146101ce578063095ea7b31461021d57806318160ddd1461024d57806323b872dd146102705780632d1fb3891461029057600080fd5b366101a757005b600080fd5b3480156101b857600080fd5b506101cc6101c7366004611cbb565b61059d565b005b3480156101da57600080fd5b506040805180820190915260148152734675636b205a75636b207c20465a75636b2e636f60601b60208201525b6040516102149190611d6c565b60405180910390f35b34801561022957600080fd5b5061023d610238366004611cbb565b61066a565b6040519015158152602001610214565b34801561025957600080fd5b50610262610681565b604051908152602001610214565b34801561027c57600080fd5b5061023d61028b366004611c4c565b6106a3565b34801561029c57600080fd5b506101cc6102ab366004611c8d565b61070c565b3480156102bc57600080fd5b5061023d6102cb366004611bd9565b6000546001600160a01b0391821691161490565b3480156102eb57600080fd5b5060405160098152602001610214565b34801561030757600080fd5b5060125461031b906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b34801561033f57600080fd5b506101cc61034e366004611d21565b610771565b34801561035f57600080fd5b506101cc61036e366004611d21565b6107a5565b34801561037f57600080fd5b5061026260065481565b34801561039557600080fd5b506102626103a4366004611bd9565b6107ed565b3480156103b557600080fd5b506101cc6103c4366004611d21565b61080f565b3480156103d557600080fd5b506101cc6103e4366004611ce7565b610843565b3480156103f557600080fd5b50604080518082019091526005815264465a55434b60d81b6020820152610207565b34801561042357600080fd5b506101cc610432366004611d3a565b610885565b34801561044357600080fd5b5061023d610452366004611cbb565b610994565b34801561046357600080fd5b506101cc610472366004611d21565b6109a1565b34801561048357600080fd5b50610262610492366004611c13565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156104c957600080fd5b506101cc6104d8366004611c8d565b6109e6565b3480156104e957600080fd5b506101cc6104f8366004611bd9565b610a40565b34801561050957600080fd5b506101cc610518366004611c8d565b610a91565b34801561052957600080fd5b506101cc610538366004611bd9565b610aeb565b34801561054957600080fd5b506101cc610558366004611d21565b610b91565b34801561056957600080fd5b506101cc610578366004611d21565b610c0a565b34801561058957600080fd5b506101cc610598366004611d21565b610c3e565b3360009081526001602052604090205460ff166105d55760405162461bcd60e51b81526004016105cc90611dc1565b60405180910390fd5b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106659190611d04565b505050565b6000610677338484610d7c565b5060015b92915050565b600061068f6009600a611ecf565b61069e9064e8d4a51000611f7a565b905090565b60006106b0848484610ea0565b61070284336106fd85604051806060016040528060288152602001612023602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611258565b610d7c565b5060019392505050565b610715336102cb565b6107465760405162461bcd60e51b8152602060048201526002602482015261085160f21b60448201526064016105cc565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b3360009081526001602052604090205460ff166107a05760405162461bcd60e51b81526004016105cc90611dc1565b601355565b3360009081526001602052604090205460ff166107d45760405162461bcd60e51b81526004016105cc90611dc1565b476107e9826107e35781611292565b82611292565b5050565b6001600160a01b03811660009081526002602052604081205461067b906112cc565b3360009081526001602052604090205460ff1661083e5760405162461bcd60e51b81526004016105cc90611dc1565b600a55565b3360009081526001602052604090205460ff166108725760405162461bcd60e51b81526004016105cc90611dc1565b6007805460ff1916911515919091179055565b3360009081526001602052604090205460ff166108b45760405162461bcd60e51b81526004016105cc90611dc1565b60326108c08585611349565b1061091b5760405162461bcd60e51b815260206004820152602560248201527f53756d206f662073656c6c2066656573206d757374206265206c6573732074686044820152640616e2035360dc1b60648201526084016105cc565b60326109278383611349565b106109805760405162461bcd60e51b8152602060048201526024808201527f53756d206f66206275792066656573206d757374206265206c6573732074686160448201526306e2035360e41b60648201526084016105cc565b600b93909355600c91909155600d55600e55565b6000610677338484610ea0565b3360009081526001602052604090205460ff166109d05760405162461bcd60e51b81526004016105cc90611dc1565b43600955600a556015805460ff19166001179055565b3360009081526001602052604090205460ff16610a155760405162461bcd60e51b81526004016105cc90611dc1565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b3360009081526001602052604090205460ff16610a6f5760405162461bcd60e51b81526004016105cc90611dc1565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602052604090205460ff16610ac05760405162461bcd60e51b81526004016105cc90611dc1565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b610af4336102cb565b610b255760405162461bcd60e51b8152602060048201526002602482015261085160f21b60448201526064016105cc565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b3360009081526001602052604090205460ff16610bc05760405162461bcd60e51b81526004016105cc90611dc1565b6000610bcb306107ed565b9050610bea610be56064610bdf8486610cbb565b90610c72565b6113a8565b610c036064610bdf610bfc8583611f99565b8490610cbb565b6006555050565b3360009081526001602052604090205460ff16610c395760405162461bcd60e51b81526004016105cc90611dc1565b601455565b3360009081526001602052604090205460ff16610c6d5760405162461bcd60e51b81526004016105cc90611dc1565b600655565b6000610cb483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061152f565b9392505050565b600082610cca5750600061067b565b6000610cd68385611f7a565b905082610ce38583611e6a565b14610cb45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016105cc565b6000610cb483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611258565b6001600160a01b038316610dde5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105cc565b6001600160a01b038216610e3f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105cc565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610f045760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105cc565b6001600160a01b038216610f665760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105cc565b60008111610fc85760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016105cc565b60016000610fd461155d565b6012549091506001600160a01b03868116911614801561100257506011546001600160a01b03858116911614155b801561102757506001600160a01b03841660009081526005602052604090205460ff16155b156110bc5760135483111561106e5760405162461bcd60e51b815260206004820152600d60248201526c13585e08109d5e48131a5b5a5d609a1b60448201526064016105cc565b600a5460095461107d91611349565b4311158061108e575060155460ff16155b156110b7576001600160a01b0384166000908152600f60205260409020805460ff191660011790555b6111f1565b601554610100900460ff161580156110e257506012546001600160a01b03868116911614155b801561110757506001600160a01b03851660009081526005602052604090205460ff16155b156111ec5760145483111561114f5760405162461bcd60e51b815260206004820152600e60248201526d13585e0814d95b1b08131a5b5a5d60921b60448201526064016105cc565b600a5460095461115e91611349565b4311158061116f575060155460ff16155b15611198576001600160a01b0385166000908152600f60205260409020805460ff191660011790555b60006111a3306107ed565b9050600654811180156111b8575060075460ff165b156111d5576111d5610be560065483610d3a90919063ffffffff16565b4780156111e5576111e547611292565b50506111f1565b600091505b6001600160a01b0385166000908152600f602052604090205460ff168061123057506001600160a01b0384166000908152600f602052604090205460ff165b156112445761123d611596565b9050600191505b61125185858585856115cd565b5050505050565b6000818484111561127c5760405162461bcd60e51b81526004016105cc9190611d6c565b5060006112898486611f99565b95945050505050565b6010546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156107e9573d6000803e3d6000fd5b60006008548211156113335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016105cc565b600061133d611610565b9050610cb48382610c72565b6000806113568385611e52565b905083811015610cb45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016105cc565b6015805461ff00191661010017905560408051600280825260608201835260009260208301908036833701905050905030816000815181106113ec576113ec611fc6565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561144057600080fd5b505afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190611bf6565b8160018151811061148b5761148b611fc6565b6001600160a01b0392831660209182029290920101526011546114b19130911684610d7c565b60115460105460405163791ac94760e01b81526001600160a01b039283169263791ac947926114ee92879260009288929116904290600401611de1565b600060405180830381600087803b15801561150857600080fd5b505af115801561151c573d6000803e3d6000fd5b50506015805461ff001916905550505050565b600081836115505760405162461bcd60e51b81526004016105cc9190611d6c565b5060006112898486611e6a565b611565611ba8565b61156d611ba8565b600b548152600c546020820152600d546040820152600e54606082015260006080820152919050565b61159e611ba8565b6115a6611ba8565b60638082526000602083018190526040830191909152606082015260016080820152919050565b816115dd576115da611633565b90505b6012546001600160a01b0386811691161415611604576115ff85858584611667565b611251565b6112518585858461175f565b600080600061161d611840565b909250905061162c8282610c72565b9250505090565b61163b611ba8565b611643611ba8565b60008082526020820181905260408201819052606082018190526080820152919050565b6000806000806000611679878761196c565b6001600160a01b038e16600090815260026020526040902054949950929750909550935091506116a99086610d3a565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546116d89085611349565b6001600160a01b03891660009081526002602052604090205560808601516117019082906119fb565b60085461170e9084610d3a565b6008556040518281526001600160a01b03808a1691908b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050505050565b60008060008060006117718787611ac6565b6001600160a01b038e16600090815260026020526040902054949950929750909550935091506117a19086610d3a565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546117d09085611349565b6001600160a01b03891660008181526002602052604090209190915561dead1415611832576001600160a01b0388166000908152600360205260409020546118189083611349565b6001600160a01b0389166000908152600360205260409020555b6117018187608001516119fb565b6008546000908190816118556009600a611ecf565b6118649064e8d4a51000611f7a565b61dead600052600260205260008051602061204b833981519152549091508210806118a8575061dead60005260036020526000805160206120038339815191525481105b156118d5576008546118bc6009600a611ecf565b6118cb9064e8d4a51000611f7a565b9350935050509091565b61dead600052600260205260008051602061204b833981519152546118fb908390610d3a565b61dead600052600360205260008051602061200383398151915254909250611924908290610d3a565b905061194d6119356009600a611ecf565b6119449064e8d4a51000611f7a565b60085490610c72565b821015611963576008546118bc6009600a611ecf565b90939092509050565b600080600080600061199860405180606001604052806000815260200160008152602001600081525090565b6119ab8888600001518960200151611b01565b60408401526020830152815260006119c1611610565b905060008060006119dc8c8660200151876040015187611b52565b8751602090980151929f919e509c50959a509850939650505050505050565b6000611a05611610565b90506000611a138483610cbb565b90508215611a955761dead600052600360205260008051602061200383398151915254611a409085611349565b61dead60005260008051602061200383398151915255600260205260008051602061204b83398151915254611a759082611349565b61dead600052600260205260008051602061204b83398151915255611ac0565b30600090815260026020526040902054611aaf9082611349565b306000908152600260205260409020555b50505050565b6000806000806000611af260405180606001604052806000815260200160008152602001600081525090565b6119ab88886040015189606001515b6000808080611b156064610bdf8989610cbb565b90506000611b286064610bdf8a89610cbb565b90506000611b368984610d3a565b9050611b428183610d3a565b9992985090965090945050505050565b6000808080611b618886610cbb565b90506000611b6f8887610cbb565b90506000611b7d8888610cbb565b90506000611b9582611b8f8686610d3a565b90610d3a565b939b939a50909850919650505050505050565b6040518060a00160405280600081526020016000815260200160008152602001600081526020016000151581525090565b600060208284031215611beb57600080fd5b8135610cb481611fdc565b600060208284031215611c0857600080fd5b8151610cb481611fdc565b60008060408385031215611c2657600080fd5b8235611c3181611fdc565b91506020830135611c4181611fdc565b809150509250929050565b600080600060608486031215611c6157600080fd5b8335611c6c81611fdc565b92506020840135611c7c81611fdc565b929592945050506040919091013590565b60008060408385031215611ca057600080fd5b8235611cab81611fdc565b91506020830135611c4181611ff4565b60008060408385031215611cce57600080fd5b8235611cd981611fdc565b946020939093013593505050565b600060208284031215611cf957600080fd5b8135610cb481611ff4565b600060208284031215611d1657600080fd5b8151610cb481611ff4565b600060208284031215611d3357600080fd5b5035919050565b60008060008060808587031215611d5057600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b81811015611d9957858101830151858201604001528201611d7d565b81811115611dab576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611e315784516001600160a01b031683529383019391830191600101611e0c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611e6557611e65611fb0565b500190565b600082611e8757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611ec7578160001904821115611ead57611ead611fb0565b80851615611eba57918102915b93841c9390800290611e91565b509250929050565b6000610cb460ff841683600082611ee85750600161067b565b81611ef55750600061067b565b8160018114611f0b5760028114611f1557611f31565b600191505061067b565b60ff841115611f2657611f26611fb0565b50506001821b61067b565b5060208310610133831016604e8410600b8410161715611f54575081810a61067b565b611f5e8383611e8c565b8060001904821115611f7257611f72611fb0565b029392505050565b6000816000190483118215151615611f9457611f94611fb0565b500290565b600082821015611fab57611fab611fb0565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611ff157600080fd5b50565b8015158114611ff157600080fdfe262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63656a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cca264697066735822122050073abfecea54d40a3da8e481a857c5b75aac8c9c2af037a0531cadda3fee3164736f6c634300080600330000000000000000000000000000000000000000000000000000000000000050