608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611f87806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806370a08231116100e3578063a457c2d71161008c578063e2bbb15811610066578063e2bbb158146103c5578063e52b064e146103d8578063f2fde38b146103eb57600080fd5b8063a457c2d714610366578063a9059cbb14610379578063dd62ed3e1461038c57600080fd5b80638da5cb5b116100bd5780638da5cb5b1461033057806391fcd9a91461034b57806395d89b411461035e57600080fd5b806370a08231146102ec578063715018a61461031557806374de4ec41461031d57600080fd5b8063313ce567116101455780634a4679271161011f5780634a4679271461025957806350696346146102825780636bd50cef146102ab57600080fd5b8063313ce5671461022f578063395093511461023e5780633ccfd60b1461025157600080fd5b806313c8e2de1161017657806313c8e2de146101f357806318160ddd1461021457806323b872dd1461021c57600080fd5b806306fdde031461019d578063095ea7b3146101bb5780631232a169146101de575b600080fd5b6101a56103fe565b6040516101b29190611bb5565b60405180910390f35b6101ce6101c9366004611c04565b610490565b60405190151581526020016101b2565b6101f16101ec366004611c2e565b6104a8565b005b610206610201366004611c50565b6104d8565b6040519081526020016101b2565b606754610206565b6101ce61022a366004611c69565b610552565b604051601281526020016101b2565b6101ce61024c366004611c04565b610576565b6101f16105b5565b610206610267366004611ca5565b6001600160a01b0316600090815260d1602052604090205490565b610206610290366004611ca5565b6001600160a01b0316600090815260d0602052604090205490565b60ce5460c95460ca5460cb5460cc54604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016101b2565b6102066102fa366004611ca5565b6001600160a01b031660009081526065602052604090205490565b6101f16106f5565b6101f161032b366004611c50565b610707565b6033546040516001600160a01b0390911681526020016101b2565b610206610359366004611ca5565b610780565b6101a561082a565b6101ce610374366004611c04565b610839565b6101ce610387366004611c04565b6108e3565b61020661039a366004611cc0565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6101f16103d3366004611c2e565b6108f1565b6101f16103e6366004611d96565b610a41565b6101f16103f9366004611ca5565b610d9d565b60606068805461040d90611e53565b80601f016020809104026020016040519081016040528092919081815260200182805461043990611e53565b80156104865780601f1061045b57610100808354040283529160200191610486565b820191906000526020600020905b81548152906001019060200180831161046957829003601f168201915b5050505050905090565b60003361049e818585610e2a565b5060019392505050565b33600090815260d160205260409020546104c06105b5565b6104d36104cd8483611ea3565b836108f1565b505050565b600060c9548210156104ec57506064919050565b60ca548211156104fe57505060cc5490565b60cb5460c95460ca546105119190611ebb565b60cb5460cc546105219190611ebb565b60c95461052e9086611ebb565b6105389190611ed2565b6105429190611ef1565b61054c9190611ea3565b92915050565b600033610560858285610f82565b61056b858585611014565b506001949350505050565b3360008181526066602090815260408083206001600160a01b038716845290915281205490919061049e90829086906105b0908790611ea3565b610e2a565b6105bd61105c565b33600090815260d0602052604090205442116106465760405162461bcd60e51b815260206004820152603460248201527f4c505374616b696e673a20596f75206e65656420746f207761697420666f722060448201527f74696d65206c6f636b20746f206578706972652e00000000000000000000000060648201526084015b60405180910390fd5b6000610651336102fa565b116106c45760405162461bcd60e51b815260206004820152602660248201527f4c505374616b696e673a20596f75206e65656420746f207374616b65204c502060448201527f66697273742e0000000000000000000000000000000000000000000000000000606482015260840161063d565b60006106cf336110b5565b90506106e83360ce546001600160a01b0316908361121e565b506106f36001609755565b565b6106fd6112c7565b6106f36000611321565b61070f61105c565b6107273360cf546001600160a01b0316903084611380565b8060cd60008282546107399190611ea3565b909155505060405181815233907f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc99060200160405180910390a261077d6001609755565b50565b600061078b60675490565b60000361079a57506000919050565b60006107a560675490565b60cd546001600160a01b0385166000908152606560205260409020546107cb9190611ed2565b6107d59190611ef1565b6001600160a01b038416600090815260d260205260409020549091508110610821576001600160a01b038316600090815260d2602052604090205461081a9082611ebb565b9392505050565b50600092915050565b60606069805461040d90611e53565b3360008181526066602090815260408083206001600160a01b0387168452909152812054909190838110156108d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161063d565b61056b8286868403610e2a565b60003361049e818585611014565b6108f961105c565b33600090815260d160205260409020541561097c5760405162461bcd60e51b815260206004820152603160248201527f4c505374616b696e673a20596f75206e65656420746f2077697468647261772060448201527f616c7265616479207374616b6564204c50000000000000000000000000000000606482015260840161063d565b8060021115801561098f575060ca548111155b610a015760405162461bcd60e51b815260206004820152603c60248201527f4c505374616b696e673a204e756d626572206f662064617973206e656564732060448201527f746f206265206265747765656e203220616e64206d61785f6461797300000000606482015260840161063d565b610a193360ce546001600160a01b0316903085611380565b6000610a263384846113d1565b9050610a323382611531565b50610a3d6001609755565b5050565b600054610100900460ff1615808015610a615750600054600160ff909116105b80610a7b5750303b158015610a7b575060005460ff166001145b610aed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161063d565b6000805460ff191660011790558015610b10576000805461ff0019166101001790555b6001600160a01b038a1615801590610b3057506001600160a01b03891615155b8015610b4457506001600160a01b03881615155b610b905760405162461bcd60e51b815260206004820152601a60248201527f4c505374616b696e673a204164647265737320697a207a65726f000000000000604482015260640161063d565b848410158015610ba05750868610155b610c125760405162461bcd60e51b815260206004820152602760248201527f4c505374616b696e673a204d6178206d7573742062652062696767657220746860448201527f616e206d696e2100000000000000000000000000000000000000000000000000606482015260840161063d565b6064851015610c895760405162461bcd60e51b815260206004820152603360248201527f4c505374616b696e673a204d696e20626f6f7374206d7573742062652062696760448201527f676572206f7220657175616c20746f2031303000000000000000000000000000606482015260840161063d565b60cf805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038c16179055610cba89611321565b610cc483836115f2565b60ce805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a1690811790915560c988905560ca87905560cb86905560cc8590556040805189815260208101899052908101879052606081018690527fc47301d9b0b1cadc6e69246570af5dc673fb99a06eb188bc213ae470dc21302d9060800160405180910390a28015610d91576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b610da56112c7565b6001600160a01b038116610e215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063d565b61077d81611321565b6001600160a01b038316610ea55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161063d565b6001600160a01b038216610f215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161063d565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260666020908152604080832093861683529290522054600019811461100e57818110156110015760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161063d565b61100e8484848403610e2a565b50505050565b60405162461bcd60e51b815260206004820152601760248201527f734c50206973206e6f6e207472616e7366657261626c65000000000000000000604482015260640161063d565b6002609754036110ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161063d565b6002609755565b60cd54600090816110c560675490565b905060006110e8856001600160a01b031660009081526065602052604090205490565b90506000826110f78584611ed2565b6111019190611ef1565b905061110d8683611667565b6001600160a01b038616600090815260d260205260408120548210611152576001600160a01b038716600090815260d2602052604090205461114f9083611ebb565b90505b6001600160a01b038716600090815260d2602052604081205560cd5482111561117f57600060cd55611197565b8160cd60008282546111919190611ebb565b90915550505b60cf546111ae906001600160a01b0316888361121e565b6001600160a01b038716600081815260d16020908152604080832054338452818420939093558051878152918201839052818101859052519198507f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94919081900360600190a25050505050919050565b6040516001600160a01b0383166024820152604481018290526104d39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526117d2565b6033546001600160a01b031633146106f35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063d565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038085166024830152831660448201526064810182905261100e9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611263565b60006113e08262015180611ed2565b6113ea9042611ea3565b6001600160a01b038516600090815260d0602052604081209190915561140f836104d8565b6114199085611ed2565b60cd54909150600061142a60675490565b9050801580611437575081155b61145557816114468285611ed2565b6114509190611ef1565b611457565b825b6001600160a01b038816600090815260d16020526040812080549296508892909190611484908490611ea3565b925050819055508260cd600082825461149d9190611ea3565b90915550506001600160a01b038716600090815260d26020526040812080548592906114ca908490611ea3565b90915550506001600160a01b038716600081815260d060209081526040918290205482518a81529182018890528183015290517f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9181900360600190a25050509392505050565b6001600160a01b0382166115875760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161063d565b80606760008282546115999190611ea3565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600054610100900460ff1661165d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063d565b610a3d82826118b7565b6001600160a01b0382166116e35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161063d565b6001600160a01b038216600090815260656020526040902054818110156117725760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161063d565b6001600160a01b03831660008181526065602090815260408083208686039055606780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000611827826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119499092919063ffffffff16565b8051909150156104d357808060200190518101906118459190611f13565b6104d35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161063d565b600054610100900460ff166119225760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063d565b8151611935906068906020850190611af0565b5080516104d3906069906020840190611af0565b60606119588484600085611960565b949350505050565b6060824710156119d85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161063d565b600080866001600160a01b031685876040516119f49190611f35565b60006040518083038185875af1925050503d8060008114611a31576040519150601f19603f3d011682016040523d82523d6000602084013e611a36565b606091505b5091509150611a4787838387611a52565b979650505050505050565b60608315611ac1578251600003611aba576001600160a01b0385163b611aba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063d565b5081611958565b6119588383815115611ad65781518083602001fd5b8060405162461bcd60e51b815260040161063d9190611bb5565b828054611afc90611e53565b90600052602060002090601f016020900481019282611b1e5760008555611b64565b82601f10611b3757805160ff1916838001178555611b64565b82800160010185558215611b64579182015b82811115611b64578251825591602001919060010190611b49565b50611b70929150611b74565b5090565b5b80821115611b705760008155600101611b75565b60005b83811015611ba4578181015183820152602001611b8c565b8381111561100e5750506000910152565b6020815260008251806020840152611bd4816040850160208701611b89565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611bff57600080fd5b919050565b60008060408385031215611c1757600080fd5b611c2083611be8565b946020939093013593505050565b60008060408385031215611c4157600080fd5b50508035926020909101359150565b600060208284031215611c6257600080fd5b5035919050565b600080600060608486031215611c7e57600080fd5b611c8784611be8565b9250611c9560208501611be8565b9150604084013590509250925092565b600060208284031215611cb757600080fd5b61081a82611be8565b60008060408385031215611cd357600080fd5b611cdc83611be8565b9150611cea60208401611be8565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611d1a57600080fd5b813567ffffffffffffffff80821115611d3557611d35611cf3565b604051601f8301601f19908116603f01168101908282118183101715611d5d57611d5d611cf3565b81604052838152866020858801011115611d7657600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060008060006101208a8c031215611db557600080fd5b611dbe8a611be8565b9850611dcc60208b01611be8565b9750611dda60408b01611be8565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff80821115611e1357600080fd5b611e1f8d838e01611d09565b93506101008c0135915080821115611e3657600080fd5b50611e438c828d01611d09565b9150509295985092959850929598565b600181811c90821680611e6757607f821691505b602082108103611e8757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611eb657611eb6611e8d565b500190565b600082821015611ecd57611ecd611e8d565b500390565b6000816000190483118215151615611eec57611eec611e8d565b500290565b600082611f0e57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611f2557600080fd5b8151801515811461081a57600080fd5b60008251611f47818460208701611b89565b919091019291505056fea264697066735822122028fbbbe441f05d810f18e81cc950b66d6373d0d65fcbd1ea35069058b3cd0baa64736f6c634300080e0033