60806040523480156200001157600080fd5b506040518060400160405280600d81526020016c29ba30b5b2b2102b32b1ba37b960991b815250604051806040016040528060048152602001637356454360e01b81525081600390816200006691906200016d565b5060046200007582826200016d565b5050600580546001600160a01b03191633179055506658d15e176280006007819055620000a5816000196200024f565b620000b39060001962000266565b620000bf91906200028e565b600955620002a5565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000f357607f821691505b6020821081036200011457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200016857600081815260208120601f850160051c81016020861015620001435750805b601f850160051c820191505b8181101562000164578281556001016200014f565b5050505b505050565b81516001600160401b03811115620001895762000189620000c8565b620001a1816200019a8454620000de565b846200011a565b602080601f831160018114620001d95760008415620001c05750858301515b600019600386901b1c1916600185901b17855562000164565b600085815260208120601f198616915b828110156200020a57888601518255948401946001909101908401620001e9565b5085821015620002295787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008262000261576200026162000239565b500690565b818103818111156200028857634e487b7160e01b600052601160045260246000fd5b92915050565b600082620002a057620002a062000239565b500490565b610ffd80620002b56000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806370a08231116100cd578063a457c2d711610081578063c4d66de811610066578063c4d66de8146102e0578063dd62ed3e146102f3578063ee99205c1461032c57600080fd5b8063a457c2d7146102ba578063a9059cbb146102cd57600080fd5b80637965d56d116100b25780637965d56d146102975780639358928b146102aa57806395d89b41146102b257600080fd5b806370a082311461023c57806373c69eb71461024f57600080fd5b806323b872dd11610124578063313ce56711610109578063313ce56714610205578063395093511461021457806340a5737f1461022757600080fd5b806323b872dd146101ea5780632986c0e5146101fd57600080fd5b8063095ea7b311610155578063095ea7b3146101ac57806318160ddd146101cf5780631bd39674146101d757600080fd5b8063058ecdb41461017157806306fdde0314610197575b600080fd5b61018461017f366004610d9c565b610357565b6040519081526020015b60405180910390f35b61019f610531565b60405161018e9190610dbe565b6101bf6101ba366004610e28565b6105c3565b604051901515815260200161018e565b600254610184565b6101846101e5366004610e52565b6105d9565b6101bf6101f8366004610e6b565b6105e9565b61018461073b565b6040516009815260200161018e565b6101bf610222366004610e28565b61074d565b61023a610235366004610e52565b610789565b005b61018461024a366004610ea7565b610852565b61026261025d366004610e52565b610879565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161018e565b6101846102a5366004610e52565b6108cb565b6101846108db565b61019f610900565b6101bf6102c8366004610e28565b61090f565b6101bf6102db366004610e28565b610964565b61023a6102ee366004610ea7565b610a23565b610184610301366004610ec9565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b60065461033f906001600160a01b031681565b6040516001600160a01b03909116815260200161018e565b6006546000906001600160a01b031633146103df5760405162461bcd60e51b815260206004820152602e60248201527f5374616b696e67436f6e74726163743a202063616c6c206973206e6f7420737460448201527f616b696e6720636f6e747261637400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000806103ea6108db565b90508460000361048057837f0417b340e646d4be71f9b2da63b5c3c69bc9cfa069f0e0db4756271886130bf460075460405161042891815260200190565b60405180910390a2837f6012dbce857565c4a40974aa5de8373a761fc429077ef0c8c8611d1e20d63fb2600061045c61073b565b6040805192835260208301919091520160405180910390a26007549250505061052b565b80156104a65780600754866104959190610f12565b61049f9190610f3f565b91506104aa565b8491505b816007546104b89190610f53565b60078190556fffffffffffffffffffffffffffffffff10156104e9576fffffffffffffffffffffffffffffffff6007555b6007546104ff6658d15e17628000600019610f66565b61050b90600019610f7a565b6105159190610f3f565b600955610523818686610bec565b600754925050505b92915050565b60606003805461054090610f8d565b80601f016020809104026020016040519081016040528092919081815260200182805461056c90610f8d565b80156105b95780601f1061058e576101008083540402835291602001916105b9565b820191906000526020600020905b81548152906001019060200180831161059c57829003601f168201915b5050505050905090565b60006105d0338484610d3b565b50600192915050565b60006009548261052b9190610f12565b6001600160a01b0383166000908152600c60209081526040808320338452909152812054610618908390610f7a565b6001600160a01b0385166000818152600c6020908152604080832033808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3600061067d836105d9565b6001600160a01b0386166000908152600b60205260409020549091506106a4908290610f7a565b6001600160a01b038087166000908152600b602052604080822093909355908616815220546106d4908290610f53565b6001600160a01b038086166000818152600b602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906107289087815260200190565b60405180910390a3506001949350505050565b60006107486008546108cb565b905090565b336000818152600c602090815260408083206001600160a01b038716845290915281205490916105d0918590610784908690610f53565b610d3b565b6005546001600160a01b031633146107f35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a65723a202063616c6c6572206973206e6f7420696e697460448201526634b0b634bd32b960c91b60648201526084016103d6565b600854156108435760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f742073657420494e44455820616761696e0000000000000000000060448201526064016103d6565b61084c816105d9565b60085550565b6009546001600160a01b0382166000908152600b6020526040812054909161052b91610f3f565b600a818154811061088957600080fd5b90600052602060002090600702016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b60006009548261052b9190610f3f565b6006546000906108f3906001600160a01b0316610852565b6007546107489190610f7a565b60606004805461054090610f8d565b336000908152600c602090815260408083206001600160a01b038616845290915281205480831061094b5761094633856000610d3b565b61095a565b61095a33856107848685610f7a565b5060019392505050565b600080600954836109759190610f12565b336000908152600b6020526040902054909150610993908290610f7a565b336000908152600b6020526040808220929092556001600160a01b038616815220546109c0908290610f53565b6001600160a01b0385166000818152600b60205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a119087815260200190565b60405180910390a35060019392505050565b6005546001600160a01b03163314610a8d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a65723a202063616c6c6572206973206e6f7420696e697460448201526634b0b634bd32b960c91b60648201526084016103d6565b6001600160a01b038116610ae35760405162461bcd60e51b815260206004820152601560248201527f5a65726f20616464726573733a205374616b696e67000000000000000000000060448201526064016103d6565b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055610b1e6658d15e17628000600019610f66565b610b2a90600019610f7a565b600680546001600160a01b039081166000908152600b602052604080822094909455915460075493519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610b8491815260200190565b60405180910390a36006546040516001600160a01b0390911681527f817c653428858ed536dc085c5d8273734c517b55de44b55f5c5877a75e3373a19060200160405180910390a1506005805473ffffffffffffffffffffffffffffffffffffffff19169055565b60008315610c145783610c0784670de0b6b3a7640000610f12565b610c119190610f3f565b90505b600a6040518060e00160405280848152602001838152602001868152602001610c3b6108db565b8152602001858152602001610c4e61073b565b8152436020918201528254600181810185556000948552938290208351600792830290910190815591830151938201939093556040808301516002830155606083015160038301556080830151600483015560a0830151600583015560c0909201516006909101559054905183917f0417b340e646d4be71f9b2da63b5c3c69bc9cfa069f0e0db4756271886130bf491610cea91815260200190565b60405180910390a2817f6012dbce857565c4a40974aa5de8373a761fc429077ef0c8c8611d1e20d63fb282610d1d61073b565b6040805192835260208301919091520160405180910390a250505050565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008060408385031215610daf57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015610deb57858101830151858201604001528201610dcf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610e2357600080fd5b919050565b60008060408385031215610e3b57600080fd5b610e4483610e0c565b946020939093013593505050565b600060208284031215610e6457600080fd5b5035919050565b600080600060608486031215610e8057600080fd5b610e8984610e0c565b9250610e9760208501610e0c565b9150604084013590509250925092565b600060208284031215610eb957600080fd5b610ec282610e0c565b9392505050565b60008060408385031215610edc57600080fd5b610ee583610e0c565b9150610ef360208401610e0c565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761052b5761052b610efc565b634e487b7160e01b600052601260045260246000fd5b600082610f4e57610f4e610f29565b500490565b8082018082111561052b5761052b610efc565b600082610f7557610f75610f29565b500690565b8181038181111561052b5761052b610efc565b600181811c90821680610fa157607f821691505b602082108103610fc157634e487b7160e01b600052602260045260246000fd5b5091905056fea264697066735822122014c01f5e7ebbd982fb9649a364f490eb7b61e91c0566ae095341e86be9f6d30064736f6c63430008130033