LyoqCiAqIFxmaWxlIGRybV9zYXJlYS5oCiAqIFxicmllZiBTQVJFQSBkZWZpbml0aW9ucwogKgogKiBcYXV0aG9yIE1pY2hlbCBE5G56ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD4KICovCgovKgogKiBDb3B5cmlnaHQgMjAwMiBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCiAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCiAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CiAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKICogU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKICogVFVOR1NURU4gR1JBUEhJQ1MgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCiAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgogKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqLwoKI2lmbmRlZiBfRFJNX1NBUkVBX0hfCiNkZWZpbmUgX0RSTV9TQVJFQV9IXwoKI2luY2x1ZGUgImRybS5oIgoKLyogU0FSRUEgYXJlYSBuZWVkcyB0byBiZSBhdCBsZWFzdCBhIHBhZ2UgKi8KI2lmIGRlZmluZWQoX19hbHBoYV9fKQojZGVmaW5lIFNBUkVBX01BWCAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCiNlbGlmIGRlZmluZWQoX19pYTY0X18pCiNkZWZpbmUgU0FSRUFfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwCS8qIDY0a0IgKi8KI2Vsc2UKLyogSW50ZWwgODMwTSBkcml2ZXIgbmVlZHMgYXQgbGVhc3QgOGsgU0FSRUEgKi8KI2RlZmluZSBTQVJFQV9NQVggICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAojZW5kaWYKCi8qKiBNYXhpbXVtIG51bWJlciBvZiBkcmF3YWJsZXMgaW4gdGhlIFNBUkVBICovCiNkZWZpbmUgU0FSRUFfTUFYX0RSQVdBQkxFUyAJCTI1NgoKI2RlZmluZSBTQVJFQV9EUkFXQUJMRV9DTEFJTUVEX0VOVFJZICAgIDB4ODAwMDAwMDAKCi8qKiBTQVJFQSBkcmF3YWJsZSAqLwp0eXBlZGVmIHN0cnVjdCBkcm1fc2FyZWFfZHJhd2FibGUgewoJdW5zaWduZWQgaW50IHN0YW1wOwoJdW5zaWduZWQgaW50IGZsYWdzOwp9IGRybV9zYXJlYV9kcmF3YWJsZV90OwoKLyoqIFNBUkVBIGZyYW1lICovCnR5cGVkZWYgc3RydWN0IGRybV9zYXJlYV9mcmFtZSB7Cgl1bnNpZ25lZCBpbnQgeDsKCXVuc2lnbmVkIGludCB5OwoJdW5zaWduZWQgaW50IHdpZHRoOwoJdW5zaWduZWQgaW50IGhlaWdodDsKCXVuc2lnbmVkIGludCBmdWxsc2NyZWVuOwp9IGRybV9zYXJlYV9mcmFtZV90OwoKLyoqIFNBUkVBICovCnR5cGVkZWYgc3RydWN0IGRybV9zYXJlYSB7CiAgICAvKiogZmlyc3QgdGhpbmcgaXMgYWx3YXlzIHRoZSBEUk0gbG9ja2luZyBzdHJ1Y3R1cmUgKi8KCWRybV9od19sb2NrX3QgbG9jazsKICAgIC8qKiBcdG9kbyBVc2UgcmVhZGVycy93cml0ZXIgbG9jayBmb3IgZHJtX3NhcmVhOjpkcmF3YWJsZV9sb2NrICovCglkcm1faHdfbG9ja190IGRyYXdhYmxlX2xvY2s7Cglkcm1fc2FyZWFfZHJhd2FibGVfdCBkcmF3YWJsZVRhYmxlW1NBUkVBX01BWF9EUkFXQUJMRVNdOwkvKio8IGRyYXdhYmxlcyAqLwoJZHJtX3NhcmVhX2ZyYW1lX3QgZnJhbWU7CS8qKjwgZnJhbWUgKi8KCWRybV9jb250ZXh0X3QgZHVtbXlfY29udGV4dDsKfSBkcm1fc2FyZWFfdDsKCiNlbmRpZgkJCQkvKiBfRFJNX1NBUkVBX0hfICovCg==