60a060405234801561000f575f80fd5b5060405161174f38038061174f833981810160405281019061003191906103c5565b6040518060400160405280600981526020017f54657374205553444300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f555344430000000000000000000000000000000000000000000000000000000081525081600390816100ac919061062a565b5080600490816100bc919061062a565b5050506100d93369d3c21bcecceda10000006100ed60201b60201c565b8060ff1660808160ff16815250505061080e565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361015d575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016101549190610738565b60405180910390fd5b61016e5f838361017260201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101c2578060025f8282546101b6919061077e565b92505081905550610290565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561024b578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610242939291906107c0565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102d7578060025f8282540392505081905550610321565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161037e91906107f5565b60405180910390a3505050565b5f80fd5b5f60ff82169050919050565b6103a48161038f565b81146103ae575f80fd5b50565b5f815190506103bf8161039b565b92915050565b5f602082840312156103da576103d961038b565b5b5f6103e7848285016103b1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061046b57607f821691505b60208210810361047e5761047d610427565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826104a5565b6104ea86836104a5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61052e61052961052484610502565b61050b565b610502565b9050919050565b5f819050919050565b61054783610514565b61055b61055382610535565b8484546104b1565b825550505050565b5f90565b61056f610563565b61057a81848461053e565b505050565b5b8181101561059d576105925f82610567565b600181019050610580565b5050565b601f8211156105e2576105b381610484565b6105bc84610496565b810160208510156105cb578190505b6105df6105d785610496565b83018261057f565b50505b505050565b5f82821c905092915050565b5f6106025f19846008026105e7565b1980831691505092915050565b5f61061a83836105f3565b9150826002028217905092915050565b610633826103f0565b67ffffffffffffffff81111561064c5761064b6103fa565b5b6106568254610454565b6106618282856105a1565b5f60209050601f831160018114610692575f8415610680578287015190505b61068a858261060f565b8655506106f1565b601f1984166106a086610484565b5f5b828110156106c7578489015182556001820191506020850194506020810190506106a2565b868310156106e457848901516106e0601f8916826105f3565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610722826106f9565b9050919050565b61073281610718565b82525050565b5f60208201905061074b5f830184610729565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61078882610502565b915061079383610502565b92508282019050808211156107ab576107aa610751565b5b92915050565b6107ba81610502565b82525050565b5f6060820190506107d35f830186610729565b6107e060208301856107b1565b6107ed60408301846107b1565b949350505050565b5f6020820190506108085f8301846107b1565b92915050565b608051610f296108265f395f61037c0152610f295ff3fe608060405234801561000f575f80fd5b50600436106100b2575f3560e01c8063313ce5671161006f578063313ce5671461018a57806370a08231146101a857806395d89b41146101d8578063a9059cbb146101f6578063dd62ed3e14610226578063fb4dcefa14610256576100b2565b806305ea5c22146100b657806306fdde03146100d2578063095ea7b3146100f057806318160ddd1461012057806323b872dd1461013e5780632d688ca81461016e575b5f80fd5b6100d060048036038101906100cb9190610bc3565b610272565b005b6100da610282565b6040516100e79190610c83565b60405180910390f35b61010a60048036038101906101059190610ca3565b610312565b6040516101179190610cfb565b60405180910390f35b610128610334565b6040516101359190610d23565b60405180910390f35b61015860048036038101906101539190610bc3565b61033d565b6040516101659190610cfb565b60405180910390f35b61018860048036038101906101839190610ca3565b61036b565b005b610192610379565b60405161019f9190610d57565b60405180910390f35b6101c260048036038101906101bd9190610d70565b6103a0565b6040516101cf9190610d23565b60405180910390f35b6101e06103e5565b6040516101ed9190610c83565b60405180910390f35b610210600480360381019061020b9190610ca3565b610475565b60405161021d9190610cfb565b60405180910390f35b610240600480360381019061023b9190610d9b565b610497565b60405161024d9190610d23565b60405180910390f35b610270600480360381019061026b9190610d9b565b610519565b005b61027d838383610530565b505050565b60606003805461029190610e06565b80601f01602080910402602001604051908101604052809291908181526020018280546102bd90610e06565b80156103085780601f106102df57610100808354040283529160200191610308565b820191905f5260205f20905b8154815290600101906020018083116102eb57829003601f168201915b5050505050905090565b5f8061031c610542565b9050610329818585610530565b600191505092915050565b5f600254905090565b5f80610347610542565b9050610354858285610549565b61035f8585856105db565b60019150509392505050565b61037582826106cb565b5050565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060600480546103f490610e06565b80601f016020809104026020016040519081016040528092919081815260200182805461042090610e06565b801561046b5780601f106104425761010080835404028352916020019161046b565b820191905f5260205f20905b81548152906001019060200180831161044e57829003601f168201915b5050505050905090565b5f8061047f610542565b905061048c8185856105db565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61052c8282610527856103a0565b6105db565b5050565b61053d838383600161074a565b505050565b5f33905090565b5f6105548484610497565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105d557818110156105c6578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016105bd93929190610e45565b60405180910390fd5b6105d484848484035f61074a565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361064b575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016106429190610e7a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106bb575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106b29190610e7a565b60405180910390fd5b6106c6838383610919565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361073b575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107329190610e7a565b60405180910390fd5b6107465f8383610919565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036107ba575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107b19190610e7a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361082a575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108219190610e7a565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610913578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161090a9190610d23565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610969578060025f82825461095d9190610ec0565b92505081905550610a37565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156109f2578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016109e993929190610e45565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a7e578060025f8282540392505081905550610ac8565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b259190610d23565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b5f82610b36565b9050919050565b610b6f81610b55565b8114610b79575f80fd5b50565b5f81359050610b8a81610b66565b92915050565b5f819050919050565b610ba281610b90565b8114610bac575f80fd5b50565b5f81359050610bbd81610b99565b92915050565b5f805f60608486031215610bda57610bd9610b32565b5b5f610be786828701610b7c565b9350506020610bf886828701610b7c565b9250506040610c0986828701610baf565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610c5582610c13565b610c5f8185610c1d565b9350610c6f818560208601610c2d565b610c7881610c3b565b840191505092915050565b5f6020820190508181035f830152610c9b8184610c4b565b905092915050565b5f8060408385031215610cb957610cb8610b32565b5b5f610cc685828601610b7c565b9250506020610cd785828601610baf565b9150509250929050565b5f8115159050919050565b610cf581610ce1565b82525050565b5f602082019050610d0e5f830184610cec565b92915050565b610d1d81610b90565b82525050565b5f602082019050610d365f830184610d14565b92915050565b5f60ff82169050919050565b610d5181610d3c565b82525050565b5f602082019050610d6a5f830184610d48565b92915050565b5f60208284031215610d8557610d84610b32565b5b5f610d9284828501610b7c565b91505092915050565b5f8060408385031215610db157610db0610b32565b5b5f610dbe85828601610b7c565b9250506020610dcf85828601610b7c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610e1d57607f821691505b602082108103610e3057610e2f610dd9565b5b50919050565b610e3f81610b55565b82525050565b5f606082019050610e585f830186610e36565b610e656020830185610d14565b610e726040830184610d14565b949350505050565b5f602082019050610e8d5f830184610e36565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610eca82610b90565b9150610ed583610b90565b9250828201905080821115610eed57610eec610e93565b5b9291505056fea26469706673582212208a738d63c5db4afd58ca832104ae474a23abd4a2dcd3871f5bb4594b0f030a9864736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000006