60806040526618de76816d8000600b553480156200001c57600080fd5b5060405162002096380380620020968339810160408190526200003f91620001e7565b6040518060400160405280600d81526020016c13dc9a5bdb8812d95e58d85c99609a1b815250604051806040016040528060028152602001614f4b60f01b81525081600290816200009191906200034b565b506003620000a082826200034b565b5050600160005550620000b333620000e2565b620000bd62000134565b600a805461ff0019166101001790556009620000da82826200034b565b505062000417565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000155733cc6cdda760b79bafa08df41ecfa224f810dceb6600162000157565b565b6001600160a01b0390911690637d3e3dbe81620001875782620001805750634420e48662000187565b5063a0af29035b8060e01b60005230600452826024526004600060446000806daaeb6d7670e522a718067333cd4e5af1620001c7578060005160e01c03620001c757600080fd5b5060006024525050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215620001fb57600080fd5b82516001600160401b03808211156200021357600080fd5b818501915085601f8301126200022857600080fd5b8151818111156200023d576200023d620001d1565b604051601f8201601f19908116603f01168101908382118183101715620002685762000268620001d1565b8160405282815288868487010111156200028157600080fd5b600093505b82841015620002a5578484018601518185018701529285019262000286565b600086848301015280965050505050505092915050565b600181811c90821680620002d157607f821691505b602082108103620002f257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034657600081815260208120601f850160051c81016020861015620003215750805b601f850160051c820191505b8181101562000342578281556001016200032d565b5050505b505050565b81516001600160401b03811115620003675762000367620001d1565b6200037f81620003788454620002bc565b84620002f8565b602080601f831160018114620003b757600084156200039e5750858301515b600019600386901b1c1916600185901b17855562000342565b600085815260208120601f198616915b82811015620003e857888601518255948401946001909101908401620003c7565b5085821015620004075787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611c6f80620004276000396000f3fe6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063b7c0b8e811610095578063e985e9c511610064578063e985e9c5146104be578063f2fde38b146104de578063fb796e6c146104fe578063fb9d09c81461051d57600080fd5b8063b7c0b8e81461044b578063b88d4fde1461046b578063c87b56dd1461047e578063e1b6d92e1461049e57600080fd5b806398710d1e116100d157806398710d1e146103e0578063a035b1fe146103f5578063a0bcfc7f1461040b578063a22cb4651461042b57600080fd5b80638da5cb5b1461038d57806391b7f5ed146103ab57806395d89b41146103cb57600080fd5b80633ccfd60b1161016f5780635e1c07461161013e5780635e1c0746146103235780636352211e1461033857806370a0823114610358578063715018a61461037857600080fd5b80633ccfd60b146102d157806342842e0e146102e65780635a862dcc146102f95780635b8ad4291461030e57600080fd5b8063095ea7b3116101ab578063095ea7b31461026c57806318160ddd1461028157806323b872dd146102a857806332cb6b0c146102bb57600080fd5b806301ffc9a7146101dd57806306fdde0314610212578063081812fc1461023457600080fd5b366101d857005b600080fd5b3480156101e957600080fd5b506101fd6101f8366004611641565b610530565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b50610227610582565b60405161020991906116ae565b34801561024057600080fd5b5061025461024f3660046116c1565b610614565b6040516001600160a01b039091168152602001610209565b61027f61027a3660046116f1565b610658565b005b34801561028d57600080fd5b5060015460005403600019015b604051908152602001610209565b61027f6102b636600461171b565b610681565b3480156102c757600080fd5b5061029a611d4c81565b3480156102dd57600080fd5b5061027f6106bc565b61027f6102f436600461171b565b610721565b34801561030557600080fd5b5061027f610756565b34801561031a57600080fd5b5061027f610845565b34801561032f57600080fd5b5061027f610861565b34801561034457600080fd5b506102546103533660046116c1565b61086b565b34801561036457600080fd5b5061029a610373366004611757565b610876565b34801561038457600080fd5b5061027f6108c5565b34801561039957600080fd5b506008546001600160a01b0316610254565b3480156103b757600080fd5b5061027f6103c63660046116c1565b6108d7565b3480156103d757600080fd5b506102276108e4565b3480156103ec57600080fd5b5061029a600181565b34801561040157600080fd5b5061029a600b5481565b34801561041757600080fd5b5061027f6104263660046117fe565b6108f3565b34801561043757600080fd5b5061027f610446366004611857565b610907565b34801561045757600080fd5b5061027f61046636600461188a565b61092b565b61027f6104793660046118a5565b61094d565b34801561048a57600080fd5b506102276104993660046116c1565b61098a565b3480156104aa57600080fd5b5061027f6104b93660046116f1565b610ab4565b3480156104ca57600080fd5b506101fd6104d9366004611921565b610b2a565b3480156104ea57600080fd5b5061027f6104f9366004611757565b610b58565b34801561050a57600080fd5b50600a546101fd90610100900460ff1681565b61027f61052b36600461194b565b610bce565b60006301ffc9a760e01b6001600160e01b03198316148061056157506380ac58cd60e01b6001600160e01b03198316145b8061057c5750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606002805461059190611975565b80601f01602080910402602001604051908101604052809291908181526020018280546105bd90611975565b801561060a5780601f106105df5761010080835404028352916020019161060a565b820191906000526020600020905b8154815290600101906020018083116105ed57829003601f168201915b5050505050905090565b600061061f82610d88565b61063c576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b81600a54610100900460ff16156106725761067281610dbd565b61067c8383610e01565b505050565b826001600160a01b03811633146106ab57600a54610100900460ff16156106ab576106ab33610dbd565b6106b6848484610e0d565b50505050565b6106c4610fa6565b476106f9730bb705c88bfd26e858ce7704c0d1716e31ff6e0660646106ea84603c6119c5565b6106f491906119dc565b611000565b61071e7341eb2b94dfe7163f5405402c826948405a5733a460646106ea8460286119c5565b50565b826001600160a01b038116331461074b57600a54610100900460ff161561074b5761074b33610dbd565b6106b6848484611119565b61075e610fa6565b6040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29060009082906370a0823190602401602060405180830381865afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d691906119fe565b9050801561083957604051632e1a7d4d60e01b8152600481018290526001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b15801561082057600080fd5b505af1158015610834573d6000803e3d6000fd5b505050505b6108416106bc565b5050565b61084d610fa6565b600a805460ff19811660ff90911615179055565b610869611134565b565b600061057c82611153565b60006001600160a01b03821661089f576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6108cd610fa6565b61086960006111df565b6108df610fa6565b600b55565b60606003805461059190611975565b6108fb610fa6565b60096108418282611a5d565b81600a54610100900460ff16156109215761092181610dbd565b61067c8383611231565b610933610fa6565b600a80549115156101000261ff0019909216919091179055565b836001600160a01b038116331461097757600a54610100900460ff16156109775761097733610dbd565b6109838585858561129d565b5050505050565b606061099582610d88565b6109b257604051630a14c4b560e41b815260040160405180910390fd5b600a5460609060ff16156109f25760096109cb846112e1565b6040516020016109dc929190611b1d565b6040516020818303038152906040529050610a80565b600980546109ff90611975565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b90611975565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b505050505090505b60098054610a8d90611975565b9050600003610aab5760405180602001604052806000815250610aad565b805b9392505050565b610abc610fa6565b80611d4c81610ace6000546000190190565b610ad89190611ba4565b1115610b205760405162461bcd60e51b815260206004820152601260248201527141626f766520746f74616c20737570706c7960701b60448201526064015b60405180910390fd5b61067c8383611325565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b610b60610fa6565b6001600160a01b038116610bc55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b17565b61071e816111df565b8067ffffffffffffffff16611d4c81610bea6000546000190190565b610bf49190611ba4565b1115610c375760405162461bcd60e51b815260206004820152601260248201527141626f766520746f74616c20737570706c7960701b6044820152606401610b17565b336000908152600c602052604090205460ff1615610cab57600b54610c669067ffffffffffffffff84166119c5565b341015610ca65760405162461bcd60e51b815260206004820152600e60248201526d09cdee8408adcdeeaced0408aa8960931b6044820152606401610b17565b610d74565b8167ffffffffffffffff16600103610cf757323314610cf75760405162461bcd60e51b8152602060048201526008602482015267454f41204f6e6c7960c01b6044820152606401610b17565b600b54610d05600184611bb7565b67ffffffffffffffff16610d1991906119c5565b341015610d595760405162461bcd60e51b815260206004820152600e60248201526d09cdee8408adcdeeaced0408aa8960931b6044820152606401610b17565b336000908152600c60205260409020805460ff191660011790555b610841338367ffffffffffffffff16611325565b600081600111158015610d9c575060005482105b801561057c575050600090815260046020526040902054600160e01b161590565b69c617113400112233445560005230601a5280603a52600080604460166daaeb6d7670e522a718067333cd4e5afa610df9573d6000803e3d6000fd5b6000603a5250565b61084182826001611423565b6000610e1882611153565b9050836001600160a01b0316816001600160a01b031614610e4b5760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610e9857610e7b8633610b2a565b610e9857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610ebf57604051633a954ecd60e21b815260040160405180910390fd5b8015610eca57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610f5c57600184016000818152600460205260408120549003610f5a576000548114610f5a5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6008546001600160a01b031633146108695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b17565b804710156110505760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b17565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461109d576040519150601f19603f3d011682016040523d82523d6000602084013e6110a2565b606091505b505090508061067c5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b17565b61067c8383836040518060200160405280600081525061094d565b610869733cc6cdda760b79bafa08df41ecfa224f810dceb660016114ca565b6000816001116111c6575060008181526004602052604081205490600160e01b821690036111c657806000036111c15760005482106111a557604051636f96cda160e11b815260040160405180910390fd5b5b506000190160008181526004602052604090205480156111a6575b919050565b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112a8848484610681565b6001600160a01b0383163b156106b6576112c48484848461153f565b6106b6576040516368d2bf6b60e11b815260040160405180910390fd5b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806112fb5750819003601f19909101908152919050565b600080549082900361134a5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146113f957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016113c1565b508160000361141a57604051622e076360e81b815260040160405180910390fd5b60005550505050565b600061142e8361086b565b9050811561146d57336001600160a01b0382161461146d576114508133610b2a565b61146d576040516367d9dca160e11b815260040160405180910390fd5b60008381526006602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b6001600160a01b0390911690637d3e3dbe816114f757826114f05750634420e4866114f7565b5063a0af29035b8060e01b60005230600452826024526004600060446000806daaeb6d7670e522a718067333cd4e5af1611535578060005160e01c0361153557600080fd5b5060006024525050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611574903390899088908890600401611bdf565b6020604051808303816000875af19250505080156115af575060408051601f3d908101601f191682019092526115ac91810190611c1c565b60015b61160d573d8080156115dd576040519150601f19603f3d011682016040523d82523d6000602084013e6115e2565b606091505b508051600003611605576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6001600160e01b03198116811461071e57600080fd5b60006020828403121561165357600080fd5b8135610aad8161162b565b60005b83811015611679578181015183820152602001611661565b50506000910152565b6000815180845261169a81602086016020860161165e565b601f01601f19169290920160200192915050565b602081526000610aad6020830184611682565b6000602082840312156116d357600080fd5b5035919050565b80356001600160a01b03811681146111c157600080fd5b6000806040838503121561170457600080fd5b61170d836116da565b946020939093013593505050565b60008060006060848603121561173057600080fd5b611739846116da565b9250611747602085016116da565b9150604084013590509250925092565b60006020828403121561176957600080fd5b610aad826116da565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156117a3576117a3611772565b604051601f8501601f19908116603f011681019082821181831017156117cb576117cb611772565b816040528093508581528686860111156117e457600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561181057600080fd5b813567ffffffffffffffff81111561182757600080fd5b8201601f8101841361183857600080fd5b61162384823560208401611788565b803580151581146111c157600080fd5b6000806040838503121561186a57600080fd5b611873836116da565b915061188160208401611847565b90509250929050565b60006020828403121561189c57600080fd5b610aad82611847565b600080600080608085870312156118bb57600080fd5b6118c4856116da565b93506118d2602086016116da565b925060408501359150606085013567ffffffffffffffff8111156118f557600080fd5b8501601f8101871361190657600080fd5b61191587823560208401611788565b91505092959194509250565b6000806040838503121561193457600080fd5b61193d836116da565b9150611881602084016116da565b60006020828403121561195d57600080fd5b813567ffffffffffffffff81168114610aad57600080fd5b600181811c9082168061198957607f821691505b6020821081036119a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761057c5761057c6119af565b6000826119f957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611a1057600080fd5b5051919050565b601f82111561067c57600081815260208120601f850160051c81016020861015611a3e5750805b601f850160051c820191505b81811015610f9e57828155600101611a4a565b815167ffffffffffffffff811115611a7757611a77611772565b611a8b81611a858454611975565b84611a17565b602080601f831160018114611ac05760008415611aa85750858301515b600019600386901b1c1916600185901b178555610f9e565b600085815260208120601f198616915b82811015611aef57888601518255948401946001909101908401611ad0565b5085821015611b0d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808454611b2b81611975565b60018281168015611b435760018114611b5857611b87565b60ff1984168752821515830287019450611b87565b8860005260208060002060005b85811015611b7e5781548a820152908401908201611b65565b50505082870194505b505050508351611b9b81836020880161165e565b01949350505050565b8082018082111561057c5761057c6119af565b67ffffffffffffffff828116828216039080821115611bd857611bd86119af565b5092915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611c1290830184611682565b9695505050505050565b600060208284031215611c2e57600080fd5b8151610aad8161162b56fea26469706673582212202c01de064a28e0e1aafadb1c9fe9ff63035f49fadf20ad75b984c4aebf99054264736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d4e59476145446d795270546745724357535a31425a3438393947716a596848775047345834526875366141470000000000000000000000