60806040526000600255600060035562093a8060045534801561002157600080fd5b50604051610fef380380610fef8339810160408190526100409161008d565b600080546001600160a01b039384166001600160a01b031991821617909155600180549290931691161790556100c0565b80516001600160a01b038116811461008857600080fd5b919050565b600080604083850312156100a057600080fd5b6100a983610071565b91506100b760208401610071565b90509250929050565b610f20806100cf6000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c80637b0a47ee116100b8578063cc1a378f1161007c578063cc1a378f14610289578063cd3daf9d1461029c578063d1af0c7d146102a4578063df136d65146102b7578063e9fad8ee146102c0578063ebe2b12b146102c857600080fd5b80637b0a47ee1461023c57806380faa57d146102455780638b8763471461024d578063a694fc3a1461026d578063c8f33c911461028057600080fd5b80632e1a7d4d1161010a5780632e1a7d4d146101b1578063386a9525146101c45780633c6b16ab146101cd5780633d18b912146101e057806370a08231146101e857806372f702f31461021157600080fd5b80628cc262146101465780630700037d1461016c57806318160ddd1461018c5780631c1f78eb146101945780631d43cc981461019c575b600080fd5b610159610154366004610d85565b6102d1565b6040519081526020015b60405180910390f35b61015961017a366004610d85565b60086020526000908152604090205481565b600954610159565b61015961034f565b6101af6101aa366004610dae565b61036d565b005b6101af6101bf366004610dae565b6103dc565b61015960045481565b6101af6101db366004610dae565b610510565b6101af6106f1565b6101596101f6366004610d85565b6001600160a01b03166000908152600a602052604090205490565b600154610224906001600160a01b031681565b6040516001600160a01b039091168152602001610163565b61015960035481565b6101596107c1565b61015961025b366004610d85565b60076020526000908152604090205481565b6101af61027b366004610dae565b6107d8565b61015960055481565b6101af610297366004610dae565b6108fd565b6101596109d5565b600054610224906001600160a01b031681565b61015960065481565b6101af610a20565b61015960025481565b6001600160a01b0381166000908152600860209081526040808320546007909252822054610349919061034390670de0b6b3a76400009061033d9061031e906103186109d5565b90610a43565b6001600160a01b0388166000908152600a602052604090205490610a56565b90610a62565b90610a6e565b92915050565b6000610368600454600354610a5690919063ffffffff16565b905090565b336103766109d5565b6006556103816107c1565b6005556001600160a01b038116156103c85761039c816102d1565b6001600160a01b0382166000908152600860209081526040808320939093556006546007909152919020555b6009546103d59083610a6e565b6009555050565b336103e56109d5565b6006556103f06107c1565b6005556001600160a01b038116156104375761040b816102d1565b6001600160a01b0382166000908152600860209081526040808320939093556006546007909152919020555b600082116104805760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b60448201526064015b60405180910390fd5b60095461048d9083610a43565b600955336000908152600a60205260409020546104aa9083610a43565b336000818152600a60205260409020919091556001546104d6916001600160a01b039091169084610a7a565b60405182815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a25050565b600061051a6109d5565b6006556105256107c1565b6005556001600160a01b0381161561056c57610540816102d1565b6001600160a01b0382166000908152600860209081526040808320939093556006546007909152919020555b600254421061058b57600454610583908390610a62565b6003556105ce565b60025460009061059b9042610a43565b905060006105b460035483610a5690919063ffffffff16565b6004549091506105c89061033d8684610a6e565b60035550505b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063b9190610dc7565b905061065260045482610a6290919063ffffffff16565b60035411156106a35760405162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f206869676800000000000000006044820152606401610477565b4260058190556004546106b69190610a6e565b6002556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a1505050565b336106fa6109d5565b6006556107056107c1565b6005556001600160a01b0381161561074c57610720816102d1565b6001600160a01b0382166000908152600860209081526040808320939093556006546007909152919020555b3360009081526008602052604090205480156107bd573360008181526008602052604081208190555461078b916001600160a01b039091169083610a7a565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048690602001610504565b5050565b600060025442106107d3575060025490565b504290565b336107e16109d5565b6006556107ec6107c1565b6005556001600160a01b0381161561083357610807816102d1565b6001600160a01b0382166000908152600860209081526040808320939093556006546007909152919020555b600082116108745760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b6044820152606401610477565b6009546108819083610a6e565b600955336000908152600a602052604090205461089e9083610a6e565b336000818152600a60205260409020919091556001546108cb916001600160a01b03909116903085610ae2565b60405182815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90602001610504565b600254421161099a5760405162461bcd60e51b815260206004820152605860248201527f50726576696f7573207265776172647320706572696f64206d7573742062652060448201527f636f6d706c657465206265666f7265206368616e67696e67207468652064757260648201527f6174696f6e20666f7220746865206e657720706572696f640000000000000000608482015260a401610477565b60048190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39060200160405180910390a150565b60006009546000036109e8575060065490565b610368610a1760095461033d670de0b6b3a7640000610a11600354610a116005546103186107c1565b90610a56565b60065490610a6e565b336000908152600a6020526040902054610a39906103dc565b610a416106f1565b565b6000610a4f8284610df6565b9392505050565b6000610a4f8284610e09565b6000610a4f8284610e20565b6000610a4f8284610e42565b6040516001600160a01b038316602482015260448101829052610add90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b20565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610b1a9085906323b872dd60e01b90608401610aa6565b50505050565b6000610b75826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610bf59092919063ffffffff16565b9050805160001480610b96575080806020019051810190610b969190610e55565b610add5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610477565b6060610c048484600085610c0c565b949350505050565b606082471015610c6d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610477565b600080866001600160a01b03168587604051610c899190610e9b565b60006040518083038185875af1925050503d8060008114610cc6576040519150601f19603f3d011682016040523d82523d6000602084013e610ccb565b606091505b5091509150610cdc87838387610ce7565b979650505050505050565b60608315610d56578251600003610d4f576001600160a01b0385163b610d4f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610477565b5081610c04565b610c048383815115610d6b5781518083602001fd5b8060405162461bcd60e51b81526004016104779190610eb7565b600060208284031215610d9757600080fd5b81356001600160a01b0381168114610a4f57600080fd5b600060208284031215610dc057600080fd5b5035919050565b600060208284031215610dd957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561034957610349610de0565b808202811582820484141761034957610349610de0565b600082610e3d57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561034957610349610de0565b600060208284031215610e6757600080fd5b81518015158114610a4f57600080fd5b60005b83811015610e92578181015183820152602001610e7a565b50506000910152565b60008251610ead818460208701610e77565b9190910192915050565b6020815260008251806020840152610ed6816040850160208701610e77565b601f01601f1916919091016040019291505056fea26469706673582212203edcc1ceea0b60f1f832abd7ca56547d0b78c400f4e2f1bb2003afab1926ec8f64736f6c634300081300330000000000000000000000002e616e02c9683b28028189e355f6f3da231fe710000000000000000000000000a58949e8bf8c331024af7e0558c5bc10fc230b25