60806040526040518060400160405280600481526020017f53574147000000000000000000000000000000000000000000000000000000008152505f9081620000499190620003b7565b506040518060400160405280600481526020017f535741470000000000000000000000000000000000000000000000000000000081525060019081620000909190620003b7565b506b033b2e3c9fd0803cac653600600255601260035f6101000a81548160ff021916908360ff160217905550348015620000c8575f80fd5b503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025460045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506200049b565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620001cf57607f821691505b602082108103620001e557620001e46200018a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020c565b6200025586836200020c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200029f6200029962000293846200026d565b62000276565b6200026d565b9050919050565b5f819050919050565b620002ba836200027f565b620002d2620002c982620002a6565b84845462000218565b825550505050565b5f90565b620002e8620002da565b620002f5818484620002af565b505050565b5b818110156200031c57620003105f82620002de565b600181019050620002fb565b5050565b601f8211156200036b576200033581620001eb565b6200034084620001fd565b8101602085101562000350578190505b620003686200035f85620001fd565b830182620002fa565b50505b505050565b5f82821c905092915050565b5f6200038d5f198460080262000370565b1980831691505092915050565b5f620003a783836200037c565b9150826002028217905092915050565b620003c28262000153565b67ffffffffffffffff811115620003de57620003dd6200015d565b5b620003ea8254620001b7565b620003f782828562000320565b5f60209050601f8311600181146200042d575f841562000418578287015190505b6200042485826200039a565b86555062000493565b601f1984166200043d86620001eb565b5f5b8281101562000466578489015182556001820191506020850194506020810190506200043f565b8683101562000486578489015162000482601f8916826200037c565b8355505b6001600288020188555050505b505050505050565b610ed980620004a95f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c806370a082311161006f57806370a0823114610165578063715018a6146101955780638da5cb5b1461019f57806395d89b41146101bd578063a9059cbb146101db578063dd62ed3e1461020b576100a7565b806306fdde03146100ab578063095ea7b3146100c957806318160ddd146100f957806323b872dd14610117578063313ce56714610147575b5f80fd5b6100b361023b565b6040516100c09190610ac6565b60405180910390f35b6100e360048036038101906100de9190610b77565b6102c6565b6040516100f09190610bcf565b60405180910390f35b6101016103b3565b60405161010e9190610bf7565b60405180910390f35b610131600480360381019061012c9190610c10565b6103b9565b60405161013e9190610bcf565b60405180910390f35b61014f610662565b60405161015c9190610c7b565b60405180910390f35b61017f600480360381019061017a9190610c94565b610674565b60405161018c9190610bf7565b60405180910390f35b61019d610689565b005b6101a76107d5565b6040516101b49190610cce565b60405180910390f35b6101c56107fa565b6040516101d29190610ac6565b60405180910390f35b6101f560048036038101906101f09190610b77565b610886565b6040516102029190610bcf565b60405180910390f35b61022560048036038101906102209190610ce7565b610a1c565b6040516102329190610bf7565b60405180910390f35b5f805461024790610d52565b80601f016020809104026020016040519081016040528092919081815260200182805461027390610d52565b80156102be5780601f10610295576101008083540402835291602001916102be565b820191905f5260205f20905b8154815290600101906020018083116102a157829003601f168201915b505050505081565b5f8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103a19190610bf7565b60405180910390a36001905092915050565b60025481565b5f8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610403575f80fd5b8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610487575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104be575f80fd5b8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461050a9190610daf565b925050819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461055d9190610de2565b925050819055508160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105eb9190610daf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161064f9190610bf7565b60405180910390a3600190509392505050565b60035f9054906101000a900460ff1681565b6004602052805f5260405f205f915090505481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070f90610e85565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001805461080790610d52565b80601f016020809104026020016040519081016040528092919081815260200182805461083390610d52565b801561087e5780601f106108555761010080835404028352916020019161087e565b820191905f5260205f20905b81548152906001019060200180831161086157829003601f168201915b505050505081565b5f8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156108d0575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610907575f80fd5b8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109539190610daf565b925050819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109a69190610de2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a0a9190610bf7565b60405180910390a36001905092915050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610a73578082015181840152602081019050610a58565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610a9882610a3c565b610aa28185610a46565b9350610ab2818560208601610a56565b610abb81610a7e565b840191505092915050565b5f6020820190508181035f830152610ade8184610a8e565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b1382610aea565b9050919050565b610b2381610b09565b8114610b2d575f80fd5b50565b5f81359050610b3e81610b1a565b92915050565b5f819050919050565b610b5681610b44565b8114610b60575f80fd5b50565b5f81359050610b7181610b4d565b92915050565b5f8060408385031215610b8d57610b8c610ae6565b5b5f610b9a85828601610b30565b9250506020610bab85828601610b63565b9150509250929050565b5f8115159050919050565b610bc981610bb5565b82525050565b5f602082019050610be25f830184610bc0565b92915050565b610bf181610b44565b82525050565b5f602082019050610c0a5f830184610be8565b92915050565b5f805f60608486031215610c2757610c26610ae6565b5b5f610c3486828701610b30565b9350506020610c4586828701610b30565b9250506040610c5686828701610b63565b9150509250925092565b5f60ff82169050919050565b610c7581610c60565b82525050565b5f602082019050610c8e5f830184610c6c565b92915050565b5f60208284031215610ca957610ca8610ae6565b5b5f610cb684828501610b30565b91505092915050565b610cc881610b09565b82525050565b5f602082019050610ce15f830184610cbf565b92915050565b5f8060408385031215610cfd57610cfc610ae6565b5b5f610d0a85828601610b30565b9250506020610d1b85828601610b30565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610d6957607f821691505b602082108103610d7c57610d7b610d25565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610db982610b44565b9150610dc483610b44565b9250828203905081811115610ddc57610ddb610d82565b5b92915050565b5f610dec82610b44565b9150610df783610b44565b9250828201905080821115610e0f57610e0e610d82565b5b92915050565b7f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e5f8201527f6374696f6e2e0000000000000000000000000000000000000000000000000000602082015250565b5f610e6f602683610a46565b9150610e7a82610e15565b604082019050919050565b5f6020820190508181035f830152610e9c81610e63565b905091905056fea26469706673582212201a1e64d5cf8245ca0067528c6c9cd56fb8a03727757ce699032f1c438d41a95164736f6c63430008140033