LyoqDQogKiA8Y29weXJpZ2h0Pg0KICogDQogKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2VlNHN5cyBhbmQgb3RoZXJzLg0KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCiAqIA0KICogQ29udHJpYnV0b3JzOiANCiAqICAgICBTZWU0c3lzIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKiANCiAqIDwvY29weXJpZ2h0Pg0KICovDQqrSU1QT1JUIGluc3RhbmNlbW9kZWy7DQoNCqtERUZJTkUgbWFpbiBGT1IgQXBwbGljYXRpb267DQqrRklMRSAiQ29uZmlnLmgiuw0KLyoqIA0KICogQGZpbGUgICAgQ29uZmlnLmgNCiAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMS4xICQsICREYXRlOiAyMDA3LzA1LzIxIDA4OjU0OjA4ICQNCiAqIA0KICogQGJyaWVmICAgU3lzdGVtLXJlbGF0ZWQgb3B0aW9ucyBhbmQgcGFyYW1ldGVyIHNldHRpbmdzLCBhbmQgaW5saW5lIA0KICogICAgICAgICAgaW52b2NhdGlvbiB0YXJnZXRzDQogKi8NCg0KI2lmbmRlZiBfQ09ORklHX0gNCiNkZWZpbmUgX0NPTkZJR19IDQqrRVhQQU5EIGNvbmZpZ0VudHJ5IEZPUkVBQ0ggY29tcG9uZW50c7sNCiNlbmRpZiAvKiBfQ09ORklHX0ggKi8NCqtFTkRGSUxFuw0Kq0VORERFRklORbsNCg0KDQqrREVGSU5FIGNvbmZpZ0VudHJ5IEZPUiBDb21wb25lbnS7DQovLyBQYXJhbWV0ZXJzIG9mIGNvbXBvbmVudCCrbmFtZbsNCqtFWFBBTkQgY29uZmlnRW50cnkgRk9SRUFDSCBwYXJhbWV0ZXJWYWx1ZXMtuw0Kq0VORERFRklORbsNCg0KDQqrREVGSU5FIGNvbmZpZ0VudHJ5IEZPUiBQYXJhbWV0ZXJWYWx1ZS27DQqrRVhQQU5EIGNvbW1lbnQgRk9SIHRoaXMtuw0KI2RlZmluZSCrbmFtZbsgq3ZhbHVluw0Kq0VORERFRklORbsNCg0KDQqrREVGSU5FIGNvbW1lbnQgRk9SIFBhcmFtZXRlclZhbHVlLbsNCqtFTkRERUZJTkW7