60c06040526006805460ff60a01b1916905560016008553480156200002357600080fd5b50604051806040016040528060098152602001684d657461736869707360b81b8152506040518060400160405280600881526020016704d455441534849560c41b81525060405180604001604052806007815260200166697066733a2f2f60c81b81525073a5409ec958c83c3f309868babaca7c86dcb077c16040518060600160405280603681526020016200569d6036913960098286604051602001620000cc9190620003aa565b60405160208183030381529060405286604051602001620000ee9190620003d8565b604051602081830303815290604052843385886040516200010f90620002c3565b620001209695949392919062000433565b604051809103906000f0801580156200013d573d6000803e3d6000fd5b5087518890889062000157906000906020850190620002d1565b5080516200016d906001906020840190620002d1565b5050506200018a62000184620001f560201b60201c565b620001f9565b6001600160a01b039081166080521660a0528351620001b1906007906020870190620002d1565b50506009805460ff19169055505060408051606081019091526036808252620001e9945090925090506200566760208301396200024b565b611398600c55620004de565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620002aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620002bf90600a906020840190620002d1565b5050565b6126e68062002f8183390190565b828054620002df90620004a2565b90600052602060002090601f0160209004810192826200030357600085556200034e565b82601f106200031e57805160ff19168380011785556200034e565b828001600101855582156200034e579182015b828111156200034e57825182559160200191906001019062000331565b506200035c92915062000360565b5090565b5b808211156200035c576000815560010162000361565b60005b83811015620003945781810151838201526020016200037a565b83811115620003a4576000848401525b50505050565b60008251620003be81846020870162000377565b6720466163746f727960c01b920191825250600801919050565b60008251620003ec81846020870162000377565b66464143544f525960c81b920191825250600701919050565b600081518084526200041f81602086016020860162000377565b601f01601f19169290920160200192915050565b60c0815260006200044860c083018962000405565b82810360208401526200045c818962000405565b9050828103604084015262000472818862000405565b6001600160a01b03968716606085015261ffff9590951660808401525050921660a0909201919091529392505050565b600181811c90821680620004b757607f821691505b602082108103620004d857634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612a6f620005126000396000818161041a0152611f5e01526000818161047901526110a00152612a6f6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c80638b24a49d1161012a578063c87b56dd116100bd578063d5abeb011161008c578063e77772fe11610071578063e77772fe14610474578063e985e9c51461049b578063f2fde38b146104ae57600080fd5b8063d5abeb0114610458578063d69eef141461046157600080fd5b8063c87b56dd14610402578063cd7c032614610415578063d52c57e01461043c578063d55f92731461044f57600080fd5b8063b6d46dc5116100f9578063b6d46dc5146103c1578063b88d4fde146103c9578063be07dace146103dc578063bffd9508146103ef57600080fd5b80638b24a49d146103805780638da5cb5b1461038857806395d89b41146103a6578063a22cb465146103ae57600080fd5b80632d4f498c116101a25780636c0360eb116101715780636c0360eb1461034a5780636f8b44b01461035257806370a0823114610365578063715018a61461037857600080fd5b80632d4f498c146102df57806342842e0e1461031157806355f804b3146103245780636352211e1461033757600080fd5b8063095ea7b3116101de578063095ea7b31461029a57806318160ddd146102ad57806323b872dd146102bf57806329adec14146102d257600080fd5b806301ffc9a714610210578063059686e01461023857806306fdde031461024d578063081812fc14610262575b600080fd5b61022361021e366004612335565b6104c1565b60405190151581526020015b60405180910390f35b61024b610246366004612352565b6105a6565b005b610255610685565b60405161022f91906123e9565b6102756102703660046123fc565b610717565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b61024b6102a8366004612437565b6107f1565b600c545b60405190815260200161022f565b61024b6102cd366004612463565b61097d565b6009546102239060ff1681565b6006546103049074010000000000000000000000000000000000000000900460ff1681565b60405161022f91906124d3565b61024b61031f366004612463565b610a1e565b61024b6103323660046125d7565b610a39565b6102756103453660046123fc565b610ad1565b610255610b83565b61024b6103603660046123fc565b610c11565b6102b1610373366004612620565b610cd2565b61024b610da0565b61024b610e2d565b60065473ffffffffffffffffffffffffffffffffffffffff16610275565b610255610f48565b61024b6103bc36600461263d565b610f57565b610255610f62565b61024b6103d736600461267b565b610f6f565b61024b6103ea3660046126fb565b611017565b61024b6103fd3660046125d7565b611180565b6102556104103660046123fc565b611214565b6102757f000000000000000000000000000000000000000000000000000000000000000081565b61024b61044a3660046126fb565b611263565b6102b1600b5481565b6102b1600c5481565b61022361046f3660046123fc565b611382565b6102757f000000000000000000000000000000000000000000000000000000000000000081565b6102236104a9366004612720565b6113b8565b61024b6104bc366004612620565b611408565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061055457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105a057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff16331461062c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600680548291907fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000083600181111561067d5761067d6124a4565b021790555050565b6060600080546106949061274e565b80601f01602080910402602001604051908101604052809291908181526020018280546106c09061274e565b801561070d5780601f106106e25761010080835404028352916020019161070d565b820191906000526020600020905b8154815290600101906020018083116106f057829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff166107c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610623565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006107fc82610ad1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610623565b3373ffffffffffffffffffffffffffffffffffffffff821614806108e257506108e281336113b8565b61096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610623565b6109788383611538565b505050565b61098733826115d8565b610a13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610623565b61097883838361171b565b61097883838360405180602001604052806000815250610f6f565b60065473ffffffffffffffffffffffffffffffffffffffff163314610aba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610623565b8051610acd90600790602084019061226e565b5050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806105a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610623565b60078054610b909061274e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc9061274e565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b505050505081565b60065473ffffffffffffffffffffffffffffffffffffffff163314610c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610623565b600c548111610ccd576040517f547b3ab500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c55565b600073ffffffffffffffffffffffffffffffffffffffff8216610d77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610623565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60065473ffffffffffffffffffffffffffffffffffffffff163314610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610623565b610e2b6000611982565b565b60065473ffffffffffffffffffffffffffffffffffffffff163314610eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610623565b600c54600b5414610f1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f436f6c6c656374696f6e206d75737420626520736f6c646f75740000000000006044820152606401610623565b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6060600180546106949061274e565b610acd3383836119f9565b600a8054610b909061274e565b610f7933836115d8565b611005576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610623565b61101184848484611b26565b50505050565b600854600114611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e4359000000000000000000000000000000000000000000006044820152606401610623565b60026008553373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146110f7576040517f239707f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161110181611382565b611137576040517ff890a0bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061114284611bc9565b905060005b818110156111745761116c84600b60008154611162906127d0565b9182905550611c63565b600101611147565b50506001600855505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314611201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610623565b8051610acd90600a90602084019061226e565b60095460609060ff16151560000361125857600a61123183611e25565b604051602001611242929190612824565b6040516020818303038152906040529050919050565b600761123183611e25565b60065473ffffffffffffffffffffffffffffffffffffffff1633146112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610623565b600c54600b546112f49084612901565b111561135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f416d6f756e742065786365656473206d617820737570706c79000000000000006044820152606401610623565b60005b828110156109785761137a82600b60008154611162906127d0565b60010161135f565b60008061138e83611bc9565b9050600c54600b54826113a19190612901565b116113af5750600192915050565b50600092915050565b60006113c48383611f5a565b80611401575073ffffffffffffffffffffffffffffffffffffffff80841660009081526005602090815260408083209386168352929052205460ff165b9392505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610623565b73ffffffffffffffffffffffffffffffffffffffff811661152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610623565b61153581611982565b50565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061159282610ad1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16611689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610623565b600061169483610ad1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061170357508373ffffffffffffffffffffffffffffffffffffffff166116eb84610717565b73ffffffffffffffffffffffffffffffffffffffff16145b80611713575061171381856113b8565b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff1661173b82610ad1565b73ffffffffffffffffffffffffffffffffffffffff16146117de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610623565b73ffffffffffffffffffffffffffffffffffffffff8216611880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610623565b61188b600082611538565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054600192906118c1908490612919565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906118fc908490612901565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610623565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b3184848461171b565b611b3d8484848461207b565b611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610623565b600081600003611bdb57506001919050565b81600103611beb57506002919050565b81600203611bfb57506003919050565b81600303611c0b57506004919050565b81600403611c1b57506005919050565b81600503611c2b5750600a919050565b81600603611c3b57506019919050565b81600703611c4b57506032919050565b81600803611c5b57506064919050565b506000919050565b73ffffffffffffffffffffffffffffffffffffffff8216611ce0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610623565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611d6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610623565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611da2908490612901565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606081600003611e6857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611e925780611e7c816127d0565b9150611e8b9050600a8361295f565b9150611e6c565b60008167ffffffffffffffff811115611ead57611ead612514565b6040519080825280601f01601f191660200182016040528015611ed7576020820181803683370190505b5090505b841561171357611eec600183612919565b9150611ef9600a86612973565b611f04906030612901565b60f81b818381518110611f1957611f19612987565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611f53600a8661295f565b9450611edb565b60007f00000000000000000000000000000000000000000000000000000000000000008160065474010000000000000000000000000000000000000000900460ff166001811115611fad57611fad6124a4565b14801561206257506040517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152808516919083169063c455279190602401602060405180830381865afa158015612026573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204a91906129b6565b73ffffffffffffffffffffffffffffffffffffffff16145b156120715760019150506105a0565b5060009392505050565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612263576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906120f29033908990889088906004016129d3565b6020604051808303816000875af192505050801561214b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261214891810190612a1c565b60015b612218573d808015612179576040519150601f19603f3d011682016040523d82523d6000602084013e61217e565b606091505b508051600003612210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610623565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611713565b506001949350505050565b82805461227a9061274e565b90600052602060002090601f01602090048101928261229c57600085556122e2565b82601f106122b557805160ff19168380011785556122e2565b828001600101855582156122e2579182015b828111156122e25782518255916020019190600101906122c7565b506122ee9291506122f2565b5090565b5b808211156122ee57600081556001016122f3565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461153557600080fd5b60006020828403121561234757600080fd5b813561140181612307565b60006020828403121561236457600080fd5b81356002811061140157600080fd5b60005b8381101561238e578181015183820152602001612376565b838111156110115750506000910152565b600081518084526123b7816020860160208601612373565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611401602083018461239f565b60006020828403121561240e57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461153557600080fd5b6000806040838503121561244a57600080fd5b823561245581612415565b946020939093013593505050565b60008060006060848603121561247857600080fd5b833561248381612415565b9250602084013561249381612415565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016002831061250e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561255e5761255e612514565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125a4576125a4612514565b816040528093508581528686860111156125bd57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156125e957600080fd5b813567ffffffffffffffff81111561260057600080fd5b8201601f8101841361261157600080fd5b61171384823560208401612543565b60006020828403121561263257600080fd5b813561140181612415565b6000806040838503121561265057600080fd5b823561265b81612415565b91506020830135801515811461267057600080fd5b809150509250929050565b6000806000806080858703121561269157600080fd5b843561269c81612415565b935060208501356126ac81612415565b925060408501359150606085013567ffffffffffffffff8111156126cf57600080fd5b8501601f810187136126e057600080fd5b6126ef87823560208401612543565b91505092959194509250565b6000806040838503121561270e57600080fd5b82359150602083013561267081612415565b6000806040838503121561273357600080fd5b823561273e81612415565b9150602083013561267081612415565b600181811c9082168061276257607f821691505b60208210810361279b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612801576128016127a1565b5060010190565b6000815161281a818560208601612373565b9290920192915050565b600080845481600182811c91508083168061284057607f831692505b60208084108203612878577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b81801561288c57600181146128bb576128e8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506128e8565b60008b81526020902060005b868110156128e05781548b8201529085019083016128c7565b505084890196505b5050505050506128f88185612808565b95945050505050565b60008219821115612914576129146127a1565b500190565b60008282101561292b5761292b6127a1565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261296e5761296e612930565b500490565b60008261298257612982612930565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156129c857600080fd5b815161140181612415565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612a12608083018461239f565b9695505050505050565b600060208284031215612a2e57600080fd5b81516114018161230756fea26469706673582212205ac211624a8893da26f518c66d6bcd16f2ac3f45230e358a8c8753469237ddf764736f6c634300080d003360e06040526006805460ff60a01b1916905560016007553480156200002357600080fd5b50604051620026e6380380620026e6833981016040819052620000469162000429565b80868681600090805190602001906200006192919062000299565b5080516200007790600190602084019062000299565b505050620000946200008e6200010060201b60201c565b62000104565b6001600160a01b03166080523360c0528351620000b990600990602087019062000299565b5061ffff821660a052620000cd8362000156565b620000d76200022b565b600160a05161ffff166001901b620000f09190620004f9565b600855506200055b945050505050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620001b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381166200021d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001ad565b620002288162000104565b50565b6000620002406006546001600160a01b031690565b905060005b60a05161ffff16811015620002955760405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a460010162000245565b5050565b828054620002a7906200051f565b90600052602060002090601f016020900481019282620002cb576000855562000316565b82601f10620002e657805160ff191683800117855562000316565b8280016001018555821562000316579182015b8281111562000316578251825591602001919060010190620002f9565b506200032492915062000328565b5090565b5b8082111562000324576000815560010162000329565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200036757600080fd5b81516001600160401b03808211156200038457620003846200033f565b604051601f8301601f19908116603f01168101908282118183101715620003af57620003af6200033f565b81604052838152602092508683858801011115620003cc57600080fd5b600091505b83821015620003f05785820183015181830184015290820190620003d1565b83821115620004025760008385830101525b9695505050505050565b80516001600160a01b03811681146200042457600080fd5b919050565b60008060008060008060c087890312156200044357600080fd5b86516001600160401b03808211156200045b57600080fd5b620004698a838b0162000355565b975060208901519150808211156200048057600080fd5b6200048e8a838b0162000355565b96506040890151915080821115620004a557600080fd5b50620004b489828a0162000355565b945050620004c5606088016200040c565b9250608087015161ffff81168114620004dd57600080fd5b9150620004ed60a088016200040c565b90509295509295509295565b6000828210156200051a57634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200053457607f821691505b6020821081036200055557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c051612115620005d16000396000818161045a015281816109cc01528181610b09015281816110740152818161127c015261161b0152600081816102d3015281816108e30152818161101b015281816111f2015261158d0152600081816103fa015261146801526121156000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638da5cb5b116100f9578063c311c52311610097578063e985e9c511610071578063e985e9c51461041c578063eeee11bc1461042f578063f2fde38b14610442578063fc0c546a1461045557600080fd5b8063c311c523146103db578063c87b56dd146103e2578063cd7c0326146103f557600080fd5b8063a22cb465116100d3578063a22cb465146103a5578063b88d4fde146103b8578063bd3c388d146103cb578063be40849e146103d357600080fd5b80638da5cb5b1461037757806395d89b411461039557806397004ebe1461039d57600080fd5b80633db62e2c116101665780636352211e116101405780636352211e1461031b57806370a082311461032e578063715018a61461035c57806381ae634d1461036457600080fd5b80633db62e2c146102ce57806342842e0e14610289578063443f54091461030857600080fd5b8063081812fc116101a2578063081812fc1461021b578063095ea7b31461027657806323b872dd146102895780632d4f498c1461029c57600080fd5b806301ffc9a7146101c9578063059686e0146101f157806306fdde0314610206575b600080fd5b6101dc6101d73660046119da565b61047c565b60405190151581526020015b60405180910390f35b6102046101ff3660046119f7565b610561565b005b61020e610640565b6040516101e89190611a8e565b610251610229366004611aa1565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610204610284366004611adc565b6106ce565b610204610297366004611b08565b6107eb565b6006546102c19074010000000000000000000000000000000000000000900460ff1681565b6040516101e89190611b78565b6102f57f000000000000000000000000000000000000000000000000000000000000000081565b60405161ffff90911681526020016101e8565b610204610316366004611c7c565b610a3f565b610251610329366004611aa1565b610ad7565b61034e61033c366004611cc5565b60026020526000908152604090205481565b6040519081526020016101e8565b610204610bb2565b610204610372366004611aa1565b610c3f565b60065473ffffffffffffffffffffffffffffffffffffffff16610251565b61020e610ceb565b610204610cf8565b6102046103b3366004611cf0565b610d81565b6102046103c6366004611d29565b610e18565b610204610f6f565b61020e61111b565b60016101dc565b61020e6103f0366004611aa1565b611128565b6102517f000000000000000000000000000000000000000000000000000000000000000081565b6101dc61042a366004611da9565b61115c565b61020461043d366004611aa1565b61116f565b610204610450366004611cc5565b611337565b6102517f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061050f57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061055b57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1633146105e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600680548291907fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000083600181111561063857610638611b49565b021790555050565b6000805461064d90611dd7565b80601f016020809104026020016040519081016040528092919081815260200182805461067990611dd7565b80156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b60006106d982610ad7565b90503373ffffffffffffffffffffffffffffffffffffffff821614806107045750610704813361115c565b61076a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016105de565b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600754600114610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064016105de565b600260075560065473ffffffffffffffffffffffffffffffffffffffff1633148015906108a957506108a76108a160065473ffffffffffffffffffffffffffffffffffffffff1690565b33611464565b155b156108e0576040517fbcbaecb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b807f000000000000000000000000000000000000000000000000000000000000000061ffff16811061093e576040517f0345ad6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085482906001821b1661097e576040517f8b1d7fbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fbe07dace0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff858116602483015284917f00000000000000000000000000000000000000000000000000000000000000009091169063be07dace90604401600060405180830381600087803b158015610a1257600080fd5b505af1158015610a26573d6000803e3d6000fd5b50505050610a32611585565b5050600160075550505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610ac0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105de565b8051610ad3906009906020840190611913565b5050565b6040517fd69eef14000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d69eef1490602401602060405180830381865afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b899190611e2a565b610b9457600061055b565b60065473ffffffffffffffffffffffffffffffffffffffff1661055b565b60065473ffffffffffffffffffffffffffffffffffffffff163314610c33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105de565b610c3d60006116cd565b565b60065473ffffffffffffffffffffffffffffffffffffffff163314610cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105de565b610ce8610ce260065473ffffffffffffffffffffffffffffffffffffffff1690565b82611744565b50565b6001805461064d90611dd7565b60065473ffffffffffffffffffffffffffffffffffffffff163314610d79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105de565b610c3d611585565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610e238484846107eb565b73ffffffffffffffffffffffffffffffffffffffff83163b1580610f0357506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290610e9c903390899088908890600401611e47565b6020604051808303816000875af1158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190611e90565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610f69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016105de565b50505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105de565b600854600061101460065473ffffffffffffffffffffffffffffffffffffffff1690565b905060005b7f000000000000000000000000000000000000000000000000000000000000000061ffff16811015611114576040517fd69eef14000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d69eef1490602401602060405180830381865afa1580156110d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f49190611e2a565b1561110c57611103818361178d565b6001811b831792505b600101611019565b5050600855565b6009805461064d90611dd7565b60606009611135836117d6565b604051602001611146929190611ec9565b6040516020818303038152906040529050919050565b60006111688383611464565b9392505050565b60065473ffffffffffffffffffffffffffffffffffffffff1633146111f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105de565b7f000000000000000000000000000000000000000000000000000000000000000061ffff16811061124d576040517f0345ad6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd69eef14000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d69eef1490602401602060405180830381865afa1580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc9190611e2a565b15610ce8576113298161132460065473ffffffffffffffffffffffffffffffffffffffff1690565b61178d565b6008546001821b1760085550565b60065473ffffffffffffffffffffffffffffffffffffffff1633146113b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105de565b73ffffffffffffffffffffffffffffffffffffffff811661145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105de565b610ce8816116cd565b60007f00000000000000000000000000000000000000000000000000000000000000008160065474010000000000000000000000000000000000000000900460ff1660018111156114b7576114b7611b49565b14801561156c57506040517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152808516919083169063c455279190602401602060405180830381865afa158015611530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115549190611fa6565b73ffffffffffffffffffffffffffffffffffffffff16145b1561157b57600191505061055b565b5060009392505050565b60085461ffff7f000000000000000000000000000000000000000000000000000000000000000016908060006115d060065473ffffffffffffffffffffffffffffffffffffffff1690565b905060005b848110156116bd576001811b84161515801561169d57506040517fd69eef14000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d69eef1490602401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b9190611e2a565b155b156116b5576001811b19841693506116b58282611744565b6001016115d5565b50818314610f6957505060085550565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051819060009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b604051829073ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608160000361181957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611843578061182d81611ff2565b915061183c9050600a83612059565b915061181d565b60008167ffffffffffffffff81111561185e5761185e611bb9565b6040519080825280601f01601f191660200182016040528015611888576020820181803683370190505b5090505b841561190b5761189d60018361206d565b91506118aa600a86612084565b6118b5906030612098565b60f81b8183815181106118ca576118ca6120b0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611904600a86612059565b945061188c565b949350505050565b82805461191f90611dd7565b90600052602060002090601f0160209004810192826119415760008555611987565b82601f1061195a57805160ff1916838001178555611987565b82800160010185558215611987579182015b8281111561198757825182559160200191906001019061196c565b50611993929150611997565b5090565b5b808211156119935760008155600101611998565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610ce857600080fd5b6000602082840312156119ec57600080fd5b8135611168816119ac565b600060208284031215611a0957600080fd5b81356002811061116857600080fd5b60005b83811015611a33578181015183820152602001611a1b565b83811115610f695750506000910152565b60008151808452611a5c816020860160208601611a18565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006111686020830184611a44565b600060208284031215611ab357600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610ce857600080fd5b60008060408385031215611aef57600080fd5b8235611afa81611aba565b946020939093013593505050565b600080600060608486031215611b1d57600080fd5b8335611b2881611aba565b92506020840135611b3881611aba565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160028310611bb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611c0357611c03611bb9565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611c4957611c49611bb9565b81604052809350858152868686011115611c6257600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611c8e57600080fd5b813567ffffffffffffffff811115611ca557600080fd5b8201601f81018413611cb657600080fd5b61190b84823560208401611be8565b600060208284031215611cd757600080fd5b813561116881611aba565b8015158114610ce857600080fd5b60008060408385031215611d0357600080fd5b8235611d0e81611aba565b91506020830135611d1e81611ce2565b809150509250929050565b60008060008060808587031215611d3f57600080fd5b8435611d4a81611aba565b93506020850135611d5a81611aba565b925060408501359150606085013567ffffffffffffffff811115611d7d57600080fd5b8501601f81018713611d8e57600080fd5b611d9d87823560208401611be8565b91505092959194509250565b60008060408385031215611dbc57600080fd5b8235611dc781611aba565b91506020830135611d1e81611aba565b600181811c90821680611deb57607f821691505b602082108103611e24577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611e3c57600080fd5b815161116881611ce2565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611e866080830184611a44565b9695505050505050565b600060208284031215611ea257600080fd5b8151611168816119ac565b60008151611ebf818560208601611a18565b9290920192915050565b600080845481600182811c915080831680611ee557607f831692505b60208084108203611f1d577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015611f315760018114611f6057611f8d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650611f8d565b60008b81526020902060005b86811015611f855781548b820152908501908301611f6c565b505084890196505b505050505050611f9d8185611ead565b95945050505050565b600060208284031215611fb857600080fd5b815161116881611aba565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361202357612023611fc3565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826120685761206861202a565b500490565b60008282101561207f5761207f611fc3565b500390565b6000826120935761209361202a565b500690565b600082198211156120ab576120ab611fc3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122054ebbfecb45ccc180f4c4174a82602ce8c62de3340617f8b4eedc769e2c86a3a64736f6c634300080d0033697066733a2f2f516d524b6451685041434a526d4d6a6b5359456673415035504e666163776273516d56756a344e63757a724d476d2f697066733a2f2f516d5037334c474c32774131573277724161734e523855364d575365723837573479487a764846377554727345632f