60a060405234801561000f575f80fd5b50604051611896380380611896833981810160405281019061003191906104ca565b806040518060400160405280600581526020017f566e6465730000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f564553000000000000000000000000000000000000000000000000000000000081525081600390816100ad9190610726565b5080600490816100bd9190610726565b5050505f8103610104575f6040517f392e1e270000000000000000000000000000000000000000000000000000000081526004016100fb919061082e565b60405180910390fd5b806080818152505050610128336aa56fa5b99019a5c800000061012e60201b60201c565b50610983565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361019e575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016101959190610886565b60405180910390fd5b6101af5f83836101b360201b60201c565b5050565b6101c483838361026860201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610263575f61020661048160201b60201c565b90505f61021761048a60201b60201c565b9050818111156102605780826040517f9e79f8540000000000000000000000000000000000000000000000000000000081526004016102579291906108ae565b60405180910390fd5b50505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102b8578060025f8282546102ac9190610902565b92505081905550610386565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610341578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033893929190610935565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103cd578060025f8282540392505081905550610417565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610474919061096a565b60405180910390a3505050565b5f608051905090565b5f600254905090565b5f80fd5b5f819050919050565b6104a981610497565b81146104b3575f80fd5b50565b5f815190506104c4816104a0565b92915050565b5f602082840312156104df576104de610493565b5b5f6104ec848285016104b6565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061057057607f821691505b6020821081036105835761058261052c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105e57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826105aa565b6105ef86836105aa565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61062a61062561062084610497565b610607565b610497565b9050919050565b5f819050919050565b61064383610610565b61065761064f82610631565b8484546105b6565b825550505050565b5f90565b61066b61065f565b61067681848461063a565b505050565b5b818110156106995761068e5f82610663565b60018101905061067c565b5050565b601f8211156106de576106af81610589565b6106b88461059b565b810160208510156106c7578190505b6106db6106d38561059b565b83018261067b565b50505b505050565b5f82821c905092915050565b5f6106fe5f19846008026106e3565b1980831691505092915050565b5f61071683836106ef565b9150826002028217905092915050565b61072f826104f5565b67ffffffffffffffff811115610748576107476104ff565b5b6107528254610559565b61075d82828561069d565b5f60209050601f83116001811461078e575f841561077c578287015190505b610786858261070b565b8655506107ed565b601f19841661079c86610589565b5f5b828110156107c35784890151825560018201915060208501945060208101905061079e565b868310156107e057848901516107dc601f8916826106ef565b8355505b6001600288020188555050505b505050505050565b5f819050919050565b5f61081861081361080e846107f5565b610607565b610497565b9050919050565b610828816107fe565b82525050565b5f6020820190506108415f83018461081f565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61087082610847565b9050919050565b61088081610866565b82525050565b5f6020820190506108995f830184610877565b92915050565b6108a881610497565b82525050565b5f6040820190506108c15f83018561089f565b6108ce602083018461089f565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61090c82610497565b915061091783610497565b925082820190508082111561092f5761092e6108d5565b5b92915050565b5f6060820190506109485f830186610877565b610955602083018561089f565b610962604083018461089f565b949350505050565b5f60208201905061097d5f83018461089f565b92915050565b608051610efb61099b5f395f61031a0152610efb5ff3fe608060405234801561000f575f80fd5b506004361061009c575f3560e01c8063355274ea11610064578063355274ea1461015a57806370a082311461017857806395d89b41146101a8578063a9059cbb146101c6578063dd62ed3e146101f65761009c565b806306fdde03146100a0578063095ea7b3146100be57806318160ddd146100ee57806323b872dd1461010c578063313ce5671461013c575b5f80fd5b6100a8610226565b6040516100b59190610b4d565b60405180910390f35b6100d860048036038101906100d39190610bfe565b6102b6565b6040516100e59190610c56565b60405180910390f35b6100f66102d8565b6040516101039190610c7e565b60405180910390f35b61012660048036038101906101219190610c97565b6102e1565b6040516101339190610c56565b60405180910390f35b61014461030f565b6040516101519190610d02565b60405180910390f35b610162610317565b60405161016f9190610c7e565b60405180910390f35b610192600480360381019061018d9190610d1b565b61033e565b60405161019f9190610c7e565b60405180910390f35b6101b0610383565b6040516101bd9190610b4d565b60405180910390f35b6101e060048036038101906101db9190610bfe565b610413565b6040516101ed9190610c56565b60405180910390f35b610210600480360381019061020b9190610d46565b610435565b60405161021d9190610c7e565b60405180910390f35b60606003805461023590610db1565b80601f016020809104026020016040519081016040528092919081815260200182805461026190610db1565b80156102ac5780601f10610283576101008083540402835291602001916102ac565b820191905f5260205f20905b81548152906001019060200180831161028f57829003601f168201915b5050505050905090565b5f806102c06104b7565b90506102cd8185856104be565b600191505092915050565b5f600254905090565b5f806102eb6104b7565b90506102f88582856104d0565b610303858585610562565b60019150509392505050565b5f6012905090565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461039290610db1565b80601f01602080910402602001604051908101604052809291908181526020018280546103be90610db1565b80156104095780601f106103e057610100808354040283529160200191610409565b820191905f5260205f20905b8154815290600101906020018083116103ec57829003601f168201915b5050505050905090565b5f8061041d6104b7565b905061042a818585610562565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6104cb8383836001610652565b505050565b5f6104db8484610435565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461055c578181101561054d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161054493929190610df0565b60405180910390fd5b61055b84848484035f610652565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105d2575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105c99190610e25565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610642575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106399190610e25565b60405180910390fd5b61064d838383610821565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106c2575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016106b99190610e25565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610732575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107299190610e25565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561081b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108129190610c7e565b60405180910390a35b50505050565b61082c8383836108c4565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108bf575f610868610317565b90505f6108736102d8565b9050818111156108bc5780826040517f9e79f8540000000000000000000000000000000000000000000000000000000081526004016108b3929190610e3e565b60405180910390fd5b50505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610914578060025f8282546109089190610e92565b925050819055506109e2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561099d578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161099493929190610df0565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a29578060025f8282540392505081905550610a73565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ad09190610c7e565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610b1f82610add565b610b298185610ae7565b9350610b39818560208601610af7565b610b4281610b05565b840191505092915050565b5f6020820190508181035f830152610b658184610b15565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b9a82610b71565b9050919050565b610baa81610b90565b8114610bb4575f80fd5b50565b5f81359050610bc581610ba1565b92915050565b5f819050919050565b610bdd81610bcb565b8114610be7575f80fd5b50565b5f81359050610bf881610bd4565b92915050565b5f8060408385031215610c1457610c13610b6d565b5b5f610c2185828601610bb7565b9250506020610c3285828601610bea565b9150509250929050565b5f8115159050919050565b610c5081610c3c565b82525050565b5f602082019050610c695f830184610c47565b92915050565b610c7881610bcb565b82525050565b5f602082019050610c915f830184610c6f565b92915050565b5f805f60608486031215610cae57610cad610b6d565b5b5f610cbb86828701610bb7565b9350506020610ccc86828701610bb7565b9250506040610cdd86828701610bea565b9150509250925092565b5f60ff82169050919050565b610cfc81610ce7565b82525050565b5f602082019050610d155f830184610cf3565b92915050565b5f60208284031215610d3057610d2f610b6d565b5b5f610d3d84828501610bb7565b91505092915050565b5f8060408385031215610d5c57610d5b610b6d565b5b5f610d6985828601610bb7565b9250506020610d7a85828601610bb7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610dc857607f821691505b602082108103610ddb57610dda610d84565b5b50919050565b610dea81610b90565b82525050565b5f606082019050610e035f830186610de1565b610e106020830185610c6f565b610e1d6040830184610c6f565b949350505050565b5f602082019050610e385f830184610de1565b92915050565b5f604082019050610e515f830185610c6f565b610e5e6020830184610c6f565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e9c82610bcb565b9150610ea783610bcb565b9250828201905080821115610ebf57610ebe610e65565b5b9291505056fea2646970667358221220c5b9e83295e743dade3e5f72c76ecaca8282f7c74dfb44a7cc13d26dc6da6af464736f6c63430008190033000000000000000000000000000000000000000000a56fa5b99019a5c8000000