60806040526040518060400160405280600481526020017f5a45555300000000000000000000000000000000000000000000000000000000815250600090816100489190610458565b506040518060400160405280601081526020017f5a6575732050726f746f636f6c204149000000000000000000000000000000008152506001908161008d9190610458565b50603260065560c86007556012600860006101000a81548160ff021916908360ff1602179055506a084595161401484a0000006009553480156100cf57600080fd5b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095460026000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516101fb9190610539565b60405180910390a3610554565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061028957607f821691505b60208210810361029c5761029b610242565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026103047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102c7565b61030e86836102c7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061035561035061034b84610326565b610330565b610326565b9050919050565b6000819050919050565b61036f8361033a565b61038361037b8261035c565b8484546102d4565b825550505050565b600090565b61039861038b565b6103a3818484610366565b505050565b5b818110156103c7576103bc600082610390565b6001810190506103a9565b5050565b601f82111561040c576103dd816102a2565b6103e6846102b7565b810160208510156103f5578190505b610409610401856102b7565b8301826103a8565b50505b505050565b600082821c905092915050565b600061042f60001984600802610411565b1980831691505092915050565b6000610448838361041e565b9150826002028217905092915050565b61046182610208565b67ffffffffffffffff81111561047a57610479610213565b5b6104848254610271565b61048f8282856103cb565b600060209050601f8311600181146104c257600084156104b0578287015190505b6104ba858261043c565b865550610522565b601f1984166104d0866102a2565b60005b828110156104f8578489015182556001820191506020850194506020810190506104d3565b868310156105155784890151610511601f89168261041e565b8355505b6001600288020188555050505b505050505050565b61053381610326565b82525050565b600060208201905061054e600083018461052a565b92915050565b6117bd806105636000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80635f286909116100ad57806395d89b411161007157806395d89b411461030f578063a9059cbb1461032d578063b17acdcd1461035d578063dd62ed3e14610379578063e609348a146103a95761012c565b80635f2869091461027b57806370a0823114610299578063715018a6146102c95780638da5cb5b146102d3578063957aa58c146102f15761012c565b8063313ce567116100f4578063313ce567146101eb5780633ed75965146102095780634706240214610225578063495bb3ea14610243578063573761981461025f5761012c565b806306fdde0314610131578063095ea7b31461014f57806316f0115b1461017f57806318160ddd1461019d57806323b872dd146101bb575b600080fd5b6101396103c5565b6040516101469190611217565b60405180910390f35b610169600480360381019061016491906112d2565b610453565b604051610176919061132d565b60405180910390f35b610187610545565b6040516101949190611357565b60405180910390f35b6101a561056b565b6040516101b29190611381565b60405180910390f35b6101d560048036038101906101d0919061139c565b610571565b6040516101e2919061132d565b60405180910390f35b6101f3610722565b604051610200919061140b565b60405180910390f35b610223600480360381019061021e9190611426565b610735565b005b61022d6107d7565b60405161023a9190611381565b60405180910390f35b61025d60048036038101906102589190611466565b6107dd565b005b610279600480360381019061027491906112d2565b6108cc565b005b6102836109df565b6040516102909190611381565b60405180910390f35b6102b360048036038101906102ae9190611466565b6109e5565b6040516102c09190611381565b60405180910390f35b6102d16109fd565b005b6102db610ad1565b6040516102e89190611357565b60405180910390f35b6102f9610af7565b604051610306919061132d565b60405180910390f35b610317610b0a565b6040516103249190611217565b60405180910390f35b610347600480360381019061034291906112d2565b610b98565b604051610354919061132d565b60405180910390f35b61037760048036038101906103729190611493565b610d36565b005b610393600480360381019061038e91906114c0565b610e48565b6040516103a09190611381565b60405180910390f35b6103c360048036038101906103be9190611466565b610e6d565b005b600180546103d29061152f565b80601f01602080910402602001604051908101604052809291908181526020018280546103fe9061152f565b801561044b5780601f106104205761010080835404028352916020019161044b565b820191906000526020600020905b81548152906001019060200180831161042e57829003601f168201915b505050505081565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105339190611381565b60405180910390a36001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105ff919061158f565b9250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610655919061158f565b9250508190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106ab91906115c3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161070f9190611381565b60405180910390a3600190509392505050565b600860009054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bc90611643565b60405180910390fd5b81600681905550806007819055505050565b60065481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086490611643565b60405180910390fd5b6001600560146101000a81548160ff02191690831515021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390611643565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610997929190611663565b6020604051808303816000875af11580156109b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109da91906116b8565b505050565b60075481565b60026020528060005260406000206000915090505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490611643565b60405180910390fd5b6000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900460ff1681565b60008054610b179061152f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b439061152f565b8015610b905780601f10610b6557610100808354040283529160200191610b90565b820191906000526020600020905b815481529060010190602001808311610b7357829003601f168201915b505050505081565b6000600560149054906101000a900460ff16610bb357600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610c1a57610c13338484610f0f565b9050610d30565b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c69919061158f565b9250508190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cbf91906115c3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d239190611381565b60405180910390a3600190505b92915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90611643565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610e01929190611663565b6020604051808303816000875af1158015610e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4491906116b8565b5050565b6003602052816000526040600020602052806000526040600020600091509150505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490611643565b60405180910390fd5b3660008037600080366000845af45050565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f60919061158f565b92505081905550600061271060065484610f7a91906116e5565b610f849190611756565b905080600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fd591906115c3565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110399190611381565b60405180910390a36000818461104f919061158f565b905080600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110a091906115c3565b9250508190555060006127106007546009546110bc91906116e5565b6110c69190611756565b9050600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481101561111457600080fd5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111719190611381565b60405180910390a3600193505050509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156111c15780820151818401526020810190506111a6565b60008484015250505050565b6000601f19601f8301169050919050565b60006111e982611187565b6111f38185611192565b93506112038185602086016111a3565b61120c816111cd565b840191505092915050565b6000602082019050818103600083015261123181846111de565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112698261123e565b9050919050565b6112798161125e565b811461128457600080fd5b50565b60008135905061129681611270565b92915050565b6000819050919050565b6112af8161129c565b81146112ba57600080fd5b50565b6000813590506112cc816112a6565b92915050565b600080604083850312156112e9576112e8611239565b5b60006112f785828601611287565b9250506020611308858286016112bd565b9150509250929050565b60008115159050919050565b61132781611312565b82525050565b6000602082019050611342600083018461131e565b92915050565b6113518161125e565b82525050565b600060208201905061136c6000830184611348565b92915050565b61137b8161129c565b82525050565b60006020820190506113966000830184611372565b92915050565b6000806000606084860312156113b5576113b4611239565b5b60006113c386828701611287565b93505060206113d486828701611287565b92505060406113e5868287016112bd565b9150509250925092565b600060ff82169050919050565b611405816113ef565b82525050565b600060208201905061142060008301846113fc565b92915050565b6000806040838503121561143d5761143c611239565b5b600061144b858286016112bd565b925050602061145c858286016112bd565b9150509250929050565b60006020828403121561147c5761147b611239565b5b600061148a84828501611287565b91505092915050565b6000602082840312156114a9576114a8611239565b5b60006114b7848285016112bd565b91505092915050565b600080604083850312156114d7576114d6611239565b5b60006114e585828601611287565b92505060206114f685828601611287565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061154757607f821691505b60208210810361155a57611559611500565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061159a8261129c565b91506115a58361129c565b92508282039050818111156115bd576115bc611560565b5b92915050565b60006115ce8261129c565b91506115d98361129c565b92508282019050808211156115f1576115f0611560565b5b92915050565b7f4e6f74206f776e65722100000000000000000000000000000000000000000000600082015250565b600061162d600a83611192565b9150611638826115f7565b602082019050919050565b6000602082019050818103600083015261165c81611620565b9050919050565b60006040820190506116786000830185611348565b6116856020830184611372565b9392505050565b61169581611312565b81146116a057600080fd5b50565b6000815190506116b28161168c565b92915050565b6000602082840312156116ce576116cd611239565b5b60006116dc848285016116a3565b91505092915050565b60006116f08261129c565b91506116fb8361129c565b92508282026117098161129c565b915082820484148315176117205761171f611560565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006117618261129c565b915061176c8361129c565b92508261177c5761177b611727565b5b82820490509291505056fea2646970667358221220f4100f55f700f4de254d2597b5d8d46066fdf346fc3d28887939518852e7097164736f6c634300081b0033