IyBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIAojCiMgICAgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9leGFtcGxlcy9VVEYtOC10ZXN0LnR4dAojICAgIAojIFdoaWNoIHdhcyBjcmVhdGVkIGJ5ICAgTWFya3VzIEt1aG4gPG1rdWhuQGFjbS5vcmc+IC0gMjAwMC0wOS0wMiAKIwojIGxpbmVzIGJlZ2luaW5nIHdpdGggIyBhbmQgYmxhbmsgbGluZXMgYXJlIGlnbm9yZWQKIwojIEJleW9uZCB0aGF0LCB0aGlzIGZpbGUgY29uc2lzdHMgb2YgYSBzZXJpZXMgb2YgdGVzdCBjYXNlcy4gRWFjaCB0ZXN0IGNhc2UgY29uc2lzdHMgb2YKIyAyIG9yIDMgbGluZXM6CiMKIyAgMS4gQSBVVEYtOCBzdHJpbmcKIyAgMi4gQSBzdGF0dXMKIyAgICAgIFZBTElEICAgICAgOiBUaGUgc3RyaW5nIGlzIGEgdmFsaWQgVVRGLTggcmVwcmVzZW50YXRpb24gb2YgdmFsaWQgVW5pY29kZQojICAgICAgSU5DT01QTEVURSA6IFRoZSBzdHJpbmcgaGFzIGEgcGFydGlhbCBjaGFyYWN0ZXIgYXQgdGhlIGVuZAojICAgICAgTk9UVU5JQ09ERSA6IFRoZSBzdHJpbmcgaXMgdmFsaWQgVVRGLTgsIGJ1dCB0aGUgY2hhcmFjdGVycyByZXByZXNlbnRlZAojICAgICAgICAgICAgICAgICAgIGFyZSBub3QgdmFsaWQgdW5pY29kZSAoCiMgICAgICBPVkVSTE9ORyAgIDogVGhlIHN0cmluZyBpbmNsdWRlcyBvdmVybG9uZyBzZXF1ZW5jZXMKIyAgICAgIE1BTEZPUk1FRCAgOiBUaGUgc3RyaW5nIGlzIG5vdCB2YWxpZCBVVEYtOAojIDMuIElmIHRoZSBzdGF0dXMgaXMgVkFMSUQgb3IgTk9UVU5JQ09ERSwgdGhlIFVDUy00IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdHJpbmcsCiMgICAgYXMgYSBzZXJpZXMgb2YgaGV4IG51bWJlcnMuCgojIDEgIFNvbWUgY29ycmVjdCBVVEYtOCB0ZXh0Cs664b25z4POvM61ClZBTElECjAzYmEgMWY3OSAwM2MzIDAzYmMgMDNiNQoKIyAyLjEgIEZpcnN0IHBvc3NpYmxlIHNlcXVlbmNlIG9mIGEgY2VydGFpbiBsZW5ndGgKIwojIEZJWE1FIC0gaGFuZGxlIE5VTExTPwojCiMgWyBOVUxMIEJZVEUgXQojVkFMSUQKIzAwMDAKCsKAClZBTElECjAwODAKCuCggApWQUxJRAowODAwCgrwkICAClZBTElECjAwMDEwMDAwCgr4iICAgApOT1RVTklDT0RFCjAwMjAwMDAwCgr8hICAgIAKTk9UVU5JQ09ERQowNDAwMDAwMAoKfwpWQUxJRAowMDAwMDA3ZgoK378KVkFMSUQKMDAwMDA3ZmYKCu+/vwpWQUxJRAowMDAwZmZmZgoK97+/vwpOT1RVTklDT0RFCjAwMWZmZmZmCgr7v7+/vwpOT1RVTklDT0RFCjAzZmZmZmZmCgr9v7+/v78KTk9UVU5JQ09ERQo3ZmZmZmZmZgoKIyAyLjMgIE90aGVyIGJvdW5kYXJ5IGNvbmRpdGlvbnMKCu2fvwpWQUxJRApkN2ZmCgrugIAKVkFMSUQKZTAwMAoK77+9ClZBTElECmZmZmQKCvSPv70KVkFMSUQKMDAxMGZmZmQKCvSPv78KVkFMSUQKMDAxMGZmZmYKCvSQgIAKTk9UVU5JQ09ERQowMDExMDAwMAoKIyAzLjEgIFVuZXhwZWN0ZWQgY29udGludWF0aW9uIGJ5dGVzCgqACk1BTEZPUk1FRAq/Ck1BTEZPUk1FRAqAvwpNQUxGT1JNRUQKgL+ACk1BTEZPUk1FRAqAv4C/Ck1BTEZPUk1FRAqAv4C/gApNQUxGT1JNRUQKgL+Av4C/Ck1BTEZPUk1FRAqAv4C/gL+ACk1BTEZPUk1FRAqAgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6Gio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr8KTUFMRk9STUVECgojIDMuMiAgTG9uZWx5IHN0YXJ0IGNoYXJhY3RlcnMKCsAgwSDCIMMgxCDFIMYgxyDIIMkgyiDLIMwgzSDOIM8g0CDRINIg0yDUINUg1iDXINgg2SDaINsg3CDdIN4g3yAKTUFMRk9STUVECuAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8gCk1BTEZPUk1FRArwIPEg8iDzIPQg9SD2IPcgCk1BTEZPUk1FRAr4IPkg+iD7IApNQUxGT1JNRUQK/CD9IApNQUxGT1JNRUQKCiMgMy4zICBTZXF1ZW5jZXMgd2l0aCBsYXN0IGNvbnRpbnVhdGlvbiBieXRlIG1pc3NpbmcKCsAKSU5DT01QTEVURQrggApJTkNPTVBMRVRFCvCAgApJTkNPTVBMRVRFCviAgIAKSU5DT01QTEVURQr8gICAgApJTkNPTVBMRVRFCt8KSU5DT01QTEVURQrvvwpJTkNPTVBMRVRFCve/vwpJTkNPTVBMRVRFCvu/v78KSU5DT01QTEVURQr9v7+/vwpJTkNPTVBMRVRFCgojIDMuNCAgQ29uY2F0ZW5hdGlvbiBvZiBpbmNvbXBsZXRlIHNlcXVlbmNlcwoKwOCA8ICA+ICAgPyAgICA3++/97+/+7+/v/2/v7+/Ck1BTEZPUk1FRAoKIyAzLjUgIEltcG9zc2libGUgYnl0ZXMKCv4KTUFMRk9STUVECv8KTUFMRk9STUVECv7+//8KTUFMRk9STUVECgojICBFeGFtcGxlcyBvZiBhbiBvdmVybG9uZyBBU0NJSSBjaGFyYWN0ZXIKCsCvCk9WRVJMT05HCuCArwpPVkVSTE9ORwrwgICvCk9WRVJMT05HCviAgICvCk9WRVJMT05HCvyAgICArwpPVkVSTE9ORwoKIyAgTWF4aW11bSBvdmVybG9uZyBzZXF1ZW5jZXMKCsG/Ck9WRVJMT05HCuCfvwpPVkVSTE9ORwrwj7+/Ck9WRVJMT05HCviHv7+/Ck9WRVJMT05HCvyDv7+/vwpPVkVSTE9ORwoKIyBPdmVybG9uZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgTlVMIGNoYXJhY3RlcgoKwIAKT1ZFUkxPTkcK4ICACk9WRVJMT05HCvCAgIAKT1ZFUkxPTkcK+ICAgIAKT1ZFUkxPTkcK/ICAgICACk9WRVJMT05HCgojIElsbGVnYWwgY29kZSBwb3NpdGlvbnMKCiMgU2luZ2xlIFVURi0xNiBzdXJyb2dhdGVzCgrtoIAKTk9UVU5JQ09ERQpkODAwCgrtrb8KTk9UVU5JQ09ERQpkYjdmCgrtroAKTk9UVU5JQ09ERQpkYjgwCgrtr78KTk9UVU5JQ09ERQpkYmZmCgrtsIAKTk9UVU5JQ09ERQpkYzAwCgrtvoAKTk9UVU5JQ09ERQpkZjgwCgrtv78KTk9UVU5JQ09ERQpkZmZmCgojIFBhaXJlZCBVVEYtMTYgc3Vycm9nYXRlcwoK7aCA7bCACk5PVFVOSUNPREUKZDgwMCBkYzAwCgrtoIDtv78KTk9UVU5JQ09ERQpkODAwIGRmZmYKCu2tv+2wgApOT1RVTklDT0RFCmRiN2YgZGMwMAoK7a2/7b+/Ck5PVFVOSUNPREUKZGI3ZiBkZmZmCgrtroDtsIAKTk9UVU5JQ09ERQpkYjgwIGRjMDAKCu2ugO2/vwpOT1RVTklDT0RFCmRiODAgZGZmZgoK7a+/7bCACk5PVFVOSUNPREUKZGJmZiBkYzAwCgrtr7/tv78KTk9UVU5JQ09ERQpkYmZmIGRmZmYKCiMjIyMjIyMjIyMjIyMjIyMKIwojIFNvbWUgbW9yZSB0ZXN0cywgbm90IGZyb20gTWFya3VzIEt1aG4ncyBmaWxlCiMKCiMgTWl4ZWQgcGxhbmUgMCBhbmQgaGlnaGVyIHBsYW5lcwoKQfCQgIBC9I+/vUMKVkFMSUQKNDEgMDAwMTAwMDAgNDIgMTBmZmZkIDQzCg==