0x608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b506100b2565b600180546001600160a01b031916905561005f81610062565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611188806100c16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063e30c397811610066578063e30c397814610129578063ede5cfe51461013a578063f2fde38b1461014d578063f3fef3a314610160578063fd1ad77c1461017357600080fd5b806311b6f8e6146100a3578063715018a6146100f357806379ba5097146100fd5780638da5cb5b14610105578063a7ddca7214610116575b600080fd5b6100d76100b1366004610cf0565b80516020818301810180516002825292820191909301209152546001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100fb610186565b005b6100fb61019a565b6000546001600160a01b03166100d7565b6100fb610124366004610dff565b6101e3565b6001546001600160a01b03166100d7565b6100fb610148366004610e56565b610315565b6100fb61015b366004610e98565b610350565b6100fb61016e366004610eb5565b6103c1565b6100fb610181366004610f26565b610435565b61018e6105c8565b61019860006105f5565b565b60015433906001600160a01b031681146101d75760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6101e0816105f5565b50565b6101eb6105c8565b60006001600160a01b031660028484604051610208929190610f92565b908152604051908190036020019020546001600160a01b0316146102785760405162461bcd60e51b815260206004820152602160248201527f5661756c744b65657065723a205661756c7420616c72656164792065786973746044820152607360f81b60648201526084016101ce565b6001600160a01b0381166102ce5760405162461bcd60e51b815260206004820152601a60248201527f5661756c744b65657065723a20496e76616c6964207661756c7400000000000060448201526064016101ce565b80600284846040516102e1929190610f92565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b61031d6105c8565b6002828260405161032f929190610f92565b90815260405190819003602001902080546001600160a01b03191690555050565b6103586105c8565b600180546001600160a01b0383166001600160a01b031990911681179091556103896000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6103c96105c8565b6001600160a01b03821661041557600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610410573d6000803e3d6000fd5b505050565b6104318261042b6000546001600160a01b031690565b8361060e565b5050565b61043d6105c8565b82811461048c5760405162461bcd60e51b815260206004820152601a60248201527f5661756c744b65657065723a20496e76616c696420696e70757400000000000060448201526064016101ce565b60005b838110156105c157600060028686848181106104ad576104ad610fa2565b90506020028101906104bf9190610fb8565b6040516104cd929190610f92565b908152604051908190036020019020546001600160a01b0316036105335760405162461bcd60e51b815260206004820152601a60248201527f5661756c744b65657065723a20496e76616c6964207661756c7400000000000060448201526064016101ce565b6105af85858381811061054857610548610fa2565b905060200281019061055a9190610fb8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792508691508590508181106105a3576105a3610fa2565b9050602002013561066d565b806105b981611015565b91505061048f565b5050505050565b6000546001600160a01b031633146101985760405163118cdaa760e01b81523360048201526024016101ce565b600180546001600160a01b03191690556101e0816108f1565b6040516001600160a01b0383811660248301526044820183905261041091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610941565b600060028360405161067f9190611052565b908152602001604051809103902060009054906101000a90046001600160a01b031690506000816001600160a01b0316639fcc2d756040518163ffffffff1660e01b8152600401608060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610707919061106e565b50506040516370a0823160e01b81526001600160a01b0385811660048301529193508392506000918691908416906370a0823190602401602060405180830381865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f91906110f1565b610789919061110a565b90506107968285836109a4565b604051631c5e539360e11b8152600481018290526001600160a01b038516906338bca72690602401600060405180830381600087803b1580156107d857600080fd5b505af11580156107ec573d6000803e3d6000fd5b50505050816001600160a01b031663a9059cbb6108116000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610855573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087991906110f1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156108c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e8919061111d565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006109566001600160a01b03841683610b59565b9050805160001415801561097b575080806020019051810190610979919061111d565b155b1561041057604051635274afe760e01b81526001600160a01b03841660048201526024016101ce565b604051633aa03f1760e01b8152600481018290526000906001600160a01b03841690633aa03f1790602401602060405180830381865afa1580156109ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1091906110f1565b90506000836001600160a01b031663503c70aa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7691906110f1565b9050610a9e85610a8e6000546001600160a01b031690565b86610a99858761113f565b610b70565b6040516370a0823160e01b81526001600160a01b0385811660048301528391908716906370a0823190602401602060405180830381865afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b91906110f1565b10156105c15760405162461bcd60e51b815260206004820152601e60248201527f5661756c744b65657065723a204e6f7420656e6f75676820617373657473000060448201526064016101ce565b6060610b6783836000610baf565b90505b92915050565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba99186918216906323b872dd9060840161063b565b50505050565b606081471015610bdb5760405163cf47918160e01b8152476004820152602481018390526044016101ce565b600080856001600160a01b03168486604051610bf79190611052565b60006040518083038185875af1925050503d8060008114610c34576040519150601f19603f3d011682016040523d82523d6000602084013e610c39565b606091505b5091509150610c49868383610c55565b925050505b9392505050565b606082610c6a57610c6582610cb1565b610c4e565b8151158015610c8157506001600160a01b0384163b155b15610caa57604051639996b31560e01b81526001600160a01b03851660048201526024016101ce565b5080610c4e565b805115610cc15780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b600060208284031215610d0257600080fd5b813567ffffffffffffffff80821115610d1a57600080fd5b818401915084601f830112610d2e57600080fd5b813581811115610d4057610d40610cda565b604051601f8201601f19908116603f01168101908382118183101715610d6857610d68610cda565b81604052828152876020848701011115610d8157600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008083601f840112610db357600080fd5b50813567ffffffffffffffff811115610dcb57600080fd5b602083019150836020828501011115610de357600080fd5b9250929050565b6001600160a01b03811681146101e057600080fd5b600080600060408486031215610e1457600080fd5b833567ffffffffffffffff811115610e2b57600080fd5b610e3786828701610da1565b9094509250506020840135610e4b81610dea565b809150509250925092565b60008060208385031215610e6957600080fd5b823567ffffffffffffffff811115610e8057600080fd5b610e8c85828601610da1565b90969095509350505050565b600060208284031215610eaa57600080fd5b8135610c4e81610dea565b60008060408385031215610ec857600080fd5b8235610ed381610dea565b946020939093013593505050565b60008083601f840112610ef357600080fd5b50813567ffffffffffffffff811115610f0b57600080fd5b6020830191508360208260051b8501011115610de357600080fd5b60008060008060408587031215610f3c57600080fd5b843567ffffffffffffffff80821115610f5457600080fd5b610f6088838901610ee1565b90965094506020870135915080821115610f7957600080fd5b50610f8687828801610ee1565b95989497509550505050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610fcf57600080fd5b83018035915067ffffffffffffffff821115610fea57600080fd5b602001915036819003821315610de357600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161102757611027610fff565b5060010190565b60005b83811015611049578181015183820152602001611031565b50506000910152565b6000825161106481846020870161102e565b9190910192915050565b6000806000806080858703121561108457600080fd5b845160ff8116811461109557600080fd5b60208601519094506110a681610dea565b604086015190935066ffffffffffffff811681146110c357600080fd5b60608601519092506cffffffffffffffffffffffffff811681146110e657600080fd5b939692955090935050565b60006020828403121561110357600080fd5b5051919050565b80820180821115610b6a57610b6a610fff565b60006020828403121561112f57600080fd5b81518015158114610c4e57600080fd5b81810381811115610b6a57610b6a610fff56fea264697066735822122011da13d0c1037dd9b125f775d43e67d801904d0918cb6d51be5e0c992164bfeb64736f6c63430008140033