60806040523480156200001157600080fd5b50604051620021fa380380620021fa8339810160408190526200003491620001e2565b60408051808201825260128152714e6f756e73204e616d65205365727669636560701b6020808301918252835180850190945260038452624e4e5360e81b90840152815191929162000089916000916200013c565b5080516200009f9060019060208401906200013c565b505050620000bc620000b6620000e660201b60201c565b620000ea565b600780546001600160a01b0319166001600160a01b0393909316929092179091556008556200025a565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014a906200021e565b90600052602060002090601f0160209004810192826200016e5760008555620001b9565b82601f106200018957805160ff1916838001178555620001b9565b82800160010185558215620001b9579182015b82811115620001b95782518255916020019190600101906200019c565b50620001c7929150620001cb565b5090565b5b80821115620001c75760008155600101620001cc565b60008060408385031215620001f657600080fd5b82516001600160a01b03811681146200020e57600080fd5b6020939093015192949293505050565b600181811c908216806200023357607f821691505b6020821081036200025457634e487b7160e01b600052602260045260246000fd5b50919050565b611f90806200026a6000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c8063715018a6116100f9578063c87b56dd11610097578063ddf7fcb011610071578063ddf7fcb0146103c1578063e985e9c5146103ca578063f2fde38b14610406578063f6a74ed71461041957600080fd5b8063c87b56dd14610378578063da8c229e1461038b578063dbbdf083146103ae57600080fd5b806396e494e8116100d357806396e494e814610315578063a22cb4651461033f578063a7fc7a0714610352578063b88d4fde1461036557600080fd5b8063715018a6146102f45780638da5cb5b146102fc57806395d89b411461030d57600080fd5b80633f15457f1161016657806352dc67161161014057806352dc67161461029a57806355f804b3146102ad5780636352211e146102c057806370a08231146102d357600080fd5b80633f15457f1461026157806342842e0e146102745780634e543b261461028757600080fd5b8063095ea7b311610197578063095ea7b31461022657806323b872dd1461023b57806328ed4f6c1461024e57600080fd5b806301ffc9a7146101be57806306fdde03146101e6578063081812fc146101fb575b600080fd5b6101d16101cc3660046119b2565b61042c565b60405190151581526020015b60405180910390f35b6101ee610511565b6040516101dd9190611a45565b61020e610209366004611a58565b6105a3565b6040516001600160a01b0390911681526020016101dd565b610239610234366004611a86565b6105ca565b005b610239610249366004611ab2565b610700565b61023961025c366004611af3565b610787565b60075461020e906001600160a01b031681565b610239610282366004611ab2565b6108d2565b610239610295366004611b23565b6108ed565b6102396102a8366004611af3565b61097b565b6102396102bb366004611c03565b61098b565b61020e6102ce366004611a58565b6109a6565b6102e66102e1366004611b23565b610a0b565b6040519081526020016101dd565b610239610aa5565b6006546001600160a01b031661020e565b6101ee610ab9565b6101d1610323366004611a58565b6000908152600260205260409020546001600160a01b03161590565b61023961034d366004611c4c565b610ac8565b610239610360366004611b23565b610ad3565b610239610373366004611c7f565b610b45565b6101ee610386366004611a58565b610bd3565b6101d1610399366004611b23565b600a6020526000908152604090205460ff1681565b6102396103bc366004611af3565b610c3a565b6102e660085481565b6101d16103d8366004611cff565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610239610414366004611b23565b610c46565b610239610427366004611b23565b610cd6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806104bf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000145b8061050b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f28ed4f6c00000000000000000000000000000000000000000000000000000000145b92915050565b60606000805461052090611d2d565b80601f016020809104026020016040519081016040528092919081815260200182805461054c90611d2d565b80156105995780601f1061056e57610100808354040283529160200191610599565b820191906000526020600020905b81548152906001019060200180831161057c57829003601f168201915b5050505050905090565b60006105ae82610d45565b506000908152600460205260409020546001600160a01b031690565b60006105d5826109a6565b9050806001600160a01b0316836001600160a01b0316036106635760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061067f575061067f81336103d8565b6106f15760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161065a565b6106fb8383610da9565b505050565b61070a3382610e2f565b61077c5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f766564000000000000000000000000000000000000606482015260840161065a565b6106fb838383610eae565b6007546008546040517f02571be3000000000000000000000000000000000000000000000000000000008152600481019190915230916001600160a01b0316906302571be390602401602060405180830381865afa1580156107ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108119190611d80565b6001600160a01b03161461082457600080fd5b61082e3383610e2f565b61083757600080fd5b6007546008546040517f06ab59230000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303816000875af11580156108ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb9190611d9d565b6106fb83838360405180602001604052806000815250610b45565b6108f5611093565b6007546008546040517f1896f70a00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03838116602483015290911690631896f70a90604401600060405180830381600087803b15801561096057600080fd5b505af1158015610974573d6000803e3d6000fd5b5050505050565b610987828260006110ed565b5050565b610993611093565b80516109879060099060208401906118eb565b6000818152600260205260408120546001600160a01b03168061050b5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161065a565b60006001600160a01b038216610a895760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e65720000000000000000000000000000000000000000000000606482015260840161065a565b506001600160a01b031660009081526003602052604090205490565b610aad611093565b610ab760006112af565b565b60606001805461052090611d2d565b610987338383611319565b610adb611093565b6001600160a01b0381166000818152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b610b4f3383610e2f565b610bc15760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f766564000000000000000000000000000000000000606482015260840161065a565b610bcd84848484611405565b50505050565b6060610bde82610d45565b6000610be861148e565b90506000815111610c085760405180602001604052806000815250610c33565b80610c128461149d565b604051602001610c23929190611db6565b6040516020818303038152906040525b9392505050565b610987828260016110ed565b610c4e611093565b6001600160a01b038116610cca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161065a565b610cd3816112af565b50565b610cde611093565b6001600160a01b0381166000818152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b6000818152600260205260409020546001600160a01b0316610cd35760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161065a565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190610df6826109a6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610e3b836109a6565b9050806001600160a01b0316846001600160a01b03161480610e8257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610ea65750836001600160a01b0316610e9b846105a3565b6001600160a01b0316145b949350505050565b826001600160a01b0316610ec1826109a6565b6001600160a01b031614610f3d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e6572000000000000000000000000000000000000000000000000000000606482015260840161065a565b6001600160a01b038216610fb85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065a565b610fc3600082610da9565b6001600160a01b0383166000908152600360205260408120805460019290610fec908490611e14565b90915550506001600160a01b038216600090815260036020526040812080546001929061101a908490611e2b565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b03163314610ab75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065a565b6007546008546040517f02571be3000000000000000000000000000000000000000000000000000000008152600481019190915230916001600160a01b0316906302571be390602401602060405180830381865afa158015611153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111779190611d80565b6001600160a01b03161461118a57600080fd5b336000908152600a602052604090205460ff166111a657600080fd5b6000838152600260205260409020546001600160a01b0316156111c857600080fd5b6111d282846115d2565b8015611275576007546008546040517f06ab59230000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526001600160a01b038481166044830152909116906306ab5923906064016020604051808303816000875af115801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190611d9d565b505b6040516001600160a01b0383169084907e834ad8d7a1d8421d149549c7292d11385f5a042a008771d26ffd2d76db6e7490600090a3505050565b600680546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03160361137a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161065a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611410848484610eae565b61141c8484848461172c565b610bcd5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161065a565b60606009805461052090611d2d565b6060816000036114e057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561150a57806114f481611e43565b91506115039050600a83611eaa565b91506114e4565b60008167ffffffffffffffff81111561152557611525611b40565b6040519080825280601f01601f19166020018201604052801561154f576020820181803683370190505b5090505b8415610ea657611564600183611e14565b9150611571600a86611ebe565b61157c906030611e2b565b60f81b81838151811061159157611591611ed2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506115cb600a86611eaa565b9450611553565b6001600160a01b0382166116285760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161065a565b6000818152600260205260409020546001600160a01b03161561168d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161065a565b6001600160a01b03821660009081526003602052604081208054600192906116b6908490611e2b565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156118e0576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611789903390899088908890600401611f01565b6020604051808303816000875af19250505080156117e2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526117df91810190611f3d565b60015b611895573d808015611810576040519150601f19603f3d011682016040523d82523d6000602084013e611815565b606091505b50805160000361188d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161065a565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610ea6565b506001949350505050565b8280546118f790611d2d565b90600052602060002090601f016020900481019282611919576000855561195f565b82601f1061193257805160ff191683800117855561195f565b8280016001018555821561195f579182015b8281111561195f578251825591602001919060010190611944565b5061196b92915061196f565b5090565b5b8082111561196b5760008155600101611970565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610cd357600080fd5b6000602082840312156119c457600080fd5b8135610c3381611984565b60005b838110156119ea5781810151838201526020016119d2565b83811115610bcd5750506000910152565b60008151808452611a138160208601602086016119cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c3360208301846119fb565b600060208284031215611a6a57600080fd5b5035919050565b6001600160a01b0381168114610cd357600080fd5b60008060408385031215611a9957600080fd5b8235611aa481611a71565b946020939093013593505050565b600080600060608486031215611ac757600080fd5b8335611ad281611a71565b92506020840135611ae281611a71565b929592945050506040919091013590565b60008060408385031215611b0657600080fd5b823591506020830135611b1881611a71565b809150509250929050565b600060208284031215611b3557600080fd5b8135610c3381611a71565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611b8a57611b8a611b40565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611bd057611bd0611b40565b81604052809350858152868686011115611be957600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611c1557600080fd5b813567ffffffffffffffff811115611c2c57600080fd5b8201601f81018413611c3d57600080fd5b610ea684823560208401611b6f565b60008060408385031215611c5f57600080fd5b8235611c6a81611a71565b915060208301358015158114611b1857600080fd5b60008060008060808587031215611c9557600080fd5b8435611ca081611a71565b93506020850135611cb081611a71565b925060408501359150606085013567ffffffffffffffff811115611cd357600080fd5b8501601f81018713611ce457600080fd5b611cf387823560208401611b6f565b91505092959194509250565b60008060408385031215611d1257600080fd5b8235611d1d81611a71565b91506020830135611b1881611a71565b600181811c90821680611d4157607f821691505b602082108103611d7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611d9257600080fd5b8151610c3381611a71565b600060208284031215611daf57600080fd5b5051919050565b60008351611dc88184602088016119cf565b835190830190611ddc8183602088016119cf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611e2657611e26611de5565b500390565b60008219821115611e3e57611e3e611de5565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e7457611e74611de5565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611eb957611eb9611e7b565b500490565b600082611ecd57611ecd611e7b565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152611f3360808301846119fb565b9695505050505050565b600060208284031215611f4f57600080fd5b8151610c338161198456fea264697066735822122042d993af1e9fbb9fef13100a5fdfe533ebadb6386a4953aa4b1de8658c7d1afe64736f6c634300080d00330000000000000000000000003e1970dc478991b49c4327973ea8a4862ef5a4de739305fdceb24221237c3dea9f36a6fcc8dc81b45730358192886e1510532739