60a060405234801561000f575f80fd5b5060405161270d38038061270d8339818101604052810190610031919061026e565b818181600390816100429190610503565b5080600490816100529190610503565b5050508273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050670de0b6b3a7640000600781905550670de0b6b3a7640000600881905550436009819055505050506105d2565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100f0826100c7565b9050919050565b5f610101826100e6565b9050919050565b610111816100f7565b811461011b575f80fd5b50565b5f8151905061012c81610108565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101808261013a565b810181811067ffffffffffffffff8211171561019f5761019e61014a565b5b80604052505050565b5f6101b16100b6565b90506101bd8282610177565b919050565b5f67ffffffffffffffff8211156101dc576101db61014a565b5b6101e58261013a565b9050602081019050919050565b8281835e5f83830152505050565b5f61021261020d846101c2565b6101a8565b90508281526020810184848401111561022e5761022d610136565b5b6102398482856101f2565b509392505050565b5f82601f83011261025557610254610132565b5b8151610265848260208601610200565b91505092915050565b5f805f60608486031215610285576102846100bf565b5b5f6102928682870161011e565b935050602084015167ffffffffffffffff8111156102b3576102b26100c3565b5b6102bf86828701610241565b925050604084015167ffffffffffffffff8111156102e0576102df6100c3565b5b6102ec86828701610241565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061034457607f821691505b60208210810361035757610356610300565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103b97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261037e565b6103c3868361037e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104076104026103fd846103db565b6103e4565b6103db565b9050919050565b5f819050919050565b610420836103ed565b61043461042c8261040e565b84845461038a565b825550505050565b5f90565b61044861043c565b610453818484610417565b505050565b5b818110156104765761046b5f82610440565b600181019050610459565b5050565b601f8211156104bb5761048c8161035d565b6104958461036f565b810160208510156104a4578190505b6104b86104b08561036f565b830182610458565b50505b505050565b5f82821c905092915050565b5f6104db5f19846008026104c0565b1980831691505092915050565b5f6104f383836104cc565b9150826002028217905092915050565b61050c826102f6565b67ffffffffffffffff8111156105255761052461014a565b5b61052f825461032d565b61053a82828561047a565b5f60209050601f83116001811461056b575f8415610559578287015190505b61056385826104e8565b8655506105ca565b601f1984166105798661035d565b5f5b828110156105a05784890151825560018201915060208501945060208101905061057b565b868310156105bd57848901516105b9601f8916826104cc565b8355505b6001600288020188555050505b505050505050565b6080516120f261061b5f395f81816107590152818161086b015281816108d101528181610a1701528181610b7b01528181610ce401528181610e51015261107701526120f25ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c806347bd3718116100f7578063a6afed9511610095578063abdb5ea81161006f578063abdb5ea8146104e9578063d40e8f4a14610505578063dd62ed3e14610535578063ee27a2f214610565576101a7565b8063a6afed9514610491578063a9059cbb1461049b578063aa5af0fd146104cb576101a7565b806370a08231116100d157806370a08231146104075780638f840ddd1461043757806395d89b4114610455578063a275370d14610473576101a7565b806347bd3718146103af5780634b8a3529146103cd5780636c540baf146103e9576101a7565b80631e9a695011610164578063313ce5671161013e578063313ce567146103135780633af9e6691461033157806340c10f19146103615780634322b71414610391576101a7565b80631e9a69501461029557806323b872dd146102c55780632495a599146102f5576101a7565b806306fdde03146101ab578063095ea7b3146101c957806315f24053146101f957806317bfdfbc1461022957806318160ddd14610259578063182df0f514610277575b5f80fd5b6101b3610583565b6040516101c09190611a16565b60405180910390f35b6101e360048036038101906101de9190611ac7565b610613565b6040516101f09190611b1f565b60405180910390f35b610213600480360381019061020e9190611b38565b610635565b6040516102209190611b97565b60405180910390f35b610243600480360381019061023e9190611bb0565b6106ab565b6040516102509190611b97565b60405180910390f35b610261610711565b60405161026e9190611b97565b60405180910390f35b61027f61071a565b60405161028c9190611b97565b60405180910390f35b6102af60048036038101906102aa9190611ac7565b610720565b6040516102bc9190611b97565b60405180910390f35b6102df60048036038101906102da9190611bdb565b61083b565b6040516102ec9190611b1f565b60405180910390f35b6102fd610869565b60405161030a9190611c86565b60405180910390f35b61031b61088d565b6040516103289190611cba565b60405180910390f35b61034b60048036038101906103469190611bb0565b610895565b6040516103589190611b97565b60405180910390f35b61037b60048036038101906103769190611ac7565b6108c6565b6040516103889190611b97565b60405180910390f35b610399610a00565b6040516103a69190611b97565b60405180910390f35b6103b7610a06565b6040516103c49190611b97565b60405180910390f35b6103e760048036038101906103e29190611ac7565b610a0c565b005b6103f1610c57565b6040516103fe9190611b97565b60405180910390f35b610421600480360381019061041c9190611bb0565b610c5d565b60405161042e9190611b97565b60405180910390f35b61043f610ca2565b60405161044c9190611b97565b60405180910390f35b61045d610d95565b60405161046a9190611a16565b60405180910390f35b61047b610e25565b6040516104889190611b97565b60405180910390f35b610499610e31565b005b6104b560048036038101906104b09190611ac7565b611045565b6040516104c29190611b1f565b60405180910390f35b6104d3611067565b6040516104e09190611b97565b60405180910390f35b61050360048036038101906104fe9190611ac7565b61106d565b005b61051f600480360381019061051a9190611bb0565b611284565b60405161052c9190611b97565b60405180910390f35b61054f600480360381019061054a9190611cd3565b611299565b60405161055c9190611b97565b60405180910390f35b61056d61131b565b60405161057a9190611b97565b60405180910390f35b60606003805461059290611d3e565b80601f01602080910402602001604051908101604052809291908181526020018280546105be90611d3e565b80156106095780601f106105e057610100808354040283529160200191610609565b820191905f5260205f20905b8154815290600101906020018083116105ec57829003601f168201915b5050505050905090565b5f8061061d611325565b905061062a81858561132c565b600191505092915050565b5f805f8411610644575f61067a565b8284866106519190611d9b565b61065b9190611dce565b670de0b6b3a76400008561066f9190611e01565b6106799190611e6f565b5b9050670de0b6b3a764000065048c27395000826106979190611e01565b6106a19190611e6f565b9150509392505050565b5f670de0b6b3a7640000600854600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546107009190611e01565b61070a9190611e6f565b9050919050565b5f600254905090565b60075481565b5f610729610e31565b5f670de0b6b3a7640000600754846107419190611e01565b61074b9190611e6f565b9050610757848461133e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85836040518363ffffffff1660e01b81526004016107b2929190611eae565b6020604051808303815f875af11580156107ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f29190611eff565b610831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082890611f74565b60405180910390fd5b8091505092915050565b5f80610845611325565b90506108528582856113bd565b61085d85858561144f565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6012905090565b5f670de0b6b3a76400006007546108ab84610c5d565b6108b59190611e01565b6108bf9190611e6f565b9050919050565b5f6108cf610e31565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161092c93929190611f92565b6020604051808303815f875af1158015610948573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096c9190611eff565b6109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290611f74565b60405180910390fd5b5f806109b5610711565b90505f8111156109e757600754670de0b6b3a7640000856109d69190611e01565b6109e09190611e6f565b91506109eb565b8391505b6109f5858361153f565b819250505092915050565b60065481565b60055481565b610a14610e31565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a6e9190611fc7565b602060405180830381865afa158015610a89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aad9190611ff4565b1015610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590612069565b60405180910390fd5b600854670de0b6b3a764000082610b059190611e01565b610b0f9190611e6f565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610b5a9190611d9b565b925050819055508060055f828254610b729190611d9b565b925050819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610bd4929190611eae565b6020604051808303815f875af1158015610bf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c149190611eff565b610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90611f74565b60405180910390fd5b5050565b60095481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80610cac610711565b90505f8103610cbe575f915050610d92565b670de0b6b3a764000060075482610cd59190611e01565b610cdf9190611e6f565b6005547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d3b9190611fc7565b602060405180830381865afa158015610d56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7a9190611ff4565b610d849190611d9b565b610d8e9190611dce565b9150505b90565b606060048054610da490611d3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd090611d3e565b8015610e1b5780601f10610df257610100808354040283529160200191610e1b565b820191905f5260205f20905b815481529060010190602001808311610dfe57829003601f168201915b5050505050905090565b670de0b6b3a764000081565b5f4390505f60095482610e449190611dce565b90505f811115611041575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ea89190611fc7565b602060405180830381865afa158015610ec3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee79190611ff4565b90505f60055490505f610ef8610ca2565b90505f610f06848484610635565b90505f808411610f16575f610f41565b670de0b6b3a7640000848784610f2c9190611e01565b610f369190611e01565b610f409190611e6f565b5b90508060055f828254610f549190611d9b565b925050819055505f610f64610711565b90505f811115610fde575f670de0b6b3a764000060065484610f869190611e01565b610f909190611e6f565b85610f9b9190611d9b565b905081670de0b6b3a764000082888a610fb49190611d9b565b610fbe9190611dce565b610fc89190611e01565b610fd29190611e6f565b60078190555050610fee565b670de0b6b3a76400006007819055505b670de0b6b3a764000087846110039190611e01565b670de0b6b3a76400006110169190611d9b565b6008546110239190611e01565b61102d9190611e6f565b600881905550876009819055505050505050505b5050565b5f8061104f611325565b905061105c81858561144f565b600191505092915050565b60085481565b611075610e31565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b81526004016110d293929190611f92565b6020604051808303815f875af11580156110ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111129190611eff565b611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890611f74565b60405180910390fd5b5f670de0b6b3a7640000600854600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111a69190611e01565b6111b09190611e6f565b905080821115611219575f600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060055f82825461120d9190611dce565b9250508190555061127f565b81816112259190611dce565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160055f8282546112779190611dce565b925050819055505b505050565b600a602052805f5260405f205f915090505481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b65048c2739500081565b5f33905090565b61133983838360016115be565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ae575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016113a59190611fc7565b60405180910390fd5b6113b9825f8361178d565b5050565b5f6113c88484611299565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611449578181101561143a578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161143193929190612087565b60405180910390fd5b61144884848484035f6115be565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114bf575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016114b69190611fc7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361152f575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016115269190611fc7565b60405180910390fd5b61153a83838361178d565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115af575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016115a69190611fc7565b60405180910390fd5b6115ba5f838361178d565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361162e575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016116259190611fc7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361169e575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116959190611fc7565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611787578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161177e9190611b97565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117dd578060025f8282546117d19190611d9b565b925050819055506118ab565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611866578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161185d93929190612087565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118f2578060025f828254039250508190555061193c565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119999190611b97565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6119e8826119a6565b6119f281856119b0565b9350611a028185602086016119c0565b611a0b816119ce565b840191505092915050565b5f6020820190508181035f830152611a2e81846119de565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a6382611a3a565b9050919050565b611a7381611a59565b8114611a7d575f80fd5b50565b5f81359050611a8e81611a6a565b92915050565b5f819050919050565b611aa681611a94565b8114611ab0575f80fd5b50565b5f81359050611ac181611a9d565b92915050565b5f8060408385031215611add57611adc611a36565b5b5f611aea85828601611a80565b9250506020611afb85828601611ab3565b9150509250929050565b5f8115159050919050565b611b1981611b05565b82525050565b5f602082019050611b325f830184611b10565b92915050565b5f805f60608486031215611b4f57611b4e611a36565b5b5f611b5c86828701611ab3565b9350506020611b6d86828701611ab3565b9250506040611b7e86828701611ab3565b9150509250925092565b611b9181611a94565b82525050565b5f602082019050611baa5f830184611b88565b92915050565b5f60208284031215611bc557611bc4611a36565b5b5f611bd284828501611a80565b91505092915050565b5f805f60608486031215611bf257611bf1611a36565b5b5f611bff86828701611a80565b9350506020611c1086828701611a80565b9250506040611c2186828701611ab3565b9150509250925092565b5f819050919050565b5f611c4e611c49611c4484611a3a565b611c2b565b611a3a565b9050919050565b5f611c5f82611c34565b9050919050565b5f611c7082611c55565b9050919050565b611c8081611c66565b82525050565b5f602082019050611c995f830184611c77565b92915050565b5f60ff82169050919050565b611cb481611c9f565b82525050565b5f602082019050611ccd5f830184611cab565b92915050565b5f8060408385031215611ce957611ce8611a36565b5b5f611cf685828601611a80565b9250506020611d0785828601611a80565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611d5557607f821691505b602082108103611d6857611d67611d11565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611da582611a94565b9150611db083611a94565b9250828201905080821115611dc857611dc7611d6e565b5b92915050565b5f611dd882611a94565b9150611de383611a94565b9250828203905081811115611dfb57611dfa611d6e565b5b92915050565b5f611e0b82611a94565b9150611e1683611a94565b9250828202611e2481611a94565b91508282048414831517611e3b57611e3a611d6e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611e7982611a94565b9150611e8483611a94565b925082611e9457611e93611e42565b5b828204905092915050565b611ea881611a59565b82525050565b5f604082019050611ec15f830185611e9f565b611ece6020830184611b88565b9392505050565b611ede81611b05565b8114611ee8575f80fd5b50565b5f81519050611ef981611ed5565b92915050565b5f60208284031215611f1457611f13611a36565b5b5f611f2184828501611eeb565b91505092915050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f611f5e600f836119b0565b9150611f6982611f2a565b602082019050919050565b5f6020820190508181035f830152611f8b81611f52565b9050919050565b5f606082019050611fa55f830186611e9f565b611fb26020830185611e9f565b611fbf6040830184611b88565b949350505050565b5f602082019050611fda5f830184611e9f565b92915050565b5f81519050611fee81611a9d565b92915050565b5f6020828403121561200957612008611a36565b5b5f61201684828501611fe0565b91505092915050565b7f496e73756666696369656e74206c6971756964697479000000000000000000005f82015250565b5f6120536016836119b0565b915061205e8261201f565b602082019050919050565b5f6020820190508181035f83015261208081612047565b9050919050565b5f60608201905061209a5f830186611e9f565b6120a76020830185611b88565b6120b46040830184611b88565b94935050505056fea2646970667358221220b2b9002313780ae961f0899b2829f7f2b5d5956e5a60011bc52aca9063d8b97864736f6c634300081a003300000000000000000000000094cc0aac535ccdb3c01d6787d6413c739ae12bc40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000