//
0x60806040523480156200001157600080fd5b5060405162001b3338038062001b33833981016040819052620000349162000351565b6200003f3362000201565b60648260ff161115620000655760405163c382105b60e01b815260040160405180910390fd5b6001600160a01b038516620000b25760405163030cc15560e51b815260206004820152600d60248201526c746f6b656e416464726573735f60981b60448201526064015b60405180910390fd5b6001600160a01b038116620000f75760405163030cc15560e51b815260206004820152600960248201526874726561737572795f60b81b6044820152606401620000a9565b6040518060a00160405280878152602001306001600160a01b031681526020018463ffffffff1681526020018563ffffffff1681526020018360ff16815250600360008201518160000190805190602001906200015692919062000251565b506020820151600190910180546040840151606085015160809095015160ff16600160e01b0260ff60e01b1963ffffffff968716600160c01b021664ffffffffff60c01b1996909216600160a01b026001600160c01b03199093166001600160a01b039586161792909217949094169390931792909217909155600580549682166001600160a01b03199788161790556006805492909116919095161790935550620004c892505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200025f906200048b565b90600052602060002090601f016020900481019282620002835760008555620002ce565b82601f106200029e57805160ff1916838001178555620002ce565b82800160010185558215620002ce579182015b82811115620002ce578251825591602001919060010190620002b1565b50620002dc929150620002e0565b5090565b5b80821115620002dc5760008155600101620002e1565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200032557600080fd5b919050565b805163ffffffff811681146200032557600080fd5b805160ff811681146200032557600080fd5b60008060008060008060c087890312156200036b57600080fd5b86516001600160401b03808211156200038357600080fd5b818901915089601f8301126200039857600080fd5b815181811115620003ad57620003ad620002f7565b604051601f8201601f19908116603f01168101908382118183101715620003d857620003d8620002f7565b81604052828152602093508c84848701011115620003f557600080fd5b600091505b82821015620004195784820184015181830185015290830190620003fa565b828211156200042b5760008484830101525b99506200043d9150508982016200030d565b965050506200044f604088016200032a565b93506200045f606088016200032a565b92506200046f608088016200033f565b91506200047f60a088016200030d565b90509295509295509295565b600181811c90821680620004a057607f821691505b60208210811415620004c257634e487b7160e01b600052602260045260246000fd5b50919050565b61165b80620004d86000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80639946e341116100b8578063a694fc3a1161007c578063a694fc3a14610291578063aa5c3ab4146102a4578063b5517129146102ad578063c084b10b146102b5578063db2e21bc14610312578063f2fde38b1461031a57600080fd5b80639946e3411461023c5780639ac95d5f1461024f5780639d76ea5814610262578063a26dbf2614610275578063a356be351461027e57600080fd5b806364ab86751161010a57806364ab8675146101c8578063715018a6146101f057806374de4ec4146101f85780637847ea531461020b5780637cc1f867146102165780638da5cb5b1461022b57600080fd5b80631120b7ba146101475780633ccfd60b1461015c5780633f683b6a146101645780635b9f00161461018657806361d027b31461019d575b600080fd5b61015a61015536600461132f565b61032d565b005b61015a6103df565b600a546101719060ff1681565b60405190151581526020015b60405180910390f35b61018f60075481565b60405190815260200161017d565b6006546101b0906001600160a01b031681565b6040516001600160a01b03909116815260200161017d565b6101db6101d6366004611352565b610489565b6040805192835260208301919091520161017d565b61015a6104f6565b61015a61020636600461137b565b61052c565b61018f6301e1338081565b61021e610675565b60405161017d91906113ec565b6000546001600160a01b03166101b0565b61015a61024a366004611461565b61078a565b61018f61025d366004611352565b6107fa565b6005546101b0906001600160a01b031681565b61018f60095481565b61015a61028c366004611497565b610855565b61015a61029f36600461137b565b610903565b61018f60085481565b61018f606481565b6102c86102c3366004611352565b610c31565b60405161017d9190600060a08201905082518252602083015160208301526040830151604083015263ffffffff606084015116606083015260808301511515608083015292915050565b61015a610cd1565b61015a610328366004611352565b610d1a565b6000546001600160a01b031633146103605760405162461bcd60e51b8152600401610357906114ca565b60405180910390fd5b60648160ff1611156103855760405163c382105b60e01b815260040160405180910390fd5b6004805460ff60e01b1916600160e01b60ff841690810291909117909155604080519182524260208301527f8ad0368147aed0dcc0a368b4e9e6a41e213447d027c3a9c804cb833860da2e7891015b60405180910390a150565b3360008181526002602052604090205460ff1661041a57604051633eea258760e01b81526001600160a01b0382166004820152602401610357565b33600081815260016020526040812060020154610438904290610db2565b905060006104468383610dcc565b90508060085410156104795760085460405163334758e560e21b8152600481019190915260248101829052604401610357565b6104838382610ea9565b50505050565b6001600160a01b03811660009081526001602052604081206002015481906104b2908490610dcc565b91506104ef836104ea4260016000886001600160a01b03166001600160a01b0316815260200190815260200160002060020154610db2565b610dcc565b9050915091565b6000546001600160a01b031633146105205760405162461bcd60e51b8152600401610357906114ca565b61052a6000610fec565b565b600554604051636eb1769f60e11b815233600482018190523060248301529183916000916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a491906114ff565b9050808211156105d15760405163b7f077b960e01b81526004810182905260248101839052604401610357565b8361060e57604051633930c7a960e21b815260206004820152600c60248201526b1c995dd85c99105b5bdd5b9d60a21b6044820152606401610357565b8360085461061c919061152e565b600855600554610637906001600160a01b031633308761103c565b604080518581524260208201527f40df43107e8b4d467127964bd3c966687c0a6a39aaede970755397fd09535e98910160405180910390a150505050565b6040805160a08101825260608082526000602083018190529282018390528101829052608081019190915260036040518060a00160405290816000820180546106bd90611546565b80601f01602080910402602001604051908101604052809291908181526020018280546106e990611546565b80156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b5050509183525050600191909101546001600160a01b038116602083015263ffffffff600160a01b820481166040840152600160c01b820416606083015260ff600160e01b90910416608090910152919050565b6000546001600160a01b031633146107b45760405162461bcd60e51b8152600401610357906114ca565b600a805460ff1916821515908117909155604080519182524260208301527fb7d83b7e094cfcfa7dd295e685a79a100995b6110e9708b6c36d9242b394545091016103d4565b6001600160a01b038116600090815260016020526040812060028101544211156108275750600092915050565b600454815460649161084491600160e01b90910460ff1690611581565b61084e91906115a0565b9392505050565b6000546001600160a01b0316331461087f5760405162461bcd60e51b8152600401610357906114ca565b6004805467ffffffffffffffff60a01b1916600160c01b63ffffffff85811691820263ffffffff60a01b191692909217600160a01b9285169283021790925560408051928352602083019190915242908201527f3546ce97c02e1ee7939717f17c835b6d6bd387a0e3b0410c5d6068aef18ceb409060600160405180910390a15050565b600554604051636eb1769f60e11b815233600482018190523060248301529183916000916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097b91906114ff565b9050808211156109a85760405163b7f077b960e01b81526004810182905260248101839052604401610357565b836109df57604051633930c7a960e21b8152602060048201526006602482015265185b5bdd5b9d60d21b6044820152606401610357565b600a5460ff1615610a0357604051636bea2ae560e01b815260040160405180910390fd5b3360008181526002602052604090205460ff168015610a3d57506001600160a01b0381166000908152600160205260409020600201544210155b15610a5b5760405163e54fd7b360e01b815260040160405180910390fd5b6001600160a01b03811660009081526002602052604081205460ff1615610aba57610a868242610dcc565b6001600160a01b038316600090815260016020526040902054610aa9908861152e565b610ab3919061152e565b9050610af9565b506001600160a01b0381166000908152600260205260408120805460ff1916600190811790915560098054889390610af390849061152e565b90915550505b6040805160a0810182528281524260208201526004549091820190610b2d90600160a01b900463ffffffff16610e10611581565b610b37904261152e565b815260045463ffffffff600160c01b9091048116602080840191909152600060409384018190526001600160a01b03871681526001808352908490208551815591850151908201559183015160028301556060830151600392909201805460809094015115156401000000000264ffffffffff199094169290911691909117919091179055600754610bca90879061152e565b600755600554610be5906001600160a01b031683308961103c565b6005546040518781526001600160a01b038481169216907f5dac0c1b1112564a045ba943c9d50270893e8e826c49be8e7073adc713ab7bd79060200160405180910390a3505050505050565b610c6b6040518060a00160405280600081526020016000815260200160008152602001600063ffffffff1681526020016000151581525090565b506001600160a01b0316600090815260016020818152604092839020835160a08101855281548152928101549183019190915260028101549282019290925260039091015463ffffffff81166060830152640100000000900460ff161515608082015290565b3360008181526002602052604090205460ff16610d0c57604051633eea258760e01b81526001600160a01b0382166004820152602401610357565b610d17336000610ea9565b50565b6000546001600160a01b03163314610d445760405162461bcd60e51b8152600401610357906114ca565b6001600160a01b038116610da95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610357565b610d1781610fec565b6000818310610dc15781610dc3565b825b90505b92915050565b6001600160a01b03821660009081526002602052604081205460ff16610df457506000610dc6565b6001600160a01b0383166000908152600160208181526040808420815160a08101835281548152938101549284018390526002810154918401919091526003015463ffffffff81166060840152640100000000900460ff1615156080830152909190610e6090856115c2565b9050610e7160646301e13380611581565b81836060015163ffffffff168460000151610e8c9190611581565b610e969190611581565b610ea091906115a0565b95945050505050565b6000610eb4836107fa565b6001600160a01b038416600090815260016020526040812054919250610eda83836115c2565b905081600754610eea91906115c2565b600755600854610efb9085906115c2565b6008556001600160a01b0385166000908152600160208181526040808420600301805464ff00000000191664010000000017905560029091528220805460ff191690556009805491929091610f519084906115c2565b90915550610f78905085610f65868461152e565b6005546001600160a01b031691906110a7565b8215610f9b57600654600554610f9b916001600160a01b039182169116856110a7565b60055460408051838152602081018790526001600160a01b038881169316917f85ab59351da11b79336de7647172267c33bf533ee87d9d292441c2672177159b910160405180910390a35050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526104839085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526110dc565b6040516001600160a01b0383166024820152604481018290526110d790849063a9059cbb60e01b90606401611070565b505050565b6000611131826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111ae9092919063ffffffff16565b8051909150156110d7578080602001905181019061114f91906115d9565b6110d75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610357565b60606111bd84846000856111c5565b949350505050565b6060824710156112265760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610357565b6001600160a01b0385163b61127d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610357565b600080866001600160a01b0316858760405161129991906115f6565b60006040518083038185875af1925050503d80600081146112d6576040519150601f19603f3d011682016040523d82523d6000602084013e6112db565b606091505b50915091506112eb8282866112f6565b979650505050505050565b6060831561130557508161084e565b8251156113155782518084602001fd5b8160405162461bcd60e51b81526004016103579190611612565b60006020828403121561134157600080fd5b813560ff8116811461084e57600080fd5b60006020828403121561136457600080fd5b81356001600160a01b038116811461084e57600080fd5b60006020828403121561138d57600080fd5b5035919050565b60005b838110156113af578181015183820152602001611397565b838111156104835750506000910152565b600081518084526113d8816020860160208601611394565b601f01601f19169290920160200192915050565b602081526000825160a0602084015261140860c08401826113c0565b905060018060a01b036020850151166040840152604084015163ffffffff8082166060860152806060870151166080860152505060ff60808501511660a08401528091505092915050565b8015158114610d1757600080fd5b60006020828403121561147357600080fd5b813561084e81611453565b803563ffffffff8116811461149257600080fd5b919050565b600080604083850312156114aa57600080fd5b6114b38361147e565b91506114c16020840161147e565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561151157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561154157611541611518565b500190565b600181811c9082168061155a57607f821691505b6020821081141561157b57634e487b7160e01b600052602260045260246000fd5b50919050565b600081600019048311821515161561159b5761159b611518565b500290565b6000826115bd57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156115d4576115d4611518565b500390565b6000602082840312156115eb57600080fd5b815161084e81611453565b60008251611608818460208701611394565b9190910192915050565b602081526000610dc360208301846113c056fea2646970667358221220b2addbdad3ba5420961dd196a129e71a1842405304207bee5ceae06715be737e64736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000499a3ec965136bea01e4350113a2105724785dc00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000afc912fd4775a9b9f1aaedeb463aa9beb1b7b73b00000000000000000000000000000000000000000000000000000000000000063134646179730000000000000000000000000000000000000000000000000000