0x6080604052600436106104695760003560e01c80636b639a2511610243578063c705c56911610143578063e8a0e3f9116100bb578063f2e4109c1161008a578063f94aa1b41161006f578063f94aa1b414610da4578063fdb78c0e14610deb578063fe575a8714610e0a57600080fd5b8063f2e4109c14610d79578063f7c245ea14610d8f57600080fd5b8063e8a0e3f914610cff578063eafb5a3c14610d1f578063ecfc021f14610d3f578063efe7dc9014610d5f57600080fd5b8063db40e30211610112578063dd62ed3e116100f7578063dd62ed3e14610c83578063dea528a114610cc9578063e4fcfd1814610ce957600080fd5b8063db40e30214610c43578063dbc1d6ca14610c6357600080fd5b8063c705c56914610b48578063cf84770614610b81578063d0b1449d14610c03578063d3f6a15714610c2357600080fd5b806395d89b41116101d6578063b1b08f71116101a5578063b3d514fb1161018a578063b3d514fb14610722578063b8e0e96d14610b12578063c6a276c214610b2857600080fd5b8063b1b08f7114610722578063b26e0beb14610af857600080fd5b806395d89b4114610a5d5780639dc6761514610aa3578063a9059cbb14610ab8578063ab5cb5a614610ad857600080fd5b806380c581d11161021257806380c581d1146109f5578063893d20e814610a155780638a63bd9b14610a335780638a8c523c14610a4857600080fd5b80636b639a25146109755780636ebd00781461099557806370a08231146109aa578063715018a6146109e057600080fd5b80632b28fc7a116103695780634fb2e45d116102e1578063590ffdce116102b05780636372c68f116102955780636372c68f146109105780636386c1c7146109305780636ab86dc11461096057600080fd5b8063590ffdce146108b75780635cce86cd146108d757600080fd5b80634fb2e45d146108295780634fbee1931461084957806350a8e0161461088257806355dbc369146108a257600080fd5b806334cd8260116103385780633f3cf56c1161031d5780633f3cf56c146107ca578063452ed4f1146107ea5780634ada218b1461080a57600080fd5b806334cd82601461078a57806336fddb04146107aa57600080fd5b80632b28fc7a146107225780632e8fa82114610738578063313ce5671461074e57806333251a0b1461076a57600080fd5b806309a8f179116103fc578063218950bc116103cb57806326003957116103b057806326003957146106c25780632610eaca146106e257806329dd87981461070257600080fd5b8063218950bc1461068257806323b872dd146106a257600080fd5b806309a8f179146106185780630fa604e41461063857806318160ddd1461064d5780631de3b1c71461066257600080fd5b80630712d165116104385780630712d165146105865780630758d924146105a857806309231602146105c8578063095ea7b3146105e857600080fd5b806303fd2a45146104755780630445b667146104a8578063069d955f146104cc57806306fdde031461053757600080fd5b3661047057005b600080fd5b34801561048157600080fd5b5061048b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104b457600080fd5b506104be60175481565b60405190815260200161049f565b3480156104d857600080fd5b50600a546105099061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161049f565b34801561054357600080fd5b5060408051808201909152601781527f4e6f64652041676772656761746f72204361706974616c00000000000000000060208201525b60405161049f9190614704565b34801561059257600080fd5b506105a66105a136600461472e565b610e2a565b005b3480156105b457600080fd5b50600c5461048b906001600160a01b031681565b3480156105d457600080fd5b506105a66105e3366004614782565b610f8b565b3480156105f457600080fd5b506106086106033660046147b0565b6110b7565b604051901515815260200161049f565b34801561062457600080fd5b506105a66106333660046147dc565b611124565b34801561064457600080fd5b506104be611217565b34801561065957600080fd5b506104be611237565b34801561066e57600080fd5b506105a661067d366004614816565b611250565b34801561068e57600080fd5b506105a661069d366004614833565b6112bd565b3480156106ae57600080fd5b506106086106bd36600461486c565b6113c1565b3480156106ce57600080fd5b506105a66106dd3660046148ad565b61143b565b3480156106ee57600080fd5b506105a66106fd366004614a22565b611552565b34801561070e57600080fd5b506105a661071d366004614a86565b61166c565b34801561072e57600080fd5b506104be6107d081565b34801561074457600080fd5b506104be60185481565b34801561075a57600080fd5b506040516012815260200161049f565b34801561077657600080fd5b506105a6610785366004614ae2565b611762565b34801561079657600080fd5b506105a66107a5366004614aff565b61180f565b3480156107b657600080fd5b506105a66107c5366004614b3a565b6118ab565b3480156107d657600080fd5b506105a66107e53660046148ad565b611930565b3480156107f657600080fd5b50600d5461048b906001600160a01b031681565b34801561081657600080fd5b5060195461060890610100900460ff1681565b34801561083557600080fd5b506105a6610844366004614ae2565b611a47565b34801561085557600080fd5b50610608610864366004614ae2565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561088e57600080fd5b506019546106089062010000900460ff1681565b3480156108ae57600080fd5b506104be611c91565b3480156108c357600080fd5b506105a66108d2366004614b3a565b611d0a565b3480156108e357600080fd5b506106086108f2366004614ae2565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561091c57600080fd5b506104be61092b366004614ae2565b611d8f565b34801561093c57600080fd5b5061095061094b366004614ae2565b611e18565b60405161049f9493929190614b68565b34801561096c57600080fd5b506105a6611eb9565b34801561098157600080fd5b506105a6610990366004614b3a565b611f78565b3480156109a157600080fd5b506104be612119565b3480156109b657600080fd5b506104be6109c5366004614ae2565b6001600160a01b031660009081526001602052604090205490565b3480156109ec57600080fd5b506105a6612134565b348015610a0157600080fd5b506105a6610a10366004614b3a565b612212565b348015610a2157600080fd5b506000546001600160a01b031661048b565b348015610a3f57600080fd5b506106086123c6565b348015610a5457600080fd5b506105a6612441565b348015610a6957600080fd5b5060408051808201909152600681527f244e4f44414300000000000000000000000000000000000000000000000000006020820152610579565b348015610aaf57600080fd5b506105a6612646565b348015610ac457600080fd5b50610608610ad33660046147b0565b6126be565b348015610ae457600080fd5b506104be610af3366004614ae2565b6126cb565b348015610b0457600080fd5b50601c546106089060ff1681565b348015610b1e57600080fd5b506104be601b5481565b348015610b3457600080fd5b506105a6610b43366004614ae2565b612717565b348015610b5457600080fd5b50610608610b63366004614ae2565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610b8d57600080fd5b50600b54610bce9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161049f565b348015610c0f57600080fd5b506105a6610c1e366004614782565b6127c4565b348015610c2f57600080fd5b506105a6610c3e366004614833565b612832565b348015610c4f57600080fd5b506105a6610c5e366004614782565b6128c7565b348015610c6f57600080fd5b506105a6610c7e366004614782565b612936565b348015610c8f57600080fd5b506104be610c9e366004614833565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610cd557600080fd5b506105a6610ce4366004614bc0565b6129c3565b348015610cf557600080fd5b506104be60155481565b348015610d0b57600080fd5b506105a6610d1a366004614bde565b612a4a565b348015610d2b57600080fd5b506105a6610d3a366004614ae2565b612ba8565b348015610d4b57600080fd5b506105a6610d5a36600461472e565b612f63565b348015610d6b57600080fd5b506019546106089060ff1681565b348015610d8557600080fd5b506104be610bb881565b348015610d9b57600080fd5b506104be6130ae565b348015610db057600080fd5b50600e54600f54610dcb916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161049f565b348015610df757600080fd5b5060145461060890610100900460ff1681565b348015610e1657600080fd5b50610608610e25366004614ae2565b613111565b6000546001600160a01b03163314610e895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600b805461ffff8681167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000086831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000858316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16176601000000000000918416919091021790558082610f318587614c95565b610f3b9190614c95565b610f459190614c95565b600b805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff90921691909117905550505050565b6000546001600160a01b03163314610fe55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b60968110156110365760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610e80565b6019546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561109c57600080fd5b505af11580156110b0573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906111129086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b0316331461117e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b61118981600a614d9f565b6111939083614dab565b6012546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b1580156111fa57600080fd5b505af115801561120e573d6000803e3d6000fd5b50505050505050565b60006112256012600a614dca565b6011546112329190614dd9565b905090565b60006009546000141561124957600080fd5b5060095490565b6000546001600160a01b031633146112aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b601c805460ff1916911515919091179055565b6000546001600160a01b031633146113175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b038116301480159061133957506001600160a01b0382163014155b80156113575750816001600160a01b0316816001600160a01b031614155b61136057600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611426576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611420908490614e14565b90915550505b6114318484846131a0565b90505b9392505050565b6000546001600160a01b031633146114955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6103e86009546114a59190614dd9565b81836009546114b49190614dab565b6114be9190614dd9565b10156115325760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610e80565b80826009546115419190614dab565b61154b9190614dd9565b6011555050565b80518251146115a35760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e80565b60005b82518160ff16101561166757818160ff16815181106115c7576115c7614e2b565b60200260200101516115ee336001600160a01b031660009081526001602052604090205490565b10156115f957600080fd5b61165433848360ff168151811061161257611612614e2b565b60200260200101516012600a6116289190614dca565b858560ff168151811061163d5761163d614e2b565b602002602001015161164f9190614dab565b6131a0565b508061165f81614e5a565b9150506115a6565b505050565b6000546001600160a01b031633146116c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6019546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561174457600080fd5b505af1158015611758573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146117bc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401611082565b6000546001600160a01b031633146118695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b83856009546118789190614dab565b6118829190614dd9565b6017556009548290611895908590614dab565b61189f9190614dd9565b60185560155550505050565b6000546001600160a01b031633146119055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461198a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6103e860095461199a9190614dd9565b81836009546119a99190614dab565b6119b39190614dd9565b1015611a275760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e80565b8082600954611a369190614dab565b611a409190614dd9565b6010555050565b6000546001600160a01b03163314611aa15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b038116611b1d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e80565b6001600160a01b03811661dead1415611b9e5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e80565b600080546001600160a01b039081168252600560208181526040808520805460ff1990811690915585548516865260078084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611c3957600080546001600160a01b03168082526001602052604090912054611c37919083906131a0565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601960039054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190614e7a565b6000546001600160a01b03163314611d645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6012546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa158015611df4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190614e7a565b6012546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa158015611e82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eaa9190810190614ef7565b93509350935093509193509193565b6000546001600160a01b03163314611f135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f6357600080fd5b505af193505050508015611f75575060015b50565b6000546001600160a01b03163314611fd25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b0382163014801590611ff95750600d546001600160a01b03838116911614155b61200257600080fd5b6001600160a01b0382166000908152600760205260409020805460ff191682158015919091179091556120b3576012546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b15801561209757600080fd5b505af11580156120ab573d6000803e3d6000fd5b505050505050565b6012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e9060440161207d565b5050565b60006121276012600a614dca565b6010546112329190614dd9565b6000546001600160a01b0316331461218e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260079091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461226c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b806122e4576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d19060440161207d565b6003541561234b576203f480600354426122fe9190614e14565b1161234b5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610e80565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d19060440161207d565b600080546001600160a01b031633146124215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b600c5461243b9030906001600160a01b03166000196135d6565b50600190565b6000546001600160a01b0316331461249b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b601954610100900460ff16156124f35760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e80565b60195462010000900460ff1661254b5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e80565b601954630100000090046001600160a01b031661259357601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526012606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561261f57600080fd5b505af1925050508015612630575060015b506019805461ff00191661010017905542601a55565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b1580156126a457600080fd5b505af11580156126b8573d6000803e3d6000fd5b50505050565b60006114343384846131a0565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611dd7565b6000546001600160a01b031633146127715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6019546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611082565b6000546001600160a01b0316331461281e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b620b71b0811061282d57600080fd5b601355565b6000546001600160a01b0316331461288c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b600e80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155600f8054929093169116179055565b6000546001600160a01b031633146129215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6201518081111561293157600080fd5b601b55565b806129445750601354612953565b60135481101561295357600080fd5b6012546040517fa9e732bb000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063a9e732bb90602401600060405180830381600087803b1580156129b257600080fd5b505af1925050508015612115575050565b6000546001600160a01b03163314612a1d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6014805461ff00191661010093151593909302929092179091556019805460ff1916911515919091179055565b81518351148015612a5c575080518251145b612aa85760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e80565b60005b83518160ff1610156126b857818160ff1681518110612acc57612acc614e2b565b6020026020010151838260ff1681518110612ae957612ae9614e2b565b6020026020010151600954612afe9190614dab565b612b089190614dd9565b336000908152600160205260409020541015612b2357600080fd5b612b9533858360ff1681518110612b3c57612b3c614e2b565b6020026020010151848460ff1681518110612b5957612b59614e2b565b6020026020010151868560ff1681518110612b7657612b76614e2b565b6020026020010151600954612b8b9190614dab565b61164f9190614dd9565b5080612ba081614e5a565b915050612aab565b6000546001600160a01b03163314612c025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6b9190614fa4565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdc9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d639190614fa4565b90506001600160a01b038116612f0157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd59190614fa4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e469190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecf9190614fa4565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612f2a565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556116679030906000196135d6565b6000546001600160a01b03163314612fbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6107d08461ffff1611158015612fd957506107d08361ffff1611155b8015612feb57506107d08261ffff1611155b8015612ffd5750610bb88161ffff1611155b61300657600080fd5b600a805461ffff9586167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000094861694909402939093177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000928516929092027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff169190911766010000000000009190931602919091179055565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa158015611ce6573d6000803e3d6000fd5b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa15801561317c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190614fc1565b60006001600160a01b03841661321e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e80565b6001600160a01b03831661329a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e80565b600082116133105760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e80565b61331a848461372e565b1561357657601954610100900460ff166133765760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e80565b6001600160a01b03841660009081526002602052604090205460ff16806133b557506001600160a01b03831660009081526002602052604090205460ff165b15613479576001600160a01b03841660009081526006602052604090205460ff161580156133fc57506001600160a01b03831660009081526006602052604090205460ff16155b15613479576010548211156134795760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e80565b600c546001600160a01b038481169116148015906134b057506001600160a01b03831660009081526002602052604090205460ff16155b15613576576001600160a01b03831660009081526006602052604090205460ff1661357657601154826134f8856001600160a01b031660009081526001602052604090205490565b6135029190614fde565b11156135765760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e80565b6001600160a01b03841660009081526005602052604090205460019060ff16806135b857506001600160a01b03841660009081526005602052604090205460ff165b156135c1575060005b6135cd858585846137ff565b95945050505050565b6001600160a01b0383166136515760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e80565b6001600160a01b0382166136cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e80565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0384811691161480159061375b57506000546001600160a01b03838116911614155b801561377257506000546001600160a01b03163214155b801561379757506001600160a01b03821660009081526008602052604090205460ff16155b80156137bc57506001600160a01b03831660009081526008602052604090205460ff16155b80156137d357506001600160a01b03821661dead14155b80156137e757506001600160a01b03821615155b8015611434575050506001600160a01b031630141590565b60195460009062010000900460ff166138ad5761381c8585613aeb565b60195462010000900460ff1615801561383a575061383a858561372e565b156138ad5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610e80565b6138b7858561372e565b1561396b576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613954575060408051601f3d908101601f1916820190925261395191810190614fc1565b60015b61395d57600080fd5b90508061396957600080fd5b505b60145460ff161561398857613981858585613cfc565b9050613ae3565b6001600160a01b038516600090815260016020526040812080548592906139b0908490614e14565b90915550506001600160a01b03841660009081526002602052604090205460ff1615613a435760145460ff161580156139f05750601454610100900460ff165b15613a435742601554601654613a069190614fde565b1015613a4357306000908152600160205260409020546017548110613a41576018548110613a3357506018545b613a3c81613db1565b426016555b505b828215613a5857613a558686866142e0565b90505b6001600160a01b03851660009081526001602052604081208054839290613a80908490614fde565b90915550613a90905086866144cc565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ad591815260200190565b60405180910390a360019150505b949350505050565b60195462010000900460ff1615613b6a5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e80565b613b74828261372e565b158015613b8e5750600d546001600160a01b038281169116145b15612115576001600160a01b038083166000908152600860205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017908190556301000000900416613c2357601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b0316613c53576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca357600080fd5b505af1925050508015613cb4575060015b506014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260016020526040812080548391908390613d26908490614e14565b90915550506001600160a01b03831660009081526001602052604081208054849290613d53908490614fde565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d9f91815260200190565b60405180910390a35060019392505050565b6014805460ff191660011790556040805160a081018252600b5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000900490911660808201819052613e2257506142d3565b306000908152600460209081526040808320600c546001600160a01b0316845290915290205460001914613e7b57306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836020015161ffff1685613e9c9190614dab565b613ea69190614dd9565b613eb09190614dd9565b90506000613ebe8285614e14565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613ef857613ef8614e2b565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613f6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8e9190614fa4565b81600181518110613fa157613fa1614e2b565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614000908590600090869030904290600401614ff6565b600060405180830381600087803b15801561401a57600080fd5b505af115801561402e573d6000803e3d6000fd5b50479250600091508490506140438684614dab565b61404d9190614dd9565b9050841561413e57600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156140dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141019190615067565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6141488183614e14565b91508560200151866080018181516141609190615095565b61ffff908116909152608088015188516000935090821691614183911685614dab565b61418d9190614dd9565b90506000876080015161ffff16886060015161ffff16856141ae9190614dab565b6141b89190614dd9565b905060006141c68284614fde565b6141d09086614e14565b9050601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561422257600080fd5b505af193505050508015614234575060015b50606089015161ffff161561427f57600f546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561427d573d6000803e3d6000fd5b505b604089015161ffff16156142c957600e546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156142c7573d6000803e3d6000fd5b505b5050505050505050505b506014805460ff19169055565b6001600160a01b038316600090815260026020526040812054819060ff16156143105750600a5461ffff16614428565b6001600160a01b03841660009081526002602052604090205460ff1615614417576019546040517f0f3a325f0000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152630100000090920490911690630f3a325f90602401602060405180830381865afa15801561439c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c09190614fc1565b80156143da575042601b54601a546143d89190614fde565b115b80156143e85750601c5460ff165b156144045750600a546601000000000000900461ffff16614428565b50600a5462010000900461ffff16614428565b50600a54640100000000900461ffff165b806144365782915050611434565b60006127106144458386614dab565b61444f9190614dd9565b30600090815260016020526040812080549293508392909190614473908490614fde565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36144c28185614e14565b9695505050505050565b6001600160a01b03821660009081526007602052604090205460ff16614576576012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561456357600080fd5b505af1925050508015614574575060015b505b6001600160a01b03811660009081526007602052604090205460ff16614620576012546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561460d57600080fd5b505af192505050801561461e575060015b505b60195460ff1615612115576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916146799160040190815260200190565b600060405180830381600087803b15801561469357600080fd5b505af19250505080156146a4575060015b612115575050565b60005b838110156146c75781810151838201526020016146af565b838111156126b85750506000910152565b600081518084526146f08160208601602086016146ac565b601f01601f19169290920160200192915050565b60208152600061143460208301846146d8565b803561ffff8116811461472957600080fd5b919050565b6000806000806080858703121561474457600080fd5b61474d85614717565b935061475b60208601614717565b925061476960408601614717565b915061477760608601614717565b905092959194509250565b60006020828403121561479457600080fd5b5035919050565b6001600160a01b0381168114611f7557600080fd5b600080604083850312156147c357600080fd5b82356147ce8161479b565b946020939093013593505050565b6000806000606084860312156147f157600080fd5b505081359360208301359350604090920135919050565b8015158114611f7557600080fd5b60006020828403121561482857600080fd5b813561143481614808565b6000806040838503121561484657600080fd5b82356148518161479b565b915060208301356148618161479b565b809150509250929050565b60008060006060848603121561488157600080fd5b833561488c8161479b565b9250602084013561489c8161479b565b929592945050506040919091013590565b600080604083850312156148c057600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614927576149276148cf565b604052919050565b600067ffffffffffffffff821115614949576149496148cf565b5060051b60200190565b600082601f83011261496457600080fd5b813560206149796149748361492f565b6148fe565b82815260059290921b8401810191818101908684111561499857600080fd5b8286015b848110156149bc5780356149af8161479b565b835291830191830161499c565b509695505050505050565b600082601f8301126149d857600080fd5b813560206149e86149748361492f565b82815260059290921b84018101918181019086841115614a0757600080fd5b8286015b848110156149bc5780358352918301918301614a0b565b60008060408385031215614a3557600080fd5b823567ffffffffffffffff80821115614a4d57600080fd5b614a5986838701614953565b93506020850135915080821115614a6f57600080fd5b50614a7c858286016149c7565b9150509250929050565b60008060008060808587031215614a9c57600080fd5b8435614aa781614808565b93506020850135614ab781614808565b92506040850135614ac781614808565b91506060850135614ad781614808565b939692955090935050565b600060208284031215614af457600080fd5b81356114348161479b565b600080600080600060a08688031215614b1757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215614b4d57600080fd5b8235614b588161479b565b9150602083013561486181614808565b608081526000614b7b60808301876146d8565b8281036020840152614b8d81876146d8565b90508281036040840152614ba181866146d8565b90508281036060840152614bb581856146d8565b979650505050505050565b60008060408385031215614bd357600080fd5b8235614b5881614808565b600080600060608486031215614bf357600080fd5b833567ffffffffffffffff80821115614c0b57600080fd5b614c1787838801614953565b94506020860135915080821115614c2d57600080fd5b614c39878388016149c7565b93506040860135915080821115614c4f57600080fd5b50614c5c868287016149c7565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818516808303821115614cb257614cb2614c66565b01949350505050565b600181815b80851115614cf6578160001904821115614cdc57614cdc614c66565b80851615614ce957918102915b93841c9390800290614cc0565b509250929050565b600082614d0d5750600161111e565b81614d1a5750600061111e565b8160018114614d305760028114614d3a57614d56565b600191505061111e565b60ff841115614d4b57614d4b614c66565b50506001821b61111e565b5060208310610133831016604e8410600b8410161715614d79575081810a61111e565b614d838383614cbb565b8060001904821115614d9757614d97614c66565b029392505050565b60006114348383614cfe565b6000816000190483118215151615614dc557614dc5614c66565b500290565b600061143460ff841683614cfe565b600082614e0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015614e2657614e26614c66565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614e7157614e71614c66565b60010192915050565b600060208284031215614e8c57600080fd5b5051919050565b600082601f830112614ea457600080fd5b815167ffffffffffffffff811115614ebe57614ebe6148cf565b614ed16020601f19601f840116016148fe565b818152846020838601011115614ee657600080fd5b613ae38260208301602087016146ac565b60008060008060808587031215614f0d57600080fd5b845167ffffffffffffffff80821115614f2557600080fd5b614f3188838901614e93565b95506020870151915080821115614f4757600080fd5b614f5388838901614e93565b94506040870151915080821115614f6957600080fd5b614f7588838901614e93565b93506060870151915080821115614f8b57600080fd5b50614f9887828801614e93565b91505092959194509250565b600060208284031215614fb657600080fd5b81516114348161479b565b600060208284031215614fd357600080fd5b815161143481614808565b60008219821115614ff157614ff1614c66565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156150465784516001600160a01b031683529383019391830191600101615021565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561507c57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156150b0576150b0614c66565b03939250505056fea2646970667358221220af5724edf0f50657d0e65a3be2c7f1dd48aa207f668ebb647d1b6288e6fe499b64736f6c634300080b0033
0x60806040526000600355620000176012600a62000812565b62000027906305f5e1006200082a565b600981905560408051608080820183526105148083526020808401829052838501919091526109c4606093840152600a80546001600160401b0319166709c4051405140514179055835160a081018552600f8082526002828401526004828701526010948201949094526025920191909152600b80546001600160501b0319166825001000040002000f179055825180840190935273f0514944cc02706ec364fca78e75b0c7e19ce85d80845273ed56a7f78b830518ff00808e2baff0f4bdc722ed93909101839052600e80546001600160a01b0319908116909217905581541690911790556103e8906200011e9060056200082a565b6200012a91906200084c565b6010556103e860095460196200014191906200082a565b6200014d91906200084c565b601155620493e06013556014805461ff0019169055600a601555600954612710906200017b9060056200082a565b6200018791906200084c565b60175561271060095460146200019e91906200082a565b620001aa91906200084c565b6018556019805462ffffff1916905562015180601b55601c805460ff19166001908117909155600954336000818152602093909352604083209190915581546001600160a01b03191617905560384614156200023157600c80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556003601555620002b8565b46606114156200026c57600c80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556003601555620002b8565b46600114806200027c5750466004145b15620002b357600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600a601555620002b8565b600080fd5b600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033291906200086f565b6001600160a01b031663c9c65396600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000394573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ba91906200086f565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000407573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042d91906200086f565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260409020805460ff19166001179055600c546200047991339116600019620005d1565b600c54620004959030906001600160a01b0316600019620005d1565b600080546001600160a01b0390811682526005602090815260408084208054600160ff199182168117909255308087528387208054831684179055865486168752600785528387208054831684179055600d549095168652828620805482168317905593855281852080548516821790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548516821790558480527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df80549094161790925560095491519182523392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600080546040516001600160a01b0390911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36200089a565b6001600160a01b038316620006395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200069c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000630565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000754578160001904821115620007385762000738620006fd565b808516156200074657918102915b93841c939080029062000718565b509250929050565b6000826200076d575060016200080c565b816200077c575060006200080c565b8160018114620007955760028114620007a057620007c0565b60019150506200080c565b60ff841115620007b457620007b4620006fd565b50506001821b6200080c565b5060208310610133831016604e8410600b8410161715620007e5575081810a6200080c565b620007f1838362000713565b8060001904821115620008085762000808620006fd565b0290505b92915050565b60006200082360ff8416836200075c565b9392505050565b6000816000190483118215151615620008475762000847620006fd565b500290565b6000826200086a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200088257600080fd5b81516001600160a01b03811681146200082357600080fd5b6150ee80620008aa6000396000f3fe6080604052600436106104695760003560e01c80636b639a2511610243578063c705c56911610143578063e8a0e3f9116100bb578063f2e4109c1161008a578063f94aa1b41161006f578063f94aa1b414610da4578063fdb78c0e14610deb578063fe575a8714610e0a57600080fd5b8063f2e4109c14610d79578063f7c245ea14610d8f57600080fd5b8063e8a0e3f914610cff578063eafb5a3c14610d1f578063ecfc021f14610d3f578063efe7dc9014610d5f57600080fd5b8063db40e30211610112578063dd62ed3e116100f7578063dd62ed3e14610c83578063dea528a114610cc9578063e4fcfd1814610ce957600080fd5b8063db40e30214610c43578063dbc1d6ca14610c6357600080fd5b8063c705c56914610b48578063cf84770614610b81578063d0b1449d14610c03578063d3f6a15714610c2357600080fd5b806395d89b41116101d6578063b1b08f71116101a5578063b3d514fb1161018a578063b3d514fb14610722578063b8e0e96d14610b12578063c6a276c214610b2857600080fd5b8063b1b08f7114610722578063b26e0beb14610af857600080fd5b806395d89b4114610a5d5780639dc6761514610aa3578063a9059cbb14610ab8578063ab5cb5a614610ad857600080fd5b806380c581d11161021257806380c581d1146109f5578063893d20e814610a155780638a63bd9b14610a335780638a8c523c14610a4857600080fd5b80636b639a25146109755780636ebd00781461099557806370a08231146109aa578063715018a6146109e057600080fd5b80632b28fc7a116103695780634fb2e45d116102e1578063590ffdce116102b05780636372c68f116102955780636372c68f146109105780636386c1c7146109305780636ab86dc11461096057600080fd5b8063590ffdce146108b75780635cce86cd146108d757600080fd5b80634fb2e45d146108295780634fbee1931461084957806350a8e0161461088257806355dbc369146108a257600080fd5b806334cd8260116103385780633f3cf56c1161031d5780633f3cf56c146107ca578063452ed4f1146107ea5780634ada218b1461080a57600080fd5b806334cd82601461078a57806336fddb04146107aa57600080fd5b80632b28fc7a146107225780632e8fa82114610738578063313ce5671461074e57806333251a0b1461076a57600080fd5b806309a8f179116103fc578063218950bc116103cb57806326003957116103b057806326003957146106c25780632610eaca146106e257806329dd87981461070257600080fd5b8063218950bc1461068257806323b872dd146106a257600080fd5b806309a8f179146106185780630fa604e41461063857806318160ddd1461064d5780631de3b1c71461066257600080fd5b80630712d165116104385780630712d165146105865780630758d924146105a857806309231602146105c8578063095ea7b3146105e857600080fd5b806303fd2a45146104755780630445b667146104a8578063069d955f146104cc57806306fdde031461053757600080fd5b3661047057005b600080fd5b34801561048157600080fd5b5061048b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104b457600080fd5b506104be60175481565b60405190815260200161049f565b3480156104d857600080fd5b50600a546105099061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161049f565b34801561054357600080fd5b5060408051808201909152601781527f4e6f64652041676772656761746f72204361706974616c00000000000000000060208201525b60405161049f9190614704565b34801561059257600080fd5b506105a66105a136600461472e565b610e2a565b005b3480156105b457600080fd5b50600c5461048b906001600160a01b031681565b3480156105d457600080fd5b506105a66105e3366004614782565b610f8b565b3480156105f457600080fd5b506106086106033660046147b0565b6110b7565b604051901515815260200161049f565b34801561062457600080fd5b506105a66106333660046147dc565b611124565b34801561064457600080fd5b506104be611217565b34801561065957600080fd5b506104be611237565b34801561066e57600080fd5b506105a661067d366004614816565b611250565b34801561068e57600080fd5b506105a661069d366004614833565b6112bd565b3480156106ae57600080fd5b506106086106bd36600461486c565b6113c1565b3480156106ce57600080fd5b506105a66106dd3660046148ad565b61143b565b3480156106ee57600080fd5b506105a66106fd366004614a22565b611552565b34801561070e57600080fd5b506105a661071d366004614a86565b61166c565b34801561072e57600080fd5b506104be6107d081565b34801561074457600080fd5b506104be60185481565b34801561075a57600080fd5b506040516012815260200161049f565b34801561077657600080fd5b506105a6610785366004614ae2565b611762565b34801561079657600080fd5b506105a66107a5366004614aff565b61180f565b3480156107b657600080fd5b506105a66107c5366004614b3a565b6118ab565b3480156107d657600080fd5b506105a66107e53660046148ad565b611930565b3480156107f657600080fd5b50600d5461048b906001600160a01b031681565b34801561081657600080fd5b5060195461060890610100900460ff1681565b34801561083557600080fd5b506105a6610844366004614ae2565b611a47565b34801561085557600080fd5b50610608610864366004614ae2565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561088e57600080fd5b506019546106089062010000900460ff1681565b3480156108ae57600080fd5b506104be611c91565b3480156108c357600080fd5b506105a66108d2366004614b3a565b611d0a565b3480156108e357600080fd5b506106086108f2366004614ae2565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561091c57600080fd5b506104be61092b366004614ae2565b611d8f565b34801561093c57600080fd5b5061095061094b366004614ae2565b611e18565b60405161049f9493929190614b68565b34801561096c57600080fd5b506105a6611eb9565b34801561098157600080fd5b506105a6610990366004614b3a565b611f78565b3480156109a157600080fd5b506104be612119565b3480156109b657600080fd5b506104be6109c5366004614ae2565b6001600160a01b031660009081526001602052604090205490565b3480156109ec57600080fd5b506105a6612134565b348015610a0157600080fd5b506105a6610a10366004614b3a565b612212565b348015610a2157600080fd5b506000546001600160a01b031661048b565b348015610a3f57600080fd5b506106086123c6565b348015610a5457600080fd5b506105a6612441565b348015610a6957600080fd5b5060408051808201909152600681527f244e4f44414300000000000000000000000000000000000000000000000000006020820152610579565b348015610aaf57600080fd5b506105a6612646565b348015610ac457600080fd5b50610608610ad33660046147b0565b6126be565b348015610ae457600080fd5b506104be610af3366004614ae2565b6126cb565b348015610b0457600080fd5b50601c546106089060ff1681565b348015610b1e57600080fd5b506104be601b5481565b348015610b3457600080fd5b506105a6610b43366004614ae2565b612717565b348015610b5457600080fd5b50610608610b63366004614ae2565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610b8d57600080fd5b50600b54610bce9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161049f565b348015610c0f57600080fd5b506105a6610c1e366004614782565b6127c4565b348015610c2f57600080fd5b506105a6610c3e366004614833565b612832565b348015610c4f57600080fd5b506105a6610c5e366004614782565b6128c7565b348015610c6f57600080fd5b506105a6610c7e366004614782565b612936565b348015610c8f57600080fd5b506104be610c9e366004614833565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610cd557600080fd5b506105a6610ce4366004614bc0565b6129c3565b348015610cf557600080fd5b506104be60155481565b348015610d0b57600080fd5b506105a6610d1a366004614bde565b612a4a565b348015610d2b57600080fd5b506105a6610d3a366004614ae2565b612ba8565b348015610d4b57600080fd5b506105a6610d5a36600461472e565b612f63565b348015610d6b57600080fd5b506019546106089060ff1681565b348015610d8557600080fd5b506104be610bb881565b348015610d9b57600080fd5b506104be6130ae565b348015610db057600080fd5b50600e54600f54610dcb916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161049f565b348015610df757600080fd5b5060145461060890610100900460ff1681565b348015610e1657600080fd5b50610608610e25366004614ae2565b613111565b6000546001600160a01b03163314610e895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600b805461ffff8681167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000086831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000858316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16176601000000000000918416919091021790558082610f318587614c95565b610f3b9190614c95565b610f459190614c95565b600b805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff90921691909117905550505050565b6000546001600160a01b03163314610fe55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b60968110156110365760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610e80565b6019546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561109c57600080fd5b505af11580156110b0573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906111129086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b0316331461117e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b61118981600a614d9f565b6111939083614dab565b6012546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b1580156111fa57600080fd5b505af115801561120e573d6000803e3d6000fd5b50505050505050565b60006112256012600a614dca565b6011546112329190614dd9565b905090565b60006009546000141561124957600080fd5b5060095490565b6000546001600160a01b031633146112aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b601c805460ff1916911515919091179055565b6000546001600160a01b031633146113175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b038116301480159061133957506001600160a01b0382163014155b80156113575750816001600160a01b0316816001600160a01b031614155b61136057600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611426576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611420908490614e14565b90915550505b6114318484846131a0565b90505b9392505050565b6000546001600160a01b031633146114955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6103e86009546114a59190614dd9565b81836009546114b49190614dab565b6114be9190614dd9565b10156115325760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610e80565b80826009546115419190614dab565b61154b9190614dd9565b6011555050565b80518251146115a35760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e80565b60005b82518160ff16101561166757818160ff16815181106115c7576115c7614e2b565b60200260200101516115ee336001600160a01b031660009081526001602052604090205490565b10156115f957600080fd5b61165433848360ff168151811061161257611612614e2b565b60200260200101516012600a6116289190614dca565b858560ff168151811061163d5761163d614e2b565b602002602001015161164f9190614dab565b6131a0565b508061165f81614e5a565b9150506115a6565b505050565b6000546001600160a01b031633146116c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6019546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561174457600080fd5b505af1158015611758573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146117bc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401611082565b6000546001600160a01b031633146118695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b83856009546118789190614dab565b6118829190614dd9565b6017556009548290611895908590614dab565b61189f9190614dd9565b60185560155550505050565b6000546001600160a01b031633146119055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461198a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6103e860095461199a9190614dd9565b81836009546119a99190614dab565b6119b39190614dd9565b1015611a275760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e80565b8082600954611a369190614dab565b611a409190614dd9565b6010555050565b6000546001600160a01b03163314611aa15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b038116611b1d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e80565b6001600160a01b03811661dead1415611b9e5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e80565b600080546001600160a01b039081168252600560208181526040808520805460ff1990811690915585548516865260078084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611c3957600080546001600160a01b03168082526001602052604090912054611c37919083906131a0565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601960039054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190614e7a565b6000546001600160a01b03163314611d645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6012546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa158015611df4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190614e7a565b6012546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa158015611e82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eaa9190810190614ef7565b93509350935093509193509193565b6000546001600160a01b03163314611f135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f6357600080fd5b505af193505050508015611f75575060015b50565b6000546001600160a01b03163314611fd25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6001600160a01b0382163014801590611ff95750600d546001600160a01b03838116911614155b61200257600080fd5b6001600160a01b0382166000908152600760205260409020805460ff191682158015919091179091556120b3576012546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b15801561209757600080fd5b505af11580156120ab573d6000803e3d6000fd5b505050505050565b6012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e9060440161207d565b5050565b60006121276012600a614dca565b6010546112329190614dd9565b6000546001600160a01b0316331461218e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260079091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461226c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b806122e4576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d19060440161207d565b6003541561234b576203f480600354426122fe9190614e14565b1161234b5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610e80565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d19060440161207d565b600080546001600160a01b031633146124215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b600c5461243b9030906001600160a01b03166000196135d6565b50600190565b6000546001600160a01b0316331461249b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b601954610100900460ff16156124f35760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e80565b60195462010000900460ff1661254b5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e80565b601954630100000090046001600160a01b031661259357601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526012606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561261f57600080fd5b505af1925050508015612630575060015b506019805461ff00191661010017905542601a55565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b1580156126a457600080fd5b505af11580156126b8573d6000803e3d6000fd5b50505050565b60006114343384846131a0565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611dd7565b6000546001600160a01b031633146127715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6019546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611082565b6000546001600160a01b0316331461281e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b620b71b0811061282d57600080fd5b601355565b6000546001600160a01b0316331461288c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b600e80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155600f8054929093169116179055565b6000546001600160a01b031633146129215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6201518081111561293157600080fd5b601b55565b806129445750601354612953565b60135481101561295357600080fd5b6012546040517fa9e732bb000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063a9e732bb90602401600060405180830381600087803b1580156129b257600080fd5b505af1925050508015612115575050565b6000546001600160a01b03163314612a1d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6014805461ff00191661010093151593909302929092179091556019805460ff1916911515919091179055565b81518351148015612a5c575080518251145b612aa85760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e80565b60005b83518160ff1610156126b857818160ff1681518110612acc57612acc614e2b565b6020026020010151838260ff1681518110612ae957612ae9614e2b565b6020026020010151600954612afe9190614dab565b612b089190614dd9565b336000908152600160205260409020541015612b2357600080fd5b612b9533858360ff1681518110612b3c57612b3c614e2b565b6020026020010151848460ff1681518110612b5957612b59614e2b565b6020026020010151868560ff1681518110612b7657612b76614e2b565b6020026020010151600954612b8b9190614dab565b61164f9190614dd9565b5080612ba081614e5a565b915050612aab565b6000546001600160a01b03163314612c025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6b9190614fa4565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdc9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d639190614fa4565b90506001600160a01b038116612f0157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd59190614fa4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e469190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecf9190614fa4565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612f2a565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556116679030906000196135d6565b6000546001600160a01b03163314612fbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e80565b6107d08461ffff1611158015612fd957506107d08361ffff1611155b8015612feb57506107d08261ffff1611155b8015612ffd5750610bb88161ffff1611155b61300657600080fd5b600a805461ffff9586167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000094861694909402939093177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000928516929092027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff169190911766010000000000009190931602919091179055565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa158015611ce6573d6000803e3d6000fd5b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa15801561317c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190614fc1565b60006001600160a01b03841661321e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e80565b6001600160a01b03831661329a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e80565b600082116133105760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e80565b61331a848461372e565b1561357657601954610100900460ff166133765760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e80565b6001600160a01b03841660009081526002602052604090205460ff16806133b557506001600160a01b03831660009081526002602052604090205460ff165b15613479576001600160a01b03841660009081526006602052604090205460ff161580156133fc57506001600160a01b03831660009081526006602052604090205460ff16155b15613479576010548211156134795760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e80565b600c546001600160a01b038481169116148015906134b057506001600160a01b03831660009081526002602052604090205460ff16155b15613576576001600160a01b03831660009081526006602052604090205460ff1661357657601154826134f8856001600160a01b031660009081526001602052604090205490565b6135029190614fde565b11156135765760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e80565b6001600160a01b03841660009081526005602052604090205460019060ff16806135b857506001600160a01b03841660009081526005602052604090205460ff165b156135c1575060005b6135cd858585846137ff565b95945050505050565b6001600160a01b0383166136515760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e80565b6001600160a01b0382166136cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e80565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0384811691161480159061375b57506000546001600160a01b03838116911614155b801561377257506000546001600160a01b03163214155b801561379757506001600160a01b03821660009081526008602052604090205460ff16155b80156137bc57506001600160a01b03831660009081526008602052604090205460ff16155b80156137d357506001600160a01b03821661dead14155b80156137e757506001600160a01b03821615155b8015611434575050506001600160a01b031630141590565b60195460009062010000900460ff166138ad5761381c8585613aeb565b60195462010000900460ff1615801561383a575061383a858561372e565b156138ad5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610e80565b6138b7858561372e565b1561396b576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613954575060408051601f3d908101601f1916820190925261395191810190614fc1565b60015b61395d57600080fd5b90508061396957600080fd5b505b60145460ff161561398857613981858585613cfc565b9050613ae3565b6001600160a01b038516600090815260016020526040812080548592906139b0908490614e14565b90915550506001600160a01b03841660009081526002602052604090205460ff1615613a435760145460ff161580156139f05750601454610100900460ff165b15613a435742601554601654613a069190614fde565b1015613a4357306000908152600160205260409020546017548110613a41576018548110613a3357506018545b613a3c81613db1565b426016555b505b828215613a5857613a558686866142e0565b90505b6001600160a01b03851660009081526001602052604081208054839290613a80908490614fde565b90915550613a90905086866144cc565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ad591815260200190565b60405180910390a360019150505b949350505050565b60195462010000900460ff1615613b6a5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e80565b613b74828261372e565b158015613b8e5750600d546001600160a01b038281169116145b15612115576001600160a01b038083166000908152600860205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017908190556301000000900416613c2357601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b0316613c53576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca357600080fd5b505af1925050508015613cb4575060015b506014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260016020526040812080548391908390613d26908490614e14565b90915550506001600160a01b03831660009081526001602052604081208054849290613d53908490614fde565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d9f91815260200190565b60405180910390a35060019392505050565b6014805460ff191660011790556040805160a081018252600b5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000900490911660808201819052613e2257506142d3565b306000908152600460209081526040808320600c546001600160a01b0316845290915290205460001914613e7b57306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836020015161ffff1685613e9c9190614dab565b613ea69190614dd9565b613eb09190614dd9565b90506000613ebe8285614e14565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613ef857613ef8614e2b565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613f6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8e9190614fa4565b81600181518110613fa157613fa1614e2b565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614000908590600090869030904290600401614ff6565b600060405180830381600087803b15801561401a57600080fd5b505af115801561402e573d6000803e3d6000fd5b50479250600091508490506140438684614dab565b61404d9190614dd9565b9050841561413e57600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156140dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141019190615067565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6141488183614e14565b91508560200151866080018181516141609190615095565b61ffff908116909152608088015188516000935090821691614183911685614dab565b61418d9190614dd9565b90506000876080015161ffff16886060015161ffff16856141ae9190614dab565b6141b89190614dd9565b905060006141c68284614fde565b6141d09086614e14565b9050601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561422257600080fd5b505af193505050508015614234575060015b50606089015161ffff161561427f57600f546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561427d573d6000803e3d6000fd5b505b604089015161ffff16156142c957600e546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156142c7573d6000803e3d6000fd5b505b5050505050505050505b506014805460ff19169055565b6001600160a01b038316600090815260026020526040812054819060ff16156143105750600a5461ffff16614428565b6001600160a01b03841660009081526002602052604090205460ff1615614417576019546040517f0f3a325f0000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152630100000090920490911690630f3a325f90602401602060405180830381865afa15801561439c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c09190614fc1565b80156143da575042601b54601a546143d89190614fde565b115b80156143e85750601c5460ff165b156144045750600a546601000000000000900461ffff16614428565b50600a5462010000900461ffff16614428565b50600a54640100000000900461ffff165b806144365782915050611434565b60006127106144458386614dab565b61444f9190614dd9565b30600090815260016020526040812080549293508392909190614473908490614fde565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36144c28185614e14565b9695505050505050565b6001600160a01b03821660009081526007602052604090205460ff16614576576012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561456357600080fd5b505af1925050508015614574575060015b505b6001600160a01b03811660009081526007602052604090205460ff16614620576012546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561460d57600080fd5b505af192505050801561461e575060015b505b60195460ff1615612115576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916146799160040190815260200190565b600060405180830381600087803b15801561469357600080fd5b505af19250505080156146a4575060015b612115575050565b60005b838110156146c75781810151838201526020016146af565b838111156126b85750506000910152565b600081518084526146f08160208601602086016146ac565b601f01601f19169290920160200192915050565b60208152600061143460208301846146d8565b803561ffff8116811461472957600080fd5b919050565b6000806000806080858703121561474457600080fd5b61474d85614717565b935061475b60208601614717565b925061476960408601614717565b915061477760608601614717565b905092959194509250565b60006020828403121561479457600080fd5b5035919050565b6001600160a01b0381168114611f7557600080fd5b600080604083850312156147c357600080fd5b82356147ce8161479b565b946020939093013593505050565b6000806000606084860312156147f157600080fd5b505081359360208301359350604090920135919050565b8015158114611f7557600080fd5b60006020828403121561482857600080fd5b813561143481614808565b6000806040838503121561484657600080fd5b82356148518161479b565b915060208301356148618161479b565b809150509250929050565b60008060006060848603121561488157600080fd5b833561488c8161479b565b9250602084013561489c8161479b565b929592945050506040919091013590565b600080604083850312156148c057600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614927576149276148cf565b604052919050565b600067ffffffffffffffff821115614949576149496148cf565b5060051b60200190565b600082601f83011261496457600080fd5b813560206149796149748361492f565b6148fe565b82815260059290921b8401810191818101908684111561499857600080fd5b8286015b848110156149bc5780356149af8161479b565b835291830191830161499c565b509695505050505050565b600082601f8301126149d857600080fd5b813560206149e86149748361492f565b82815260059290921b84018101918181019086841115614a0757600080fd5b8286015b848110156149bc5780358352918301918301614a0b565b60008060408385031215614a3557600080fd5b823567ffffffffffffffff80821115614a4d57600080fd5b614a5986838701614953565b93506020850135915080821115614a6f57600080fd5b50614a7c858286016149c7565b9150509250929050565b60008060008060808587031215614a9c57600080fd5b8435614aa781614808565b93506020850135614ab781614808565b92506040850135614ac781614808565b91506060850135614ad781614808565b939692955090935050565b600060208284031215614af457600080fd5b81356114348161479b565b600080600080600060a08688031215614b1757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215614b4d57600080fd5b8235614b588161479b565b9150602083013561486181614808565b608081526000614b7b60808301876146d8565b8281036020840152614b8d81876146d8565b90508281036040840152614ba181866146d8565b90508281036060840152614bb581856146d8565b979650505050505050565b60008060408385031215614bd357600080fd5b8235614b5881614808565b600080600060608486031215614bf357600080fd5b833567ffffffffffffffff80821115614c0b57600080fd5b614c1787838801614953565b94506020860135915080821115614c2d57600080fd5b614c39878388016149c7565b93506040860135915080821115614c4f57600080fd5b50614c5c868287016149c7565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818516808303821115614cb257614cb2614c66565b01949350505050565b600181815b80851115614cf6578160001904821115614cdc57614cdc614c66565b80851615614ce957918102915b93841c9390800290614cc0565b509250929050565b600082614d0d5750600161111e565b81614d1a5750600061111e565b8160018114614d305760028114614d3a57614d56565b600191505061111e565b60ff841115614d4b57614d4b614c66565b50506001821b61111e565b5060208310610133831016604e8410600b8410161715614d79575081810a61111e565b614d838383614cbb565b8060001904821115614d9757614d97614c66565b029392505050565b60006114348383614cfe565b6000816000190483118215151615614dc557614dc5614c66565b500290565b600061143460ff841683614cfe565b600082614e0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015614e2657614e26614c66565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614e7157614e71614c66565b60010192915050565b600060208284031215614e8c57600080fd5b5051919050565b600082601f830112614ea457600080fd5b815167ffffffffffffffff811115614ebe57614ebe6148cf565b614ed16020601f19601f840116016148fe565b818152846020838601011115614ee657600080fd5b613ae38260208301602087016146ac565b60008060008060808587031215614f0d57600080fd5b845167ffffffffffffffff80821115614f2557600080fd5b614f3188838901614e93565b95506020870151915080821115614f4757600080fd5b614f5388838901614e93565b94506040870151915080821115614f6957600080fd5b614f7588838901614e93565b93506060870151915080821115614f8b57600080fd5b50614f9887828801614e93565b91505092959194509250565b600060208284031215614fb657600080fd5b81516114348161479b565b600060208284031215614fd357600080fd5b815161143481614808565b60008219821115614ff157614ff1614c66565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156150465784516001600160a01b031683529383019391830191600101615021565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561507c57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156150b0576150b0614c66565b03939250505056fea2646970667358221220af5724edf0f50657d0e65a3be2c7f1dd48aa207f668ebb647d1b6288e6fe499b64736f6c634300080b0033