LyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBmaWxlICAgIHN0bTMybDR4eC5oDQogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCiAgKiBAYnJpZWYgICBDTVNJUyBTVE0zMkw0eHggRGV2aWNlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlLg0KICAqDQogICogICAgICAgICAgVGhlIGZpbGUgaXMgdGhlIHVuaXF1ZSBpbmNsdWRlIGZpbGUgdGhhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcg0KICAqICAgICAgICAgIGlzIHVzaW5nIGluIHRoZSBDIHNvdXJjZSBjb2RlLCB1c3VhbGx5IGluIG1haW4uYy4gVGhpcyBmaWxlIGNvbnRhaW5zOg0KICAqICAgICAgICAgICAtIENvbmZpZ3VyYXRpb24gc2VjdGlvbiB0aGF0IGFsbG93cyB0byBzZWxlY3Q6DQogICogICAgICAgICAgICAgIC0gVGhlIFNUTTMyTDR4eCBkZXZpY2UgdXNlZCBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uDQogICogICAgICAgICAgICAgIC0gVG8gdXNlIG9yIG5vdCB0aGUgcGVyaXBoZXJhbJJzIGRyaXZlcnMgaW4gYXBwbGljYXRpb24gY29kZShpLmUuDQogICogICAgICAgICAgICAgICAgY29kZSB3aWxsIGJlIGJhc2VkIG9uIGRpcmVjdCBhY2Nlc3MgdG8gcGVyaXBoZXJhbJJzIHJlZ2lzdGVycw0KICAqICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGRyaXZlcnMgQVBJKSwgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBieQ0KICAqICAgICAgICAgICAgICAgICIjZGVmaW5lIFVTRV9IQUxfRFJJVkVSIg0KICAqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBhdHRlbnRpb24NCiAgKg0KICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLg0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4NCiAgKg0KICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLA0KICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUNCiAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQogICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UNCiAgKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIENNU0lTDQogICogQHsNCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIHN0bTMybDR4eA0KICAqIEB7DQogICovDQoNCiNpZm5kZWYgX19TVE0zMkw0eHhfSA0KI2RlZmluZSBfX1NUTTMyTDR4eF9IDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KIGV4dGVybiAiQyIgew0KI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQoNCi8qKiBAYWRkdG9ncm91cCBMaWJyYXJ5X2NvbmZpZ3VyYXRpb25fc2VjdGlvbg0KICAqIEB7DQogICovDQoNCi8qKg0KICAqIEBicmllZiBTVE0zMiBGYW1pbHkNCiAgKi8NCiNpZiAhZGVmaW5lZCAoU1RNMzJMNCkNCiNkZWZpbmUgU1RNMzJMNA0KI2VuZGlmIC8qIFNUTTMyTDQgKi8NCg0KLyogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGFjY29yZGluZyB0byB0aGUgdGFyZ2V0IFNUTTMyTDQgZGV2aWNlIHVzZWQgaW4geW91cg0KICAgYXBwbGljYXRpb24NCiAgKi8NCg0KI2lmICFkZWZpbmVkIChTVE0zMkw0MTJ4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQyMnh4KSAmJiBcDQogICAgIWRlZmluZWQgKFNUTTMyTDQzMXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDMyeHgpICYmICFkZWZpbmVkIChTVE0zMkw0MzN4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQ0Mnh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDQzeHgpICYmIFwNCiAgICAhZGVmaW5lZCAoU1RNMzJMNDUxeHgpICYmICFkZWZpbmVkIChTVE0zMkw0NTJ4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQ2Mnh4KSAmJiBcDQogICAgIWRlZmluZWQgKFNUTTMyTDQ3MXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDc1eHgpICYmICFkZWZpbmVkIChTVE0zMkw0NzZ4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQ4NXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDg2eHgpICYmIFwNCiAgICAhZGVmaW5lZCAoU1RNMzJMNDk2eHgpICYmICFkZWZpbmVkIChTVE0zMkw0QTZ4eCkgJiYgXA0KICAgICFkZWZpbmVkIChTVE0zMkw0UjV4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDRSN3h4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNFI5eHgpICYmICFkZWZpbmVkIChTVE0zMkw0UzV4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDRTN3h4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNFM5eHgpDQogIC8qICNkZWZpbmUgU1RNMzJMNDEyeHggKi8gICAvKiE8IFNUTTMyTDQxMnh4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0MjJ4eCAqLyAgIC8qITwgU1RNMzJMNDIyeHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDQzMXh4ICovICAgLyohPCBTVE0zMkw0MzF4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNDMyeHggKi8gICAvKiE8IFNUTTMyTDQzMnh4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0MzN4eCAqLyAgIC8qITwgU1RNMzJMNDMzeHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDQ0Mnh4ICovICAgLyohPCBTVE0zMkw0NDJ4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNDQzeHggKi8gICAvKiE8IFNUTTMyTDQ0M3h4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0NTF4eCAqLyAgIC8qITwgU1RNMzJMNDUxeHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDQ1Mnh4ICovICAgLyohPCBTVE0zMkw0NTJ4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNDYyeHggKi8gICAvKiE8IFNUTTMyTDQ2Mnh4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0NzF4eCAqLyAgIC8qITwgU1RNMzJMNDcxeHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDQ3NXh4ICovICAgLyohPCBTVE0zMkw0NzV4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNDc2eHggKi8gICAvKiE8IFNUTTMyTDQ3Nnh4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0ODV4eCAqLyAgIC8qITwgU1RNMzJMNDg1eHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDQ4Nnh4ICovICAgLyohPCBTVE0zMkw0ODZ4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNDk2eHggKi8gICAvKiE8IFNUTTMyTDQ5Nnh4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0QTZ4eCAqLyAgIC8qITwgU1RNMzJMNEE2eHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDRSNXh4ICovICAgLyohPCBTVE0zMkw0UjV4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNFI3eHggKi8gICAvKiE8IFNUTTMyTDRSN3h4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0Ujl4eCAqLyAgIC8qITwgU1RNMzJMNFI5eHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDRTNXh4ICovICAgLyohPCBTVE0zMkw0UzV4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNFM3eHggKi8gICAvKiE8IFNUTTMyTDRTN3h4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0Uzl4eCAqLyAgIC8qITwgU1RNMzJMNFM5eHggRGV2aWNlcyAqLw0KI2VuZGlmDQoNCi8qICBUaXA6IFRvIGF2b2lkIG1vZGlmeWluZyB0aGlzIGZpbGUgZWFjaCB0aW1lIHlvdSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHRoZXNlDQogICAgICAgIGRldmljZXMsIHlvdSBjYW4gZGVmaW5lIHRoZSBkZXZpY2UgaW4geW91ciB0b29sY2hhaW4gY29tcGlsZXIgcHJlcHJvY2Vzc29yLg0KICAqLw0KI2lmICFkZWZpbmVkICAoVVNFX0hBTF9EUklWRVIpDQovKioNCiAqIEBicmllZiBDb21tZW50IHRoZSBsaW5lIGJlbG93IGlmIHlvdSB3aWxsIG5vdCB1c2UgdGhlIHBlcmlwaGVyYWxzIGRyaXZlcnMuDQogICBJbiB0aGlzIGNhc2UsIHRoZXNlIGRyaXZlcnMgd2lsbCBub3QgYmUgaW5jbHVkZWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdpbGwNCiAgIGJlIGJhc2VkIG9uIGRpcmVjdCBhY2Nlc3MgdG8gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzDQogICAqLw0KICAvKiNkZWZpbmUgVVNFX0hBTF9EUklWRVIgKi8NCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLw0KDQovKioNCiAgKiBAYnJpZWYgQ01TSVMgRGV2aWNlIHZlcnNpb24gbnVtYmVyDQogICovDQojZGVmaW5lIF9fU1RNMzJMNF9DTVNJU19WRVJTSU9OX01BSU4gICAoMHgwMSkgLyohPCBbMzE6MjRdIG1haW4gdmVyc2lvbiAqLw0KI2RlZmluZSBfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTl9TVUIxICAgKDB4MDUpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8NCiNkZWZpbmUgX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fU1VCMiAgICgweDAxKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovDQojZGVmaW5lIF9fU1RNMzJMNF9DTVNJU19WRVJTSU9OX1JDICAgICAoMHgwMCkgLyohPCBbNzowXSAgcmVsZWFzZSBjYW5kaWRhdGUgKi8NCiNkZWZpbmUgX19TVE0zMkw0X0NNU0lTX1ZFUlNJT04gICAgICAgICgoX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAyNClcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJMNF9DTVNJU19WRVJTSU9OX1NVQjEgPDwgMTYpXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTl9TVUIyIDw8IDggKVwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fUkMpKQ0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgRGV2aWNlX0luY2x1ZGVkDQogICogQHsNCiAgKi8NCg0KI2lmIGRlZmluZWQoU1RNMzJMNDEyeHgpDQogICNpbmNsdWRlICJzdG0zMmw0MTJ4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0MjJ4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQyMnh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDQzMXh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNDMxeHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNDMyeHgpDQogICNpbmNsdWRlICJzdG0zMmw0MzJ4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0MzN4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQzM3h4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDQ0Mnh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNDQyeHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNDQzeHgpDQogICNpbmNsdWRlICJzdG0zMmw0NDN4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0NTF4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQ1MXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDQ1Mnh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNDUyeHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNDYyeHgpDQogICNpbmNsdWRlICJzdG0zMmw0NjJ4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0NzF4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQ3MXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDQ3NXh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNDc1eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNDc2eHgpDQogICNpbmNsdWRlICJzdG0zMmw0NzZ4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0ODV4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQ4NXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDQ4Nnh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNDg2eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNDk2eHgpDQogICNpbmNsdWRlICJzdG0zMmw0OTZ4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0QTZ4eCkNCiAgI2luY2x1ZGUgInN0bTMybDRhNnh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDRSNXh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNHI1eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNFI3eHgpDQogICNpbmNsdWRlICJzdG0zMmw0cjd4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0Ujl4eCkNCiAgI2luY2x1ZGUgInN0bTMybDRyOXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDRTNXh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNHM1eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNFM3eHgpDQogICNpbmNsdWRlICJzdG0zMmw0czd4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0Uzl4eCkNCiAgI2luY2x1ZGUgInN0bTMybDRzOXh4LmgiDQojZWxzZQ0KICNlcnJvciAiUGxlYXNlIHNlbGVjdCBmaXJzdCB0aGUgdGFyZ2V0IFNUTTMyTDR4eCBkZXZpY2UgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uIChpbiBzdG0zMmw0eHguaCBmaWxlKSINCiNlbmRpZg0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfdHlwZXMNCiAgKiBAew0KICAqLw0KdHlwZWRlZiBlbnVtDQp7DQogIFJFU0VUID0gMCwNCiAgU0VUID0gIVJFU0VUDQp9IEZsYWdTdGF0dXMsIElUU3RhdHVzOw0KDQp0eXBlZGVmIGVudW0NCnsNCiAgRElTQUJMRSA9IDAsDQogIEVOQUJMRSA9ICFESVNBQkxFDQp9IEZ1bmN0aW9uYWxTdGF0ZTsNCiNkZWZpbmUgSVNfRlVOQ1RJT05BTF9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IERJU0FCTEUpIHx8ICgoU1RBVEUpID09IEVOQUJMRSkpDQoNCnR5cGVkZWYgZW51bQ0Kew0KICBTVUNDRVNTID0gMCwNCiAgRVJST1IgPSAhU1VDQ0VTUw0KfSBFcnJvclN0YXR1czsNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KDQovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfbWFjcm9zDQogICogQHsNCiAgKi8NCiNkZWZpbmUgU0VUX0JJVChSRUcsIEJJVCkgICAgICgoUkVHKSB8PSAoQklUKSkNCg0KI2RlZmluZSBDTEVBUl9CSVQoUkVHLCBCSVQpICAgKChSRUcpICY9IH4oQklUKSkNCg0KI2RlZmluZSBSRUFEX0JJVChSRUcsIEJJVCkgICAgKChSRUcpICYgKEJJVCkpDQoNCiNkZWZpbmUgQ0xFQVJfUkVHKFJFRykgICAgICAgICgoUkVHKSA9ICgweDApKQ0KDQojZGVmaW5lIFdSSVRFX1JFRyhSRUcsIFZBTCkgICAoKFJFRykgPSAoVkFMKSkNCg0KI2RlZmluZSBSRUFEX1JFRyhSRUcpICAgICAgICAgKChSRUcpKQ0KDQojZGVmaW5lIE1PRElGWV9SRUcoUkVHLCBDTEVBUk1BU0ssIFNFVE1BU0spICBXUklURV9SRUcoKFJFRyksICgoKFJFQURfUkVHKFJFRykpICYgKH4oQ0xFQVJNQVNLKSkpIHwgKFNFVE1BU0spKSkNCg0KI2RlZmluZSBQT1NJVElPTl9WQUwoVkFMKSAgICAgKF9fQ0xaKF9fUkJJVChWQUwpKSkNCg0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQojaWYgZGVmaW5lZCAoVVNFX0hBTF9EUklWRVIpDQogI2luY2x1ZGUgInN0bTMybDR4eF9oYWwuaCINCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLw0KDQojaWZkZWYgX19jcGx1c3BsdXMNCn0NCiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KDQojZW5kaWYgLyogX19TVE0zMkw0eHhfSCAqLw0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqDQogICogQH0NCiAgKi8NCg0KDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCg==