0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638568e3d4116100a2578063c0aa0e8a11610071578063c0aa0e8a146102a8578063d37eb82e146102c8578063da4779e0146102db578063f2fde38b146102ff578063f7fecc271461031257600080fd5b80638568e3d4146101f45780638da5cb5b1461020757806394409a5614610218578063b96525521461022157600080fd5b8063379607f5116100e9578063379607f51461017a5780635fe2d6891461018d578063715018a6146101ae57806372f702f3146101b65780637b0472f0146101e157600080fd5b8063238dafe01461011b5780632e1a7d4d1461013d578063328d8f721461015257806335f21f0314610165575b600080fd5b6007546101289060ff1681565b60405190151581526020015b60405180910390f35b61015061014b3660046112cd565b610327565b005b610150610160366004611295565b610850565b61016d61088d565b6040516101349190611353565b6101506101883660046112cd565b6108ee565b6101a061019b3660046112cd565b610aa8565b604051908152602001610134565b610150610b6f565b6002546101c9906001600160a01b031681565b6040516001600160a01b039091168152602001610134565b6101506101ef3660046112e5565b610ba5565b61012861020236600461126c565b610ef3565b6000546001600160a01b03166101c9565b6101a060085481565b61027161022f3660046112cd565b60036020819052600091825260409091208054600182015460028301549383015460048401546005909401546001600160a01b03909316949193919290919086565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c001610134565b6101a06102b63660046112cd565b60056020526000908152604090205481565b6101506102d63660046112e5565b610fab565b6101a06102e93660046112cd565b6000908152600360208190526040909120015490565b61015061030d366004611252565b6110ba565b61031a611155565b6040516101349190611306565b600081815260036020818152604092839020835160c08101855281546001600160a01b03168082526001830154938201939093526002820154948101949094529182015460608401526004820154608084015260059091015460a083015282919033146103af5760405162461bcd60e51b81526004016103a69061138b565b60405180910390fd5b600083815260036020818152604092839020835160c08101855281546001600160a01b0316815260018201549281019290925260028101549382018490529182015460608201526004820154608082015260059091015460a08201529042101561046c5760405162461bcd60e51b815260206004820152602860248201527f5374616b696e673a2043616e6e6f74207769746864726177206265666f726520604482015267656e64206461746560c01b60648201526084016103a6565b600061047785610aa8565b60608301516020840151600854929350909161049390836111b6565b6008556000878152600360208190526040822080546001600160a01b03191681556001810183905560028101839055908101829055600481018290556005018190555b3360009081526004602052604090205481101561060b5733600090815260046020526040902080548991908390811061051f57634e487b7160e01b600052603260045260246000fd5b906000526020600020015414156105fb57336000908152600460205260409020805461054d9060019061145d565b8154811061056b57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154338352600490915260409091208054839081106105a657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092553381526004909152604090208054806105e057634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905561060b565b61060481611474565b90506104d6565b50336000908152600460205260409020546107615760005b60065481101561075f57336001600160a01b03166006828154811061065857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561074f57600680546106839060019061145d565b815481106106a157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b0390921691839081106106db57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600680548061072857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905561075f565b61075881611474565b9050610623565b505b6002546001600160a01b031663a9059cbb3361077d85876111c2565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156107c357600080fd5b505af11580156107d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fb91906112b1565b506040805182815242602082015290810183905260608101849052879033907fb7ee00edafdb5db3a1b52a5789a6b562eb48268842d113dbfe860b6f86e5f5959060800160405180910390a350505050505050565b6000546001600160a01b0316331461087a5760405162461bcd60e51b81526004016103a6906113d1565b6007805460ff1916911515919091179055565b336000908152600460209081526040918290208054835181840281018401909452808452606093928301828280156108e457602002820191906000526020600020905b8154815260200190600101908083116108d0575b5050505050905090565b600081815260036020818152604092839020835160c08101855281546001600160a01b03168082526001830154938201939093526002820154948101949094529182015460608401526004820154608084015260059091015460a0830152829190331461096d5760405162461bcd60e51b81526004016103a69061138b565b600061097884610aa8565b9050600081116109ca5760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a204e6f20696e74657265737420746f20636c61696d00000060448201526064016103a6565b60008481526003602052604090819020426005820155600254915163a9059cbb60e01b81523360048201526024810184905290916001600160a01b03169063a9059cbb90604401602060405180830381600087803b158015610a2b57600080fd5b505af1158015610a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6391906112b1565b506040805142815260208101849052869133917f45c072aa05b9853b5a993de7a28bc332ee01404a628cec1a23ce0f659f842ef1910160405180910390a35050505050565b6000818152600360208181526040808420815160c08101835281546001600160a01b031681526001820154938101849052600282015492810192909252928301546060820181905260048401546080830181905260059094015460a08301819052919392909185610b1942846111b6565b90508115610b2e57610b2b42836111b6565b90505b6000610b62612710610b5c610b486201518061016d61143e565b610b5c86610b568b8d6111ce565b906111ce565b906111da565b9998505050505050505050565b6000546001600160a01b03163314610b995760405162461bcd60e51b81526004016103a6906113d1565b610ba360006111e6565b565b60075460ff16610bf75760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a205374616b696e672069732064697361626c65640000000060448201526064016103a6565b670de0b6b3a7640000821015610c5a5760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a20416d6f756e74206d757374206265203e3d203120746f6b60448201526132b760f11b60648201526084016103a6565b600081815260056020526040902054610cb55760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a205465726d206973206e6f7420737570706f72746564000060448201526064016103a6565b6000610cc060015490565b905060006040518060c00160405280336001600160a01b03168152602001428152602001610cf785426111c290919063ffffffff16565b815260200185815260200160056000868152602001908152602001600020548152602001428152509050610d3a81606001516008546111c290919063ffffffff16565b6008556000828152600360208181526040808420855181546001600160a01b0319166001600160a01b03909116178155858301516001820155858201516002820155606086015193810193909355608085015160048085019190915560a0860151600590940193909355338452919052902054610df457600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916331790555b3360008181526004602081815260408084208054600181018255908552919093200185905560025491516323b872dd60e01b815290810192909252306024830152604482018690526001600160a01b0316906323b872dd90606401602060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea191906112b1565b50610eb0600180546001019055565b6040805142815260208101869052839133917ff556991011e831bcfac4f406d547e5e32cdd98267efab83935230d5f8d02c446910160405180910390a350505050565b600080546001600160a01b03163314610f1e5760405162461bcd60e51b81526004016103a6906113d1565b60025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015610f6c57600080fd5b505af1158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa491906112b1565b9392505050565b6000546001600160a01b03163314610fd55760405162461bcd60e51b81526004016103a6906113d1565b60075460ff16156110405760405162461bcd60e51b815260206004820152602f60248201527f5374616b696e673a2043616e6e6f742073657420696e7465726573742072617460448201526e19481dda1a5b1948195b98589b1959608a1b60648201526084016103a6565b6127108111156110a85760405162461bcd60e51b815260206004820152602d60248201527f5374616b696e673a20496e7465726573742072617465206d757374206265206c60448201526c657373207468616e203130302560981b60648201526084016103a6565b60009182526005602052604090912055565b6000546001600160a01b031633146110e45760405162461bcd60e51b81526004016103a6906113d1565b6001600160a01b0381166111495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a6565b611152816111e6565b50565b606060068054806020026020016040519081016040528092919081815260200182805480156108e457602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161118f575050505050905090565b6000610fa4828461145d565b6000610fa48284611406565b6000610fa4828461143e565b6000610fa4828461141e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461124d57600080fd5b919050565b600060208284031215611263578081fd5b610fa482611236565b6000806040838503121561127e578081fd5b61128783611236565b946020939093013593505050565b6000602082840312156112a6578081fd5b8135610fa4816114a5565b6000602082840312156112c2578081fd5b8151610fa4816114a5565b6000602082840312156112de578081fd5b5035919050565b600080604083850312156112f7578182fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156113475783516001600160a01b031683529284019291840191600101611322565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156113475783518352928401929184019160010161136f565b60208082526026908201527f5374616b696e673a2043616c6c6572206973206e6f7420746865207374616b656040820152653437b63232b960d11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156114195761141961148f565b500190565b60008261143957634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156114585761145861148f565b500290565b60008282101561146f5761146f61148f565b500390565b60006000198214156114885761148861148f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461115257600080fdfea2646970667358221220adc517778fef8f295f37194b7124f4f6542a764068fbf855da0cdc237902a51664736f6c63430008040033
0x6080604052600060085534801561001557600080fd5b50604051611610380380611610833981016040819052610034916100ea565b61003d3361009a565b600280546001600160a01b0319166001600160a01b03929092169190911790556007805460ff19169055600080526005602052610c807f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc55610118565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100fb578081fd5b81516001600160a01b0381168114610111578182fd5b9392505050565b6114e9806101276000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638568e3d4116100a2578063c0aa0e8a11610071578063c0aa0e8a146102a8578063d37eb82e146102c8578063da4779e0146102db578063f2fde38b146102ff578063f7fecc271461031257600080fd5b80638568e3d4146101f45780638da5cb5b1461020757806394409a5614610218578063b96525521461022157600080fd5b8063379607f5116100e9578063379607f51461017a5780635fe2d6891461018d578063715018a6146101ae57806372f702f3146101b65780637b0472f0146101e157600080fd5b8063238dafe01461011b5780632e1a7d4d1461013d578063328d8f721461015257806335f21f0314610165575b600080fd5b6007546101289060ff1681565b60405190151581526020015b60405180910390f35b61015061014b3660046112cd565b610327565b005b610150610160366004611295565b610850565b61016d61088d565b6040516101349190611353565b6101506101883660046112cd565b6108ee565b6101a061019b3660046112cd565b610aa8565b604051908152602001610134565b610150610b6f565b6002546101c9906001600160a01b031681565b6040516001600160a01b039091168152602001610134565b6101506101ef3660046112e5565b610ba5565b61012861020236600461126c565b610ef3565b6000546001600160a01b03166101c9565b6101a060085481565b61027161022f3660046112cd565b60036020819052600091825260409091208054600182015460028301549383015460048401546005909401546001600160a01b03909316949193919290919086565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c001610134565b6101a06102b63660046112cd565b60056020526000908152604090205481565b6101506102d63660046112e5565b610fab565b6101a06102e93660046112cd565b6000908152600360208190526040909120015490565b61015061030d366004611252565b6110ba565b61031a611155565b6040516101349190611306565b600081815260036020818152604092839020835160c08101855281546001600160a01b03168082526001830154938201939093526002820154948101949094529182015460608401526004820154608084015260059091015460a083015282919033146103af5760405162461bcd60e51b81526004016103a69061138b565b60405180910390fd5b600083815260036020818152604092839020835160c08101855281546001600160a01b0316815260018201549281019290925260028101549382018490529182015460608201526004820154608082015260059091015460a08201529042101561046c5760405162461bcd60e51b815260206004820152602860248201527f5374616b696e673a2043616e6e6f74207769746864726177206265666f726520604482015267656e64206461746560c01b60648201526084016103a6565b600061047785610aa8565b60608301516020840151600854929350909161049390836111b6565b6008556000878152600360208190526040822080546001600160a01b03191681556001810183905560028101839055908101829055600481018290556005018190555b3360009081526004602052604090205481101561060b5733600090815260046020526040902080548991908390811061051f57634e487b7160e01b600052603260045260246000fd5b906000526020600020015414156105fb57336000908152600460205260409020805461054d9060019061145d565b8154811061056b57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154338352600490915260409091208054839081106105a657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092553381526004909152604090208054806105e057634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905561060b565b61060481611474565b90506104d6565b50336000908152600460205260409020546107615760005b60065481101561075f57336001600160a01b03166006828154811061065857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561074f57600680546106839060019061145d565b815481106106a157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b0390921691839081106106db57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600680548061072857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905561075f565b61075881611474565b9050610623565b505b6002546001600160a01b031663a9059cbb3361077d85876111c2565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156107c357600080fd5b505af11580156107d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fb91906112b1565b506040805182815242602082015290810183905260608101849052879033907fb7ee00edafdb5db3a1b52a5789a6b562eb48268842d113dbfe860b6f86e5f5959060800160405180910390a350505050505050565b6000546001600160a01b0316331461087a5760405162461bcd60e51b81526004016103a6906113d1565b6007805460ff1916911515919091179055565b336000908152600460209081526040918290208054835181840281018401909452808452606093928301828280156108e457602002820191906000526020600020905b8154815260200190600101908083116108d0575b5050505050905090565b600081815260036020818152604092839020835160c08101855281546001600160a01b03168082526001830154938201939093526002820154948101949094529182015460608401526004820154608084015260059091015460a0830152829190331461096d5760405162461bcd60e51b81526004016103a69061138b565b600061097884610aa8565b9050600081116109ca5760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a204e6f20696e74657265737420746f20636c61696d00000060448201526064016103a6565b60008481526003602052604090819020426005820155600254915163a9059cbb60e01b81523360048201526024810184905290916001600160a01b03169063a9059cbb90604401602060405180830381600087803b158015610a2b57600080fd5b505af1158015610a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6391906112b1565b506040805142815260208101849052869133917f45c072aa05b9853b5a993de7a28bc332ee01404a628cec1a23ce0f659f842ef1910160405180910390a35050505050565b6000818152600360208181526040808420815160c08101835281546001600160a01b031681526001820154938101849052600282015492810192909252928301546060820181905260048401546080830181905260059094015460a08301819052919392909185610b1942846111b6565b90508115610b2e57610b2b42836111b6565b90505b6000610b62612710610b5c610b486201518061016d61143e565b610b5c86610b568b8d6111ce565b906111ce565b906111da565b9998505050505050505050565b6000546001600160a01b03163314610b995760405162461bcd60e51b81526004016103a6906113d1565b610ba360006111e6565b565b60075460ff16610bf75760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a205374616b696e672069732064697361626c65640000000060448201526064016103a6565b670de0b6b3a7640000821015610c5a5760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a20416d6f756e74206d757374206265203e3d203120746f6b60448201526132b760f11b60648201526084016103a6565b600081815260056020526040902054610cb55760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a205465726d206973206e6f7420737570706f72746564000060448201526064016103a6565b6000610cc060015490565b905060006040518060c00160405280336001600160a01b03168152602001428152602001610cf785426111c290919063ffffffff16565b815260200185815260200160056000868152602001908152602001600020548152602001428152509050610d3a81606001516008546111c290919063ffffffff16565b6008556000828152600360208181526040808420855181546001600160a01b0319166001600160a01b03909116178155858301516001820155858201516002820155606086015193810193909355608085015160048085019190915560a0860151600590940193909355338452919052902054610df457600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916331790555b3360008181526004602081815260408084208054600181018255908552919093200185905560025491516323b872dd60e01b815290810192909252306024830152604482018690526001600160a01b0316906323b872dd90606401602060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea191906112b1565b50610eb0600180546001019055565b6040805142815260208101869052839133917ff556991011e831bcfac4f406d547e5e32cdd98267efab83935230d5f8d02c446910160405180910390a350505050565b600080546001600160a01b03163314610f1e5760405162461bcd60e51b81526004016103a6906113d1565b60025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015610f6c57600080fd5b505af1158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa491906112b1565b9392505050565b6000546001600160a01b03163314610fd55760405162461bcd60e51b81526004016103a6906113d1565b60075460ff16156110405760405162461bcd60e51b815260206004820152602f60248201527f5374616b696e673a2043616e6e6f742073657420696e7465726573742072617460448201526e19481dda1a5b1948195b98589b1959608a1b60648201526084016103a6565b6127108111156110a85760405162461bcd60e51b815260206004820152602d60248201527f5374616b696e673a20496e7465726573742072617465206d757374206265206c60448201526c657373207468616e203130302560981b60648201526084016103a6565b60009182526005602052604090912055565b6000546001600160a01b031633146110e45760405162461bcd60e51b81526004016103a6906113d1565b6001600160a01b0381166111495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a6565b611152816111e6565b50565b606060068054806020026020016040519081016040528092919081815260200182805480156108e457602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161118f575050505050905090565b6000610fa4828461145d565b6000610fa48284611406565b6000610fa4828461143e565b6000610fa4828461141e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461124d57600080fd5b919050565b600060208284031215611263578081fd5b610fa482611236565b6000806040838503121561127e578081fd5b61128783611236565b946020939093013593505050565b6000602082840312156112a6578081fd5b8135610fa4816114a5565b6000602082840312156112c2578081fd5b8151610fa4816114a5565b6000602082840312156112de578081fd5b5035919050565b600080604083850312156112f7578182fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156113475783516001600160a01b031683529284019291840191600101611322565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156113475783518352928401929184019160010161136f565b60208082526026908201527f5374616b696e673a2043616c6c6572206973206e6f7420746865207374616b656040820152653437b63232b960d11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156114195761141961148f565b500190565b60008261143957634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156114585761145861148f565b500290565b60008282101561146f5761146f61148f565b500390565b60006000198214156114885761148861148f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461115257600080fdfea2646970667358221220adc517778fef8f295f37194b7124f4f6542a764068fbf855da0cdc237902a51664736f6c63430008040033000000000000000000000000fdaaf517eb647d1b5b2fdb1147e1cd3fdf9860b1