0x608060405234801561001057600080fd5b50610ff2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100e65760003560e01c80630660f1e8146100eb5780631145d36a1461011e5780632a8ee8de146101335780633b309dc8146101465780633f4ba83a1461016657806352d84d1e1461016e5780635c975abb1461018e578063715018a6146101a457806371738595146101ac5780638129fc1c146101bf5780638456cb59146101c75780638da5cb5b146101cf578063b72022d0146101d7578063ce687031146101ea578063d4258acf146101ff578063f2fde38b14610212578063f4f391e614610225578063f5cee2ef14610238575b600080fd5b61010b6100f9366004610b99565b60976020526000908152604090205481565b6040519081526020015b60405180910390f35b61013161012c366004610c24565b610240565b005b610131610141366004610d58565b610296565b61010b610154366004610b99565b60986020526000908152604090205481565b610131610359565b61018161017c366004610db0565b61036b565b6040516101159190610dc9565b60655460ff166040519015158152602001610115565b610131610395565b6101316101ba366004610dfd565b6103a7565b610131610470565b61013161058a565b61018161059a565b609a54610181906001600160a01b031681565b6101f26105a9565b6040516101159190610e32565b61013161020d366004610b99565b61069d565b610131610220366004610b99565b6106f0565b610131610233366004610e8a565b610766565b6101316107c8565b6102486108db565b805161025b906099906020840190610b03565b507f7e99d35f3fca08317667f53e45063333e95b7dc7eeca6eb5fdbfd9b397d515568160405161028b9190610ec6565b60405180910390a150565b61029e6108db565b815160005b818110156103535760008482815181106102bf576102bf610f13565b6020026020010151905080602001516098600083600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508160010191508381600001516001600160a01b03167fda6fbdb98a982ef05e80948965d3a7f312c41d0e45ad0f6ab22c5624fc44a7c4836020015160405161034591815260200190565b60405180910390a3506102a3565b50505050565b6103616108db565b61036961093a565b565b6099818154811061037b57600080fd5b6000918252602090912001546001600160a01b0316905081565b61039d6108db565b6103696000610986565b6103af6108db565b8151604080518082019091526000808252602082015260005b82811015610436578481815181106103e2576103e2610f13565b6020026020010151915081602001516097600084600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546104299190610f29565b90915550506001016103c8565b506040518381527f1ee95734c9b39a6275bb3795b097d895097c494d056cce0dd9781c6216e1c43c9060200160405180910390a150505050565b600054610100900460ff16158080156104905750600054600160ff909116105b806104aa5750303b1580156104aa575060005460ff166001145b6105125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610535576000805461ff0019166101001790555b61053d6109d8565b610545610a07565b8015610587576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200161028b565b50565b6105926108db565b610369610a07565b6033546001600160a01b031690565b6099546060906000816001600160401b038111156105c9576105c9610bbb565b60405190808252806020026020018201604052801561060e57816020015b60408051808201909152600080825260208201528152602001906001900390816105e75790505b50905060005b828110156106965760006099828154811061063157610631610f13565b60009182526020808320909101546001600160a01b031680835260988252604092839020548351808501909452818452918301829052855190935090919085908590811061068157610681610f13565b60209081029190910101525050600101610614565b5092915050565b6106a56108db565b609a80546001600160a01b0319166001600160a01b0383161790556040517fd4ec69b3f27463435c599250e2c8a067d0603a2139016f47430b02e2dc761cdd9061028b908390610dc9565b6106f86108db565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610509565b61058781610986565b61076e6108db565b805160005b818110156107c357600083828151811061078f5761078f610f13565b6020908102919091018101518082015190516001600160a01b03166000908152609790925260409091205550600101610773565b505050565b6107d0610a44565b336000908152609760205260409020548061081a5760405162461bcd60e51b815260206004820152600a6024820152694e6f205265776172647360b01b6044820152606401610509565b3360008181526097602052604080822091909155609a54905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561087e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a29190610f4f565b5060405181815233907f671c81ccfd95e8c293684816c6da4a867e3045277d3ef5042cdad39cc087999e9060200160405180910390a250565b336108e461059a565b6001600160a01b0316146103695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610509565b610942610a8a565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405161097c9190610dc9565b60405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166109ff5760405162461bcd60e51b815260040161050990610f71565b610369610ad3565b610a0f610a44565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861096f3390565b60655460ff16156103695760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610509565b60655460ff166103695760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610509565b600054610100900460ff16610afa5760405162461bcd60e51b815260040161050990610f71565b61036933610986565b828054828255906000526020600020908101928215610b58579160200282015b82811115610b5857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610b23565b50610b64929150610b68565b5090565b5b80821115610b645760008155600101610b69565b80356001600160a01b0381168114610b9457600080fd5b919050565b600060208284031215610bab57600080fd5b610bb482610b7d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715610bf957610bf9610bbb565b604052919050565b60006001600160401b03821115610c1a57610c1a610bbb565b5060051b60200190565b60006020808385031215610c3757600080fd5b82356001600160401b03811115610c4d57600080fd5b8301601f81018513610c5e57600080fd5b8035610c71610c6c82610c01565b610bd1565b81815260059190911b82018301908381019087831115610c9057600080fd5b928401925b82841015610cb557610ca684610b7d565b82529284019290840190610c95565b979650505050505050565b6000610cce610c6c84610c01565b8381529050602080820190600685901b840186811115610ced57600080fd5b845b81811015610d4d57604080828a031215610d095760008081fd5b80518082016001600160401b0381118282101715610d2957610d29610bbb565b8252610d3483610b7d565b8152828501358582015285525092820192604001610cef565b505050509392505050565b60008060408385031215610d6b57600080fd5b82356001600160401b03811115610d8157600080fd5b8301601f81018513610d9257600080fd5b610da185823560208401610cc0565b95602094909401359450505050565b600060208284031215610dc257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600082601f830112610dee57600080fd5b610bb483833560208501610cc0565b60008060408385031215610e1057600080fd5b82356001600160401b03811115610e2657600080fd5b610da185828601610ddd565b602080825282518282018190526000919060409081850190868401855b82811015610e7d57815180516001600160a01b03168552860151868501529284019290850190600101610e4f565b5091979650505050505050565b600060208284031215610e9c57600080fd5b81356001600160401b03811115610eb257600080fd5b610ebe84828501610ddd565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610f075783516001600160a01b031683529284019291840191600101610ee2565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008219821115610f4a57634e487b7160e01b600052601160045260246000fd5b500190565b600060208284031215610f6157600080fd5b81518015158114610bb457600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea26469706673582212207db2b367f2fe23dd8286fb67bd3342da5cdf6135af0d7710c79679ee0c5562f764736f6c634300080a0033