LyoKICogVW5pbnN0YWxsZXIgKFJ1c3NpYW4gUmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwNyBLb25zdGFudGluIEtvbmRyYXR5dWsKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKCklERF9VTklOU1RBTExFUiBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDMzMCwgMTYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLT5ODr5e3o5SDv8Ojr7ubl7ejpIFdJTkUiCkZPTlQgMTAsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICLP7ubg6/Pp8fLgLCDi++Hl8Ojy5SDv8Ojr7ubl7ejlIOTr/yDz5ODr5e3o/zoiLElEQ19QTEVBU0VTRUxFQ1QsMTAsMTAsMjUwLDE0CiAgICBFRElUVEVYVCAgICAgICAgSURDX0ZJTFRFUiwxMCwyNSwyNTAsMTQsRVNfQVVUT0hTQ1JPTEwKICAgIExJU1RCT1ggICAgICAgICBJRENfTElTVCwxMCw0MywyNTAsMTA2LExCU19OT0lOVEVHUkFMSEVJR0hUIHwKICAgICAgICAgICAgICAgICAgICBMQlNfRVhURU5ERURTRUwgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAgICAgICIm0+Tg6+jy/CIsSURDX1VOSU5TVEFMTCwyNzAsNDgsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiJs4g7/Du4/Dg7OzlIixJRENfQUJPVVQsMjcwLDY1LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIibC+/Xu5CIsSURDX0VYSVQsMjcwLDgxLDUwLDE0CkVORAoKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIHsKICAgICBJRFNfQVBQTkFNRSwgItPk4Ovl7ejlIO/w6Ovu5uXt6OkgV0lORSIKICAgICBJRFNfQUJPVVQsICLT5ODr5e3o5SDv8Ojr7ubl7ejpIFdJTkUgKEMpIDIwMDUgYnkgQW5kcmVhcyBNb2hyLCBIYW5udSBWYWx0b25lbiBhbmQgSm9uYXRoYW4gRXJuc3QuIgogICAgIElEU19BQk9VVFRJVExFLCAiziDv8O7j8ODs7OUiCiAgICAgSURTX1JFR0lTVFJZS0VZTk9UQVZBSUxBQkxFLCAizeXu4fXu5Ojs4P8g5+Dv6PH8IOIg8OXl8fLw5SDu8vHz8vHy4vPl8iEiCiAgICAgSURTX1VOSU5TVEFMTEZBSUxFRCwgIs746OHq4CDi++/u6+3l7ej/IOru7ODt5Psg8+Tg6+Xt6P8gJyVzJywg4u7n7O7m7e4g6Oct5+Ag7+7y5fDoIPTg6evu4iDv8Ojr7ubl7ej/LlxyXG7T5ODr6PL8IOjt9O7w7OD26P4g7uEg8/Hy4O3u4urlIOjnIPDl5fHy8OA/Igp9Cg==