0x608060405234801561001057600080fd5b50604051610fea380380610fea83398101604081905261002f916100e1565b61003833610075565b600180546001600160a01b039586166001600160a01b03199182161790915560029390935560049190915560058054919093169116179055610127565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146100dc57600080fd5b919050565b600080600080608085870312156100f757600080fd5b610100856100c5565b9350602085015192506040850151915061011c606086016100c5565b905092959194509250565b610eb4806101366000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806386c2e03b11610097578063d6afb37a11610066578063d6afb37a146101f7578063ea25e17614610200578063f2fde38b14610213578063fc0c546a1461022657600080fd5b806386c2e03b146101955780638d49f7fe146101c05780638da5cb5b146101d357806397ae4a4e146101e457600080fd5b8063522bf1d4116100d3578063522bf1d41461013c578063715018a6146101655780637b69d6671461016f5780637cb647591461018257600080fd5b80632eb4a7ab146100fa5780634d7d4ca814610116578063519d504114610129575b600080fd5b61010360025481565b6040519081526020015b60405180910390f35b610103610124366004610c24565b610239565b610103610137366004610c57565b61033e565b61010361014a366004610c81565b6001600160a01b031660009081526003602052604090205490565b61016d61036a565b005b61016d61017d366004610c81565b61037e565b61016d610190366004610c9c565b6103e8565b6005546101a8906001600160a01b031681565b6040516001600160a01b03909116815260200161010d565b6101036101ce366004610c81565b610425565b6000546001600160a01b03166101a8565b61016d6101f2366004610c9c565b610478565b61010360045481565b61016d61020e366004610cb5565b6104b5565b61016d610221366004610c81565b61070d565b6001546101a8906001600160a01b031681565b6001600160a01b03831660009081526003602052604081208054829061025f9085610d5b565b90508160010154600014801561027457508154155b156102e0578085620151806004544261028d9190610d5b565b6102979190610d6e565b6102a19190610d90565b11156102b05791506103379050565b8462015180600454426102c39190610d5b565b6102cd9190610d6e565b6102d79190610d90565b92505050610337565b6000826001015462015180600454426102f99190610d5b565b6103039190610d6e565b61030d9190610d5b565b9050600061031b8783610d90565b9050828111156103315782945050505050610337565b93505050505b9392505050565b6001600160a01b0382166000908152600360205260408120546103619083610d5b565b90505b92915050565b61037261079d565b61037c60006107f7565b565b61038661079d565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fd1548b4163b65bbd64c0f61e717a12fc44b1adefcd3fee816a1e32869a0e65f9906020015b60405180910390a150565b6103f061079d565b60028190556040518181527f90004c04698bc3322499a575ed3752dd4abf33e0a7294c06a787a0fe01bea941906020016103dd565b6001600160a01b0381166000908152600360205260408120600454829061044c9042610d5b565b9050600061045d6201518083610d6e565b905082600101548161046f9190610d5b565b95945050505050565b61048061079d565b60048190556040518181527f1cc834e649d2cf01afe6bf8bbe6e59b153c5b825cb3fd60eb1b9e1b60fa5da36906020016103dd565b3360009081526003602052604081206004549091906104d49042610d5b565b905060006104e56201518083610d6e565b9050826001015481101561050b5760405162f3f86160e41b815260040160405180910390fd5b600083600101548261051d9190610d5b565b905080891115610568576040517f597b1756000000000000000000000000000000000000000000000000000000008152600481018a9052602481018290526044015b60405180910390fd5b6040516bffffffffffffffffffffffff193360601b16602082015260348101899052605481018890526000906074016040516020818303038152906040528051906020012090506105f0878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506002549150849050610854565b610626576040517fb05e92fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106328a8c610d90565b8654909150600090610644908b610d5b565b905080821115610652578091505b816000036106725760405162f3f86160e41b815260040160405180910390fd5b818760000160008282546106869190610da7565b925050819055508b8760010160008282546106a19190610da7565b90915550506005546001546106c4916001600160a01b039182169116338561086a565b60408051838152602081018e905233917f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a910160405180910390a2505050505050505050505050565b61071561079d565b6001600160a01b0381166107915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055f565b61079a816107f7565b50565b6000546001600160a01b0316331461037c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055f565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008261086185846108f8565b14949350505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526108f2908590610945565b50505050565b600081815b845181101561093d576109298286838151811061091c5761091c610dba565b6020026020010151610a32565b91508061093581610dd0565b9150506108fd565b509392505050565b600061099a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610a619092919063ffffffff16565b90508051600014806109bb5750808060200190518101906109bb9190610de9565b610a2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161055f565b505050565b6000818310610a4e576000828152602084905260409020610361565b6000838152602083905260409020610361565b6060610a708484600085610a78565b949350505050565b606082471015610af05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161055f565b600080866001600160a01b03168587604051610b0c9190610e2f565b60006040518083038185875af1925050503d8060008114610b49576040519150601f19603f3d011682016040523d82523d6000602084013e610b4e565b606091505b5091509150610b5f87838387610b6a565b979650505050505050565b60608315610bd9578251600003610bd2576001600160a01b0385163b610bd25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161055f565b5081610a70565b610a708383815115610bee5781518083602001fd5b8060405162461bcd60e51b815260040161055f9190610e4b565b80356001600160a01b0381168114610c1f57600080fd5b919050565b600080600060608486031215610c3957600080fd5b610c4284610c08565b95602085013595506040909401359392505050565b60008060408385031215610c6a57600080fd5b610c7383610c08565b946020939093013593505050565b600060208284031215610c9357600080fd5b61036182610c08565b600060208284031215610cae57600080fd5b5035919050565b600080600080600060808688031215610ccd57600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff80821115610cfa57600080fd5b818801915088601f830112610d0e57600080fd5b813581811115610d1d57600080fd5b8960208260051b8501011115610d3257600080fd5b9699959850939650602001949392505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561036457610364610d45565b600082610d8b57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761036457610364610d45565b8082018082111561036457610364610d45565b634e487b7160e01b600052603260045260246000fd5b600060018201610de257610de2610d45565b5060010190565b600060208284031215610dfb57600080fd5b8151801515811461033757600080fd5b60005b83811015610e26578181015183820152602001610e0e565b50506000910152565b60008251610e41818460208701610e0b565b9190910192915050565b6020815260008251806020840152610e6a816040850160208701610e0b565b601f01601f1916919091016040019291505056fea26469706673582212208d4df342c362057699e9cef3f0839690e65a7833c852307888c01fb251b3ba4f64736f6c63430008140033000000000000000000000000acd2c239012d17beb128b0944d49015104113650f7ac4d0487abaccc952660aae7922ab4dba29ae9782618eb61ec8ef7ad76bed60000000000000000000000000000000000000000000000000000000067667580000000000000000000000000b564cfcf036581894d45cdada2e2129d0bec3a5f