0x60806040526004361061023f5760003560e01c80637bce5a041161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e146106ed578063e2f4560514610733578063eba4c33314610749578063f2fde38b14610769578063f8b45b051461078957600080fd5b8063c024666814610661578063c18bc19514610681578063c8c8ebe4146106a1578063d257b34f146106b7578063d85ba063146106d757600080fd5b80639a7a23d6116100f25780639a7a23d6146105b1578063a457c2d7146105d1578063a9059cbb146105f1578063aacebbe314610611578063b62496f51461063157600080fd5b80637bce5a04146105325780638da5cb5b146105485780639213691314610566578063924de9b71461057c57806395d89b411461059c57600080fd5b80634fbee193116101bc578063715018a611610180578063715018a6146104a857806371fc4688146104bd578063751039fc146104dd5780637571336a146104f257806375f0a8741461051257600080fd5b80634fbee193146103e75780636256d181146104205780636a486a8e146104425780636ddd17131461045857806370a082311461047257600080fd5b80631f3fed8f116102035780631f3fed8f1461034157806323b872dd14610357578063313ce56714610377578063395093511461039357806349bd5a5e146103b357600080fd5b806306fdde031461024b578063095ea7b31461027657806310d5de53146102a65780631694505e146102d657806318160ddd1461032257600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026061079f565b60405161026d9190611e1a565b60405180910390f35b34801561028257600080fd5b50610296610291366004611e84565b610831565b604051901515815260200161026d565b3480156102b257600080fd5b506102966102c1366004611eb0565b60116020526000908152604090205460ff1681565b3480156102e257600080fd5b5061030a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161026d565b34801561032e57600080fd5b506002545b60405190815260200161026d565b34801561034d57600080fd5b50610333600f5481565b34801561036357600080fd5b50610296610372366004611ecd565b610848565b34801561038357600080fd5b506040516012815260200161026d565b34801561039f57600080fd5b506102966103ae366004611e84565b6108b1565b3480156103bf57600080fd5b5061030a7f000000000000000000000000509b530871c398fef991221dde3e5bceab99059481565b3480156103f357600080fd5b50610296610402366004611eb0565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561042c57600080fd5b5061044061043b366004611f0e565b6108e7565b005b34801561044e57600080fd5b50610333600d5481565b34801561046457600080fd5b50600a546102969060ff1681565b34801561047e57600080fd5b5061033361048d366004611eb0565b6001600160a01b031660009081526020819052604090205490565b3480156104b457600080fd5b506104406109dc565b3480156104c957600080fd5b506104406104d8366004611f0e565b610a50565b3480156104e957600080fd5b50610440610ae2565b3480156104fe57600080fd5b5061044061050d366004611f37565b610b1a565b34801561051e57600080fd5b5060065461030a906001600160a01b031681565b34801561053e57600080fd5b50610333600c5481565b34801561055457600080fd5b506005546001600160a01b031661030a565b34801561057257600080fd5b50610333600e5481565b34801561058857600080fd5b50610440610597366004611f6c565b610b6f565b3480156105a857600080fd5b50610260610bac565b3480156105bd57600080fd5b506104406105cc366004611f37565b610bbb565b3480156105dd57600080fd5b506102966105ec366004611e84565b610c9b565b3480156105fd57600080fd5b5061029661060c366004611e84565b610cea565b34801561061d57600080fd5b5061044061062c366004611eb0565b610cf7565b34801561063d57600080fd5b5061029661064c366004611eb0565b60126020526000908152604090205460ff1681565b34801561066d57600080fd5b5061044061067c366004611f37565b610d7e565b34801561068d57600080fd5b5061044061069c366004611f0e565b610e07565b3480156106ad57600080fd5b5061033360075481565b3480156106c357600080fd5b506102966106d2366004611f0e565b610eee565b3480156106e357600080fd5b50610333600b5481565b3480156106f957600080fd5b50610333610708366004611f87565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561073f57600080fd5b5061033360085481565b34801561075557600080fd5b50610440610764366004611f0e565b611045565b34801561077557600080fd5b50610440610784366004611eb0565b6110d5565b34801561079557600080fd5b5061033360095481565b6060600380546107ae90611fc0565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90611fc0565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b600061083e338484611226565b5060015b92915050565b600061085584848461134b565b6108a784336108a285604051806060016040528060288152602001612209602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061186a565b611226565b5060019392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161083e9185906108a290866111c0565b6005546001600160a01b0316331461091a5760405162461bcd60e51b815260040161091190611ffb565b60405180910390fd5b670de0b6b3a7640000606461092e60025490565b610939906002612046565b6109439190612065565b61094d9190612065565b8110156109b25760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20322560981b6064820152608401610911565b6109c481670de0b6b3a7640000612046565b6109d690670de0b6b3a7640000612087565b60075550565b6005546001600160a01b03163314610a065760405162461bcd60e51b815260040161091190611ffb565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610a7a5760405162461bcd60e51b815260040161091190611ffb565b600c819055600b819055600a811115610adf5760405162461bcd60e51b815260206004820152602160248201527f4d757374206b65657020627579206665657320617420313025206f72206c65736044820152607360f81b6064820152608401610911565b50565b6005546001600160a01b03163314610b0c5760405162461bcd60e51b815260040161091190611ffb565b600254600755600254600955565b6005546001600160a01b03163314610b445760405162461bcd60e51b815260040161091190611ffb565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610b995760405162461bcd60e51b815260040161091190611ffb565b600a805460ff1916911515919091179055565b6060600480546107ae90611fc0565b6005546001600160a01b03163314610be55760405162461bcd60e51b815260040161091190611ffb565b7f000000000000000000000000509b530871c398fef991221dde3e5bceab9905946001600160a01b0316826001600160a01b03161415610c8d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610911565b610c9782826118a4565b5050565b600061083e33846108a285604051806060016040528060258152602001612231602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061186a565b600061083e33848461134b565b6005546001600160a01b03163314610d215760405162461bcd60e51b815260040161091190611ffb565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610da85760405162461bcd60e51b815260040161091190611ffb565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610e315760405162461bcd60e51b815260040161091190611ffb565b670de0b6b3a76400006064610e4560025490565b610e50906004612046565b610e5a9190612065565b610e649190612065565b811015610ec45760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f776572604482015267207468616e20342560c01b6064820152608401610911565b610ed681670de0b6b3a7640000612046565b610ee890670de0b6b3a7640000612087565b60095550565b6005546000906001600160a01b03163314610f1b5760405162461bcd60e51b815260040161091190611ffb565b620186a0610f2860025490565b610f33906001612046565b610f3d9190612065565b821015610faa5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610911565b6103e8610fb660025490565b610fc1906005612046565b610fcb9190612065565b8211156110375760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610911565b50600881905560015b919050565b6005546001600160a01b0316331461106f5760405162461bcd60e51b815260040161091190611ffb565b600e819055600d819055600f811115610adf5760405162461bcd60e51b815260206004820152602260248201527f4d757374206b6565702073656c6c206665657320617420313525206f72206c65604482015261737360f01b6064820152608401610911565b6005546001600160a01b031633146110ff5760405162461bcd60e51b815260040161091190611ffb565b6001600160a01b0381166111645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610911565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000806111cd8385612087565b90508381101561121f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610911565b9392505050565b6001600160a01b0383166112885760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610911565b6001600160a01b0382166112e95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610911565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166113715760405162461bcd60e51b81526004016109119061209f565b6001600160a01b0382166113975760405162461bcd60e51b8152600401610911906120e4565b806113ad576113a8838360006118f8565b505050565b6005546001600160a01b038481169116148015906113d957506005546001600160a01b03838116911614155b80156113ed57506001600160a01b03821615155b801561140457506001600160a01b03821661dead14155b801561141a5750600554600160a01b900460ff16155b156115fb576001600160a01b03831660009081526012602052604090205460ff16801561146057506001600160a01b03821660009081526011602052604090205460ff16155b15611544576007548111156114d55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610911565b6009546001600160a01b0383166000908152602081905260409020546114fb9083612087565b111561153f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610911565b6115fb565b6001600160a01b03821660009081526012602052604090205460ff16801561158557506001600160a01b03831660009081526011602052604090205460ff16155b156115fb576007548111156115fb5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610911565b30600090815260208190526040902054600854811080159081906116215750600a5460ff165b80156116375750600554600160a01b900460ff16155b801561165c57506001600160a01b03851660009081526012602052604090205460ff16155b801561168157506001600160a01b03851660009081526010602052604090205460ff16155b80156116a657506001600160a01b03841660009081526010602052604090205460ff16155b156116d4576005805460ff60a01b1916600160a01b1790556116c6611a01565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526010602052604090205460ff600160a01b90920482161591168061172257506001600160a01b03851660009081526010602052604090205460ff165b1561172b575060005b60008115611856576001600160a01b03861660009081526012602052604090205460ff16801561175d57506000600d54115b156117bb57611782606461177c600d5488611b1a90919063ffffffff16565b90611b99565b9050600d54600e54826117959190612046565b61179f9190612065565b600f60008282546117b09190612087565b909155506118389050565b6001600160a01b03871660009081526012602052604090205460ff1680156117e557506000600b54115b1561183857611804606461177c600b5488611b1a90919063ffffffff16565b9050600b54600c54826118179190612046565b6118219190612065565b600f60008282546118329190612087565b90915550505b8015611849576118498730836118f8565b6118538186612127565b94505b6118618787876118f8565b50505050505050565b6000818484111561188e5760405162461bcd60e51b81526004016109119190611e1a565b50600061189b8486612127565b95945050505050565b6001600160a01b038216600081815260126020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661191e5760405162461bcd60e51b81526004016109119061209f565b6001600160a01b0382166119445760405162461bcd60e51b8152600401610911906120e4565b611981816040518060600160405280602681526020016121e3602691396001600160a01b038616600090815260208190526040902054919061186a565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546119b090826111c0565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161133e565b30600090815260208190526040902054600f54811580611a1f575080155b15611a28575050565b8147611a3382611bdb565b6000611a3f4783611daa565b90506000611a5c8561177c600f5485611b1a90919063ffffffff16565b6000600f81905560065460405192935090916001600160a01b039091169083908381818185875af1925050503d8060008114611ab4576040519150601f19603f3d011682016040523d82523d6000602084013e611ab9565b606091505b50506006546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114611b09576040519150601f19603f3d011682016040523d82523d6000602084013e611b0e565b606091505b50505050505050505050565b600082611b2957506000610842565b6000611b358385612046565b905082611b428583612065565b1461121f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610911565b600061121f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611dec565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c1057611c1061213e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8957600080fd5b505afa158015611c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc19190612154565b81600181518110611cd457611cd461213e565b60200260200101906001600160a01b031690816001600160a01b031681525050611d1f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611226565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611d74908590600090869030904290600401612171565b600060405180830381600087803b158015611d8e57600080fd5b505af1158015611da2573d6000803e3d6000fd5b505050505050565b600061121f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061186a565b60008183611e0d5760405162461bcd60e51b81526004016109119190611e1a565b50600061189b8486612065565b600060208083528351808285015260005b81811015611e4757858101830151858201604001528201611e2b565b81811115611e59576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610adf57600080fd5b60008060408385031215611e9757600080fd5b8235611ea281611e6f565b946020939093013593505050565b600060208284031215611ec257600080fd5b813561121f81611e6f565b600080600060608486031215611ee257600080fd5b8335611eed81611e6f565b92506020840135611efd81611e6f565b929592945050506040919091013590565b600060208284031215611f2057600080fd5b5035919050565b8035801515811461104057600080fd5b60008060408385031215611f4a57600080fd5b8235611f5581611e6f565b9150611f6360208401611f27565b90509250929050565b600060208284031215611f7e57600080fd5b61121f82611f27565b60008060408385031215611f9a57600080fd5b8235611fa581611e6f565b91506020830135611fb581611e6f565b809150509250929050565b600181811c90821680611fd457607f821691505b60208210811415611ff557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561206057612060612030565b500290565b60008261208257634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561209a5761209a612030565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561213957612139612030565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561216657600080fd5b815161121f81611e6f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121c15784516001600160a01b03168352938301939183019160010161219c565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207b3031477b5fed207f465ffa6c554ac612a8fdb71ff599fedef6c42fb534534864736f6c63430008090033
0x60c0604052600a805460ff191660011790553480156200001e57600080fd5b50604051806040016040528060078152602001662832b832b6b7b760c91b815250604051806040016040528060078152602001662822a822a6a7a760c91b81525081600390805190602001906200007792919062000820565b5080516200008d90600490602084019062000820565b5050506000620000a26200044160201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062002c91833981519152908290a3506000620000f46005546001600160a01b031690565b9050737a250d5630b4cf539739df2c5dacb4c659f2488d6200011881600162000445565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200015e57600080fd5b505afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620008c6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e257600080fd5b505afa158015620001f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021d9190620008c6565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200026657600080fd5b505af11580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a19190620008c6565b6001600160a01b031660a0819052620002bc90600162000445565b60a051620002cc906001620004bf565b600060196c0c9f2c9cd04674edea400000006064620002ed82600262000907565b620002f9919062000929565b6200030d90670de0b6b3a76400006200094c565b60075560646200031f82600462000907565b6200032b919062000929565b6200033f90670de0b6b3a76400006200094c565b6009556127106200035282600a62000907565b6200035e919062000929565b600855600c839055600b839055600e829055600d829055600680546001600160a01b03191673803aec561649a96464d20cbc4cee534d9a92e3c2179055620003a885600162000513565b620003b530600162000513565b620003c461dead600162000513565b600654620003dd906001600160a01b0316600162000513565b620003ea85600162000445565b620003f730600162000445565b6200040661dead600162000445565b6006546200041f906001600160a01b0316600162000445565b6200042b8582620005bd565b6200043685620006b9565b5050505050620009a4565b3390565b6005546001600160a01b03163314620004945760405162461bcd60e51b8152602060048201819052602482015260008051602062002c7183398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260126020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200055e5760405162461bcd60e51b8152602060048201819052602482015260008051602062002c7183398151915260448201526064016200048b565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006155760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200048b565b6200063181600254620007b660201b620011c01790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000664918390620011c0620007b6821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620007045760405162461bcd60e51b8152602060048201819052602482015260008051602062002c7183398151915260448201526064016200048b565b6001600160a01b0381166200076b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200048b565b6005546040516001600160a01b0380841692169060008051602062002c9183398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080620007c583856200094c565b905083811015620008195760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200048b565b9392505050565b8280546200082e9062000967565b90600052602060002090601f0160209004810192826200085257600085556200089d565b82601f106200086d57805160ff19168380011785556200089d565b828001600101855582156200089d579182015b828111156200089d57825182559160200191906001019062000880565b50620008ab929150620008af565b5090565b5b80821115620008ab5760008155600101620008b0565b600060208284031215620008d957600080fd5b81516001600160a01b03811681146200081957600080fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620009245762000924620008f1565b500290565b6000826200094757634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009625762000962620008f1565b500190565b600181811c908216806200097c57607f821691505b602082108114156200099e57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161228b620009e6600039600081816103c50152610be70152600081816102e801528181611c3201528181611cfa0152611d36015261228b6000f3fe60806040526004361061023f5760003560e01c80637bce5a041161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e146106ed578063e2f4560514610733578063eba4c33314610749578063f2fde38b14610769578063f8b45b051461078957600080fd5b8063c024666814610661578063c18bc19514610681578063c8c8ebe4146106a1578063d257b34f146106b7578063d85ba063146106d757600080fd5b80639a7a23d6116100f25780639a7a23d6146105b1578063a457c2d7146105d1578063a9059cbb146105f1578063aacebbe314610611578063b62496f51461063157600080fd5b80637bce5a04146105325780638da5cb5b146105485780639213691314610566578063924de9b71461057c57806395d89b411461059c57600080fd5b80634fbee193116101bc578063715018a611610180578063715018a6146104a857806371fc4688146104bd578063751039fc146104dd5780637571336a146104f257806375f0a8741461051257600080fd5b80634fbee193146103e75780636256d181146104205780636a486a8e146104425780636ddd17131461045857806370a082311461047257600080fd5b80631f3fed8f116102035780631f3fed8f1461034157806323b872dd14610357578063313ce56714610377578063395093511461039357806349bd5a5e146103b357600080fd5b806306fdde031461024b578063095ea7b31461027657806310d5de53146102a65780631694505e146102d657806318160ddd1461032257600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026061079f565b60405161026d9190611e1a565b60405180910390f35b34801561028257600080fd5b50610296610291366004611e84565b610831565b604051901515815260200161026d565b3480156102b257600080fd5b506102966102c1366004611eb0565b60116020526000908152604090205460ff1681565b3480156102e257600080fd5b5061030a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161026d565b34801561032e57600080fd5b506002545b60405190815260200161026d565b34801561034d57600080fd5b50610333600f5481565b34801561036357600080fd5b50610296610372366004611ecd565b610848565b34801561038357600080fd5b506040516012815260200161026d565b34801561039f57600080fd5b506102966103ae366004611e84565b6108b1565b3480156103bf57600080fd5b5061030a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f357600080fd5b50610296610402366004611eb0565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561042c57600080fd5b5061044061043b366004611f0e565b6108e7565b005b34801561044e57600080fd5b50610333600d5481565b34801561046457600080fd5b50600a546102969060ff1681565b34801561047e57600080fd5b5061033361048d366004611eb0565b6001600160a01b031660009081526020819052604090205490565b3480156104b457600080fd5b506104406109dc565b3480156104c957600080fd5b506104406104d8366004611f0e565b610a50565b3480156104e957600080fd5b50610440610ae2565b3480156104fe57600080fd5b5061044061050d366004611f37565b610b1a565b34801561051e57600080fd5b5060065461030a906001600160a01b031681565b34801561053e57600080fd5b50610333600c5481565b34801561055457600080fd5b506005546001600160a01b031661030a565b34801561057257600080fd5b50610333600e5481565b34801561058857600080fd5b50610440610597366004611f6c565b610b6f565b3480156105a857600080fd5b50610260610bac565b3480156105bd57600080fd5b506104406105cc366004611f37565b610bbb565b3480156105dd57600080fd5b506102966105ec366004611e84565b610c9b565b3480156105fd57600080fd5b5061029661060c366004611e84565b610cea565b34801561061d57600080fd5b5061044061062c366004611eb0565b610cf7565b34801561063d57600080fd5b5061029661064c366004611eb0565b60126020526000908152604090205460ff1681565b34801561066d57600080fd5b5061044061067c366004611f37565b610d7e565b34801561068d57600080fd5b5061044061069c366004611f0e565b610e07565b3480156106ad57600080fd5b5061033360075481565b3480156106c357600080fd5b506102966106d2366004611f0e565b610eee565b3480156106e357600080fd5b50610333600b5481565b3480156106f957600080fd5b50610333610708366004611f87565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561073f57600080fd5b5061033360085481565b34801561075557600080fd5b50610440610764366004611f0e565b611045565b34801561077557600080fd5b50610440610784366004611eb0565b6110d5565b34801561079557600080fd5b5061033360095481565b6060600380546107ae90611fc0565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90611fc0565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b600061083e338484611226565b5060015b92915050565b600061085584848461134b565b6108a784336108a285604051806060016040528060288152602001612209602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061186a565b611226565b5060019392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161083e9185906108a290866111c0565b6005546001600160a01b0316331461091a5760405162461bcd60e51b815260040161091190611ffb565b60405180910390fd5b670de0b6b3a7640000606461092e60025490565b610939906002612046565b6109439190612065565b61094d9190612065565b8110156109b25760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20322560981b6064820152608401610911565b6109c481670de0b6b3a7640000612046565b6109d690670de0b6b3a7640000612087565b60075550565b6005546001600160a01b03163314610a065760405162461bcd60e51b815260040161091190611ffb565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610a7a5760405162461bcd60e51b815260040161091190611ffb565b600c819055600b819055600a811115610adf5760405162461bcd60e51b815260206004820152602160248201527f4d757374206b65657020627579206665657320617420313025206f72206c65736044820152607360f81b6064820152608401610911565b50565b6005546001600160a01b03163314610b0c5760405162461bcd60e51b815260040161091190611ffb565b600254600755600254600955565b6005546001600160a01b03163314610b445760405162461bcd60e51b815260040161091190611ffb565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610b995760405162461bcd60e51b815260040161091190611ffb565b600a805460ff1916911515919091179055565b6060600480546107ae90611fc0565b6005546001600160a01b03163314610be55760405162461bcd60e51b815260040161091190611ffb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610c8d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610911565b610c9782826118a4565b5050565b600061083e33846108a285604051806060016040528060258152602001612231602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061186a565b600061083e33848461134b565b6005546001600160a01b03163314610d215760405162461bcd60e51b815260040161091190611ffb565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610da85760405162461bcd60e51b815260040161091190611ffb565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610e315760405162461bcd60e51b815260040161091190611ffb565b670de0b6b3a76400006064610e4560025490565b610e50906004612046565b610e5a9190612065565b610e649190612065565b811015610ec45760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f776572604482015267207468616e20342560c01b6064820152608401610911565b610ed681670de0b6b3a7640000612046565b610ee890670de0b6b3a7640000612087565b60095550565b6005546000906001600160a01b03163314610f1b5760405162461bcd60e51b815260040161091190611ffb565b620186a0610f2860025490565b610f33906001612046565b610f3d9190612065565b821015610faa5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610911565b6103e8610fb660025490565b610fc1906005612046565b610fcb9190612065565b8211156110375760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610911565b50600881905560015b919050565b6005546001600160a01b0316331461106f5760405162461bcd60e51b815260040161091190611ffb565b600e819055600d819055600f811115610adf5760405162461bcd60e51b815260206004820152602260248201527f4d757374206b6565702073656c6c206665657320617420313525206f72206c65604482015261737360f01b6064820152608401610911565b6005546001600160a01b031633146110ff5760405162461bcd60e51b815260040161091190611ffb565b6001600160a01b0381166111645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610911565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000806111cd8385612087565b90508381101561121f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610911565b9392505050565b6001600160a01b0383166112885760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610911565b6001600160a01b0382166112e95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610911565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166113715760405162461bcd60e51b81526004016109119061209f565b6001600160a01b0382166113975760405162461bcd60e51b8152600401610911906120e4565b806113ad576113a8838360006118f8565b505050565b6005546001600160a01b038481169116148015906113d957506005546001600160a01b03838116911614155b80156113ed57506001600160a01b03821615155b801561140457506001600160a01b03821661dead14155b801561141a5750600554600160a01b900460ff16155b156115fb576001600160a01b03831660009081526012602052604090205460ff16801561146057506001600160a01b03821660009081526011602052604090205460ff16155b15611544576007548111156114d55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610911565b6009546001600160a01b0383166000908152602081905260409020546114fb9083612087565b111561153f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610911565b6115fb565b6001600160a01b03821660009081526012602052604090205460ff16801561158557506001600160a01b03831660009081526011602052604090205460ff16155b156115fb576007548111156115fb5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610911565b30600090815260208190526040902054600854811080159081906116215750600a5460ff165b80156116375750600554600160a01b900460ff16155b801561165c57506001600160a01b03851660009081526012602052604090205460ff16155b801561168157506001600160a01b03851660009081526010602052604090205460ff16155b80156116a657506001600160a01b03841660009081526010602052604090205460ff16155b156116d4576005805460ff60a01b1916600160a01b1790556116c6611a01565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526010602052604090205460ff600160a01b90920482161591168061172257506001600160a01b03851660009081526010602052604090205460ff165b1561172b575060005b60008115611856576001600160a01b03861660009081526012602052604090205460ff16801561175d57506000600d54115b156117bb57611782606461177c600d5488611b1a90919063ffffffff16565b90611b99565b9050600d54600e54826117959190612046565b61179f9190612065565b600f60008282546117b09190612087565b909155506118389050565b6001600160a01b03871660009081526012602052604090205460ff1680156117e557506000600b54115b1561183857611804606461177c600b5488611b1a90919063ffffffff16565b9050600b54600c54826118179190612046565b6118219190612065565b600f60008282546118329190612087565b90915550505b8015611849576118498730836118f8565b6118538186612127565b94505b6118618787876118f8565b50505050505050565b6000818484111561188e5760405162461bcd60e51b81526004016109119190611e1a565b50600061189b8486612127565b95945050505050565b6001600160a01b038216600081815260126020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661191e5760405162461bcd60e51b81526004016109119061209f565b6001600160a01b0382166119445760405162461bcd60e51b8152600401610911906120e4565b611981816040518060600160405280602681526020016121e3602691396001600160a01b038616600090815260208190526040902054919061186a565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546119b090826111c0565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161133e565b30600090815260208190526040902054600f54811580611a1f575080155b15611a28575050565b8147611a3382611bdb565b6000611a3f4783611daa565b90506000611a5c8561177c600f5485611b1a90919063ffffffff16565b6000600f81905560065460405192935090916001600160a01b039091169083908381818185875af1925050503d8060008114611ab4576040519150601f19603f3d011682016040523d82523d6000602084013e611ab9565b606091505b50506006546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114611b09576040519150601f19603f3d011682016040523d82523d6000602084013e611b0e565b606091505b50505050505050505050565b600082611b2957506000610842565b6000611b358385612046565b905082611b428583612065565b1461121f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610911565b600061121f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611dec565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c1057611c1061213e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8957600080fd5b505afa158015611c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc19190612154565b81600181518110611cd457611cd461213e565b60200260200101906001600160a01b031690816001600160a01b031681525050611d1f307f000000000000000000000000000000000000000000000000000000000000000084611226565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611d74908590600090869030904290600401612171565b600060405180830381600087803b158015611d8e57600080fd5b505af1158015611da2573d6000803e3d6000fd5b505050505050565b600061121f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061186a565b60008183611e0d5760405162461bcd60e51b81526004016109119190611e1a565b50600061189b8486612065565b600060208083528351808285015260005b81811015611e4757858101830151858201604001528201611e2b565b81811115611e59576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610adf57600080fd5b60008060408385031215611e9757600080fd5b8235611ea281611e6f565b946020939093013593505050565b600060208284031215611ec257600080fd5b813561121f81611e6f565b600080600060608486031215611ee257600080fd5b8335611eed81611e6f565b92506020840135611efd81611e6f565b929592945050506040919091013590565b600060208284031215611f2057600080fd5b5035919050565b8035801515811461104057600080fd5b60008060408385031215611f4a57600080fd5b8235611f5581611e6f565b9150611f6360208401611f27565b90509250929050565b600060208284031215611f7e57600080fd5b61121f82611f27565b60008060408385031215611f9a57600080fd5b8235611fa581611e6f565b91506020830135611fb581611e6f565b809150509250929050565b600181811c90821680611fd457607f821691505b60208210811415611ff557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561206057612060612030565b500290565b60008261208257634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561209a5761209a612030565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561213957612139612030565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561216657600080fd5b815161121f81611e6f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121c15784516001600160a01b03168352938301939183019160010161219c565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207b3031477b5fed207f465ffa6c554ac612a8fdb71ff599fedef6c42fb534534864736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0