608060405234801561000f575f80fd5b506040518060400160405280600481526020017f78555344000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f7855534400000000000000000000000000000000000000000000000000000000815250816003908161008b919061031d565b50806004908161009b919061031d565b5050503360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103ec565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061015e57607f821691505b6020821081036101715761017061011a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101d37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610198565b6101dd8683610198565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61022161021c610217846101f5565b6101fe565b6101f5565b9050919050565b5f819050919050565b61023a83610207565b61024e61024682610228565b8484546101a4565b825550505050565b5f90565b610262610256565b61026d818484610231565b505050565b5b81811015610290576102855f8261025a565b600181019050610273565b5050565b601f8211156102d5576102a681610177565b6102af84610189565b810160208510156102be578190505b6102d26102ca85610189565b830182610272565b50505b505050565b5f82821c905092915050565b5f6102f55f19846008026102da565b1980831691505092915050565b5f61030d83836102e6565b9150826002028217905092915050565b610326826100e3565b67ffffffffffffffff81111561033f5761033e6100ed565b5b6103498254610147565b610354828285610294565b5f60209050601f831160018114610385575f8415610373578287015190505b61037d8582610302565b8655506103e4565b601f19841661039386610177565b5f5b828110156103ba57848901518255600182019150602085019450602081019050610395565b868310156103d757848901516103d3601f8916826102e6565b8355505b6001600288020188555050505b505050505050565b6111a4806103f95f395ff3fe608060405234801561000f575f80fd5b50600436106100b2575f3560e01c806370a082311161006f57806370a082311461018c5780638da5cb5b146101bc57806395d89b41146101da578063a9059cbb146101f8578063dd62ed3e14610228578063f2fde38b14610258576100b2565b806306fdde03146100b6578063095ea7b3146100d457806318160ddd1461010457806323b872dd14610122578063313ce5671461015257806340c10f1914610170575b5f80fd5b6100be610274565b6040516100cb9190610d4d565b60405180910390f35b6100ee60048036038101906100e99190610dfe565b610304565b6040516100fb9190610e56565b60405180910390f35b61010c610321565b6040516101199190610e7e565b60405180910390f35b61013c60048036038101906101379190610e97565b61032a565b6040516101499190610e56565b60405180910390f35b61015a610358565b6040516101679190610f02565b60405180910390f35b61018a60048036038101906101859190610dfe565b610360565b005b6101a660048036038101906101a19190610f1b565b6103fd565b6040516101b39190610e7e565b60405180910390f35b6101c4610442565b6040516101d19190610f55565b60405180910390f35b6101e2610467565b6040516101ef9190610d4d565b60405180910390f35b610212600480360381019061020d9190610dfe565b6104f7565b60405161021f9190610e56565b60405180910390f35b610242600480360381019061023d9190610f6e565b610519565b60405161024f9190610e7e565b60405180910390f35b610272600480360381019061026d9190610f1b565b61059b565b005b60606003805461028390610fd9565b80601f01602080910402602001604051908101604052809291908181526020018280546102af90610fd9565b80156102fa5780601f106102d1576101008083540402835291602001916102fa565b820191905f5260205f20905b8154815290600101906020018083116102dd57829003601f168201915b5050505050905090565b5f6103176103106106db565b84846106e2565b6001905092915050565b5f600254905090565b5f806103346106db565b90506103418582856106f4565b61034c858585610786565b60019150509392505050565b5f6012905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e690611053565b60405180910390fd5b6103f98282610876565b5050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461047690610fd9565b80601f01602080910402602001604051908101604052809291908181526020018280546104a290610fd9565b80156104ed5780601f106104c4576101008083540402835291602001916104ed565b820191905f5260205f20905b8154815290600101906020018083116104d057829003601f168201915b5050505050905090565b5f806105016106db565b905061050e818585610786565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461062a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062190611053565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068f906110bb565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b6106ef83838360016108f5565b505050565b5f6106ff8484610519565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107805781811015610771578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610768939291906110d9565b60405180910390fd5b61077f84848484035f6108f5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107f6575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107ed9190610f55565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610866575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161085d9190610f55565b60405180910390fd5b610871838383610ac4565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108e6575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016108dd9190610f55565b60405180910390fd5b6108f15f8383610ac4565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610965575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161095c9190610f55565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109d5575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016109cc9190610f55565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610abe578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ab59190610e7e565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b14578060025f828254610b08919061113b565b92505081905550610be2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610b9d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610b94939291906110d9565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c29578060025f8282540392505081905550610c73565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cd09190610e7e565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d1f82610cdd565b610d298185610ce7565b9350610d39818560208601610cf7565b610d4281610d05565b840191505092915050565b5f6020820190508181035f830152610d658184610d15565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d9a82610d71565b9050919050565b610daa81610d90565b8114610db4575f80fd5b50565b5f81359050610dc581610da1565b92915050565b5f819050919050565b610ddd81610dcb565b8114610de7575f80fd5b50565b5f81359050610df881610dd4565b92915050565b5f8060408385031215610e1457610e13610d6d565b5b5f610e2185828601610db7565b9250506020610e3285828601610dea565b9150509250929050565b5f8115159050919050565b610e5081610e3c565b82525050565b5f602082019050610e695f830184610e47565b92915050565b610e7881610dcb565b82525050565b5f602082019050610e915f830184610e6f565b92915050565b5f805f60608486031215610eae57610ead610d6d565b5b5f610ebb86828701610db7565b9350506020610ecc86828701610db7565b9250506040610edd86828701610dea565b9150509250925092565b5f60ff82169050919050565b610efc81610ee7565b82525050565b5f602082019050610f155f830184610ef3565b92915050565b5f60208284031215610f3057610f2f610d6d565b5b5f610f3d84828501610db7565b91505092915050565b610f4f81610d90565b82525050565b5f602082019050610f685f830184610f46565b92915050565b5f8060408385031215610f8457610f83610d6d565b5b5f610f9185828601610db7565b9250506020610fa285828601610db7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ff057607f821691505b60208210810361100357611002610fac565b5b50919050565b7f43616c6c6572206973206e6f7420746865206f776e65720000000000000000005f82015250565b5f61103d601783610ce7565b915061104882611009565b602082019050919050565b5f6020820190508181035f83015261106a81611031565b9050919050565b7f4e6577206f776e657220697320746865207a65726f20616464726573730000005f82015250565b5f6110a5601d83610ce7565b91506110b082611071565b602082019050919050565b5f6020820190508181035f8301526110d281611099565b9050919050565b5f6060820190506110ec5f830186610f46565b6110f96020830185610e6f565b6111066040830184610e6f565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61114582610dcb565b915061115083610dcb565b92508282019050808211156111685761116761110e565b5b9291505056fea26469706673582212207034511c3c0c2abb4a7a62725d60fe1bf860e68f5011d3ab8813979808a20b5964736f6c634300081a0033