60806040523480156200001157600080fd5b5060405162002395380380620023958339810160408190526200003491620002fa565b604080518082018252601681527f5468654c6173744b6f616c615374726f6e67686f6c6400000000000000000000602080830191825283518085019094526004845263544c4b5360e01b908401528151919291620000959160029162000254565b508051620000ab90600390602084019062000254565b50506000805550620000bd3362000125565b620000c83262000177565b82821115620001135760405162461bcd60e51b81526020600482015260126024820152710737570706c792065786365656473206361760741b60448201526064015b60405180910390fd5b600a92909255600b55600c5562000366565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000181620001f6565b6001600160a01b038116620001e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200010a565b620001f38162000125565b50565b6008546001600160a01b03163314620002525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200010a565b565b828054620002629062000329565b90600052602060002090601f016020900481019282620002865760008555620002d1565b82601f10620002a157805160ff1916838001178555620002d1565b82800160010185558215620002d1579182015b82811115620002d1578251825591602001919060010190620002b4565b50620002df929150620002e3565b5090565b5b80821115620002df5760008155600101620002e4565b6000806000606084860312156200031057600080fd5b8351925060208401519150604084015190509250925092565b600181811c908216806200033e57607f821691505b602082108114156200036057634e487b7160e01b600052602260045260246000fd5b50919050565b61201f80620003766000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063a4331d2d116100a0578063d5abeb011161006f578063d5abeb01146105d0578063dc33e681146105e6578063e985e9c514610606578063f2fde38b1461064f578063f4a0a5281461066f57600080fd5b8063a4331d2d1461055a578063b6a3f59a14610570578063b88d4fde14610590578063c87b56dd146105b057600080fd5b80638da5cb5b116100e75780638da5cb5b146104de5780638f770ad0146104fc57806395d89b4114610512578063a0712d6814610527578063a22cb4651461053a57600080fd5b806370a0823114610469578063715018a61461048957806372b0d90c1461049e5780638120ba9c146104be57600080fd5b8063413c2ceb1161019b578063576055d21161016a578063576055d2146103de5780636352211e146103fe5780636817c76c1461041e5780636c0360eb146104345780636f8b44b01461044957600080fd5b8063413c2ceb1461037557806342842e0e1461038b578063449a52f8146103ab57806355f804b3146103be57600080fd5b806318160ddd116101e257806318160ddd146102c55780631aa402dc146102e8578063236376171461032057806323b872dd146103405780633ccfd60b1461036057600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f366004611d3d565b61068f565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106e1565b6040516102409190611e70565b34801561027757600080fd5b5061028b610286366004611dbf565b610773565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004611ca8565b6107b7565b005b3480156102d157600080fd5b50600154600054035b604051908152602001610240565b3480156102f457600080fd5b50610308610303366004611b67565b610845565b6040516001600160401b039091168152602001610240565b34801561032c57600080fd5b506102c361033b366004611dbf565b610850565b34801561034c57600080fd5b506102c361035b366004611bb5565b61085d565b34801561036c57600080fd5b506102c3610868565b34801561038157600080fd5b506102da60095481565b34801561039757600080fd5b506102c36103a6366004611bb5565b61087b565b6102c36103b9366004611ca8565b610896565b3480156103ca57600080fd5b506102c36103d9366004611d77565b610a6a565b3480156103ea57600080fd5b506102c36103f9366004611cd2565b610a89565b34801561040a57600080fd5b5061028b610419366004611dbf565b610b4c565b34801561042a57600080fd5b506102da600c5481565b34801561044057600080fd5b5061025e610b5e565b34801561045557600080fd5b506102c3610464366004611dbf565b610bec565b34801561047557600080fd5b506102da610484366004611b67565b610c1b565b34801561049557600080fd5b506102c3610c69565b3480156104aa57600080fd5b506102c36104b9366004611b67565b610c7b565b3480156104ca57600080fd5b506103086104d9366004611dbf565b610c90565b3480156104ea57600080fd5b506008546001600160a01b031661028b565b34801561050857600080fd5b506102da600a5481565b34801561051e57600080fd5b5061025e610ca5565b6102c3610535366004611dbf565b610cb4565b34801561054657600080fd5b506102c3610555366004611c6c565b610cbe565b34801561056657600080fd5b506102da600d5481565b34801561057c57600080fd5b506102c361058b366004611dbf565b610d54565b34801561059c57600080fd5b506102c36105ab366004611bf1565b610d8d565b3480156105bc57600080fd5b5061025e6105cb366004611dbf565b610dde565b3480156105dc57600080fd5b506102da600b5481565b3480156105f257600080fd5b506102da610601366004611b67565b610e63565b34801561061257600080fd5b50610234610621366004611b82565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561065b57600080fd5b506102c361066a366004611b67565b610e6e565b34801561067b57600080fd5b506102c361068a366004611dbf565b610ee4565b60006001600160e01b031982166380ac58cd60e01b14806106c057506001600160e01b03198216635b5e139f60e01b145b806106db57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546106f090611f11565b80601f016020809104026020016040519081016040528092919081815260200182805461071c90611f11565b80156107695780601f1061073e57610100808354040283529160200191610769565b820191906000526020600020905b81548152906001019060200180831161074c57829003601f168201915b5050505050905090565b600061077e82610ef1565b61079b576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107c282610b4c565b9050806001600160a01b0316836001600160a01b031614156107f75760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161480159061081757506108158133610621565b155b15610835576040516367d9dca160e11b815260040160405180910390fd5b610840838383610f1c565b505050565b60006106db82610f78565b610858610fcd565b600d55565b610840838383611027565b610870610fcd565b61087933610c7b565b565b61084083838360405180602001604052806000815250610d8d565b3233146108e15760405162461bcd60e51b815260206004820152601460248201527318d85b1b195908199c9bdb4818dbdb9d1c9858dd60621b60448201526064015b60405180910390fd5b600b54816108f26001546000540390565b6108fc9190611e83565b111561093f5760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e481c995858da195960721b60448201526064016108d8565b60006109536008546001600160a01b031690565b6001600160a01b0316836001600160a01b03161461097357600c54610977565b600c545b90506109838282611eaf565b34146109c85760405162461bcd60e51b81526020600482015260146024820152731ddc9bdb99c81c185e5b595b9d08185b5bdd5b9d60621b60448201526064016108d8565b60006109d384611238565b905060006109f4600d546109e687610845565b6001600160401b031661128d565b90506000828211610a06576000610a10565b610a108383611ece565b905080851115610a585760405162461bcd60e51b81526020600482015260136024820152721b5a5b9d081b1a5b5a5d08195e18d959591959606a1b60448201526064016108d8565b610a6286866112a4565b505050505050565b610a72610fcd565b8051610a8590600e9060208401906119fb565b5050565b610a91610fcd565b828114610ad85760405162461bcd60e51b81526020600482015260156024820152740c2e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b60448201526064016108d8565b60005b83811015610b4557610b33858583818110610af857610af8611fa7565b9050602002016020810190610b0d9190611b67565b610b2e858585818110610b2257610b22611fa7565b905060200201356112be565b61132a565b80610b3d81611f4c565b915050610adb565b5050505050565b6000610b5782611390565b5192915050565b600e8054610b6b90611f11565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9790611f11565b8015610be45780601f10610bb957610100808354040283529160200191610be4565b820191906000526020600020905b815481529060010190602001808311610bc757829003601f168201915b505050505081565b610bf4610fcd565b610c15610c046001546000540390565b610c10600a54846114aa565b61128d565b600b5550565b60006001600160a01b038216610c44576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b610c71610fcd565b61087960006114b9565b610c83610fcd565b610c8d814761150b565b50565b6000610c9b82611390565b6020015192915050565b6060600380546106f090611f11565b610c8d3382610896565b6001600160a01b038216331415610ce85760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d5c610fcd565b610d6c610c046001546000540390565b600a55610c15610d7f6001546000540390565b610c10600a54600b546114aa565b610d98848484611027565b6001600160a01b0383163b15158015610dba5750610db884848484611624565b155b15610dd8576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610de982610ef1565b610e0657604051630a14c4b560e41b815260040160405180910390fd5b6000610e1061171c565b9050805160001415610e315760405180602001604052806000815250610e5c565b80610e3b8461172b565b604051602001610e4c929190611e04565b6040516020818303038152906040525b9392505050565b60006106db82611238565b610e76610fcd565b6001600160a01b038116610edb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d8565b610c8d816114b9565b610eec610fcd565b600c55565b60008054821080156106db575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006001600160a01b038216610fa15760405163561b93dd60e11b815260040160405180910390fd5b506001600160a01b0316600090815260056020526040902054600160c01b90046001600160401b031690565b6008546001600160a01b031633146108795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d8565b600061103282611390565b80519091506000906001600160a01b0316336001600160a01b03161480611060575081516110609033610621565b8061107b57503361107084610773565b6001600160a01b0316145b90508061109b57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146110d05760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166110f757604051633a954ecd60e21b815260040160405180910390fd5b6111076000848460000151610f1c565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166111f1576000548110156111f157825160008281526004602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610b45565b60006001600160a01b038216611261576040516335ebb31960e01b815260040160405180910390fd5b506001600160a01b0316600090815260056020526040902054600160401b90046001600160401b031690565b60008183101561129d5781610e5c565b5090919050565b610a85828260405180602001604052806000815250611828565b60006001600160401b038211156113265760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016108d8565b5090565b6001600160a01b0382166113515760405163561b93dd60e11b815260040160405180910390fd5b6001600160a01b03909116600090815260056020526040902080546001600160401b03909216600160c01b026001600160c01b03909216919091179055565b60408051606081018252600080825260208201819052918101919091528160005481101561149157600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061148f5780516001600160a01b031615611426579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff161515928101929092521561148a579392505050565b611426565b505b604051636f96cda160e11b815260040160405180910390fd5b600081831061129d5781610e5c565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8047101561155b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108d8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146115a8576040519150601f19603f3d011682016040523d82523d6000602084013e6115ad565b606091505b50509050806108405760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016108d8565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611659903390899088908890600401611e33565b602060405180830381600087803b15801561167357600080fd5b505af19250505080156116a3575060408051601f3d908101601f191682019092526116a091810190611d5a565b60015b6116fe573d8080156116d1576040519150601f19603f3d011682016040523d82523d6000602084013e6116d6565b606091505b5080516116f6576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600e80546106f090611f11565b60608161174f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611779578061176381611f4c565b91506117729050600a83611e9b565b9150611753565b6000816001600160401b0381111561179357611793611fbd565b6040519080825280601f01601f1916602001820160405280156117bd576020820181803683370190505b5090505b8415611714576117d2600183611ece565b91506117df600a86611f67565b6117ea906030611e83565b60f81b8183815181106117ff576117ff611fa7565b60200101906001600160f81b031916908160001a905350611821600a86611e9b565b94506117c1565b61084083838360016000546001600160a01b03851661185957604051622e076360e81b815260040160405180910390fd5b836118775760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561192357506001600160a01b0387163b15155b156119ac575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46119746000888480600101955088611624565b611991576040516368d2bf6b60e11b815260040160405180910390fd5b808214156119295782600054146119a757600080fd5b6119f2565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156119ad575b50600055610b45565b828054611a0790611f11565b90600052602060002090601f016020900481019282611a295760008555611a6f565b82601f10611a4257805160ff1916838001178555611a6f565b82800160010185558215611a6f579182015b82811115611a6f578251825591602001919060010190611a54565b506113269291505b808211156113265760008155600101611a77565b60006001600160401b0380841115611aa557611aa5611fbd565b604051601f8501601f19908116603f01168101908282118183101715611acd57611acd611fbd565b81604052809350858152868686011115611ae657600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611b1757600080fd5b919050565b60008083601f840112611b2e57600080fd5b5081356001600160401b03811115611b4557600080fd5b6020830191508360208260051b8501011115611b6057600080fd5b9250929050565b600060208284031215611b7957600080fd5b610e5c82611b00565b60008060408385031215611b9557600080fd5b611b9e83611b00565b9150611bac60208401611b00565b90509250929050565b600080600060608486031215611bca57600080fd5b611bd384611b00565b9250611be160208501611b00565b9150604084013590509250925092565b60008060008060808587031215611c0757600080fd5b611c1085611b00565b9350611c1e60208601611b00565b92506040850135915060608501356001600160401b03811115611c4057600080fd5b8501601f81018713611c5157600080fd5b611c6087823560208401611a8b565b91505092959194509250565b60008060408385031215611c7f57600080fd5b611c8883611b00565b915060208301358015158114611c9d57600080fd5b809150509250929050565b60008060408385031215611cbb57600080fd5b611cc483611b00565b946020939093013593505050565b60008060008060408587031215611ce857600080fd5b84356001600160401b0380821115611cff57600080fd5b611d0b88838901611b1c565b90965094506020870135915080821115611d2457600080fd5b50611d3187828801611b1c565b95989497509550505050565b600060208284031215611d4f57600080fd5b8135610e5c81611fd3565b600060208284031215611d6c57600080fd5b8151610e5c81611fd3565b600060208284031215611d8957600080fd5b81356001600160401b03811115611d9f57600080fd5b8201601f81018413611db057600080fd5b61171484823560208401611a8b565b600060208284031215611dd157600080fd5b5035919050565b60008151808452611df0816020860160208601611ee5565b601f01601f19169290920160200192915050565b60008351611e16818460208801611ee5565b835190830190611e2a818360208801611ee5565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e6690830184611dd8565b9695505050505050565b602081526000610e5c6020830184611dd8565b60008219821115611e9657611e96611f7b565b500190565b600082611eaa57611eaa611f91565b500490565b6000816000190483118215151615611ec957611ec9611f7b565b500290565b600082821015611ee057611ee0611f7b565b500390565b60005b83811015611f00578181015183820152602001611ee8565b83811115610dd85750506000910152565b600181811c90821680611f2557607f821691505b60208210811415611f4657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611f6057611f60611f7b565b5060010190565b600082611f7657611f76611f91565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610c8d57600080fdfea26469706673582212204a85d871baf3df134d79d51140dfae045a18438e01fa252918ae666f821af6a564736f6c6343000807003300000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000000000000000000000000000000000000000003090000000000000000000000000000000000000000000000000000000000000000