LyoKICogQ29weXJpZ2h0IDE5OTYgQmFuZyBKdW4gWW91bmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKU1lTTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewogTUVOVUlURU0gIrq5sc0oJlIpIiwgNjE3MjgKIE1FTlVJVEVNICLAzLW/KCZNKSIsIDYxNDU2CiBNRU5VSVRFTSAixamx4iC6r7DmKCZTKSIsIDYxNDQwCiBNRU5VSVRFTSAivsbAzMTcIMelvcMoJk4pIiwgNjE0NzIKIE1FTlVJVEVNICLA/MO8IMituOkgx6W9wygmTSkiLCA2MTQ4OAogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAitN2x4igmQylcdEFsdC1GNCIsIDYxNTM2CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICLA2773IMD8yK8oJlcpIC4uLlx0Q3RybC1Fc2MiLCA2MTc0NAogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAiv83Azr+hILD8x8+/qSAuLi4iLCA2MTc2MQp9CgpFRElUTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewoJUE9QVVAgIiIKCUJFR0lOCgkJTUVOVUlURU0gIr3Hx+Agw+u80igmVSkiLCBFTV9VTkRPCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIsDftvOzu7HiKCZUKSIsIFdNX0NVVAoJCU1FTlVJVEVNICK6ubvnKCZDKSIsIFdNX0NPUFkKCQlNRU5VSVRFTSAiutm/qbPWseIoJlApIiwgV01fUEFTVEUKCQlNRU5VSVRFTSAiu+jBpigmRCkiLCBXTV9DTEVBUgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICLA/MO8ILyxxcMoJkEpIiwgRU1fU0VUU0VMCglFTkQKfQoKTVNHQk9YIERJQUxPRyAxMDAsIDgwLCAyMTYsIDE2OApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQkVHSU4KCUlDT04gIiIsIDEwODgsIDgsIDIwLCAxNiwgMTYsIFdTX0NISUxEIHwgV1NfVklTSUJMRQoJTFRFWFQgIiIsIDEwMCwgMzIsIDQsIDE3NiwgNDgsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglQVVNIQlVUVE9OICLIrsDOKCZPKSIsIDEsIDE2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICLD67zSKCZDKSIsIDIsIDY0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICLB37TcKCZBKSIsIDMsIDExMiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiwOe9w7W1KCZSKSIsIDQsIDE2MCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiuau9wygmSSkiLCA1LCAyMDgsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKCVBVU0hCVVRUT04gIr+5KCZZKSIsIDYsIDI1NiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAivsa0z7/AKCZOKSIsIDcsIDMwNCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUApFTkQKCk1ESV9NT1JFV0lORE9XUyBESUFMT0cgRklYRUQgSU1QVVJFIDIwLCAyMCwgMjMyLCAxMjIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiU2VsZWN0IFdpbmRvdyIKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTElTVEJPWCAgICAgICAgIE1ESV9JRENfTElTVEJPWCwgNSwgNywgMjIyLCA5MCwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgLyogZGVmaW5lZCBpbiBtZGkuaCAqLwogICAgREVGUFVTSEJVVFRPTiAgICLIrsDOIiwgSURPSywgNzUsIDEwMCwgMzUsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIsPrvNIiLCBJRENBTkNFTCwgMTIwLCAxMDAsIDM1LCAxNApFTkQK