608060405234801561000f575f80fd5b506040518060400160405280600781526020017f474142636f696e000000000000000000000000000000000000000000000000008152505f908161005391906103b0565b506040518060400160405280600381526020017f47414200000000000000000000000000000000000000000000000000000000008152506001908161009891906103b0565b50601260025f6101000a81548160ff021916908360ff1602179055506a52b7d2dcc80cd2e400000060038190555060035460045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600354604051610169919061048e565b60405180910390a36104a7565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806101f157607f821691505b602082108103610204576102036101ad565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261022b565b610270868361022b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6102b46102af6102aa84610288565b610291565b610288565b9050919050565b5f819050919050565b6102cd8361029a565b6102e16102d9826102bb565b848454610237565b825550505050565b5f90565b6102f56102e9565b6103008184846102c4565b505050565b5b81811015610323576103185f826102ed565b600181019050610306565b5050565b601f821115610368576103398161020a565b6103428461021c565b81016020851015610351578190505b61036561035d8561021c565b830182610305565b50505b505050565b5f82821c905092915050565b5f6103885f198460080261036d565b1980831691505092915050565b5f6103a08383610379565b9150826002028217905092915050565b6103b982610176565b67ffffffffffffffff8111156103d2576103d1610180565b5b6103dc82546101da565b6103e7828285610327565b5f60209050601f831160018114610418575f8415610406578287015190505b6104108582610395565b865550610477565b601f1984166104268661020a565b5f5b8281101561044d57848901518255600182019150602085019450602081019050610428565b8683101561046a5784890151610466601f891682610379565b8355505b6001600288020188555050505b505050505050565b61048881610288565b82525050565b5f6020820190506104a15f83018461047f565b92915050565b610e6e806104b45f395ff3fe608060405234801561000f575f80fd5b506004361061009c575f3560e01c80633eaaf86b116100645780633eaaf86b1461015a57806370a082311461017857806395d89b41146101a8578063a9059cbb146101c6578063dd62ed3e146101f65761009c565b806306fdde03146100a0578063095ea7b3146100be57806318160ddd146100ee57806323b872dd1461010c578063313ce5671461013c575b5f80fd5b6100a8610226565b6040516100b59190610a41565b60405180910390f35b6100d860048036038101906100d39190610af2565b6102b1565b6040516100e59190610b4a565b60405180910390f35b6100f661039e565b6040516101039190610b72565b60405180910390f35b61012660048036038101906101219190610b8b565b6103ef565b6040516101339190610b4a565b60405180910390f35b6101446106cf565b6040516101519190610bf6565b60405180910390f35b6101626106e1565b60405161016f9190610b72565b60405180910390f35b610192600480360381019061018d9190610c0f565b6106e7565b60405161019f9190610b72565b60405180910390f35b6101b061072d565b6040516101bd9190610a41565b60405180910390f35b6101e060048036038101906101db9190610af2565b6107b9565b6040516101ed9190610b4a565b60405180910390f35b610210600480360381019061020b9190610c3a565b61094f565b60405161021d9190610b72565b60405180910390f35b5f805461023290610ca5565b80601f016020809104026020016040519081016040528092919081815260200182805461025e90610ca5565b80156102a95780601f10610280576101008083540402835291602001916102a9565b820191905f5260205f20905b81548152906001019060200180831161028c57829003601f168201915b505050505081565b5f8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161038c9190610b72565b60405180910390a36001905092915050565b5f60045f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546003546103ea9190610d02565b905090565b5f8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046790610d7f565b60405180910390fd5b8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561052b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052290610de7565b60405180910390fd5b8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105779190610d02565b925050819055508160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106059190610d02565b925050819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106589190610e05565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106bc9190610b72565b60405180910390a3600190509392505050565b60025f9054906101000a900460ff1681565b60035481565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6001805461073a90610ca5565b80601f016020809104026020016040519081016040528092919081815260200182805461076690610ca5565b80156107b15780601f10610788576101008083540402835291602001916107b1565b820191905f5260205f20905b81548152906001019060200180831161079457829003601f168201915b505050505081565b5f8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190610d7f565b60405180910390fd5b8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108869190610d02565b925050819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108d99190610e05565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161093d9190610b72565b60405180910390a36001905092915050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610a13826109d1565b610a1d81856109db565b9350610a2d8185602086016109eb565b610a36816109f9565b840191505092915050565b5f6020820190508181035f830152610a598184610a09565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a8e82610a65565b9050919050565b610a9e81610a84565b8114610aa8575f80fd5b50565b5f81359050610ab981610a95565b92915050565b5f819050919050565b610ad181610abf565b8114610adb575f80fd5b50565b5f81359050610aec81610ac8565b92915050565b5f8060408385031215610b0857610b07610a61565b5b5f610b1585828601610aab565b9250506020610b2685828601610ade565b9150509250929050565b5f8115159050919050565b610b4481610b30565b82525050565b5f602082019050610b5d5f830184610b3b565b92915050565b610b6c81610abf565b82525050565b5f602082019050610b855f830184610b63565b92915050565b5f805f60608486031215610ba257610ba1610a61565b5b5f610baf86828701610aab565b9350506020610bc086828701610aab565b9250506040610bd186828701610ade565b9150509250925092565b5f60ff82169050919050565b610bf081610bdb565b82525050565b5f602082019050610c095f830184610be7565b92915050565b5f60208284031215610c2457610c23610a61565b5b5f610c3184828501610aab565b91505092915050565b5f8060408385031215610c5057610c4f610a61565b5b5f610c5d85828601610aab565b9250506020610c6e85828601610aab565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610cbc57607f821691505b602082108103610ccf57610cce610c78565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d0c82610abf565b9150610d1783610abf565b9250828203905081811115610d2f57610d2e610cd5565b5b92915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f610d696014836109db565b9150610d7482610d35565b602082019050919050565b5f6020820190508181035f830152610d9681610d5d565b9050919050565b7f416c6c6f77616e636520657863656564656400000000000000000000000000005f82015250565b5f610dd16012836109db565b9150610ddc82610d9d565b602082019050919050565b5f6020820190508181035f830152610dfe81610dc5565b9050919050565b5f610e0f82610abf565b9150610e1a83610abf565b9250828201905080821115610e3257610e31610cd5565b5b9291505056fea2646970667358221220d1021793b9a8ac48e94aa57ecd5127a3b060444c5e272dcbfd9b4ebd3b3bea7d64736f6c634300081a0033