LyoKICogTkVULkVYRSAtIFdpbmUtY29tcGF0aWJsZSBuZXQgcHJvZ3JhbQogKiBLT1JFQU4gbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltIFNjaHdhcnR6CiAqIENvcHlyaWdodCAoQykgMjAwNyBZdW5Tb25nIEh3YW5nIChoeXM1NDVAZHJlYW13aXouY29tKQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2VzLmgiCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRQp7CiAgICBTVFJJTkdfVVNBR0UsICLAzCC47bfJvu7AxyC5rrn9OlxuXG5ORVQgWyBIRUxQIHwgU1RBUlQgfCBTVE9QIHwgVVNFIF1cbiIKICAgIFNUUklOR19TVEFSVF9VU0FHRSwgIsH2waS1yCC8rbrxvbogIL3DwNsuXG4iCiAgICBTVFJJTkdfU1RPUF9VU0FHRSwgIsH2waS1yCC8rbrxvbogIMGkwfYuXG4iCiAgICBTVFJJTkdfU1RPUF9ERVAsICLBvrzTtcggvK268b26IMGkwfbB3zogJXNcbiIKICAgIFNUUklOR19DQU5UX1NUT1AsICIlcyC8rbrxvbq4piDBpMH2x9IgvPYgvvi9wLTPtNlcbiIKICAgIFNUUklOR19OT19TQ00sICK8rbrxvbogwaa+7iCw/LiuwNq4piC02bfqILz2IL74vcC0z7TZLlxuIgogICAgU1RSSU5HX05PX1NWQ0hBTkRMRSwgIrytuvG9uiDH2rXpwLsgvvLAuyC89iC++L3AtM+02S5cbiIKICAgIFNUUklOR19TVEFSVF9TVkMsICIlcyC8rbrxvbq0wiC9w8Dbwd8uXG4iCiAgICBTVFJJTkdfU1RBUlRfU1ZDX1NVQ0NFU1MsICIgJXMgvK268b26IL3DwNsgvLqw+C5cbiIKICAgIFNUUklOR19TVEFSVF9TVkNfRkFJTCwgIiVzILytuvG9uiC9w8DbIL3HxtAuXG4iCiAgICBTVFJJTkdfU1RPUF9TVkMsICIlcyAgvK268b26IMGkwfYuXG4iCiAgICBTVFJJTkdfU1RPUF9TVkNfU1VDQ0VTUywgIiVzILytuvG9uiDBpMH2ILy6sPguXG4iCiAgICBTVFJJTkdfU1RPUF9TVkNfRkFJTCwgIiVzILytuvG9uiDBpMH2IL3HxtAuXG4iCiAgICBTVFJJTkdfSEVMUF9VU0FHRSwgIrjtt8m+7iC5rrn9OlxuXG5ORVQgSEVMUCC47bfJvu5cbiAgICAtb3ItXG5ORVQguO23yb7uICAvSEVMUFxuXG4iXAogICAgICAgICAgICAgICAgICAgICAgICIgICAgsKG0ycfRILjtt8m+7jpcbiAgIE5FVCBIRUxQICAgIE5FVCBTVEFSVCAgICBORVQgU1RPUCAgICBORVQgVVNFXG4iCiAgICBTVFJJTkdfTk9fRU5UUklFUywgIriuvbrGrrChILrxvu4gwNa9wLTPtNkuXG4iCiAgICBTVFJJTkdfVVNFX0hFQURFUiwgIlxuu/PFwiAgt87EwyAgIL/4sN1cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgU1RSSU5HX1VTRV9FTlRSWSwgICIlcyAgICAgICVTICAgICAgJVMgICAgICC/rbiwILiuvNK9ujogJWx1XG4iCn0K