60806040523480156200001157600080fd5b50604051620028d3380380620028d3833981810160405281019062000037919062000578565b33848481600390816200004b919062000869565b5080600490816200005d919062000869565b5050506200007181620000cf60201b60201c565b50620000848282620001c360201b60201c565b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000a6b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000136576040517fd924e5f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360405160405180910390a2807f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05560007f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d15550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000235576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022c90620009b1565b60405180910390fd5b62000249600083836200033b60201b60201c565b80600260008282546200025d919062000a02565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002b4919062000a02565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200031b919062000a4e565b60405180910390a362000337600083836200034060201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003ae8262000363565b810181811067ffffffffffffffff82111715620003d057620003cf62000374565b5b80604052505050565b6000620003e562000345565b9050620003f38282620003a3565b919050565b600067ffffffffffffffff82111562000416576200041562000374565b5b620004218262000363565b9050602081019050919050565b60005b838110156200044e57808201518184015260208101905062000431565b60008484015250505050565b6000620004716200046b84620003f8565b620003d9565b90508281526020810184848401111562000490576200048f6200035e565b5b6200049d8482856200042e565b509392505050565b600082601f830112620004bd57620004bc62000359565b5b8151620004cf8482602086016200045a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200050582620004d8565b9050919050565b6200051781620004f8565b81146200052357600080fd5b50565b60008151905062000537816200050c565b92915050565b6000819050919050565b62000552816200053d565b81146200055e57600080fd5b50565b600081519050620005728162000547565b92915050565b600080600080608085870312156200059557620005946200034f565b5b600085015167ffffffffffffffff811115620005b657620005b562000354565b5b620005c487828801620004a5565b945050602085015167ffffffffffffffff811115620005e857620005e762000354565b5b620005f687828801620004a5565b9350506040620006098782880162000526565b92505060606200061c8782880162000561565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067b57607f821691505b60208210810362000691576200069062000633565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006bc565b620007078683620006bc565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200074a620007446200073e846200053d565b6200071f565b6200053d565b9050919050565b6000819050919050565b620007668362000729565b6200077e620007758262000751565b848454620006c9565b825550505050565b600090565b6200079562000786565b620007a28184846200075b565b505050565b5b81811015620007ca57620007be6000826200078b565b600181019050620007a8565b5050565b601f8211156200081957620007e38162000697565b620007ee84620006ac565b81016020851015620007fe578190505b620008166200080d85620006ac565b830182620007a7565b50505b505050565b600082821c905092915050565b60006200083e600019846008026200081e565b1980831691505092915050565b60006200085983836200082b565b9150826002028217905092915050565b620008748262000628565b67ffffffffffffffff81111562000890576200088f62000374565b5b6200089c825462000662565b620008a9828285620007ce565b600060209050601f831160018114620008e15760008415620008cc578287015190505b620008d885826200084b565b86555062000948565b601f198416620008f18662000697565b60005b828110156200091b57848901518255600182019150602085019450602081019050620008f4565b868310156200093b578489015162000937601f8916826200082b565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000999601f8362000950565b9150620009a68262000961565b602082019050919050565b60006020820190508181036000830152620009cc816200098a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a0f826200053d565b915062000a1c836200053d565b925082820190508082111562000a375762000a36620009d3565b5b92915050565b62000a48816200053d565b82525050565b600060208201905062000a65600083018462000a3d565b92915050565b611e588062000a7b6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638da5cb5b116100ad578063a9059cbb11610071578063a9059cbb14610331578063dd62ed3e14610361578063e30c397814610391578063f2fde38b146103af578063f851a440146103cb5761012c565b80638da5cb5b1461028d5780638f283970146102ab57806395d89b41146102c7578063a0712d68146102e5578063a457c2d7146103015761012c565b806339509351116100f457806339509351146101eb57806342966c681461021b57806370a0823114610237578063710bf3221461026757806379ba5097146102835761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b6101396103e9565b604051610146919061151a565b60405180910390f35b610169600480360381019061016491906115d5565b61047b565b6040516101769190611630565b60405180910390f35b61018761049e565b604051610194919061165a565b60405180910390f35b6101b760048036038101906101b29190611675565b6104a8565b6040516101c49190611630565b60405180910390f35b6101d56104d7565b6040516101e291906116e4565b60405180910390f35b610205600480360381019061020091906115d5565b6104e0565b6040516102129190611630565b60405180910390f35b610235600480360381019061023091906116ff565b610517565b005b610251600480360381019061024c919061172c565b6105a0565b60405161025e919061165a565b60405180910390f35b610281600480360381019061027c919061172c565b6105e8565b005b61028b610723565b005b6102956107a0565b6040516102a29190611768565b60405180910390f35b6102c560048036038101906102c0919061172c565b6107c9565b005b6102cf610879565b6040516102dc919061151a565b60405180910390f35b6102ff60048036038101906102fa91906116ff565b61090b565b005b61031b600480360381019061031691906115d5565b610994565b6040516103289190611630565b60405180910390f35b61034b600480360381019061034691906115d5565b610a0b565b6040516103589190611630565b60405180910390f35b61037b60048036038101906103769190611783565b610a2e565b604051610388919061165a565b60405180910390f35b610399610ab5565b6040516103a69190611768565b60405180910390f35b6103c960048036038101906103c4919061172c565b610ade565b005b6103d3610b56565b6040516103e09190611768565b60405180910390f35b6060600380546103f8906117f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610424906117f2565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600080610486610b7c565b9050610493818585610b84565b600191505092915050565b6000600254905090565b6000806104b3610b7c565b90506104c0858285610d4d565b6104cb858585610dd9565b60019150509392505050565b60006012905090565b6000806104eb610b7c565b905061050c8185856104fd8589610a2e565b6105079190611852565b610b84565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461057157600080fd5b61059d600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611058565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff166106076107a0565b73ffffffffffffffffffffffffffffffffffffffff1614610654576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106ba576040517fd924e5f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fd9be0e8e07417e00f2521db636cb53e316fd288f5051f16d2aa2bf0c3938a87660405160405180910390a2807f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d15550565b600061072d610ab5565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610794576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079d8161122e565b50565b60007f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c054905090565b3373ffffffffffffffffffffffffffffffffffffffff166107e86107a0565b73ffffffffffffffffffffffffffffffffffffffff1614610835576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054610888906117f2565b80601f01602080910402602001604051908101604052809291908181526020018280546108b4906117f2565b80156109015780601f106108d657610100808354040283529160200191610901565b820191906000526020600020905b8154815290600101906020018083116108e457829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096557600080fd5b610991600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611321565b50565b60008061099f610b7c565b905060006109ad8286610a2e565b9050838110156109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e9906118f8565b60405180910390fd5b6109ff8286868403610b84565b60019250505092915050565b600080610a16610b7c565b9050610a23818585610dd9565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d154905090565b3373ffffffffffffffffffffffffffffffffffffffff16610afd6107a0565b73ffffffffffffffffffffffffffffffffffffffff1614610b4a576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b538161122e565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea9061198a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990611a1c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610d40919061165a565b60405180910390a3505050565b6000610d598484610a2e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dd35781811015610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90611a88565b60405180910390fd5b610dd28484848403610b84565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90611b1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae90611bac565b60405180910390fd5b610ec2838383611480565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90611c3e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fdb9190611852565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161103f919061165a565b60405180910390a3611052848484611485565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90611cd0565b60405180910390fd5b6110d382600083611480565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090611d62565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546111b09190611d82565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611215919061165a565b60405180910390a361122983600084611485565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611294576040517fd924e5f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360405160405180910390a2807f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05560007f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d15550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790611e02565b60405180910390fd5b61139c60008383611480565b80600260008282546113ae9190611852565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114039190611852565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611468919061165a565b60405180910390a361147c60008383611485565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156114c45780820151818401526020810190506114a9565b60008484015250505050565b6000601f19601f8301169050919050565b60006114ec8261148a565b6114f68185611495565b93506115068185602086016114a6565b61150f816114d0565b840191505092915050565b6000602082019050818103600083015261153481846114e1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061156c82611541565b9050919050565b61157c81611561565b811461158757600080fd5b50565b60008135905061159981611573565b92915050565b6000819050919050565b6115b28161159f565b81146115bd57600080fd5b50565b6000813590506115cf816115a9565b92915050565b600080604083850312156115ec576115eb61153c565b5b60006115fa8582860161158a565b925050602061160b858286016115c0565b9150509250929050565b60008115159050919050565b61162a81611615565b82525050565b60006020820190506116456000830184611621565b92915050565b6116548161159f565b82525050565b600060208201905061166f600083018461164b565b92915050565b60008060006060848603121561168e5761168d61153c565b5b600061169c8682870161158a565b93505060206116ad8682870161158a565b92505060406116be868287016115c0565b9150509250925092565b600060ff82169050919050565b6116de816116c8565b82525050565b60006020820190506116f960008301846116d5565b92915050565b6000602082840312156117155761171461153c565b5b6000611723848285016115c0565b91505092915050565b6000602082840312156117425761174161153c565b5b60006117508482850161158a565b91505092915050565b61176281611561565b82525050565b600060208201905061177d6000830184611759565b92915050565b6000806040838503121561179a5761179961153c565b5b60006117a88582860161158a565b92505060206117b98582860161158a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061180a57607f821691505b60208210810361181d5761181c6117c3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061185d8261159f565b91506118688361159f565b92508282019050808211156118805761187f611823565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006118e2602583611495565b91506118ed82611886565b604082019050919050565b60006020820190508181036000830152611911816118d5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611974602483611495565b915061197f82611918565b604082019050919050565b600060208201905081810360008301526119a381611967565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a06602283611495565b9150611a11826119aa565b604082019050919050565b60006020820190508181036000830152611a35816119f9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611a72601d83611495565b9150611a7d82611a3c565b602082019050919050565b60006020820190508181036000830152611aa181611a65565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611b04602583611495565b9150611b0f82611aa8565b604082019050919050565b60006020820190508181036000830152611b3381611af7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611b96602383611495565b9150611ba182611b3a565b604082019050919050565b60006020820190508181036000830152611bc581611b89565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611c28602683611495565b9150611c3382611bcc565b604082019050919050565b60006020820190508181036000830152611c5781611c1b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611cba602183611495565b9150611cc582611c5e565b604082019050919050565b60006020820190508181036000830152611ce981611cad565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611d4c602283611495565b9150611d5782611cf0565b604082019050919050565b60006020820190508181036000830152611d7b81611d3f565b9050919050565b6000611d8d8261159f565b9150611d988361159f565b9250828203905081811115611db057611daf611823565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611dec601f83611495565b9150611df782611db6565b602082019050919050565b60006020820190508181036000830152611e1b81611ddf565b905091905056fea2646970667358221220a064dafad64221d3190cf75942ec610213b29210cc85e9be69bf3752fed0ff1d64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000094ec28e6fceb5b3ce1afb316520a03487b5de0270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001257726170706564546573745374656c6c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045754535400000000000000000000000000000000000000000000000000000000