LyoqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgMjAwNiBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKioqKioqKioqKioqKioqKioNCiogRmlsZSBOYW1lICAgICAgICAgIDogOTF4X3dkZy5jDQoqIEF1dGhvciAgICAgICAgICAgICA6IE1DRCBBcHBsaWNhdGlvbiBUZWFtDQoqIERhdGUgRmlyc3QgSXNzdWVkICA6IDA1LzE4LzIwMDYgOiBWZXJzaW9uIDEuMA0KKiBEZXNjcmlwdGlvbiAgICAgICAgOiBUaGlzIGZpbGUgcHJvdmlkZXMgYWxsIHRoZSBXREcgc29mdHdhcmUgZnVuY3Rpb25zLg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogSGlzdG9yeToNCiogMDUvMjQvMjAwNiA6IFZlcnNpb24gMS4xDQoqIDA1LzE4LzIwMDYgOiBWZXJzaW9uIDEuMA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogVEhFIFBSRVNFTlQgU09GVFdBUkUgV0hJQ0ggSVMgRk9SIEdVSURBTkNFIE9OTFkgQUlNUyBBVCBQUk9WSURJTkcgQ1VTVE9NRVJTDQoqIFdJVEggQ09ESU5HIElORk9STUFUSU9OIFJFR0FSRElORyBUSEVJUiBQUk9EVUNUUyBJTiBPUkRFUiBGT1IgVEhFTSBUTyBTQVZFIFRJTUUuDQoqIEFTIEEgUkVTVUxULCBTVE1JQ1JPRUxFQ1RST05JQ1MgU0hBTEwgTk9UIEJFIEhFTEQgTElBQkxFIEZPUiBBTlkgRElSRUNULA0KKiBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgV0lUSCBSRVNQRUNUIFRPIEFOWSBDTEFJTVMgQVJJU0lORyBGUk9NIFRIRQ0KKiBDT05URU5UIE9GIFNVQ0ggU09GVFdBUkUgQU5EL09SIFRIRSBVU0UgTUFERSBCWSBDVVNUT01FUlMgT0YgVEhFIENPRElORw0KKiBJTkZPUk1BVElPTiBDT05UQUlORUQgSEVSRUlOIElOIENPTk5FQ1RJT04gV0lUSCBUSEVJUiBQUk9EVUNUUy4NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQojaW5jbHVkZSAiOTF4X3dkZy5oIg0KI2luY2x1ZGUgIjkxeF9zY3UuaCINCi8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQoNCi8qIFdERyBFbmQgb2YgQ291bnQgaW50ZXJydXB0IEZsYWcgKi8NCiNkZWZpbmUgV0RHX0ZMQUdfRUMgIDB4MDAwMQ0KDQoNCi8qIFdERyBFbmQgb2YgQ291bnQgaW50ZXJydXB0IHJlcXVlc3QgKi8NCiNkZWZpbmUgV0RHX0lUX0VDICAgIDB4MDAwMQ0KDQoNCg0KLyogV0RHIFN0YXJ0L1N0b3AgY291bnRlciAqLw0KI2RlZmluZSBXREdfQ291bnRlcl9TdGFydCAgMHgwMDAyDQojZGVmaW5lIFdER19Db3VudGVyX1N0b3AgICAweEZGRkQNCg0KDQovKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qIFJlZ2lzdGVycyByZXNldCB2YWx1ZSAqLw0KLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBXREdfRGVJbml0DQoqIERlc2NyaXB0aW9uICAgIDogRGVpbml0aWFsaXplcyB0aGUgV0RHIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQNCiogICAgICAgICAgICAgICAgICByZXNldCB2YWx1ZXMuDQoqIElucHV0ICAgICAgICAgIDogTm9uZQ0KKiBPdXRwdXQgICAgICAgICA6IE5vbmUNCiogUmV0dXJuICAgICAgICAgOiBOb25lDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCBXREdfRGVJbml0KHZvaWQpDQp7DQoNCiAgU0NVX0FQQlBlcmlwaFJlc2V0KF9fV0RHLCBFTkFCTEUpOyAgLypXREcgcGVyaXBoZXJhbCB1bmRlciBSZXNldCAqLw0KICBTQ1VfQVBCUGVyaXBoUmVzZXQoX19XREcsIERJU0FCTEUpOyAgLypXREcgcGVyaXBoZXJhbCBSZXNldCBvZmYqLw0KICANCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBXREdfU3RydWN0SW5pdA0KKiBEZXNjcmlwdGlvbiAgICA6IEZpbGxzIHRoZSBXREdfSW5pdFR5cGVEZWYgc3RydWN0dXJlIG1lbWJlciB3aXRoIGl0cyByZXNldA0KKiAgICAgICAgICAgICAgICAgIHZhbHVlLg0KKiBJbnB1dCAgICAgICAgICA6IFdER19Jbml0U3RydWN0IDogcG9pbnRlciB0byBhIFdER19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUNCiogICAgICAgICAgICAgICAgICB3aGljaCB3aWxsIGJlIGluaXRpYWxpemVkLg0KKiBPdXRwdXQgICAgICAgICA6IE5vbmUNCiogUmV0dXJuICAgICAgICAgOiBOb25lDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCBXREdfU3RydWN0SW5pdChXREdfSW5pdFR5cGVEZWYgKldER19Jbml0U3RydWN0KQ0Kew0KICAvKiBTZWxlY3QgdGhlIFdhdGNoZG9nIHJ1bm5pbmcgbW9kZSovDQogIFdER19Jbml0U3RydWN0LT5XREdfTW9kZSA9IFdER19Nb2RlX1RpbWVyOw0KDQogIC8qIFNlbGVjdCB0aGUgc291cmNlIGNsb2NrICovDQogIFdER19Jbml0U3RydWN0LT4gV0RHX0Nsb2NrU291cmNlID0gV0RHX0Nsb2NrU291cmNlX0FwYjsNCg0KICAgLyogSW5pdGlhbGl6ZSBQcmVzY2FsZXIgKi8NCiAgV0RHX0luaXRTdHJ1Y3QtPldER19QcmVzY2FsZXIgPTB4RkY7DQoNCiAgLyogSW5pdGlhbGl6ZSBQcmVsb2FkICovDQogIFdER19Jbml0U3RydWN0LT5XREdfUHJlbG9hZCA9MHhGRkZGOw0KDQoNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBXREdfSW5pdA0KKiBEZXNjcmlwdGlvbiAgICA6IEluaXRpYWxpemVzIFdERyAgcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZA0KKiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgaW4gdGhlIFdER19Jbml0U3RydWN0Lg0KKiBJbnB1dCAgICAgICAgICA6IFdER19Jbml0U3RydWN0OiBwb2ludGVyIHRvIGEgV0RHX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0DQoqICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBXREcgcGVyaXBoZXJhbC4NCiogT3V0cHV0ICAgICAgICAgOiBOb25lDQoqIFJldHVybiAgICAgICAgIDogTm9uZQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgV0RHX0luaXQoV0RHX0luaXRUeXBlRGVmKiBXREdfSW5pdFN0cnVjdCkNCnsNCg0KDQogaWYoV0RHX0luaXRTdHJ1Y3QtPldER19DbG9ja1NvdXJjZSA9PSBXREdfQ2xvY2tTb3VyY2VfQXBiKQ0KICB7DQogICAgLyogU2VsZWN0IFRoZSBBUEIgY2xvY2sgYXMgY2xvY2sgc291cmNlICovDQogICAgV0RHLT5DUiAmPSBXREdfQ2xvY2tTb3VyY2VfQXBiOw0KICB9DQoNCiAgZWxzZQ0KICB7DQogICAgLyogU2VsZWN0IHRoZSBSVEMgY2xvY2sgYXMgc291cmNlICovDQogICAgV0RHLT5DUiB8PSBXREdfQ2xvY2tTb3VyY2VfUnRjIDsNCiAgfQ0KDQoNCiAgLyogQ29uZmlndXJlIFdERyBQcmVzY2FsZXIgcmVnaXN0ZXIgdmFsdWUgKi8NCiAgV0RHLT5QUiA9IFdER19Jbml0U3RydWN0LT5XREdfUHJlc2NhbGVyOw0KDQogIC8qIENvbmZpZ3VyZSBXREcgUHJlLWxvYWQgcmVnaXN0ZXIgdmFsdWUgKi8NCiAgV0RHLT5WUiA9IFdER19Jbml0U3RydWN0LT5XREdfUHJlbG9hZCA7DQoNCg0KICBpZihXREdfSW5pdFN0cnVjdC0+V0RHX01vZGUgPT0gV0RHX01vZGVfVGltZXIpDQogIHsNCiAgICAvKiBTZWxlY3QgVGltZXIgbW9kZSAqLw0KICAgIFdERy0+Q1IgJj0gV0RHX01vZGVfVGltZXI7DQogIH0NCiAgZWxzZQ0KICB7DQogICAgLyogU2VsZWN0IFdERyBtb2RlICovDQogICAgV0RHLT5DUiB8PSBXREdfTW9kZV9XZGcgOw0KICB9DQoNCg0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiBGdW5jdGlvbiBOYW1lICA6IFdER19DbWQNCiogRGVzY3JpcHRpb24gICAgOiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBXREcgcGVyaXBoZXJhbC4NCiogSW5wdXQgICAgICAgICAgOiBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBXREcgcGVyaXBoZXJhbCAoTmV3c3RhdGUgY2FuIGJlDQoqICAgICAgICAgICAgICAgICAgRU5BQkxFIG9yIERJU0FCTEUpDQoqIE91dHB1dCAgICAgICAgIDogTm9uZQ0KKiBSZXR1cm4gICAgICAgICA6IE5vbmUNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIFdER19DbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlICkNCnsNCiAgaWYoKFdERy0+Q1IgJiBXREdfTW9kZV9XZGcpID09IDApDQogIHsNCiAgICAvKiBUaW1lciBtb2RlICovDQogICAgaWYoTmV3U3RhdGUgPT0gRU5BQkxFKQ0KICAgIHsNCiAgICAgIC8qIFN0YXJ0IHRpbWVyIGJ5IHNldHRpbmcgU0MgYml0IGluIENvbnRyb2wgcmVnaXN0ZXIgKi8NCiAgICAgIFdERy0+Q1IgfD0gV0RHX0NvdW50ZXJfU3RhcnQ7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAvKiBTdG9wIHRpbWVyIGJ5IGNsZWFybmluZyBTQyBiaXQgaW4gQ29udHJvbCByZWdpc3RlciAqLw0KICAgICAgV0RHLT5DUiAmPSBXREdfQ291bnRlcl9TdG9wOw0KICAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgICAvKiBXYXRjaGRvZyBtb2RlICovDQogICAgaWYoTmV3U3RhdGUgPT0gRU5BQkxFKQ0KICAgIHsNCiAgICAgIFdERy0+S1IgPSBXREdfS2V5VmFsdWUxOw0KICAgICAgV0RHLT5LUiA9IFdER19LZXlWYWx1ZTI7DQogICAgfQ0KICB9DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIEZ1bmN0aW9uIE5hbWUgIDogV0RHX0lUQ29uZmlnDQoqIERlc2NyaXB0aW9uICAgIDogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgV0RHIEVuZCBvZiBDb3VudChFQykgaW50ZXJydXB0Lg0KKiBJbnB1dCAgICAgICAgICA6IE5ld3N0YXRlOiAgbmV3IHN0YXRlIG9mIHRoZSBFbmQgb2YgQ291bnQoRUMpIFdERyBpbnRlcnJ1cHQuDQoqICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCiogT3V0cHV0ICAgICAgICAgOiBOb25lDQoqIFJldHVybiAgICAgICAgIDogTm9uZQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgV0RHX0lUQ29uZmlnKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCnsNCiAgaWYoTmV3U3RhdGUgPT0gRU5BQkxFKQ0KICB7DQogICAgLyogRW5hYmxlIHRoZSBFbmQgb2YgQ291bnQgaW50ZXJydXB0ICovDQogICAgV0RHLT5NUiB8PSBXREdfSVRfRUM7DQogIH0NCiAgZWxzZQ0KICB7DQogICAgLyogRGlzYWJsZSB0aGUgRW5kIG9mIENvdW50IGludGVycnVwdCAqLw0KICAgIFdERy0+TVIgJj0gfldER19JVF9FQzsNCiAgfQ0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiBGdW5jdGlvbiBOYW1lICA6IFdER19HZXRDb3VudGVyDQoqIERlc2NyaXB0aW9uICAgIDogR2V0cyB0aGUgV0RHknMgY3VycmVudCBjb3VudGVyIHZhbHVlLg0KKiBJbnB1dCAgICAgICAgICA6IE5vbmUNCiogT3V0cHV0ICAgICAgICAgOiBOb25lDQoqIFJldHVybiAgICAgICAgIDogVGhlIFdERyBjdXJyZW50IGNvdW50ZXIgdmFsdWUNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp1MTYgV0RHX0dldENvdW50ZXIodm9pZCkNCnsNCiAgIHJldHVybiBXREctPkNOVDsNCn0NCg0KDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBXREdfR2V0SVRTdGF0dXMNCiogRGVzY3JpcHRpb24gICAgOiBDaGVja3Mgd2hldGhlciB0aGUgV0RHIEVuZCBvZiBDb3VudChFQykgaW50ZXJydXB0IGlzIG9jY3VyZWQgb3Igbm90Lg0KKiBJbnB1dCAgICAgICAgICA6IE5vbmUNCiogT3V0cHV0ICAgICAgICAgOiBOb25lDQoqIFJldHVybiAgICAgICAgIDogVGhlIG5ldyBzdGF0ZSBvZiBXREdfSVQgKFNFVCBvciBSRVNFVCkuDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KSVRTdGF0dXMgV0RHX0dldElUU3RhdHVzKHZvaWQpDQp7DQogIGlmKCgoV0RHLT5TUiAmIFdER19JVF9FQykgIT0gUkVTRVQgKSYmKChXREctPk1SICYgV0RHX0lUX0VDKSAhPSBSRVNFVCApKQ0KICB7DQogICAgcmV0dXJuIFNFVDsNCiAgfQ0KICBlbHNlDQogIHsNCiAgICByZXR1cm4gUkVTRVQ7DQogIH0NCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBXREdfQ2xlYXJJVFBlbmRpbmdCaXQNCiogRGVzY3JpcHRpb24gICAgOiBDbGVhcnMgdGhlIFdERydzIEVuZCBvZiBDb3VudChFQykgaW50ZXJydXB0IHBlbmRpbmcgYml0Lg0KKiBJbnB1dCAgICAgICAgICA6IE5vbmUNCiogT3V0cHV0ICAgICAgICAgOiBOb25lDQoqIFJldHVybiAgICAgICAgIDogTm9uZQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgV0RHX0NsZWFySVRQZW5kaW5nQml0KHZvaWQpDQp7DQogLyogQ2xlYXIgdGhlIEVDIHBlbmRpbmcgYml0ICovDQogIFdERy0+U1IgJj0gfldER19JVF9FQzsNCg0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiBGdW5jdGlvbiBOYW1lICA6IFdER19DbGVhckZsYWcNCiogRGVzY3JpcHRpb24gICAgOiBDbGVhcnMgdGhlIFdERydzIEVuZCBvZiBDb3VudChFQykgRmxhZy4NCiogSW5wdXQgICAgICAgICAgOiBOb25lDQoqIE91dHB1dCAgICAgICAgIDogTm9uZQ0KKiBSZXR1cm4gICAgICAgICA6IE5vbmUNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIFdER19DbGVhckZsYWcodm9pZCkNCnsNCiAvKiBDbGVhciB0aGUgRUMgRmxhZyAqLw0KDQogIFdERy0+U1IgJj0gfldER19GTEFHX0VDOw0KDQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBXREdfR2V0RmxhZ1N0YXR1cw0KKiBEZXNjcmlwdGlvbiAgICA6IENoZWNrcyB3aGV0aGVyIHRoZSBXREcgRW5kIG9mIENvdW50KEVDKSBmbGFnIGlzIHNldCBvciBub3QuDQoqIElucHV0ICAgICAgICAgIDogTm9uZQ0KKiBPdXRwdXQgICAgICAgICA6IE5vbmUNCiogUmV0dXJuICAgICAgICAgOiBUaGUgbmV3IHN0YXRlIG9mIHRoZSBXREdfRkxBRyAoU0VUIG9yIFJFU0VUKS4NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpGbGFnU3RhdHVzIFdER19HZXRGbGFnU3RhdHVzKHZvaWQpDQp7DQogIGlmKChXREctPlNSICYgV0RHX0ZMQUdfRUMpICE9IFJFU0VUICkNCiAgew0KICAgIHJldHVybiBTRVQ7DQogIH0NCiAgZWxzZQ0KICB7DQogICAgcmV0dXJuIFJFU0VUOw0KICB9DQp9DQoNCg0KDQovKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIDIwMDYgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0K