LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCANCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIENvcHlyaWdodCAoYykgMjAxMCwgQXRtZWwgQ29ycG9yYXRpb24NCiAqDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogKg0KICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGRpc2NsYWltZXIgYmVsb3cuDQogKg0KICogQXRtZWwncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICoNCiAqIERJU0NMQUlNRVI6IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQogKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQogKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqLw0KDQovKiogXGZpbGUNCiAqDQogKiAgRGVmaW5pdGlvbnMgYW5kIGNsYXNzZXMgZm9yIFVTQiBDREMgY2xhc3MgZGVzY3JpcHRvcnMuDQogKi8NCg0KI2lmbmRlZiBfQ0RDREVTQ1JJUFRPUlNfSF8NCiNkZWZpbmUgX0NEQ0RFU0NSSVBUT1JTX0hfDQovKiogXGFkZHRvZ3JvdXAgdXNiX2NkYw0KICpAew0KICovDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBJbmNsdWRlcw0KICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KI2luY2x1ZGUgPHN0ZGludC5oPg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqICAgICAgICAgRGVmaW5pdGlvbnMNCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qKiBcYWRkdG9ncm91cCB1c2JfY2RjX3ZlciBVU0IgQ0RDIFNwZWNpZmljYXRpb24gUmVsZWFzZSBOdW1iZXJzDQogKiAgICAgIEB7DQogKiBUaGlzIHNlY3Rpb24gbGlzdCB0aGUgQ0RDIFNwZWMuIFJlbGVhc2UgTnVtYmVycy4NCiAqIC0gXHJlZiBDRENHZW5lcmljRGVzY3JpcHRvcl9DREMxXzEwDQogKi8NCiANCi8qKiBJZGVudGlmeSBDREMgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMTAuICovDQojZGVmaW5lIENEQ0dlbmVyaWNEZXNjcmlwdG9yX0NEQzFfMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTEwDQovKiogICAgIEB9Ki8NCg0KLyoqIFxhZGR0b2dyb3VwIHVzYl9jZGNfZGVzY190eXBlIENEQyBEZXNjcmlwdHJvIFR5cGVzDQogKiAgICAgIEB7DQogKiBUaGlzIHNlY3Rpb24gbGlzdHMgQ0RDIGRlc2NyaXB0b3IgdHlwZXMuDQogKiAtIFxyZWYgQ0RDR2VuZXJpY0Rlc2NyaXB0b3JfSU5URVJGQUNFDQogKiAtIFxyZWYgQ0RDR2VuZXJpY0Rlc2NyaXB0b3JfRU5EUE9JTlQNCiAqLw0KLyoqSW5kaWNhdGVzIHRoYXQgYSBDREMgZGVzY3JpcHRvciBhcHBsaWVzIHRvIGFuIGludGVyZmFjZS4gKi8NCiNkZWZpbmUgQ0RDR2VuZXJpY0Rlc2NyaXB0b3JfSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAweDI0DQovKiogSW5kaWNhdGVzIHRoYXQgYSBDREMgZGVzY3JpcHRvciBhcHBsaWVzIHRvIGFuIGVuZHBvaW50LiAqLw0KI2RlZmluZSBDRENHZW5lcmljRGVzY3JpcHRvcl9FTkRQT0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUNCi8qKiAgICAgQH0qLw0KDQovKiogXGFkZHRvZ3JvdXAgdXNiX2NkY19kZXNjX3N1YnR5cGUgQ0RDIERlc2NyaXB0b3IgU3VidHlwZXMNCiAqICAgICAgQHsNCiAqIFRoaXMgc2VjdGlvbiBsaXN0cyBDREMgZGVzY3JpcHRvciBzdWIgdHlwZXMNCiAqIC0gXHJlZiBDRENHZW5lcmljRGVzY3JpcHRvcl9IRUFERVINCiAqIC0gXHJlZiBDRENHZW5lcmljRGVzY3JpcHRvcl9DQUxMTUFOQUdFTUVOVA0KICogLSBccmVmIENEQ0dlbmVyaWNEZXNjcmlwdG9yX0FCU1RSQUNUQ09OVFJPTE1BTkFHRU1FTlQNCiAqIC0gXHJlZiBDRENHZW5lcmljRGVzY3JpcHRvcl9VTklPTg0KICovDQoNCi8qKiBIZWFkZXIgZnVuY3Rpb25hbCBkZXNjcmlwdG9yIHN1YnR5cGUuICovDQojZGVmaW5lIENEQ0dlbmVyaWNEZXNjcmlwdG9yX0hFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMA0KLyoqIENhbGwgbWFuYWdlbWVudCBmdW5jdGlvbmFsIGRlc2NyaXB0b3Igc3VidHlwZS4gKi8NCiNkZWZpbmUgQ0RDR2VuZXJpY0Rlc2NyaXB0b3JfQ0FMTE1BTkFHRU1FTlQgICAgICAgICAgICAgICAgICAgICAweDAxDQovKiogQWJzdHJhY3QgY29udHJvbCBtYW5hZ2VtZW50IGRlc2NyaXB0b3Igc3VidHlwZS4gKi8NCiNkZWZpbmUgQ0RDR2VuZXJpY0Rlc2NyaXB0b3JfQUJTVFJBQ1RDT05UUk9MTUFOQUdFTUVOVCAgICAgICAgICAweDAyDQovKiogVW5pb24gZGVzY3JpcHRvciBzdWJ0eXBlLiAqLw0KI2RlZmluZSBDRENHZW5lcmljRGVzY3JpcHRvcl9VTklPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYNCi8qKiAgICBAfSovDQoNCi8qKiBcYWRkdG9ncm91cCB1c2JfY2RjX2Rlc2NyaXB0b3IgVVNCIENEQyBEZXZpY2UgRGVzY3JpcHRvciBWYWx1ZXMNCiAqICBAew0KICogVGhpcyBzZWN0aW9uIGxpc3RzIHRoZSB2YWx1ZXMgZm9yIENEQyBEZXZpY2UgRGVzY3JpcHRvci4NCiAqIC0gXHJlZiBDRENEZXZpY2VEZXNjcmlwdG9yX0NMQVNTDQogKiAtIFxyZWYgQ0RDRGV2aWNlRGVzY3JpcHRvcl9TVUJDTEFTUw0KICogLSBccmVmIENEQ0RldmljZURlc2NyaXB0b3JfUFJPVE9DT0wNCiAqLw0KLyoqIERldmljZSBjbGFzcyBjb2RlIHdoZW4gdXNpbmcgdGhlIENEQyBjbGFzcy4gKi8NCiNkZWZpbmUgQ0RDRGV2aWNlRGVzY3JpcHRvcl9DTEFTUyAgICAgICAgICAgICAgIDB4MDINCi8qKiBEZXZpY2Ugc3ViY2xhc3MgY29kZSB3aGVuIHVzaW5nIHRoZSBDREMgY2xhc3MuICovDQojZGVmaW5lIENEQ0RldmljZURlc2NyaXB0b3JfU1VCQ0xBU1MgICAgICAgICAgICAweDAwDQovKiogRGV2aWNlIHByb3RvY29sIGNvZGUgd2hlbiB1c2luZyB0aGUgQ0RDIGNsYXNzLiAqLw0KI2RlZmluZSBDRENEZXZpY2VEZXNjcmlwdG9yX1BST1RPQ09MICAgICAgICAgICAgMHgwMA0KLyoqIEB9Ki8NCg0KLyoqIFxhZGR0b2dyb3VwIHVzYl9jZGNfaWZfZGVzYyBVU0IgQ0RDIENvbW11bmljYXRpb24gSW50ZXJmYWNlIERlc2NyaXB0b3INCiAqICBAew0KICogVGhpcyBzZWN0aW9uIGxpc3RzIHRoZSB2YWx1ZXMgZm9yIENEQyBDb21tdW5pY2F0aW9uIEludGVyZmFjZSBEZXNjcmlwdG9yLg0KICogLSBccmVmIENEQ0NvbW11bmljYXRpb25JbnRlcmZhY2VEZXNjcmlwdG9yX0NMQVNTDQogKiAtIFxyZWYgQ0RDQ29tbXVuaWNhdGlvbkludGVyZmFjZURlc2NyaXB0b3JfQUJTVFJBQ1RDT05UUk9MTU9ERUwNCiAqIC0gXHJlZiBDRENDb21tdW5pY2F0aW9uSW50ZXJmYWNlRGVzY3JpcHRvcl9OT1BST1RPQ09MDQogKi8NCi8qKiBJbnRlcmZhY2UgY2xhc3MgY29kZSBmb3IgYSBDREMgY29tbXVuaWNhdGlvbiBjbGFzcyBpbnRlcmZhY2UuICovDQojZGVmaW5lIENEQ0NvbW11bmljYXRpb25JbnRlcmZhY2VEZXNjcmlwdG9yX0NMQVNTICAgICAgICAgICAgICAgICAgIDB4MDINCi8qKiBJbnRlcmZhY2Ugc3ViY2xhc3MgY29kZSBmb3IgYW4gQWJzdHJhY3QgQ29udHJvbCBNb2RlbCBpbnRlcmZhY2UgZGVzY3JpcHRvci4NCiAqLw0KI2RlZmluZSBDRENDb21tdW5pY2F0aW9uSW50ZXJmYWNlRGVzY3JpcHRvcl9BQlNUUkFDVENPTlRST0xNT0RFTCAgICAweDAyDQovKiogSW50ZXJmYWNlIHByb3RvY29sIGNvZGUgd2hlbiBhIENEQyBjb21tdW5pY2F0aW9uIGludGVyZmFjZSBkb2VzIG5vdA0KICAgIGltcGxlbWVuZW50IGFueSBwYXJ0aWN1bGFyIHByb3RvY29sLiAqLw0KI2RlZmluZSBDRENDb21tdW5pY2F0aW9uSW50ZXJmYWNlRGVzY3JpcHRvcl9OT1BST1RPQ09MICAgICAgICAgICAgICAweDAwDQovKiogQH0qLw0KDQovKiogXGFkZHRvZ3JvdXAgdXNiX2NkY19kYXRhX2lmIFVTQiBDREMgRGF0YSBJbnRlcmZhY2UgVmFsdWVzDQogKiAgQHsNCiAqIFRoaXMgc2VjdGlvbiBsaXN0cyB0aGUgdmFsdWVzIGZvciBDREMgRGF0YSBJbnRlcmZhY2UgRGVzY3JpcHRvci4NCiAqIC0gXHJlZiBDRENEYXRhSW50ZXJmYWNlRGVzY3JpcHRvcl9DTEFTUw0KICogLSBccmVmIENEQ0RhdGFJbnRlcmZhY2VEZXNjcmlwdG9yX1NVQkNMQVNTDQogKiAtIFxyZWYgQ0RDRGF0YUludGVyZmFjZURlc2NyaXB0b3JfTk9QUk9UT0NPTA0KICovDQogDQovKiogSW50ZXJmYWNlIGNsYXNzIGNvZGUgZm9yIGEgZGF0YSBjbGFzcyBpbnRlcmZhY2UuICovDQojZGVmaW5lIENEQ0RhdGFJbnRlcmZhY2VEZXNjcmlwdG9yX0NMQVNTICAgICAgICAweDBBDQovKiogSW50ZXJmYWNlIHN1YmNsYXNzIGNvZGUgZm9yIGEgZGF0YSBjbGFzcyBpbnRlcmZhY2UuICovDQojZGVmaW5lIENEQ0RhdGFJbnRlcmZhY2VEZXNjcmlwdG9yX1NVQkNMQVNTICAgICAweDAwDQovKiogUHJvdG9jb2wgY29kZSBmb3IgYSBkYXRhIGNsYXNzIGludGVyZmFjZSB3aGljaCBkb2VzIG5vdCBpbXBsZW1lbnQgYW55DQogICAgcGFydGljdWxhciBwcm90b2NvbC4gKi8NCiNkZWZpbmUgQ0RDRGF0YUludGVyZmFjZURlc2NyaXB0b3JfTk9QUk9UT0NPTCAgIDB4MDANCi8qKiBAfSovDQoNCi8qKiBcYWRkdG9ncm91cCB1c2JfY2RjX2NiX21hbl9kZXNjIFVTQiBDREMgQ2FsbE1hbmFnZW1lbnQgQ2FwYWJpbGl0aWVzDQogKiAgQHsNCiAqIFRoaXMgc2VjdGlvbiBsaXN0cyBDREMgQ2FsbE1hbmFnZW1lbnQgQ2FwYWJpbGl0aWVzLg0KICogLSBccmVmIENEQ0NhbGxNYW5hZ2VtZW50RGVzY3JpcHRvcl9TRUxGQ0FMTE1BTkFHRU1FTlQNCiAqIC0gXHJlZiBDRENDYWxsTWFuYWdlbWVudERlc2NyaXB0b3JfREFUQUNBTExNQU5BR0VNRU5UDQogKi8NCi8qKiBEZXZpY2UgaGFuZGxlcyBjYWxsIG1hbmFnZW1lbnQgaXRzZWxmLiAqLw0KI2RlZmluZSBDRENDYWxsTWFuYWdlbWVudERlc2NyaXB0b3JfU0VMRkNBTExNQU5BR0VNRU5UICAgICAgKDEgPDwgMCkNCi8qKiBEZXZpY2UgY2FuIGV4Y2hhbmdlIGNhbGwgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiBvdmVyIGEgRGF0YSBjbGFzcyBpbnRlcmZhY2UuDQogKi8NCiNkZWZpbmUgQ0RDQ2FsbE1hbmFnZW1lbnREZXNjcmlwdG9yX0RBVEFDQUxMTUFOQUdFTUVOVCAgICAgICgxIDw8IDEpDQovKiogQH0qLw0KDQovKiogXGFkZHRvZ3JvdXAgdXNiX2NkY19hY20gVVNCIENEQyBBQ00gQ2FwYWJpbGl0aWVzDQogKiAgQHsNCiAqDQogKiBUaGlzIHNlY3Rpb24gbGlzdHMgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgQ0RDIEFDTS4NCiAqIC0gXHJlZiBDRENBYnN0cmFjdENvbnRyb2xNYW5hZ2VtZW50RGVzY3JpcHRvcl9DT01NRkVBVFVSRQ0KICogLSBccmVmIENEQ0Fic3RyYWN0Q29udHJvbE1hbmFnZW1lbnREZXNjcmlwdG9yX0xJTkUNCiAqIC0gXHJlZiBDRENBYnN0cmFjdENvbnRyb2xNYW5hZ2VtZW50RGVzY3JpcHRvcl9TRU5EQlJFQUsNCiAqIC0gXHJlZiBDRENBYnN0cmFjdENvbnRyb2xNYW5hZ2VtZW50RGVzY3JpcHRvcl9ORVRXT1JLQ09OTkVDVElPTg0KICovDQogDQovKiogRGV2aWNlIHN1cHBvcnRzIHRoZSByZXF1ZXN0IGNvbWJpbmF0aW9uIG9mIFNldENvbW1GZWF0dXJlLCBDbGVhckNvbW1GZWF0dXJlDQogICAgYW5kIEdldENvbW1GZWF0dXJlLiAqLw0KI2RlZmluZSBDRENBYnN0cmFjdENvbnRyb2xNYW5hZ2VtZW50RGVzY3JpcHRvcl9DT01NRkVBVFVSRSAgICAgICAgICAoMSA8PCAwKQ0KLyoqIERldmljZSBzdXBwb3J0cyB0aGUgcmVxdWVzdCBjb21iaW5hdGlvbiBvZiBTZXRMaW5lQ29kaW5nLCBHZXRMaW5lQ29kaW5nIGFuZA0KICAgIFNldENvbnRyb2xMaW5lU3RhdGUuICovDQojZGVmaW5lIENEQ0Fic3RyYWN0Q29udHJvbE1hbmFnZW1lbnREZXNjcmlwdG9yX0xJTkUgICAgICAgICAgICAgICAgICgxIDw8IDEpDQovKiogRGV2aWNlIHN1cHBvcnRzIHRoZSBTZW5kQnJlYWsgcmVxdWVzdC4gKi8NCiNkZWZpbmUgQ0RDQWJzdHJhY3RDb250cm9sTWFuYWdlbWVudERlc2NyaXB0b3JfU0VOREJSRUFLICAgICAgICAgICAgKDEgPDwgMikNCi8qKiBEZXZpY2Ugc3VwcG9ydHMgdGhlIE5ldHdvcmtDb25uZWN0aW9uIG5vdGlmaWNhdGlvbi4gKi8NCiNkZWZpbmUgQ0RDQWJzdHJhY3RDb250cm9sTWFuYWdlbWVudERlc2NyaXB0b3JfTkVUV09SS0NPTk5FQ1RJT04gICAgKDEgPDwgMykNCi8qKiBAfSovDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBUeXBlcw0KICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiNwcmFnbWEgcGFjaygxKQ0KI2lmIGRlZmluZWQgICAoIF9fQ0NfQVJNICAgKSAvKiBLZWlsIKbMVmlzaW9uIDQgKi8NCiNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkgLyogSUFSIEV3YXJtICovDQojZGVmaW5lIF9fYXR0cmlidXRlX18oLi4uKQ0KI2RlZmluZSBfX3BhY2tlZF9fICBwYWNrZWQNCiNlbGlmIGRlZmluZWQgKCAgX19HTlVDX18gICkgLyogR0NDIENTMyAqLw0KI2RlZmluZSBfX3BhY2tlZF9fICBhbGlnbmVkKDEpDQojZW5kaWYNCi8qKg0KICogXHR5cGVkZWYgQ0RDSGVhZGVyRGVzY3JpcHRvcg0KICogXGJyaWVmIE1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmNhdGVuYXRlZCBzZXQgb2YgZnVuY3Rpb25hbCBkZXNjcmlwdG9ycw0KICogICAgICAgIGZvciB0aGUgaW50ZXJmYWNlLg0KICovDQp0eXBlZGVmIHN0cnVjdCBfQ0RDSGVhZGVyRGVzY3JpcHRvciB7DQoNCiAgICAvKiogU2l6ZSBvZiB0aGlzIGRlc2NyaXB0b3IgaW4gYnl0ZXMuICovDQogICAgdWludDhfdCBiRnVuY3Rpb25MZW5ndGg7DQogICAgLyoqIERlc2NyaXB0b3IgdHlwZSAuICovDQogICAgdWludDhfdCBiRGVzY3JpcHRvclR5cGU7DQogICAgLyoqIERlc2NyaXB0b3Igc3ViLXR5cGUgLiAqLw0KICAgIHVpbnQ4X3QgYkRlc2NyaXB0b3JTdWJ0eXBlOw0KICAgIC8qKiBVU0IgQ0RDIHNwZWNpZmljYXRpb24gcmVsZWFzZSBudW1iZXIuICovDQogICAgdWludDE2X3QgYmNkQ0RDOw0KDQp9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgQ0RDSGVhZGVyRGVzY3JpcHRvcjsgLyogR0NDICovDQoNCi8qKg0KICogXHR5cGVkZWYgQ0RDVW5pb25EZXNjcmlwdG9yDQogKiBcYnJpZWYgRGVzY3JpYmVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhIGdyb3VwIG9mIGludGVyZmFjZXMgdGhhdCBjYW4NCiAqICAgICAgICBiZSBjb25zaWRlcmVkIHRvIGZvcm0gYSBmdW5jdGlvbmFsIHVuaXQuDQogKi8NCnR5cGVkZWYgc3RydWN0IF9DRENVbmlvbkRlc2NyaXB0b3Igew0KDQogICAgLyoqIFNpemUgb2YgdGhlIGRlc2NyaXB0b3IgaW4gYnl0ZXMuICovDQogICAgdWludDhfdCBiRnVuY3Rpb25MZW5ndGg7DQogICAgLyoqIERlc2NyaXB0b3IgdHlwZSAuICovDQogICAgdWludDhfdCBiRGVzY3JpcHRvclR5cGU7DQogICAgLyoqIERlc2NyaXB0b3Igc3VidHlwZSAuICovDQogICAgdWludDhfdCBiRGVzY3JpcHRvclN1YnR5cGU7DQogICAgLyoqIE51bWJlciBvZiB0aGUgbWFzdGVyIGludGVyZmFjZSBmb3IgdGhpcyB1bmlvbi4gKi8NCiAgICB1aW50OF90IGJNYXN0ZXJJbnRlcmZhY2U7DQogICAgLyoqIE51bWJlciBvZiB0aGUgZmlyc3Qgc2xhdmUgaW50ZXJmYWNlIGZvciB0aGlzIHVuaW9uLiAqLw0KICAgIHVpbnQ4X3QgYlNsYXZlSW50ZXJmYWNlMDsNCg0KfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIENEQ1VuaW9uRGVzY3JpcHRvcjsgLyogR0NDICovDQoNCi8qKg0KICogXHR5cGVkZWYgQ0RDQ2FsbE1hbmFnZW1lbnREZXNjcmlwdG9yDQogKiBcYnJpZWYgRGVzY3JpYmVzIHRoZSBwcm9jZXNzaW5nIG9mIGNhbGxzIGZvciB0aGUgY29tbXVuaWNhdGlvbiBjbGFzcw0KICogICAgICAgIGludGVyZmFjZS4NCiAqLw0KdHlwZWRlZiBzdHJ1Y3QgX0NEQ0NhbGxNYW5hZ2VtZW50RGVzY3JpcHRvciB7DQoNCiAgICAvKiogU2l6ZSBvZiB0aGlzIGRlc2NyaXB0b3IgaW4gYnl0ZXMuICovDQogICAgdWludDhfdCBiRnVuY3Rpb25MZW5ndGg7DQogICAgLyoqIERlc2NyaXB0b3IgdHlwZSAuICovDQogICAgdWludDhfdCBiRGVzY3JpcHRvclR5cGU7DQogICAgLyoqIERlc2NyaXB0b3Igc3ViLXR5cGUgLiAqLw0KICAgIHVpbnQ4X3QgYkRlc2NyaXB0b3JTdWJ0eXBlOw0KICAgIC8qKiBDb25maWd1cmF0aW9uIGNhcGFiaWxpdGllcw0KICAgICAgICBcc2EgdXNiX2NkY19jYl9tYW5fZGVzYyBDREMgQ2FsbE1hbmFnZW1lbnQgQ2FwYWJpbGl0aWVzLiAqLw0KICAgIHVpbnQ4X3QgYm1DYXBhYmlsaXRpZXM7DQogICAgLyoqIEludGVyZmFjZSBudW1iZXIgb2YgdGhlIGRhdGEgY2xhc3MgaW50ZXJmYWNlIHVzZWQgZm9yIGNhbGwgbWFuYWdlbWVudA0KICAgICAgICAob3B0aW9uYWwpLiAqLw0KICAgIHVpbnQ4X3QgYkRhdGFJbnRlcmZhY2U7DQoNCn0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBDRENDYWxsTWFuYWdlbWVudERlc2NyaXB0b3I7IC8qIEdDQyAqLw0KDQovKioNCiAqIFx0eXBlZGVmIENEQ0Fic3RyYWN0Q29udHJvbE1hbmFnZW1lbnREZXNjcmlwdG9yDQogKiBcYnJpZWYgRGVzY3JpYmVzIHRoZSBjb21tYW5kIHN1cHBvcnRlZCBieSB0aGUgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgY2xhc3MNCiAqICAgICAgICB3aXRoIHRoZSBBYnN0cmFjdCBDb250cm9sIE1vZGVsIHN1YmNsYXNzIGNvZGUuDQogKi8NCnR5cGVkZWYgc3RydWN0IF9DRENBYnN0cmFjdENvbnRyb2xNYW5hZ2VtZW50RGVzY3JpcHRvciB7DQoNCiAgICAvKiogU2l6ZSBvZiB0aGlzIGRlc2NyaXB0b3IgaW4gYnl0ZXMuICovDQogICAgdWludDhfdCBiRnVuY3Rpb25MZW5ndGg7DQogICAgLyoqIERlc2NyaXB0b3IgdHlwZSAuICovDQogICAgdWludDhfdCBiRGVzY3JpcHRvclR5cGU7DQogICAgLyoqIERlc2NyaXB0b3Igc3VidHlwZSAuICovDQogICAgdWludDhfdCBiRGVzY3JpcHRvclN1YnR5cGU7DQogICAgLyoqIENvbmZpZ3VyYXRpb24gY2FwYWJpbGl0aWVzLg0KICAgICAgICBcc2EgdXNiX2NkY19hY20gQ0RDIEFDTSBDYXBhYmlsaXRpZXMuICovDQogICAgdWludDhfdCBibUNhcGFiaWxpdGllczsNCg0KfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIENEQ0Fic3RyYWN0Q29udHJvbE1hbmFnZW1lbnREZXNjcmlwdG9yOyAvKiBHQ0MgKi8NCg0KI3ByYWdtYSBwYWNrKCkNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKiAgICAgICAgIEZ1bmN0aW9ucw0KICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KDQovKipAfSovDQojZW5kaWYgLyogI2lmbmRlZiBfQ0RDREVTQ1JJUFRPUlNfSF8gKi8NCg0K