608060405234801561000f575f80fd5b506040518060400160405280600b81526020017f4c657473205363726f6c6c0000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4c54530000000000000000000000000000000000000000000000000000000000815250816003908161008b91906105d5565b50806004908161009b91906105d5565b5050503360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506100f83369d3c21bcecceda10000006100fd60201b60201c565b6107b9565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361016d575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161016491906106e3565b60405180910390fd5b61017e5f838361018260201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101d2578060025f8282546101c69190610729565b925050819055506102a0565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561025b578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102529392919061076b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102e7578060025f8282540392505081905550610331565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161038e91906107a0565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061041657607f821691505b602082108103610429576104286103d2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261048b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610450565b6104958683610450565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104d96104d46104cf846104ad565b6104b6565b6104ad565b9050919050565b5f819050919050565b6104f2836104bf565b6105066104fe826104e0565b84845461045c565b825550505050565b5f90565b61051a61050e565b6105258184846104e9565b505050565b5b818110156105485761053d5f82610512565b60018101905061052b565b5050565b601f82111561058d5761055e8161042f565b61056784610441565b81016020851015610576578190505b61058a61058285610441565b83018261052a565b50505b505050565b5f82821c905092915050565b5f6105ad5f1984600802610592565b1980831691505092915050565b5f6105c5838361059e565b9150826002028217905092915050565b6105de8261039b565b67ffffffffffffffff8111156105f7576105f66103a5565b5b61060182546103ff565b61060c82828561054c565b5f60209050601f83116001811461063d575f841561062b578287015190505b61063585826105ba565b86555061069c565b601f19841661064b8661042f565b5f5b828110156106725784890151825560018201915060208501945060208101905061064d565b8683101561068f578489015161068b601f89168261059e565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106cd826106a4565b9050919050565b6106dd816106c3565b82525050565b5f6020820190506106f65f8301846106d4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610733826104ad565b915061073e836104ad565b9250828201905080821115610756576107556106fc565b5b92915050565b610765816104ad565b82525050565b5f60608201905061077e5f8301866106d4565b61078b602083018561075c565b610798604083018461075c565b949350505050565b5f6020820190506107b35f83018461075c565b92915050565b610ff9806107c65f395ff3fe608060405234801561000f575f80fd5b506004361061009c575f3560e01c806340c10f191161006457806340c10f191461015a57806370a082311461017657806395d89b41146101a6578063a9059cbb146101c4578063dd62ed3e146101f45761009c565b806306fdde03146100a0578063095ea7b3146100be57806318160ddd146100ee57806323b872dd1461010c578063313ce5671461013c575b5f80fd5b6100a8610224565b6040516100b59190610be4565b60405180910390f35b6100d860048036038101906100d39190610c95565b6102b4565b6040516100e59190610ced565b60405180910390f35b6100f66102d6565b6040516101039190610d15565b60405180910390f35b61012660048036038101906101219190610d2e565b6102df565b6040516101339190610ced565b60405180910390f35b61014461030d565b6040516101519190610d99565b60405180910390f35b610174600480360381019061016f9190610c95565b610315565b005b610190600480360381019061018b9190610db2565b6103f9565b60405161019d9190610d15565b60405180910390f35b6101ae61043e565b6040516101bb9190610be4565b60405180910390f35b6101de60048036038101906101d99190610c95565b6104ce565b6040516101eb9190610ced565b60405180910390f35b61020e60048036038101906102099190610ddd565b6104f0565b60405161021b9190610d15565b60405180910390f35b60606003805461023390610e48565b80601f016020809104026020016040519081016040528092919081815260200182805461025f90610e48565b80156102aa5780601f10610281576101008083540402835291602001916102aa565b820191905f5260205f20905b81548152906001019060200180831161028d57829003601f168201915b5050505050905090565b5f806102be610572565b90506102cb818585610579565b600191505092915050565b5f600254905090565b5f806102e9610572565b90506102f685828561058b565b61030185858561061d565b60019150509392505050565b5f6012905090565b61031d610572565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a290610ee8565b60405180910390fd5b6103b5828261070d565b8160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461044d90610e48565b80601f016020809104026020016040519081016040528092919081815260200182805461047990610e48565b80156104c45780601f1061049b576101008083540402835291602001916104c4565b820191905f5260205f20905b8154815290600101906020018083116104a757829003601f168201915b5050505050905090565b5f806104d8610572565b90506104e581858561061d565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b610586838383600161078c565b505050565b5f61059684846104f0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106175781811015610608578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016105ff93929190610f15565b60405180910390fd5b61061684848484035f61078c565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361068d575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016106849190610f4a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106fd575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106f49190610f4a565b60405180910390fd5b61070883838361095b565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361077d575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107749190610f4a565b60405180910390fd5b6107885f838361095b565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036107fc575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107f39190610f4a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086c575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108639190610f4a565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610955578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161094c9190610d15565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109ab578060025f82825461099f9190610f90565b92505081905550610a79565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610a34578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610a2b93929190610f15565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ac0578060025f8282540392505081905550610b0a565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b679190610d15565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610bb682610b74565b610bc08185610b7e565b9350610bd0818560208601610b8e565b610bd981610b9c565b840191505092915050565b5f6020820190508181035f830152610bfc8184610bac565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c3182610c08565b9050919050565b610c4181610c27565b8114610c4b575f80fd5b50565b5f81359050610c5c81610c38565b92915050565b5f819050919050565b610c7481610c62565b8114610c7e575f80fd5b50565b5f81359050610c8f81610c6b565b92915050565b5f8060408385031215610cab57610caa610c04565b5b5f610cb885828601610c4e565b9250506020610cc985828601610c81565b9150509250929050565b5f8115159050919050565b610ce781610cd3565b82525050565b5f602082019050610d005f830184610cde565b92915050565b610d0f81610c62565b82525050565b5f602082019050610d285f830184610d06565b92915050565b5f805f60608486031215610d4557610d44610c04565b5b5f610d5286828701610c4e565b9350506020610d6386828701610c4e565b9250506040610d7486828701610c81565b9150509250925092565b5f60ff82169050919050565b610d9381610d7e565b82525050565b5f602082019050610dac5f830184610d8a565b92915050565b5f60208284031215610dc757610dc6610c04565b5b5f610dd484828501610c4e565b91505092915050565b5f8060408385031215610df357610df2610c04565b5b5f610e0085828601610c4e565b9250506020610e1185828601610c4e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610e5f57607f821691505b602082108103610e7257610e71610e1b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520636f6e74725f8201527f616374206f776e65720000000000000000000000000000000000000000000000602082015250565b5f610ed2602983610b7e565b9150610edd82610e78565b604082019050919050565b5f6020820190508181035f830152610eff81610ec6565b9050919050565b610f0f81610c27565b82525050565b5f606082019050610f285f830186610f06565b610f356020830185610d06565b610f426040830184610d06565b949350505050565b5f602082019050610f5d5f830184610f06565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f9a82610c62565b9150610fa583610c62565b9250828201905080821115610fbd57610fbc610f63565b5b9291505056fea26469706673582212204c2d055fc93f8d17dcaa4e56d8d77d8ae0a521c1d5face0ecf350e1ec1342ae064736f6c634300081a0033