LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogIGZ0d2luZm50LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgV2luZG93cyBmbnQtc3BlY2lmaWMgZGF0YS4gICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogIENvcHlyaWdodCAyMDAzLCAyMDA0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaWZuZGVmIF9fRlRXSU5GTlRfSF9fCiNkZWZpbmUgX19GVFdJTkZOVF9IX18KCiNpbmNsdWRlIDxmdDJidWlsZC5oPgojaW5jbHVkZSBGVF9GUkVFVFlQRV9ICgojaWZkZWYgRlJFRVRZUEVfSAojZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgojZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCiNlbmRpZgoKCkZUX0JFR0lOX0hFQURFUgoKCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgd2luZm50X2ZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgV2luZG93IEZOVCBGaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgV2luZG93cyBGTlQgc3BlY2lmaWMgQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBXaW5kb3dzIEZOVCBzcGVjaWZpYyAgICAgICovCiAgLyogICAgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqCiAgICogQGVudW06CiAgICogICBGVF9XaW5GTlRfSURfWFhYCiAgICoKICAgKiBAZGVzY3JpcHRpb246CiAgICogICBBIGxpc3Qgb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgYGNoYXJzZXQnIGJ5dGUgaW4KICAgKiAgIEBGVF9XaW5GTlRfSGVhZGVyUmVjLiAgRXhhY3QgbWFwcGluZyB0YWJsZXMgZm9yIHRoZSB2YXJpb3VzIGNwWFhYWAogICAqICAgZW5jb2RpbmdzIChleGNlcHQgZm9yIGNwMTM2MSkgY2FuIGJlIGZvdW5kIGF0IGZ0cDovL2Z0cC51bmljb2RlLm9yZwogICAqICAgaW4gdGhlIE1BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUL1dJTkRPV1Mgc3ViZGlyZWN0b3J5LiAgY3AxMzYxIGlzCiAgICogICByb3VnaGx5IGEgc3VwZXJzZXQgb2YgTUFQUElOR1MvT0JTT0xFVEUvRUFTVEFTSUEvS1NDL0pPSEFCLlRYVC4KICAgKgogICAqIEB2YWx1ZXM6CiAgICogICBGVF9XaW5GTlRfSURfREVGQVVMVCA6OgogICAqICAgICBUaGlzIGlzIHVzZWQgZm9yIGZvbnQgZW51bWVyYXRpb24gYW5kIGZvbnQgY3JlYXRpb24gYXMgYSAKICAgKiAgICAgYGRvbid0IGNhcmUnIHZhbHVlLiAgVmFsaWQgZm9udCBmaWxlcyBkb24ndCBjb250YWluIHRoaXMgdmFsdWUuCiAgICogICAgIFdoZW4gcXVlcnlpbmcgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFyYWN0ZXIgc2V0IG9mIHRoZSBmb250CiAgICogICAgIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkIGludG8gYSBzcGVjaWZpZWQgZGV2aWNlIGNvbnRleHQsIHRoaXMKICAgKiAgICAgcmV0dXJuIHZhbHVlIChvZiB0aGUgcmVsYXRlZCBXaW5kb3dzIEFQSSkgc2ltcGx5IGRlbm90ZXMgZmFpbHVyZS4KICAgKgogICAqICAgRlRfV2luRk5UX0lEX1NZTUJPTCA6OgogICAqICAgICBUaGVyZSBpcyBubyBrbm93biBtYXBwaW5nIHRhYmxlIGF2YWlsYWJsZS4KICAgKgogICAqICAgRlRfV2luRk5UX0lEX01BQyA6OgogICAqICAgICBNYWMgUm9tYW4gZW5jb2RpbmcuCiAgICoKICAgKiAgIEZUX1dpbkZOVF9JRF9PRU0gOjoKICAgKiAgICAgRnJvbSBNaWNoYWVsIFD2dHRnZW4gPG1pY2hhZWxAcG9ldHRnZW4uZGU+OgogICAqICAgICAgIFRoZSBgV2luZG93cyBGb250IE1hcHBpbmcnIGFydGljbGUgc2F5cyB0aGF0IEZUX1dpbkZOVF9JRF9PRU0KICAgKiAgICAgICBpcyB1c2VkIGZvciB0aGUgY2hhcnNldCBvZiB2ZWN0b3IgZm9udHMsIGxpa2UgYG1vZGVybi5mb24nLAogICAqICAgICAgIGByb21hbi5mb24nLCBhbmQgYHNjcmlwdC5mb24nIG9uIFdpbmRvd3MuCiAgICoKICAgKiAgICAgICBUaGUgYENyZWF0ZUZvbnQnIGRvY3VtZW50YXRpb24gc2F5czogVGhlIEZUX1dpbkZOVF9JRF9PRU0gdmFsdWUKICAgKiAgICAgICBzcGVjaWZpZXMgYSBjaGFyYWN0ZXIgc2V0IHRoYXQgaXMgb3BlcmF0aW5nLXN5c3RlbSBkZXBlbmRlbnQuCiAgICoKICAgKiAgICAgICBUaGUgYElGSU1FVFJJQ1MnIGRvY3VtZW50YXRpb24gZnJvbSB0aGUgYFdpbmRvd3MgRHJpdmVyCiAgICogICAgICAgRGV2ZWxvcG1lbnQgS2l0JyBzYXlzOiBUaGlzIGZvbnQgc3VwcG9ydHMgYW4gT0VNLXNwZWNpZmljCiAgICogICAgICAgY2hhcmFjdGVyIHNldC4gIFRoZSBPRU0gY2hhcmFjdGVyIHNldCBpcyBzeXN0ZW0gZGVwZW5kZW50LgogICAqCiAgICogICAgICAgSW4gZ2VuZXJhbCBPRU0sIGFzIG9wcG9zZWQgdG8gQU5TSSAoaS5lLiwgY3AxMjUyKSwgZGVub3RlcyB0aGUKICAgKiAgICAgICBzZWNvbmQgZGVmYXVsdCBjb2RlcGFnZSB0aGF0IG1vc3QgaW50ZXJuYXRpb25hbCB2ZXJzaW9ucyBvZgogICAqICAgICAgIFdpbmRvd3MgaGF2ZS4gIEl0IGlzIG9uZSBvZiB0aGUgT0VNIGNvZGVwYWdlcyBmcm9tCiAgICoKICAgKiAgICAgICAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9nbG9iYWxkZXYvcmVmZXJlbmNlL2NwaG9tZS5tc3B4LAogICAqICAgIAogICAqICAgICAgIGFuZCBpcyB1c2VkIGZvciB0aGUgYERPUyBib3hlcycsIHRvIHN1cHBvcnQgbGVnYWN5IGFwcGxpY2F0aW9ucy4KICAgKiAgICAgICBBIEdlcm1hbiBXaW5kb3dzIHZlcnNpb24gZm9yIGV4YW1wbGUgdXN1YWxseSB1c2VzIEFOU0kgY29kZXBhZ2UKICAgKiAgICAgICAxMjUyIGFuZCBPRU0gY29kZXBhZ2UgODUwLgogICAqCiAgICogICBGVF9XaW5GTlRfSURfQ1A4NzQgOjoKICAgKiAgICAgQSBzdXBlcnNldCBvZiBUaGFpIFRJUyA2MjAgYW5kIElTTyA4ODU5LTExLgogICAqCiAgICogICBGVF9XaW5GTlRfSURfQ1A5MzIgOjoKICAgKiAgICAgQSBzdXBlcnNldCBvZiBKYXBhbmVzZSBTaGlmdC1KSVMgKHdpdGggbWlub3IgZGV2aWF0aW9ucykuCiAgICoKICAgKiAgIEZUX1dpbkZOVF9JRF9DUDkzNiA6OgogICAqICAgICBBIHN1cGVyc2V0IG9mIHNpbXBsaWZpZWQgQ2hpbmVzZSBHQiAyMzEyLTE5ODAgKHdpdGggZGlmZmVyZW50CiAgICogICAgIG9yZGVyaW5nIGFuZCBtaW5vciBkZXZpYXRpb25zKS4KICAgKgogICAqICAgRlRfV2luRk5UX0lEX0NQOTQ5IDo6CiAgICogICAgIEEgc3VwZXJzZXQgb2YgS29yZWFuIEhhbmd1bCBLUyBDIDU2MDEtMTk4NyAod2l0aCBkaWZmZXJlbnQKICAgKiAgICAgb3JkZXJpbmcgYW5kIG1pbm9yIGRldmlhdGlvbnMpLgogICAqCiAgICogICBGVF9XaW5GTlRfSURfQ1A5NTAgOjoKICAgKiAgICAgQSBzdXBlcnNldCBvZiB0cmFkaXRpb25hbCBDaGluZXNlIEJpZyA1IEVUZW4gKHdpdGggZGlmZmVyZW50CiAgICogICAgIG9yZGVyaW5nIGFuZCBtaW5vciBkZXZpYXRpb25zKS4KICAgKgogICAqICAgRlRfV2luRk5UX0lEX0NQMTI1MCA6OgogICAqICAgICBBIHN1cGVyc2V0IG9mIEVhc3QgRXVyb3BlYW4gSVNPIDg4NTktMiAod2l0aCBzbGlnaHRseSBkaWZmZXJlbnQKICAgKiAgICAgb3JkZXJpbmcpLgogICAqCiAgICogICBGVF9XaW5GTlRfSURfQ1AxMjUxIDo6CiAgICogICAgIEEgc3VwZXJzZXQgb2YgUnVzc2lhbiBJU08gODg1OS01ICh3aXRoIGRpZmZlcmVudCBvcmRlcmluZykuCiAgICoKICAgKiAgIEZUX1dpbkZOVF9JRF9DUDEyNTIgOjoKICAgKiAgICAgQU5TSSBlbmNvZGluZy4gIEEgc3VwZXJzZXQgb2YgSVNPIDg4NTktMS4KICAgKgogICAqICAgRlRfV2luRk5UX0lEX0NQMTI1MyA6OgogICAqICAgICBBIHN1cGVyc2V0IG9mIEdyZWVrIElTTyA4ODU5LTcgKHdpdGggbWlub3IgbW9kaWZpY2F0aW9ucykuCiAgICogICAgIAogICAqICAgRlRfV2luRk5UX0lEX0NQMTI1NCA6OgogICAqICAgICBBIHN1cGVyc2V0IG9mIFR1cmtpc2ggSVNPIDg4NTktOS4KICAgKiAgICAgCiAgICogICBGVF9XaW5GTlRfSURfQ1AxMjU1IDo6CiAgICogICAgIEEgc3VwZXJzZXQgb2YgSGVicmV3IElTTyA4ODU5LTggKHdpdGggc29tZSBtb2RpZmljYXRpb25zKS4KICAgKgogICAqICAgRlRfV2luRk5UX0lEX0NQMTI1NiA6OgogICAqICAgICBBIHN1cGVyc2V0IG9mIEFyYWJpYyBJU08gODg1OS02ICh3aXRoIGRpZmZlcmVudCBvcmRlcmluZykuCiAgICoKICAgKiAgIEZUX1dpbkZOVF9JRF9DUDEyNTcgOjoKICAgKiAgICAgQSBzdXBlcnNldCBvZiBCYWx0aWMgSVNPIDg4NTktMTMgKHdpdGggc29tZSBkZXZpYXRpb25zKS4KICAgKgogICAqICAgRlRfV2luRk5UX0lEX0NQMTI1OCA6OgogICAqICAgICBGb3IgVmlldG5hbWVzZS4gIFRoaXMgZW5jb2RpbmcgZG9lc24ndCBjb3ZlciBhbGwgbmVjZXNzYXJ5CiAgICogICAgIGNoYXJhY3RlcnMuCiAgICoKICAgKiAgIEZUX1dpbkZOVF9JRF9DUDEzNjEgOjoKICAgKiAgICAgS29yZWFuIChKb2hhYikuCiAgICovCgojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTIgICAgMAojZGVmaW5lIEZUX1dpbkZOVF9JRF9ERUZBVUxUICAgMQojZGVmaW5lIEZUX1dpbkZOVF9JRF9TWU1CT0wgICAgMgojZGVmaW5lIEZUX1dpbkZOVF9JRF9NQUMgICAgICA3NwojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDkzMiAgIDEyOAojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDk0OSAgIDEyOQojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEzNjEgIDEzMAojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDkzNiAgIDEzNAojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDk1MCAgIDEzNgojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTMgIDE2MQojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTQgIDE2MgojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTggIDE2MwojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTUgIDE3NwojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTYgIDE3OAojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTcgIDE4NgojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTEgIDIwNAojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDg3NCAgIDIyMgojZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTAgIDIzOAojZGVmaW5lIEZUX1dpbkZOVF9JRF9PRU0gICAgIDI1NQoKCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgRlRfV2luRk5UX0hlYWRlclJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgV2luZG93cyBGTlQgSGVhZGVyIGluZm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1dpbkZOVF9IZWFkZXJSZWNfCiAgewogICAgRlRfVVNob3J0ICB2ZXJzaW9uOwogICAgRlRfVUxvbmcgICBmaWxlX3NpemU7CiAgICBGVF9CeXRlICAgIGNvcHlyaWdodFs2MF07CiAgICBGVF9VU2hvcnQgIGZpbGVfdHlwZTsKICAgIEZUX1VTaG9ydCAgbm9taW5hbF9wb2ludF9zaXplOwogICAgRlRfVVNob3J0ICB2ZXJ0aWNhbF9yZXNvbHV0aW9uOwogICAgRlRfVVNob3J0ICBob3Jpem9udGFsX3Jlc29sdXRpb247CiAgICBGVF9VU2hvcnQgIGFzY2VudDsKICAgIEZUX1VTaG9ydCAgaW50ZXJuYWxfbGVhZGluZzsKICAgIEZUX1VTaG9ydCAgZXh0ZXJuYWxfbGVhZGluZzsKICAgIEZUX0J5dGUgICAgaXRhbGljOwogICAgRlRfQnl0ZSAgICB1bmRlcmxpbmU7CiAgICBGVF9CeXRlICAgIHN0cmlrZV9vdXQ7CiAgICBGVF9VU2hvcnQgIHdlaWdodDsKICAgIEZUX0J5dGUgICAgY2hhcnNldDsKICAgIEZUX1VTaG9ydCAgcGl4ZWxfd2lkdGg7CiAgICBGVF9VU2hvcnQgIHBpeGVsX2hlaWdodDsKICAgIEZUX0J5dGUgICAgcGl0Y2hfYW5kX2ZhbWlseTsKICAgIEZUX1VTaG9ydCAgYXZnX3dpZHRoOwogICAgRlRfVVNob3J0ICBtYXhfd2lkdGg7CiAgICBGVF9CeXRlICAgIGZpcnN0X2NoYXI7CiAgICBGVF9CeXRlICAgIGxhc3RfY2hhcjsKICAgIEZUX0J5dGUgICAgZGVmYXVsdF9jaGFyOwogICAgRlRfQnl0ZSAgICBicmVha19jaGFyOwogICAgRlRfVVNob3J0ICBieXRlc19wZXJfcm93OwogICAgRlRfVUxvbmcgICBkZXZpY2Vfb2Zmc2V0OwogICAgRlRfVUxvbmcgICBmYWNlX25hbWVfb2Zmc2V0OwogICAgRlRfVUxvbmcgICBiaXRzX3BvaW50ZXI7CiAgICBGVF9VTG9uZyAgIGJpdHNfb2Zmc2V0OwogICAgRlRfQnl0ZSAgICByZXNlcnZlZDsKICAgIEZUX1VMb25nICAgZmxhZ3M7CiAgICBGVF9VU2hvcnQgIEFfc3BhY2U7CiAgICBGVF9VU2hvcnQgIEJfc3BhY2U7CiAgICBGVF9VU2hvcnQgIENfc3BhY2U7CiAgICBGVF9VU2hvcnQgIGNvbG9yX3RhYmxlX29mZnNldDsKICAgIEZUX1VMb25nICAgcmVzZXJ2ZWQxWzRdOwoKICB9IEZUX1dpbkZOVF9IZWFkZXJSZWMsICpGVF9XaW5GTlRfSGVhZGVyOwoKCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEBmdW5jdGlvbjoKICAqICAgIEZUX0dldF9XaW5GTlRfSGVhZGVyCiAgKgogICogQGRlc2NyaXB0aW9uOgogICogICAgUmV0cmlldmUgYSBXaW5kb3dzIEZOVCBmb250IGluZm8gaGVhZGVyLgogICoKICAqIEBpbnB1dDoKICAqICAgIGZhY2UgICAgOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCiAgKgogICogQG91dHB1dDoKICAqICAgIGFoZWFkZXIgOjogVGhlIFdpbkZOVCBoZWFkZXIuCiAgKgogICogQHJldHVybjoKICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KICAqCiAgKiBAbm90ZToKICAqICAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggV2luZG93cyBGTlQgZmFjZXMsIHJldHVybmluZyBhbiBlcnJvcgogICogICBvdGhlcndpc2UuCiAgKi8KICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICBGVF9HZXRfV2luRk5UX0hlYWRlciggRlRfRmFjZSAgICAgICAgICAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX1dpbkZOVF9IZWFkZXJSZWMgICphaGVhZGVyICk7CgoKIC8qICovCgpGVF9FTkRfSEVBREVSCgojZW5kaWYgLyogX19GVFdJTkZOVF9IX18gKi8KCgovKiBFTkQgKi8K