60806040523480156200001157600080fd5b506040518060400160405280600981526020017f54657374546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f5454000000000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620000f9565b508060049080519060200190620000af929190620000f9565b50505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200020e565b8280546200010790620001a9565b90600052602060002090601f0160209004810192826200012b576000855562000177565b82601f106200014657805160ff191683800117855562000177565b8280016001018555821562000177579182015b828111156200017657825182559160200191906001019062000159565b5b5090506200018691906200018a565b5090565b5b80821115620001a55760008160009055506001016200018b565b5090565b60006002820490506001821680620001c257607f821691505b60208210811415620001d957620001d8620001df565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6121ed806200021e6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806347096d7b116100a257806395d89b411161007157806395d89b41146102df578063a457c2d7146102fd578063a9059cbb1461032d578063b90306ad1461035d578063dd62ed3e1461037957610116565b806347096d7b146102595780635b6b431d1461027557806370a08231146102915780638da5cb5b146102c157610116565b806318160ddd116100e957806318160ddd146101a157806323b872dd146101bf5780632ccee9be146101ef578063313ce5671461020b578063395093511461022957610116565b80630103c33a1461011b57806306fdde03146101375780630788370314610155578063095ea7b314610171575b600080fd5b61013560048036038101906101309190611677565b6103a9565b005b61013f610481565b60405161014c9190611995565b60405180910390f35b61016f600480360381019061016a9190611713565b610513565b005b61018b60048036038101906101869190611637565b6105b0565b604051610198919061197a565b60405180910390f35b6101a96105d3565b6040516101b69190611b17565b60405180910390f35b6101d960048036038101906101d491906115e4565b6105dd565b6040516101e6919061197a565b60405180910390f35b61020960048036038101906102049190611637565b61060c565b005b610213610738565b6040516102209190611b32565b60405180910390f35b610243600480360381019061023e9190611637565b610741565b604051610250919061197a565b60405180910390f35b610273600480360381019061026e9190611637565b610778565b005b61028f600480360381019061028a9190611713565b61089a565b005b6102ab60048036038101906102a69190611577565b6109bb565b6040516102b89190611b17565b60405180910390f35b6102c9610a03565b6040516102d69190611936565b60405180910390f35b6102e7610a29565b6040516102f49190611995565b60405180910390f35b61031760048036038101906103129190611637565b610abb565b604051610324919061197a565b60405180910390f35b61034760048036038101906103429190611637565b610b32565b604051610354919061197a565b60405180910390f35b61037760048036038101906103729190611713565b610b55565b005b610393600480360381019061038e91906115a4565b610bf2565b6040516103a09190611b17565b60405180910390f35b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043090611a97565b60405180910390fd5b60005b8281101561047b5761046884828151811061045a57610459611dd6565b5b602002602001015183610c79565b808061047390611d2f565b91505061043c565b50505050565b60606003805461049090611ccc565b80601f01602080910402602001604051908101604052809291908181526020018280546104bc90611ccc565b80156105095780601f106104de57610100808354040283529160200191610509565b820191906000526020600020905b8154815290600101906020018083116104ec57829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059a90611a97565b60405180910390fd5b6105ad3082610c79565b50565b6000806105bb610dd9565b90506105c8818585610de1565b600191505092915050565b6000600254905090565b6000806105e8610dd9565b90506105f5858285610fac565b610600858585611038565b60019150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069390611a97565b60405180910390fd5b6106a63082610c79565b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016106e1929190611951565b602060405180830381600087803b1580156106fb57600080fd5b505af115801561070f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073391906116e6565b505050565b60006012905090565b60008061074c610dd9565b905061076d81858561075e8589610bf2565b6107689190611bba565b610de1565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ff90611a97565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610843929190611951565b602060405180830381600087803b15801561085d57600080fd5b505af1158015610871573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089591906116e6565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190611a97565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610965929190611951565b602060405180830381600087803b15801561097f57600080fd5b505af1158015610993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b791906116e6565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610a3890611ccc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6490611ccc565b8015610ab15780601f10610a8657610100808354040283529160200191610ab1565b820191906000526020600020905b815481529060010190602001808311610a9457829003601f168201915b5050505050905090565b600080610ac6610dd9565b90506000610ad48286610bf2565b905083811015610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090611ad7565b60405180910390fd5b610b268286868403610de1565b60019250505092915050565b600080610b3d610dd9565b9050610b4a818585611038565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90611a97565b60405180910390fd5b610bef33826112b9565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090611af7565b60405180910390fd5b610cf560008383611490565b8060026000828254610d079190611bba565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d5c9190611bba565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610dc19190611b17565b60405180910390a3610dd560008383611495565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890611ab7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb8906119f7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f9f9190611b17565b60405180910390a3505050565b6000610fb88484610bf2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110325781811015611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90611a17565b60405180910390fd5b6110318484848403610de1565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90611a77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110f906119b7565b60405180910390fd5b611123838383611490565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090611a37565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461123c9190611bba565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112a09190611b17565b60405180910390a36112b3848484611495565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132090611a57565b60405180910390fd5b61133582600083611490565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b2906119d7565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546114129190611c10565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114779190611b17565b60405180910390a361148b83600084611495565b505050565b505050565b505050565b60006114ad6114a884611b72565b611b4d565b905080838252602082019050828560208602820111156114d0576114cf611e39565b5b60005b8581101561150057816114e6888261150a565b8452602084019350602083019250506001810190506114d3565b5050509392505050565b60008135905061151981612172565b92915050565b600082601f83011261153457611533611e34565b5b813561154484826020860161149a565b91505092915050565b60008151905061155c81612189565b92915050565b600081359050611571816121a0565b92915050565b60006020828403121561158d5761158c611e43565b5b600061159b8482850161150a565b91505092915050565b600080604083850312156115bb576115ba611e43565b5b60006115c98582860161150a565b92505060206115da8582860161150a565b9150509250929050565b6000806000606084860312156115fd576115fc611e43565b5b600061160b8682870161150a565b935050602061161c8682870161150a565b925050604061162d86828701611562565b9150509250925092565b6000806040838503121561164e5761164d611e43565b5b600061165c8582860161150a565b925050602061166d85828601611562565b9150509250929050565b6000806000606084860312156116905761168f611e43565b5b600084013567ffffffffffffffff8111156116ae576116ad611e3e565b5b6116ba8682870161151f565b93505060206116cb86828701611562565b92505060406116dc86828701611562565b9150509250925092565b6000602082840312156116fc576116fb611e43565b5b600061170a8482850161154d565b91505092915050565b60006020828403121561172957611728611e43565b5b600061173784828501611562565b91505092915050565b61174981611c44565b82525050565b61175881611c56565b82525050565b600061176982611b9e565b6117738185611ba9565b9350611783818560208601611c99565b61178c81611e48565b840191505092915050565b60006117a4602383611ba9565b91506117af82611e59565b604082019050919050565b60006117c7602283611ba9565b91506117d282611ea8565b604082019050919050565b60006117ea602283611ba9565b91506117f582611ef7565b604082019050919050565b600061180d601d83611ba9565b915061181882611f46565b602082019050919050565b6000611830602683611ba9565b915061183b82611f6f565b604082019050919050565b6000611853602183611ba9565b915061185e82611fbe565b604082019050919050565b6000611876602583611ba9565b91506118818261200d565b604082019050919050565b6000611899602c83611ba9565b91506118a48261205c565b604082019050919050565b60006118bc602483611ba9565b91506118c7826120ab565b604082019050919050565b60006118df602583611ba9565b91506118ea826120fa565b604082019050919050565b6000611902601f83611ba9565b915061190d82612149565b602082019050919050565b61192181611c82565b82525050565b61193081611c8c565b82525050565b600060208201905061194b6000830184611740565b92915050565b60006040820190506119666000830185611740565b6119736020830184611918565b9392505050565b600060208201905061198f600083018461174f565b92915050565b600060208201905081810360008301526119af818461175e565b905092915050565b600060208201905081810360008301526119d081611797565b9050919050565b600060208201905081810360008301526119f0816117ba565b9050919050565b60006020820190508181036000830152611a10816117dd565b9050919050565b60006020820190508181036000830152611a3081611800565b9050919050565b60006020820190508181036000830152611a5081611823565b9050919050565b60006020820190508181036000830152611a7081611846565b9050919050565b60006020820190508181036000830152611a9081611869565b9050919050565b60006020820190508181036000830152611ab08161188c565b9050919050565b60006020820190508181036000830152611ad0816118af565b9050919050565b60006020820190508181036000830152611af0816118d2565b9050919050565b60006020820190508181036000830152611b10816118f5565b9050919050565b6000602082019050611b2c6000830184611918565b92915050565b6000602082019050611b476000830184611927565b92915050565b6000611b57611b68565b9050611b638282611cfe565b919050565b6000604051905090565b600067ffffffffffffffff821115611b8d57611b8c611e05565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000611bc582611c82565b9150611bd083611c82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c0557611c04611d78565b5b828201905092915050565b6000611c1b82611c82565b9150611c2683611c82565b925082821015611c3957611c38611d78565b5b828203905092915050565b6000611c4f82611c62565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611cb7578082015181840152602081019050611c9c565b83811115611cc6576000848401525b50505050565b60006002820490506001821680611ce457607f821691505b60208210811415611cf857611cf7611da7565b5b50919050565b611d0782611e48565b810181811067ffffffffffffffff82111715611d2657611d25611e05565b5b80604052505050565b6000611d3a82611c82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611d6d57611d6c611d78565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d6573736167652073656e646572206d7573742062652074686520636f6e747260008201527f6163742773206f776e65722e0000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61217b81611c44565b811461218657600080fd5b50565b61219281611c56565b811461219d57600080fd5b50565b6121a981611c82565b81146121b457600080fd5b5056fea26469706673582212201978a99d2d6be09a74cf945f8cbfa4352b9fbbbe8518ded36403aa713e719e9464736f6c63430008070033