60806040523480156200001157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260ff16600a620000659190620002d7565b630ee6b28062000076919062000328565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601260ff16600a6200011c9190620002d7565b630ee6b2806200012d919062000328565b6040516200013c919062000384565b60405180910390a3620003a1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620001d857808604811115620001b057620001af6200014a565b5b6001851615620001c05780820291505b8081029050620001d08562000179565b945062000190565b94509492505050565b600082620001f35760019050620002c6565b81620002035760009050620002c6565b81600181146200021c576002811462000227576200025d565b6001915050620002c6565b60ff8411156200023c576200023b6200014a565b5b8360020a9150848211156200025657620002556200014a565b5b50620002c6565b5060208310610133831016604e8410600b8410161715620002975782820a9050838111156200029157620002906200014a565b5b620002c6565b620002a6848484600162000186565b92509050818404811115620002c057620002bf6200014a565b5b81810290505b9392505050565b6000819050919050565b6000620002e482620002cd565b9150620002f183620002cd565b9250620003207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620001e1565b905092915050565b60006200033582620002cd565b91506200034283620002cd565b92508282026200035281620002cd565b915082820484148315176200036c576200036b6200014a565b5b5092915050565b6200037e81620002cd565b82525050565b60006020820190506200039b600083018462000373565b92915050565b61123880620003b16000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806370a082311161007157806370a0823114610168578063715018a6146101985780638da5cb5b146101a257806395d89b41146101c0578063a9059cbb146101de578063dd62ed3e1461020e576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b661023e565b6040516100c39190610aa7565b60405180910390f35b6100e660048036038101906100e19190610b62565b610277565b6040516100f39190610bbd565b60405180910390f35b61010461028e565b6040516101119190610be7565b60405180910390f35b610134600480360381019061012f9190610c02565b6102b1565b6040516101419190610bbd565b60405180910390f35b61015261035b565b60405161015f9190610c71565b60405180910390f35b610182600480360381019061017d9190610c8c565b610360565b60405161018f9190610be7565b60405180910390f35b6101a06103a9565b005b6101aa6104dd565b6040516101b79190610cc8565b60405180910390f35b6101c8610501565b6040516101d59190610aa7565b60405180910390f35b6101f860048036038101906101f39190610b62565b61053a565b6040516102059190610bbd565b60405180910390f35b61022860048036038101906102239190610ce3565b610551565b6040516102359190610be7565b60405180910390f35b6040518060400160405280600d81526020017f4261736564204b6579204254430000000000000000000000000000000000000081525081565b60006102843384846105d8565b6001905092915050565b601260ff16600a61029f9190610e85565b630ee6b2806102ae9190610ed0565b81565b60006102be8484846107a1565b610350843384600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461034b9190610f12565b6105d8565b600190509392505050565b601281565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042e90610f92565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600681526020017f4b6579425443000000000000000000000000000000000000000000000000000081525081565b60006105473384846107a1565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063e90610ffe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061106a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107949190610be7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610807906110d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361087f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087690611142565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f8906111ae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109509190610f12565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109a691906111ce565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a0a9190610be7565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610a51578082015181840152602081019050610a36565b60008484015250505050565b6000601f19601f8301169050919050565b6000610a7982610a17565b610a838185610a22565b9350610a93818560208601610a33565b610a9c81610a5d565b840191505092915050565b60006020820190508181036000830152610ac18184610a6e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610af982610ace565b9050919050565b610b0981610aee565b8114610b1457600080fd5b50565b600081359050610b2681610b00565b92915050565b6000819050919050565b610b3f81610b2c565b8114610b4a57600080fd5b50565b600081359050610b5c81610b36565b92915050565b60008060408385031215610b7957610b78610ac9565b5b6000610b8785828601610b17565b9250506020610b9885828601610b4d565b9150509250929050565b60008115159050919050565b610bb781610ba2565b82525050565b6000602082019050610bd26000830184610bae565b92915050565b610be181610b2c565b82525050565b6000602082019050610bfc6000830184610bd8565b92915050565b600080600060608486031215610c1b57610c1a610ac9565b5b6000610c2986828701610b17565b9350506020610c3a86828701610b17565b9250506040610c4b86828701610b4d565b9150509250925092565b600060ff82169050919050565b610c6b81610c55565b82525050565b6000602082019050610c866000830184610c62565b92915050565b600060208284031215610ca257610ca1610ac9565b5b6000610cb084828501610b17565b91505092915050565b610cc281610aee565b82525050565b6000602082019050610cdd6000830184610cb9565b92915050565b60008060408385031215610cfa57610cf9610ac9565b5b6000610d0885828601610b17565b9250506020610d1985828601610b17565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115610da957808604811115610d8557610d84610d23565b5b6001851615610d945780820291505b8081029050610da285610d52565b9450610d69565b94509492505050565b600082610dc25760019050610e7e565b81610dd05760009050610e7e565b8160018114610de65760028114610df057610e1f565b6001915050610e7e565b60ff841115610e0257610e01610d23565b5b8360020a915084821115610e1957610e18610d23565b5b50610e7e565b5060208310610133831016604e8410600b8410161715610e545782820a905083811115610e4f57610e4e610d23565b5b610e7e565b610e618484846001610d5f565b92509050818404811115610e7857610e77610d23565b5b81810290505b9392505050565b6000610e9082610b2c565b9150610e9b83610b2c565b9250610ec87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610db2565b905092915050565b6000610edb82610b2c565b9150610ee683610b2c565b9250828202610ef481610b2c565b91508282048414831517610f0b57610f0a610d23565b5b5092915050565b6000610f1d82610b2c565b9150610f2883610b2c565b9250828203905081811115610f4057610f3f610d23565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b6000610f7c601783610a22565b9150610f8782610f46565b602082019050919050565b60006020820190508181036000830152610fab81610f6f565b9050919050565b7f417070726f76652066726f6d20746865207a65726f2061646472657373000000600082015250565b6000610fe8601d83610a22565b9150610ff382610fb2565b602082019050919050565b6000602082019050818103600083015261101781610fdb565b9050919050565b7f417070726f766520746f20746865207a65726f20616464726573730000000000600082015250565b6000611054601b83610a22565b915061105f8261101e565b602082019050919050565b6000602082019050818103600083015261108381611047565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006110c0601e83610a22565b91506110cb8261108a565b602082019050919050565b600060208201905081810360008301526110ef816110b3565b9050919050565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b600061112c601c83610a22565b9150611137826110f6565b602082019050919050565b6000602082019050818103600083015261115b8161111f565b9050919050565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e636500600082015250565b6000611198601f83610a22565b91506111a382611162565b602082019050919050565b600060208201905081810360008301526111c78161118b565b9050919050565b60006111d982610b2c565b91506111e483610b2c565b92508282019050808211156111fc576111fb610d23565b5b9291505056fea2646970667358221220f5c098248641e008c80aa1c832b4f120c824d037907c8b8dc60068d3c2b01fd164736f6c63430008180033