608060405234801561000f575f80fd5b50336040518060400160405280600981526020017f4d41474120464f524b00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641474100000000000000000000000000000000000000000000000000000000815250816003908161008c919061070b565b50806004908161009c919061070b565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010f575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101069190610819565b60405180910390fd5b61011e8161016860201b60201c565b5061012d61022b60201b60201c565b600a610139919061099a565b66038d7ea4c6800061014b91906109e4565b6006819055506101633360065461023360201b60201c565b610ab5565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102a3575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161029a9190610819565b60405180910390fd5b6102b45f83836102b860201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610308578060025f8282546102fc9190610a25565b925050819055506103d6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610391578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161038893929190610a67565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361041d578060025f8282540392505081905550610467565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104c49190610a9c565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061054c57607f821691505b60208210810361055f5761055e610508565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610586565b6105cb8683610586565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61060f61060a610605846105e3565b6105ec565b6105e3565b9050919050565b5f819050919050565b610628836105f5565b61063c61063482610616565b848454610592565b825550505050565b5f90565b610650610644565b61065b81848461061f565b505050565b5b8181101561067e576106735f82610648565b600181019050610661565b5050565b601f8211156106c35761069481610565565b61069d84610577565b810160208510156106ac578190505b6106c06106b885610577565b830182610660565b50505b505050565b5f82821c905092915050565b5f6106e35f19846008026106c8565b1980831691505092915050565b5f6106fb83836106d4565b9150826002028217905092915050565b610714826104d1565b67ffffffffffffffff81111561072d5761072c6104db565b5b6107378254610535565b610742828285610682565b5f60209050601f831160018114610773575f8415610761578287015190505b61076b85826106f0565b8655506107d2565b601f19841661078186610565565b5f5b828110156107a857848901518255600182019150602085019450602081019050610783565b868310156107c557848901516107c1601f8916826106d4565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610803826107da565b9050919050565b610813816107f9565b82525050565b5f60208201905061082c5f83018461080a565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156108b4578086048111156108905761088f610832565b5b600185161561089f5780820291505b80810290506108ad8561085f565b9450610874565b94509492505050565b5f826108cc5760019050610987565b816108d9575f9050610987565b81600181146108ef57600281146108f957610928565b6001915050610987565b60ff84111561090b5761090a610832565b5b8360020a91508482111561092257610921610832565b5b50610987565b5060208310610133831016604e8410600b841016171561095d5782820a90508381111561095857610957610832565b5b610987565b61096a848484600161086b565b9250905081840481111561098157610980610832565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6109a4826105e3565b91506109af8361098e565b92506109dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846108bd565b905092915050565b5f6109ee826105e3565b91506109f9836105e3565b9250828202610a07816105e3565b91508282048414831517610a1e57610a1d610832565b5b5092915050565b5f610a2f826105e3565b9150610a3a836105e3565b9250828201905080821115610a5257610a51610832565b5b92915050565b610a61816105e3565b82525050565b5f606082019050610a7a5f83018661080a565b610a876020830185610a58565b610a946040830184610a58565b949350505050565b5f602082019050610aaf5f830184610a58565b92915050565b61117c80610ac25f395ff3fe608060405234801561000f575f80fd5b50600436106100e8575f3560e01c806370a082311161008a57806395d89b411161006457806395d89b4114610238578063a9059cbb14610256578063dd62ed3e14610286578063f2fde38b146102b6576100e8565b806370a08231146101e0578063715018a6146102105780638da5cb5b1461021a576100e8565b806323b872dd116100c657806323b872dd146101585780632ff2e9dc14610188578063313ce567146101a657806342966c68146101c4576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f80fd5b6100f46102d2565b6040516101019190610dca565b60405180910390f35b610124600480360381019061011f9190610e7b565b610362565b6040516101319190610ed3565b60405180910390f35b610142610384565b60405161014f9190610efb565b60405180910390f35b610172600480360381019061016d9190610f14565b61038d565b60405161017f9190610ed3565b60405180910390f35b6101906103bb565b60405161019d9190610efb565b60405180910390f35b6101ae6103c1565b6040516101bb9190610f7f565b60405180910390f35b6101de60048036038101906101d99190610f98565b6103c9565b005b6101fa60048036038101906101f59190610fc3565b6103d6565b6040516102079190610efb565b60405180910390f35b61021861041b565b005b61022261042e565b60405161022f9190610ffd565b60405180910390f35b610240610456565b60405161024d9190610dca565b60405180910390f35b610270600480360381019061026b9190610e7b565b6104e6565b60405161027d9190610ed3565b60405180910390f35b6102a0600480360381019061029b9190611016565b610508565b6040516102ad9190610efb565b60405180910390f35b6102d060048036038101906102cb9190610fc3565b61058a565b005b6060600380546102e190611081565b80601f016020809104026020016040519081016040528092919081815260200182805461030d90611081565b80156103585780601f1061032f57610100808354040283529160200191610358565b820191905f5260205f20905b81548152906001019060200180831161033b57829003601f168201915b5050505050905090565b5f8061036c61060e565b9050610379818585610615565b600191505092915050565b5f600254905090565b5f8061039761060e565b90506103a4858285610627565b6103af8585856106b9565b60019150509392505050565b60065481565b5f6012905090565b6103d333826107a9565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610423610828565b61042c5f6108af565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461046590611081565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611081565b80156104dc5780601f106104b3576101008083540402835291602001916104dc565b820191905f5260205f20905b8154815290600101906020018083116104bf57829003601f168201915b5050505050905090565b5f806104f061060e565b90506104fd8185856106b9565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610592610828565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610602575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105f99190610ffd565b60405180910390fd5b61060b816108af565b50565b5f33905090565b6106228383836001610972565b505050565b5f6106328484610508565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106b357818110156106a4578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161069b939291906110b1565b60405180910390fd5b6106b284848484035f610972565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610729575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107209190610ffd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610799575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107909190610ffd565b60405180910390fd5b6107a4838383610b41565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610819575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108109190610ffd565b60405180910390fd5b610824825f83610b41565b5050565b61083061060e565b73ffffffffffffffffffffffffffffffffffffffff1661084e61042e565b73ffffffffffffffffffffffffffffffffffffffff16146108ad5761087161060e565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108a49190610ffd565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036109e2575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016109d99190610ffd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a52575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610a499190610ffd565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610b3b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b329190610efb565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b91578060025f828254610b859190611113565b92505081905550610c5f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610c1a578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610c11939291906110b1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ca6578060025f8282540392505081905550610cf0565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d4d9190610efb565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d9c82610d5a565b610da68185610d64565b9350610db6818560208601610d74565b610dbf81610d82565b840191505092915050565b5f6020820190508181035f830152610de28184610d92565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e1782610dee565b9050919050565b610e2781610e0d565b8114610e31575f80fd5b50565b5f81359050610e4281610e1e565b92915050565b5f819050919050565b610e5a81610e48565b8114610e64575f80fd5b50565b5f81359050610e7581610e51565b92915050565b5f8060408385031215610e9157610e90610dea565b5b5f610e9e85828601610e34565b9250506020610eaf85828601610e67565b9150509250929050565b5f8115159050919050565b610ecd81610eb9565b82525050565b5f602082019050610ee65f830184610ec4565b92915050565b610ef581610e48565b82525050565b5f602082019050610f0e5f830184610eec565b92915050565b5f805f60608486031215610f2b57610f2a610dea565b5b5f610f3886828701610e34565b9350506020610f4986828701610e34565b9250506040610f5a86828701610e67565b9150509250925092565b5f60ff82169050919050565b610f7981610f64565b82525050565b5f602082019050610f925f830184610f70565b92915050565b5f60208284031215610fad57610fac610dea565b5b5f610fba84828501610e67565b91505092915050565b5f60208284031215610fd857610fd7610dea565b5b5f610fe584828501610e34565b91505092915050565b610ff781610e0d565b82525050565b5f6020820190506110105f830184610fee565b92915050565b5f806040838503121561102c5761102b610dea565b5b5f61103985828601610e34565b925050602061104a85828601610e34565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061109857607f821691505b6020821081036110ab576110aa611054565b5b50919050565b5f6060820190506110c45f830186610fee565b6110d16020830185610eec565b6110de6040830184610eec565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61111d82610e48565b915061112883610e48565b92508282019050808211156111405761113f6110e6565b5b9291505056fea26469706673582212204f9600682515a6b95c652a675c41e0d9060cab370722fecb9be72245c736b8ea64736f6c634300081a0033