LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqIEZpbGUgRGVzY3JpcHRpb24gKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogRmlsZSBOYW1lOgkJJFdvcmtmaWxlOiAgIGhteF91cHJhZGVfbnZyYW0uaCAgJAogKiBWZXJzaW9uOgkJCSRSZXZpc2lvbjogICAxLjAgICQKICogT3JpZ2luYWwgQXV0aG9yOiBZYW5nIEh5dW4gVWsgJAogKiBDdXJyZW50IEF1dGhvcjoJJEF1dGhvcjogaHV5YW5nQGh1bWF4ZGlnaXRhbC5jb20gJAogKiBEYXRlOgkJCSREYXRlOiAyMDExLjExLjA3CiAqIEZpbGUgRGVzY3JpcHRpb246CVVwZ3JhZGUgQVBJcwogKiBNb2R1bGU6CiAqIFJlbWFya3M6CiAqLwoKCi8qKgogKiBAYXV0aG9yIEh5dW51ayBZYW5nKGh1eWFuZ0BodW1heGRpZ2l0YWwuY29tKQogKiBAZGF0ZSAwNyBOb3YgMjAxMQogKi8KCi8qKgogKiBAbm90ZQogKiBDb3B5cmlnaHQgKEMpIDIwMTEgSHVtYXggQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIDxicj4KICogVGhpcyBzb2Z0d2FyZSBpcyB0aGUgY29uZmlkZW50aWFsIGFuZCBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbgogKiBvZiBIdW1heCBDb3Jwb3JhdGlvbi4gWW91IG1heSBub3QgdXNlIG9yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQogKiBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiBhbnkgYXBwbGljYWJsZSBsaWNlbnNlCiAqIGFncmVlbWVudCBpbiB3cml0aW5nIGJldHdlZW4gSHVtYXggQ29ycG9yYXRpb24gYW5kIHlvdS4KICovCgogLypAeyovCgovKioKICogQGZpbGUgaG14X3VwZ3JhZGVfbnZyYW0uaAogKi8KCiNpZm5kZWYgSE1YX1VQR1JBREVfTlZSQU1fSF8KI2RlZmluZSBITVhfVVBHUkFERV9OVlJBTV9IXwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogSGVhZGVyIEZpbGVzKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBTdGFydCBJbmNsdWRpbmcgSGVhZGVyIEZpbGVzICovCi8qIEVuZCBJbmNsdWRpbmcgSGVhZGVycyovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKiBFeHRlcm4gdmFyaWFibGVzICoqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBTdGFydCBFeHRlcm4gdmFyaWFibGVlICovCmV4dGVybiBpbnQgbGlidXBncmFkZV92ZXJib3NlOwoKLyogRW5kIEV4dGVybiB2YXJpYWJsZSAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqIE1hY3JvIERlZmluaXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIFN0YXJ0IE1hY3JvIGRlZmluaXRpb24gKi8KCi8qIEVuZCBNYWNybyBkZWZpbml0aW9uICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB0eXBlZGVmICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBTdGFydCB0eXBlZGVmICovCgp0eXBlZGVmIGVudW0KewoJTlZSQU1fT1NEX09OID0gMCwKCU5WUkFNX09TRF9PRkYKfU5WUkFNX09TRF9ESVNQTEFZX0U7Cgp0eXBlZGVmIGVudW0KewoJTlZSQU1fRlJPTlRQQU5FTF9ESVNQTEFZX09OID0gMCwKCU5WUkFNX0ZST05UUEFORUxfRElTUExBWV9PRkYKfU5WUkFNX0ZST05UUEFORUxfRElTUExBWV9FOwoKdHlwZWRlZiBlbnVtCnsKCU5WUkFNX0FTUEVDVF9SQVRJT180XzMgPSAwLAoJTlZSQU1fQVNQRUNUX1JBVElPXzE2XzkKfU5WUkFNX0FTUEVDVF9SQVRJT19FOwoKdHlwZWRlZiBlbnVtCnsKCU5WUkFNX09UQV9TU1UgPSAxLAoJTlZSQU1fT1RBX0RURyA9IDIsCglOVlJBTV9PVEFfSFVNQVggPSAzLAoJTlZSQU1fT1RBX05PUkRJRyA9IDQsCglOVlJBTV9PVEFfRklMRSA9IDUsCglOVlJBTV9PVEFfU0tZRCA9IDYsCglOVlJBTV9PVEFfTUFYCn1OVlJBTV9PVEFfVFlQRV9FOwoKCnR5cGVkZWYgZW51bQp7CglOVlJBTV9PVEFfQ0hBTk5FTF9TQVQJCT0gMSwKCU5WUkFNX09UQV9DSEFOTkVMX0NBQgkJPSAyLAoJTlZSQU1fT1RBX0NIQU5ORUxfVEVSCQk9IDMsCglOVlJBTV9PVEFfQ0hBTk5FTF9GTEFTSAkJPSA0LAoJTlZSQU1fT1RBX0NIQU5ORUxfRlRQCQk9IDUKfU5WUkFNX09UQV9DSEFOTkVMX0U7Cgp0eXBlZGVmIGVudW0KewoJTlZSQU1fUkVTT0xVVElPTl9Vbmtub3duCQkJPTB4MDAwMDAwMDAsCglOVlJBTV9SRVNPTFVUSU9OXzcyMHgyNDBQCQk9MHgwMDAwMDAwMSwKCU5WUkFNX1JFU09MVVRJT05fMjg4MHgyNDBQCQk9MHgwMDAwMDAwMiwKCU5WUkFNX1JFU09MVVRJT05fNjQweDQ4MFAJCT0weDAwMDAwMDA0LAoJTlZSQU1fUkVTT0xVVElPTl83MjB4NDgwSQkJPTB4MDAwMDAwMDgsCglOVlJBTV9SRVNPTFVUSU9OXzcyMHg0ODBQCQk9MHgwMDAwMDAxMCwKCU5WUkFNX1JFU09MVVRJT05fMTQ0MHg0ODBQCQk9MHgwMDAwMDAyMCwKCU5WUkFNX1JFU09MVVRJT05fMjg4MHg0ODBJCQk9MHgwMDAwMDA0MCwKCU5WUkFNX1JFU09MVVRJT05fMjg4MHg0ODBQCQk9MHgwMDAwMDA4MCwKCU5WUkFNX1JFU09MVVRJT05fNzIweDI4OFAJCT0weDAwMDAwMTAwLAoJTlZSQU1fUkVTT0xVVElPTl8yODgweDI4OFAgCQk9MHgwMDAwMDIwMCwKCU5WUkFNX1JFU09MVVRJT05fNzIweDU3NkkJCT0weDAwMDAwNDAwLAoJTlZSQU1fUkVTT0xVVElPTl83MjB4NTc2UAkJPTB4MDAwMDA4MDAsCglOVlJBTV9SRVNPTFVUSU9OXzE0NDB4NTc2UAkJPTB4MDAwMDEwMDAsCglOVlJBTV9SRVNPTFVUSU9OXzI4ODB4NTc2SSAJCT0weDAwMDAyMDAwLAoJTlZSQU1fUkVTT0xVVElPTl8yODgweDU3NlAJCT0weDAwMDA0MDAwLAoJTlZSQU1fUkVTT0xVVElPTl8xMDgweDcyMFAJCT0weDAwMDA4MDAwLAoJTlZSQU1fUkVTT0xVVElPTl8xMjgweDcyMFAJCT0weDAwMDEwMDAwLAoJTlZSQU1fUkVTT0xVVElPTl8xOTIweDEwODBJCQk9MHgwMDAyMDAwMCwKCU5WUkFNX1JFU09MVVRJT05fMTkyMHgxMDgwUAkJPTB4MDAwNDAwMDAsCglOVlJBTV9SRVNPTFVUSU9OX0RVTU1ZCQkJPTB4MDAwRkZGRkYKfSBOVlJBTV9WSURFT19SRVNPTFVUSU9OX0U7Cgp0eXBlZGVmIGVudW0KewoJTlZSQU1fSERNSV9GSUVMRF9SQVRFX1Vua25vd24JPTB4MDAwMCwKCU5WUkFNX0hETUlfRklFTERfUkFURV8yNEhaCQk9MHgwMDAxLAoJTlZSQU1fSERNSV9GSUVMRF9SQVRFXzI1SFogCQk9MHgwMDAyLAoJTlZSQU1fSERNSV9GSUVMRF9SQVRFXzMwSFogCQk9MHgwMDA0LAoJTlZSQU1fSERNSV9GSUVMRF9SQVRFXzUwSFogCQk9MHgwMDA4LAoJTlZSQU1fSERNSV9GSUVMRF9SQVRFXzYwSFogCQk9MHgwMDEwLAoJTlZSQU1fSERNSV9GSUVMRF9SQVRFXzEwMEhaIAkJPTB4MDAyMCwKCU5WUkFNX0hETUlfRklFTERfUkFURV8xMjBIWiAJCT0weDAwNDAsCglOVlJBTV9IRE1JX0ZJRUxEX1JBVEVfMjAwSFoJCT0weDAwODAsCglOVlJBTV9IRE1JX0ZJRUxEX1JBVEVfMjQwSFoJCT0weDAxMDAsCglOVlJBTV9IRE1JX0ZJRUxEX1JBVEVfRFVNTVkJCT0weEZGRkYKfSBOVlJBTV9IRE1JX1ZJREVPX0ZJRUxEX1JBVEVfRTsKCgp0eXBlZGVmIGVudW0KewoJTlZSQU1fSERNSV9WSURFT19BUl9lTm9EYXRhID0gMCwKCU5WUkFNX0hETUlfVklERU9fQVJfZTRfMywKCU5WUkFNX0hETUlfVklERU9fQVJfZTE2XzkKfU5WUkFNX0hETUlfVklERU9fQVJfRTsKCgp0eXBlZGVmIGVudW0KewoJTlZSQU1fU0NBUlRfT1VUUFVUX0NWQlM9MywKCU5WUkFNX1NDQVJUX09VVFBVVF9SR0IsCglOVlJBTV9TQ0FSVF9PVVRQVVRfU1ZJREVPLAoKCU5WUkFNX1NDQVJUX01BWAp9IE5WUkFNX1NDQVJUX1NFVFRJTkdfVkFMVUU7Cgp0eXBlZGVmIGVudW0gdGFnTlZSQU1fRklFTEQKewoJTlZSQU1fRklFTERfU1lTVEVNX0lEID0gMCwJCQkJCS8vIHVuc2lnbmVkIGludAkJCQkvLyA0CQkJCS8vIFN5c3RlbSBJZAoJTlZSQU1fRklFTERfU0ZMQVNILAoJTlZSQU1fRklFTERfU0VSSUFMX05PLAoJTlZSQU1fRklFTERfTUFDX0FERFIsCglOVlJBTV9GSUVMRF9IRENQX0tFWSwKCU5WUkFNX0ZJRUxEX0RUQ1BfS0VZLAoJTlZSQU1fRklFTERfQ0lfUExVU19LRVksCglOVlJBTV9GSUVMRF9QQVJJTkdfREFUQSwKCU5WUkFNX0ZJRUxEX1BSSVZBVEUsCglOVlJBTV9GSUVMRF9DU0NfS0VZLAoJTlZSQU1fRklFTERfMVNUX1NFUklBTF9OVU1CRVIsCglOVlJBTV9GSUVMRF8yTkRfU0VSSUFMX05VTUJFUiwKCU5WUkFNX0ZJRUxEX0dQTiwKCU5WUkFNX0ZJRUxEX01BQ19BRERSX01PQ0EsCglOVlJBTV9GSUVMRF9NQUNfQUREUl9CVCwKCU5WUkFNX0ZJRUxEX0dPT0dMRV9TU0xfUEVNLAoJTlZSQU1fRklFTERfR09PR0xFX1NTTF9DUlQsCglOVlJBTV9GSUVMRF9DTV9TRVJJQUxfTk8sCglOVlJBTV9GSUVMRF9DTV9NQUNfQUREUiwKCU5WUkFNX0ZJRUxEX0NNX01BQ19BRERSX0FOT1RIRVIsCglOVlJBTV9GSUVMRF9JUkRFVE9fQkJDQiwKCglOVlJBTV9GSUVMRF9PVEFfVFlQRTEgPSAweDEwMCwJCQkJLy8gTlZSQU1fT1RBX1RZUEVfRQoJTlZSQU1fRklFTERfT1RBX1RZUEUyLCAJCQkJCQkvLyBOVlJBTV9PVEFfVFlQRV9FCglOVlJBTV9GSUVMRF9PVEFfVFlQRTMsCQkJCQkJLy8gTlZSQU1fT1RBX1RZUEVfRQoJTlZSQU1fRklFTERfQ0hfVFlQRTEsCQkJCQkJLy8gTlZSQU1fT1RBX0NIQU5ORUxfRQoJTlZSQU1fRklFTERfQ0hfVFlQRTIsCQkJCQkJLy8gTlZSQU1fT1RBX0NIQU5ORUxfRQoJTlZSQU1fRklFTERfQ0hfVFlQRTMsCQkJCQkJLy8gTlZSQU1fT1RBX0NIQU5ORUxfRQoJTlZSQU1fRklFTERfT1RBX0ZMQUcxLAkJCQkJCS8vIE5WUkFNX09UQV9GTEFHX0UKCU5WUkFNX0ZJRUxEX09UQV9GTEFHMiwJCQkJCQkvLyBOVlJBTV9PVEFfRkxBR19FCglOVlJBTV9GSUVMRF9PVEFfRkxBRzMsCQkJCQkJLy8gTlZSQU1fT1RBX0ZMQUdfRQoJTlZSQU1fRklFTERfVFVORVJfSUQxLAkJCQkJCS8vIFR1bmVyIElkCglOVlJBTV9GSUVMRF9UVU5FUl9JRDIsCQkJCQkJLy8gVHVuZXIgSWQKCU5WUkFNX0ZJRUxEX1RVTkVSX0lEMywJCQkJCQkvLyBUdW5lciBJZAoJTlZSQU1fRklFTERfQU5URU5BX1BPV0VSMSwJCQkJCS8vIEV4dGVybmFsIEFudGVuYSBQb3dlciBmb3IgVGVyLCAwOk9mZi8xOk9uCglOVlJBTV9GSUVMRF9BTlRFTkFfUE9XRVIyLAkJCQkJLy8gRXh0ZXJuYWwgQW50ZW5hIFBvd2VyIGZvciBUZXIsIDA6T2ZmLzE6T24KCU5WUkFNX0ZJRUxEX0FOVEVOQV9QT1dFUjMsCQkJCQkvLyBFeHRlcm5hbCBBbnRlbmEgUG93ZXIgZm9yIFRlciwgMDpPZmYvMTpPbgoJTlZSQU1fRklFTERfRVNfUElEMSwJCQkJCQkJLy8gRWxlbWVudCBTdHJlYW0gUElEIGZvciBPVEEKCU5WUkFNX0ZJRUxEX0VTX1BJRDIsCQkJCQkJCS8vIEVsZW1lbnQgU3RyZWFtIFBJRCBmb3IgT1RBCglOVlJBTV9GSUVMRF9FU19QSUQzLAkJCQkJCQkvLyBFbGVtZW50IFN0cmVhbSBQSUQgZm9yIE9UQQoJTlZSQU1fRklFTERfVFJBTlNBQ1RJT05fSUQxLAkJCQkJLy8gVHJhbnNhY3Rpb24gSWQgZm9yIE5vcmRpYyBPVEEKCU5WUkFNX0ZJRUxEX1RSQU5TQUNUSU9OX0lEMiwJCQkJCS8vIFRyYW5zYWN0aW9uIElkIGZvciBOb3JkaWMgT1RBCglOVlJBTV9GSUVMRF9UUkFOU0FDVElPTl9JRDMsCQkJCQkvLyBUcmFuc2FjdGlvbiBJZCBmb3IgTm9yZGljIE9UQQoJTlZSQU1fRklFTERfQ0hfSU5GT19TLAkJCQkJCS8vIERJX0NIQU5ORUxfUEFSQU0KCU5WUkFNX0ZJRUxEX0NIX0lORk9fVCwJCQkJCQkvLyBESV9DSEFOTkVMX1BBUkFNCglOVlJBTV9GSUVMRF9DSF9JTkZPX0MsCQkJCQkJLy8gRElfQ0hBTk5FTF9QQVJBTQoJTlZSQU1fRklFTERfTkVUX1BPUlRBTF9JUCwJCQkJCS8vIHBvcnRhbCBpcCBhZGRyZXNzCglOVlJBTV9GSUVMRF9ORVRfRE9XTl9QQVRILAkJCQkJLy8gTmV0d29yayBEb3dubG9hZCBQYXRoCglOVlJBTV9GSUVMRF9ORVRfREVWSUNFX0lELAkJCQkJLy8gZXRoZXJuZXQgZGV2aWNlIGlkIDAgPSBldGgwCglOVlJBTV9GSUVMRF9ORVRfSVBfQ09ORklHLAkJCQkJLy8gREhDUC9NYW51YWwKCU5WUkFNX0ZJRUxEX05FVF9JUF9TRVRUSU5HLAkJCQkJLy8gTWFudWFsIElQIHNldHRpbmcKCU5WUkFNX0ZJRUxEX09UQV9GVFBfSU5GTywJCQkJCS8vIE5WUkFNX0ZUUF9PVEFfU0VUVElOR19UCglOVlJBTV9GSUVMRF9GSUxFX1NJWkUsCQkJCQkJLy8gZmlsZSBzaXplIG9mIGJhY2tncm91bGQgb3RhCgoJTlZSQU1fRklFTERfTE9BREVSX1ZFUlNJT04sCQkJCQkvLyBWZXJzaW9uIG9mIGJvb3QgTG9hZGVyCglOVlJBTV9GSUVMRF9BUFBfVkVSU0lPTiwJCQkJCQkvLyBWZXJzaW9uIG51bWJlciBvZiBBcHBsaWNhdGlvbgoJTlZSQU1fRklFTERfT1RBTERSX1ZFUlNJT04sCQkJCQkvLyBWZXJzaW9uIG9mIE9UQSBMb2FkZXIKCU5WUkFNX0ZJRUxEX0NVUl9PVEFJTUFHRV9WRVJTSU9OLAkJCS8vIFZlcnNpb24gbnVtYmVyIG9mIE9UQSBpbWFnZQoJTlZSQU1fRklFTERfTE9BREVSX1ZFUiwKCU5WUkFNX0ZJRUxEX0FQUF9WRVIsCgoJTlZSQU1fRklFTERfTEFOR1VBR0UsCQkJCQkJLy8gT1NEIGxhbmd1YWdlIGNvZGUgaW4gSVNPIDYzOSBjb2RlCglOVlJBTV9GSUVMRF9DT1VOVFJZX0NPREUsCQkJCQkvLyB1bnNpZ25lZCBjaGFyIGFbM10KCU5WUkFNX0ZJRUxEX1RWX1NUQU5EQVJELAkJCQkJCS8vIERJX1ZJREVPX1NEX1NUQU5EQVJECglOVlJBTV9GSUVMRF9TQ0FSVF9SR0IsCQkJCQkJLy8gTlZSQU1fU0NBUlRfU0VUVElOR19WQUxVRQoJTlZSQU1fRklFTERfSERfUkVTT1VMVElPTiwJCQkJCS8vIE5WUkFNX1ZJREVPX1JFU09MVVRJT05fRQoJTlZSQU1fRklFTERfRklFTERfUkFURSwJCQkJCQkvLyBOVlJBTV9IRE1JX1ZJREVPX0ZJRUxEX1JBVEVfRQoJTlZSQU1fRklFTERfT0FEX1ZFUlNJT04sCQkJCQkJLy8gZm9yIE1IRUcgPz8/CglOVlJBTV9GSUVMRF9SQ1VfQ1VTVE9NX0NPREUsCQkJCQkvLyBmb3IgUkNVIGN1c3RvbSBjb2RlCglOVlJBTV9GSUVMRF9SQ1VfQ1VTVE9NX0NPREUyLAkJCQkvLyBmb3IgYWx0ZXJuYXRpdmUgUkNVIGN1c3RvbSBjb2RlCglOVlJBTV9GSUVMRF9QQU5FTF9ESVNQTEFZLAkJCQkJLy8gRElfT1RBX1BBTkVMRElTUExBWV90CglOVlJBTV9GSUVMRF9QQU5FTF9ESU1NSU5HLAkJCQkJLy8gdW5zaWduZWQgY2hhcgoJTlZSQU1fRklFTERfT1NEX0RJU1BMQVksCQkJCQkJLy8gTlZSQU1fT1NEX0RJU1BMQVlfRQoJTlZSQU1fRklFTERfU1RBUlRfQkFOS19GTEFHLAkJCQkJLy8gtc4gsLPAxyBiYW5rwd8gvu618LfOILrOxsMgx9IgwfYgsOHBpAoJTlZSQU1fRklFTERfQ0hFQ0tfVVNCLAkJCQkJCS8vILrOxsMgvcMgVVNCILi2v+7GrsfYvK0gaGRmuKYgsMu758fSwfYguLvB9iCw4cGkCglOVlJBTV9GSUVMRF9DSEVDS19VU0JfQ09VTlQsCQkJCQkvLyDApyC1v8DbIL3HxtAgvcMguO4gufggwOcgvcO1tSDH0sH2IGNvdW50uKYgwPrA5QoJTlZSQU1fRklFTERfQVNQRUNUX1JBVElPLAkJCQkJLy8gTlZSQU1fQVNQRUNUX1JBVElPX0UKCU5WUkFNX0ZJRUxEX1VTQUdFX0lELAkJCQkJCS8vIGZvciBVUEMgT1RBCglOVlJBTV9GSUVMRF9CSU44SywJCQkJCQkJLy8gZm9yIGVlcHJvbSBlbXVsYXRpb24KCU5WUkFNX0ZJRUxEX0lSREVUT19DUENCLAkJCQkJCS8vIGZvciBJUkRFVE8gQ1BDQgoJTlZSQU1fRklFTERfSVJERVRPX0NQQ0JfRU5DUllQVEVELCAJCQkvLyBmb3IgSVJERVRPIENQQ0IgKGVuY3J5cHRlZCkKCglOVlJBTV9GSUVMRF9BQ1RJVkFURURfS0VSTkVMX05VTSwgCQkJLy8gQUNUSVZBVEVEX0tFUk5FTF9OVU0KCU5WUkFNX0ZJRUxEX01URF9UWVBFX0ZPUl9LRVJORUwsIAkJCS8vIE1URF9UWVBFX0ZPUl9LRVJORUwKCU5WUkFNX0ZJRUxEX0FDVElWQVRFRF9LRVJORUxfTkFNRSwJCQkvLyAia2VybmVsMCIsIGxvb2t1cCBtdGQgcGFydGl0aW9uCglOVlJBTV9GSUVMRF9QTEFURk9STV9OQU1FLAkJCQkvLyBQbGF0Zm9ybSBuYW1lLCBlLmcuICJnZmhkMTAwIgoJTlZSQU1fRklFTERfRVhUUkFfS0VSTkVMX09QVCwJCQkJLy8gc3RyaW5nIHRvIGFwcGVuZCB0byBjbWRsaW5lCglOVlJBTV9GSUVMRF9QQUlSRURfRElTSywJCQkJLy8gc2VyaWFsIG51bWJlciBvZiB0aGUgZGlzawoJTlZSQU1fRklFTERfUEFSVElUSU9OX1ZFUiwJCSAgICAgICAgCS8vIHBhcnRpdGlvbiB2ZXJzaW9uCgoJTlZSQU1fRklFTERfUkFXRlMgPSAweDEwMDAsCglOVlJBTV9GSUVMRF9EVU1NWSA9IDB4RkZGRgp9IE5WUkFNX0ZJRUxEX1Q7Cgp0eXBlZGVmIGVudW0KewoJTlZSQU1fT1RBX0ZMQUdfTk9fT1RBCQkJPSAweDAwLAoJTlZSQU1fT1RBX0ZMQUdfREVURUNURUQJCQk9IDB4MDEsCglOVlJBTV9PVEFfRkxBR19DT01QTEVURUQJCQk9IDB4MDIsCglOVlJBTV9PVEFfRkxBR19GT1JDRV9VUEdSQURFCQk9IDB4MDQsCglOVlJBTV9PVEFfRkxBR19OQUdSQV9SRUNPVkVSWQk9IDB4MDgsCglOVlJBTV9PVEFfRkxBR19ET1dOTE9BRElORwkJPSAweDEwLAoJTlZSQU1fT1RBX0ZMQUdfV1JJVElORwkJCT0gMHgyMCwKCU5WUkFNX09UQV9GTEFHX0VSUk9SCQkJCT0gMHg4MAp9IE5WUkFNX09UQV9GTEFHX0U7Cgp0eXBlZGVmIHN0cnVjdCBOVlJBTV9ORVRfSVBfU0VUVElOR19UYWcKewojZGVmaW5lIE5FVF9BRERSX0xFTkdUSCA0Cgl1bnNpZ25lZCBjaGFyCQlpcFtORVRfQUREUl9MRU5HVEhdOwoJdW5zaWduZWQgY2hhcgkJbWFza1tORVRfQUREUl9MRU5HVEhdOwoJdW5zaWduZWQgY2hhciAJCWdhdGV3YXlbTkVUX0FERFJfTEVOR1RIXTsKCXVuc2lnbmVkIGNoYXIJCWRuc1tORVRfQUREUl9MRU5HVEhdOwp9IE5WUkFNX05FVF9JUF9TRVRUSU5HX1Q7Cgp0eXBlZGVmIHN0cnVjdCBOVlJBTV9GVFBfT1RBX1NFVFRJTkdfVGFnCnsKI2RlZmluZSBOVlJBTV9GVFBfVVNFUl9MRU5HVEggCQkyMAojZGVmaW5lIE5WUkFNX0ZUUF9QQVNTV0RfTEVOR1RIIAkJMjAKI2RlZmluZSBOVlJBTV9GVFBfRElSX1BBVEhfTEVOR1RIIAkyMDAKI2RlZmluZSBOVlJBTV9GVFBfRklMRV9OQU1FX0xFTkdUSCAJNTAKCXVuc2lnbmVkIGNoYXIJCWFTZXJ2ZXJJcFtORVRfQUREUl9MRU5HVEhdOwoJdW5zaWduZWQgY2hhciAJCWFVc2VyTmFtZVtOVlJBTV9GVFBfVVNFUl9MRU5HVEhdOwoJdW5zaWduZWQgY2hhciAJCWFQYXNzd2RbTlZSQU1fRlRQX1BBU1NXRF9MRU5HVEhdOwoJdW5zaWduZWQgY2hhciAJCWFEaXJQYXRoW05WUkFNX0ZUUF9ESVJfUEFUSF9MRU5HVEhdOwoJdW5zaWduZWQgY2hhciAJCWFGaWxlTmFtZVtOVlJBTV9GVFBfRklMRV9OQU1FX0xFTkdUSF07Cn0gTlZSQU1fRlRQX09UQV9TRVRUSU5HX1Q7Cgp0eXBlZGVmIGVudW0KewoJTlZSQU1fSVBfREhDUCA9IDAsCglOVlJBTV9JUF9NQU5VQUwKfSBOVlJBTV9ORVRfSVBfQ09ORklHX0U7CgovKiBTdGFydCBnbG9iYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwp0eXBlZGVmIGVudW0gSE1YX05WUkFNX1BBUlRJVElPTl9lCnsKCUhNWF9OVlJBTV9QQVJUSVRJT05fUk8sCglITVhfTlZSQU1fUEFSVElUSU9OX1JXLAoJSE1YX05WUkFNX1BBUlRJVElPTl9XX1JBV0ZTLAoJSE1YX05WUkFNX1BBUlRJVElPTl9NQVgKfUhNWF9OVlJBTV9QQVJUSVRJT05fRTsKCgp0eXBlZGVmIGVudW0KewoJRFJWX09LCQkJPQkwLAogCURSVl9FUlIsCgoJRFJWX0VSUl9JTlZBTElEX1BBUkFNRVRFUiwKCURSVl9FUlJfSU5JVElBTElaQVRJT04sCglEUlZfRVJSX0VWRU5UX0lOSVRJQUxJWkFUSU9OLAoJRFJWX0VSUl9PVVRPRk1FTU9SWSwKCURSVl9FUlJfRVhURVJOQUxfRVJST1IKCn1EUlZfRXJyb3I7CgovKiBFbmQgdHlwZWRlZiAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKiogZ2xvYmFsIGZ1bmN0aW9uIHByb3RvdHlwZSAqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmV4dGVybiBpbnQgSE1YX1VQR1JBREVfTlZSQU1fV3JpdGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSApOwpleHRlcm4gaW50IEhNWF9VUEdSQURFX05WUkFNX1JlYWQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSApOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKiogZ2xvYmFsIGZ1bmN0aW9uIHByb3RvdHlwZSAqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkRSVl9FcnJvcglITVhfTlZSQU1fSW5pdCh2b2lkKTsKRFJWX0Vycm9yCUhNWF9OVlJBTV9Xcml0ZShITVhfTlZSQU1fUEFSVElUSU9OX0UgcGFydGl0aW9uLCB1bnNpZ25lZCBjaGFyICpwTmFtZSwgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgY2hhciAqcFZhbHVlLCB1bnNpZ25lZCBpbnQgdWxTaXplKTsKRFJWX0Vycm9yCUhNWF9OVlJBTV9SZWFkKEhNWF9OVlJBTV9QQVJUSVRJT05fRSBwYXJ0aXRpb24sIHVuc2lnbmVkIGNoYXIgKnBOYW1lLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpwVmFsdWUsIHVuc2lnbmVkIGludCB1bFNpemUpOwpEUlZfRXJyb3IJSE1YX05WUkFNX0dldEZpZWxkKE5WUkFNX0ZJRUxEX1QgZmllbGQsIHVuc2lnbmVkIGludCBvZmZzZXQsIHZvaWQgKmRhdGEsIGludCBuRGF0YVNpemUpOwpEUlZfRXJyb3IJSE1YX05WUkFNX1NldEZpZWxkKE5WUkFNX0ZJRUxEX1QgZmllbGQsIHVuc2lnbmVkIGludCBvZmZzZXQsIHZvaWQgKmRhdGEsIGludCBuRGF0YVNpemUpOwpEUlZfRXJyb3IJSE1YX05WUkFNX0dldExlbmd0aChOVlJBTV9GSUVMRF9UIGZpZWxkLCBpbnQgKnBMZW4pOwpEUlZfRXJyb3IJSE1YX05WUkFNX1JlbW92ZShITVhfTlZSQU1fUEFSVElUSU9OX0UgcGFydGl0aW9uLCB1bnNpZ25lZCBjaGFyICpwTmFtZSk7CkRSVl9FcnJvcglITVhfTlZSQU1fRGlyKHZvaWQpOwoKCi8qIEVuZCBnbG9iYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwoKCiNlbmRpZiAgLy8gSE1YX1VQR1JBREVfTlZSQU1fSF8KLypAfSovCg==