0x608060405234801561001057600080fd5b50611455806100206000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063782d6fe1116100ad578063c45a015511610071578063c45a015514610288578063cbf9fe5f1461029b578063f1127ed8146102bb578063f2fde38b14610302578063fccc28131461031557600080fd5b8063782d6fe1146102175780638da5cb5b1461022a5780639c70287c1461024f578063a694fc3a14610262578063b6c8478e1461027557600080fd5b80633da6185d116100f45780633da6185d1461019b57806347d7d5d8146101ae5780636e2a7f04146101c15780636fcfff45146101d4578063715018a61461020f57600080fd5b806314f6b190146101315780631794bb3c1461015757806322be59ef1461016c5780632e17de781461017f5780633868fcf514610192575b600080fd5b61014461013f366004611190565b61031e565b6040519081526020015b60405180910390f35b61016a6101653660046111ad565b610350565b005b61014461017a366004611190565b610516565b61016a61018d3660046111ee565b6105ec565b610144606a5481565b61016a6101a93660046111ee565b6105fa565b6101446101bc366004611190565b61063d565b61016a6101cf3660046111ad565b6106b2565b6101fa6101e2366004611190565b60686020526000908152604090205463ffffffff1681565b60405163ffffffff909116815260200161014e565b61016a610757565b610144610225366004611207565b61076b565b6033546001600160a01b03165b6040516001600160a01b03909116815260200161014e565b61016a61025d366004611207565b610996565b61016a6102703660046111ee565b610a6f565b606554610237906001600160a01b031681565b606654610237906001600160a01b031681565b6101446102a9366004611190565b60696020526000908152604090205481565b6102ed6102c9366004611233565b60676020908152600092835260408084209091529082529020805460019091015482565b6040805192835260208301919091520161014e565b61016a610310366004611190565b610a79565b61023761dead81565b6001600160a01b0381166000908152606960205260408120546103408361063d565b61034a919061128b565b92915050565b600054610100900460ff16158080156103705750600054600160ff909116105b8061038a5750303b15801561038a575060005460ff166001145b6103f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610415576000805461ff0019166101001790555b6001600160a01b0384166104515760405162461bcd60e51b815260206004820152600360248201526220a4ad60e91b60448201526064016103e9565b6001600160a01b03831661048d5760405162461bcd60e51b815260206004820152600360248201526220a4ad60e91b60448201526064016103e9565b610495610aef565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055606a8290558015610510576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6066546000906001600160a01b031633146105435760405162461bcd60e51b81526004016103e99061129e565b600061054e8361031e565b905080606a541115610571576105718382606a5461056c919061128b565b610b1e565b606a546001600160a01b0384166000908152606960205260408120805490919061059c9084906112ba565b9091555050606a546040519081526001600160a01b038416907ff5a55f9e5ec51b8ffea32e4a31a915c04c8c8d36223911ae144742ac53c1cf939060200160405180910390a25050606a54919050565b6105f7333383610b95565b50565b610602610c6b565b606a8190556040518181527ffb9bd4dc56b6751c3377fc882c60f17803e9879597418c152eaba6d99e51b6ea9060200160405180910390a150565b6001600160a01b03811660009081526068602052604081205463ffffffff16806106685760006106ab565b6001600160a01b03831660009081526067602052604081209061068c6001846112cd565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b6066546001600160a01b031633146106dc5760405162461bcd60e51b81526004016103e99061129e565b6001600160a01b0383166000908152606960205260408120805483929061070490849061128b565b90915550506040518181526001600160a01b038416907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a9060200160405180910390a2610752838383610b95565b505050565b61075f610c6b565b6107696000610cc5565b565b60004382106107a25760405162461bcd60e51b815260206004820152600360248201526213965160ea1b60448201526064016103e9565b6001600160a01b03831660009081526068602052604081205463ffffffff16908190036107d357600091505061034a565b6001600160a01b038416600090815260676020526040812084916107f86001856112cd565b63ffffffff1681526020810191909152604001600020541161085e576001600160a01b0384166000908152606760205260408120906108386001846112cd565b63ffffffff1663ffffffff1681526020019081526020016000206001015491505061034a565b6001600160a01b038416600090815260676020908152604080832083805290915290205483101561089357600091505061034a565b6000806108a16001846112cd565b90505b8163ffffffff168163ffffffff16111561095f57600060026108c684846112cd565b6108d091906112f1565b6108da90836112cd565b6001600160a01b038816600090815260676020908152604080832063ffffffff851684528252918290208251808401909352805480845260019091015491830191909152919250908790036109395760200151945061034a9350505050565b805187111561094a57819350610958565b6109556001836112cd565b92505b50506108a4565b506001600160a01b038516600090815260676020908152604080832063ffffffff9094168352929052206001015491505092915050565b6066546001600160a01b031633146109c05760405162461bcd60e51b81526004016103e99061129e565b6001600160a01b038216600090815260696020526040812080548392906109e890849061128b565b90915550600090506109f98361063d565b9050610a0e83610a09848461128b565b610d17565b606554610a27906001600160a01b031661dead84610e4e565b826001600160a01b03167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df783604051610a6291815260200190565b60405180910390a2505050565b6105f73382610b1e565b610a81610c6b565b6001600160a01b038116610ae65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103e9565b6105f781610cc5565b600054610100900460ff16610b165760405162461bcd60e51b81526004016103e990611322565b610769610eb1565b606554610b36906001600160a01b0316833084610ee1565b610b4e8282610b448561063d565b610a0991906112ba565b816001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d82604051610b8991815260200190565b60405180910390a25050565b6000610ba08461063d565b6001600160a01b0385166000908152606960205260409020549091508190610bc99084906112ba565b1115610bfd5760405162461bcd60e51b81526020600482015260036024820152624e455360e81b60448201526064016103e9565b610c0b84610a09848461128b565b606554610c22906001600160a01b03168484610e4e565b836001600160a01b03167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7583604051610c5d91815260200190565b60405180910390a250505050565b6033546001600160a01b031633146107695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103e9565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526068602052604090205463ffffffff168015801590610d7e57506001600160a01b03831660009081526067602052604081204391610d656001856112cd565b63ffffffff168152602081019190915260400160002054145b15610dc7576001600160a01b03831660009081526067602052604081208391610da86001856112cd565b63ffffffff168152602081019190915260400160002060010155505050565b60408051808201825243815260208082018581526001600160a01b03871660009081526067835284812063ffffffff87168252909252929020905181559051600191820155610e1790829061136d565b6001600160a01b0384166000908152606860205260409020805463ffffffff9290921663ffffffff19909216919091179055505050565b6040516001600160a01b03831660248201526044810182905261075290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f19565b600054610100900460ff16610ed85760405162461bcd60e51b81526004016103e990611322565b61076933610cc5565b6040516001600160a01b03808516602483015283166044820152606481018290526105109085906323b872dd60e01b90608401610e7a565b6000610f6e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610feb9092919063ffffffff16565b8051909150156107525780806020019051810190610f8c919061138a565b6107525760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103e9565b6060610ffa8484600085611002565b949350505050565b6060824710156110635760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103e9565b600080866001600160a01b0316858760405161107f91906113d0565b60006040518083038185875af1925050503d80600081146110bc576040519150601f19603f3d011682016040523d82523d6000602084013e6110c1565b606091505b50915091506110d2878383876110dd565b979650505050505050565b6060831561114c578251600003611145576001600160a01b0385163b6111455760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103e9565b5081610ffa565b610ffa83838151156111615781518083602001fd5b8060405162461bcd60e51b81526004016103e991906113ec565b6001600160a01b03811681146105f757600080fd5b6000602082840312156111a257600080fd5b81356106ab8161117b565b6000806000606084860312156111c257600080fd5b83356111cd8161117b565b925060208401356111dd8161117b565b929592945050506040919091013590565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b82356112258161117b565b946020939093013593505050565b6000806040838503121561124657600080fd5b82356112518161117b565b9150602083013563ffffffff8116811461126a57600080fd5b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561034a5761034a611275565b60208082526002908201526127a360f11b604082015260600190565b8082018082111561034a5761034a611275565b63ffffffff8281168282160390808211156112ea576112ea611275565b5092915050565b600063ffffffff8084168061131657634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b63ffffffff8181168382160190808211156112ea576112ea611275565b60006020828403121561139c57600080fd5b815180151581146106ab57600080fd5b60005b838110156113c75781810151838201526020016113af565b50506000910152565b600082516113e28184602087016113ac565b9190910192915050565b602081526000825180602084015261140b8160408501602087016113ac565b601f01601f1916919091016040019291505056fea2646970667358221220284bbe28e35e5795ea9b7e4dee37c841fab20becdcb9a14adbba735fe678543664736f6c63430008110033