LyogIApDb3B5cmlnaHQgKGMpIDIwMDksIFFVQUxDT01NIFVTQSwgSU5DLgoKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCrcgICAgICAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAoKtyAgICAgICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCgq3ICAgICAgICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUVVBTENPTU0gVVNBLCBJTkMuICBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCgogKi8KIC8qCiAqIFBsZWFzZSBkbyBub3QgZWRpdCB0aGlzIGZpbGUuCiAqIEl0IHdhcyBnZW5lcmF0ZWQgdXNpbmcgcnBjZ2VuLgogKi8KCiNpZm5kZWYgX0xPQ19BUElfSF9SUENHRU4KI2RlZmluZSBfTE9DX0FQSV9IX1JQQ0dFTgoKI2luY2x1ZGUgPHJwYy9ycGMuaD4KCiNpbmNsdWRlIDxwdGhyZWFkLmg+CgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKCnR5cGVkZWYgc3RydWN0IHsKCXVfaW50IHJwY19sb2NfYXBpX2FwaV92ZXJzaW9uc19yZXR1cm5fdHlwZV9sZW47CglycGNfdWludDMyICpycGNfbG9jX2FwaV9hcGlfdmVyc2lvbnNfcmV0dXJuX3R5cGVfdmFsOwp9IHJwY19sb2NfYXBpX2FwaV92ZXJzaW9uc19yZXR1cm5fdHlwZTsKCnR5cGVkZWYgcnBjX3VpbnQzMiBycGNfbG9jX2V2ZW50X2NiX2ZfdHlwZTsKCnN0cnVjdCBycGNfbG9jX29wZW5fYXJncyB7CglycGNfbG9jX2V2ZW50X21hc2tfdHlwZSBldmVudF9yZWdfbWFzazsKCXJwY19sb2NfZXZlbnRfY2JfZl90eXBlIGV2ZW50X2NhbGxiYWNrOwp9Owp0eXBlZGVmIHN0cnVjdCBycGNfbG9jX29wZW5fYXJncyBycGNfbG9jX29wZW5fYXJnczsKCnN0cnVjdCBycGNfbG9jX2Nsb3NlX2FyZ3MgewoJcnBjX2xvY19jbGllbnRfaGFuZGxlX3R5cGUgaGFuZGxlOwp9Owp0eXBlZGVmIHN0cnVjdCBycGNfbG9jX2Nsb3NlX2FyZ3MgcnBjX2xvY19jbG9zZV9hcmdzOwoKc3RydWN0IHJwY19sb2Nfc3RhcnRfZml4X2FyZ3MgewoJcnBjX2xvY19jbGllbnRfaGFuZGxlX3R5cGUgaGFuZGxlOwp9Owp0eXBlZGVmIHN0cnVjdCBycGNfbG9jX3N0YXJ0X2ZpeF9hcmdzIHJwY19sb2Nfc3RhcnRfZml4X2FyZ3M7CgpzdHJ1Y3QgcnBjX2xvY19zdG9wX2ZpeF9hcmdzIHsKCXJwY19sb2NfY2xpZW50X2hhbmRsZV90eXBlIGhhbmRsZTsKfTsKdHlwZWRlZiBzdHJ1Y3QgcnBjX2xvY19zdG9wX2ZpeF9hcmdzIHJwY19sb2Nfc3RvcF9maXhfYXJnczsKCnN0cnVjdCBycGNfbG9jX2lvY3RsX2FyZ3MgewoJcnBjX2xvY19jbGllbnRfaGFuZGxlX3R5cGUgaGFuZGxlOwoJcnBjX2xvY19pb2N0bF9lX3R5cGUgaW9jdGxfdHlwZTsKCXJwY19sb2NfaW9jdGxfZGF0YV91X3R5cGUgKmlvY3RsX2RhdGE7Cn07CnR5cGVkZWYgc3RydWN0IHJwY19sb2NfaW9jdGxfYXJncyBycGNfbG9jX2lvY3RsX2FyZ3M7CgpzdHJ1Y3QgcnBjX2xvY19hcGlfYXBpX3ZlcnNpb25fc19hcmdzIHsKCXJwY19ib29sZWFuIGxlbl9ub3RfbnVsbDsKfTsKdHlwZWRlZiBzdHJ1Y3QgcnBjX2xvY19hcGlfYXBpX3ZlcnNpb25fc19hcmdzIHJwY19sb2NfYXBpX2FwaV92ZXJzaW9uX3NfYXJnczsKCnN0cnVjdCBycGNfbG9jX2FwaV9ycGNfZ2x1ZV9jb2RlX2luZm9fcmVtb3RlX3JldHMgewoJcnBjX3VpbnQzMiB0b29sdmVyczsKCXJwY191aW50MzIgZmVhdHVyZXM7CglycGNfdWludDMyIHByb2doYXNoOwoJcnBjX3VpbnQzMiBjYnByb2doYXNoOwp9Owp0eXBlZGVmIHN0cnVjdCBycGNfbG9jX2FwaV9ycGNfZ2x1ZV9jb2RlX2luZm9fcmVtb3RlX3JldHMgcnBjX2xvY19hcGlfcnBjX2dsdWVfY29kZV9pbmZvX3JlbW90ZV9yZXRzOwoKc3RydWN0IHJwY19sb2Nfb3Blbl9yZXRzIHsKCXJwY19sb2NfY2xpZW50X2hhbmRsZV90eXBlIGxvY19vcGVuX3Jlc3VsdDsKfTsKdHlwZWRlZiBzdHJ1Y3QgcnBjX2xvY19vcGVuX3JldHMgcnBjX2xvY19vcGVuX3JldHM7CgpzdHJ1Y3QgcnBjX2xvY19jbG9zZV9yZXRzIHsKCXJwY19pbnQzMiBsb2NfY2xvc2VfcmVzdWx0Owp9Owp0eXBlZGVmIHN0cnVjdCBycGNfbG9jX2Nsb3NlX3JldHMgcnBjX2xvY19jbG9zZV9yZXRzOwoKc3RydWN0IHJwY19sb2Nfc3RhcnRfZml4X3JldHMgewoJcnBjX2ludDMyIGxvY19zdGFydF9maXhfcmVzdWx0Owp9Owp0eXBlZGVmIHN0cnVjdCBycGNfbG9jX3N0YXJ0X2ZpeF9yZXRzIHJwY19sb2Nfc3RhcnRfZml4X3JldHM7CgpzdHJ1Y3QgcnBjX2xvY19zdG9wX2ZpeF9yZXRzIHsKCXJwY19pbnQzMiBsb2Nfc3RvcF9maXhfcmVzdWx0Owp9Owp0eXBlZGVmIHN0cnVjdCBycGNfbG9jX3N0b3BfZml4X3JldHMgcnBjX2xvY19zdG9wX2ZpeF9yZXRzOwoKc3RydWN0IHJwY19sb2NfaW9jdGxfcmV0cyB7CglycGNfaW50MzIgbG9jX2lvY3RsX3Jlc3VsdDsKfTsKdHlwZWRlZiBzdHJ1Y3QgcnBjX2xvY19pb2N0bF9yZXRzIHJwY19sb2NfaW9jdGxfcmV0czsKCnN0cnVjdCBycGNfbG9jX2FwaV9hcGlfdmVyc2lvbnNfcmV0cyB7CglycGNfbG9jX2FwaV9hcGlfdmVyc2lvbnNfcmV0dXJuX3R5cGUgbG9jX2FwaV9hcGlfdmVyc2lvbnNfcmVzdWx0OwoJcnBjX3VpbnQzMiAqbGVuOwp9Owp0eXBlZGVmIHN0cnVjdCBycGNfbG9jX2FwaV9hcGlfdmVyc2lvbnNfcmV0cyBycGNfbG9jX2FwaV9hcGlfdmVyc2lvbnNfcmV0czsKI2RlZmluZSBMT0NfQVBJVkVSUyAweDAwMDEwMDAxCgojZGVmaW5lIExPQ19BUElQUk9HIDB4MzAwMDAwOGMKI2RlZmluZSBMT0NfQVBJVkVSU18wMDAxIDB4MDAwMTAwMDEKCiNpZiBkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKQojZGVmaW5lIHJwY19sb2NfYXBpX251bGwgMApleHRlcm4gIGVudW0gY2xudF9zdGF0IHJwY19sb2NfYXBpX251bGxfMHgwMDAxMDAwMSh2b2lkICosIHZvaWQgKiwgQ0xJRU5UICopOwpleHRlcm4gIGJvb2xfdCBycGNfbG9jX2FwaV9udWxsXzB4MDAwMTAwMDFfc3ZjKHZvaWQgKiwgdm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqKTsKI2RlZmluZSBycGNfbG9jX2FwaV9ycGNfZ2x1ZV9jb2RlX2luZm9fcmVtb3RlIDEKZXh0ZXJuICBlbnVtIGNsbnRfc3RhdCBycGNfbG9jX2FwaV9ycGNfZ2x1ZV9jb2RlX2luZm9fcmVtb3RlXzB4MDAwMTAwMDEodm9pZCAqLCBycGNfbG9jX2FwaV9ycGNfZ2x1ZV9jb2RlX2luZm9fcmVtb3RlX3JldHMgKiwgQ0xJRU5UICopOwpleHRlcm4gIGJvb2xfdCBycGNfbG9jX2FwaV9ycGNfZ2x1ZV9jb2RlX2luZm9fcmVtb3RlXzB4MDAwMTAwMDFfc3ZjKHZvaWQgKiwgcnBjX2xvY19hcGlfcnBjX2dsdWVfY29kZV9pbmZvX3JlbW90ZV9yZXRzICosIHN0cnVjdCBzdmNfcmVxICopOwojZGVmaW5lIHJwY19sb2Nfb3BlbiAyCmV4dGVybiAgZW51bSBjbG50X3N0YXQgcnBjX2xvY19vcGVuXzB4MDAwMTAwMDEocnBjX2xvY19vcGVuX2FyZ3MgKiwgcnBjX2xvY19vcGVuX3JldHMgKiwgQ0xJRU5UICopOwpleHRlcm4gIGJvb2xfdCBycGNfbG9jX29wZW5fMHgwMDAxMDAwMV9zdmMocnBjX2xvY19vcGVuX2FyZ3MgKiwgcnBjX2xvY19vcGVuX3JldHMgKiwgc3RydWN0IHN2Y19yZXEgKik7CiNkZWZpbmUgcnBjX2xvY19jbG9zZSAzCmV4dGVybiAgZW51bSBjbG50X3N0YXQgcnBjX2xvY19jbG9zZV8weDAwMDEwMDAxKHJwY19sb2NfY2xvc2VfYXJncyAqLCBycGNfbG9jX2Nsb3NlX3JldHMgKiwgQ0xJRU5UICopOwpleHRlcm4gIGJvb2xfdCBycGNfbG9jX2Nsb3NlXzB4MDAwMTAwMDFfc3ZjKHJwY19sb2NfY2xvc2VfYXJncyAqLCBycGNfbG9jX2Nsb3NlX3JldHMgKiwgc3RydWN0IHN2Y19yZXEgKik7CiNkZWZpbmUgcnBjX2xvY19zdGFydF9maXggNApleHRlcm4gIGVudW0gY2xudF9zdGF0IHJwY19sb2Nfc3RhcnRfZml4XzB4MDAwMTAwMDEocnBjX2xvY19zdGFydF9maXhfYXJncyAqLCBycGNfbG9jX3N0YXJ0X2ZpeF9yZXRzICosIENMSUVOVCAqKTsKZXh0ZXJuICBib29sX3QgcnBjX2xvY19zdGFydF9maXhfMHgwMDAxMDAwMV9zdmMocnBjX2xvY19zdGFydF9maXhfYXJncyAqLCBycGNfbG9jX3N0YXJ0X2ZpeF9yZXRzICosIHN0cnVjdCBzdmNfcmVxICopOwojZGVmaW5lIHJwY19sb2Nfc3RvcF9maXggNQpleHRlcm4gIGVudW0gY2xudF9zdGF0IHJwY19sb2Nfc3RvcF9maXhfMHgwMDAxMDAwMShycGNfbG9jX3N0b3BfZml4X2FyZ3MgKiwgcnBjX2xvY19zdG9wX2ZpeF9yZXRzICosIENMSUVOVCAqKTsKZXh0ZXJuICBib29sX3QgcnBjX2xvY19zdG9wX2ZpeF8weDAwMDEwMDAxX3N2YyhycGNfbG9jX3N0b3BfZml4X2FyZ3MgKiwgcnBjX2xvY19zdG9wX2ZpeF9yZXRzICosIHN0cnVjdCBzdmNfcmVxICopOwojZGVmaW5lIHJwY19sb2NfaW9jdGwgNgpleHRlcm4gIGVudW0gY2xudF9zdGF0IHJwY19sb2NfaW9jdGxfMHgwMDAxMDAwMShycGNfbG9jX2lvY3RsX2FyZ3MgKiwgcnBjX2xvY19pb2N0bF9yZXRzICosIENMSUVOVCAqKTsKZXh0ZXJuICBib29sX3QgcnBjX2xvY19pb2N0bF8weDAwMDEwMDAxX3N2YyhycGNfbG9jX2lvY3RsX2FyZ3MgKiwgcnBjX2xvY19pb2N0bF9yZXRzICosIHN0cnVjdCBzdmNfcmVxICopOwojZGVmaW5lIHJwY19sb2NfYXBpX2FwaV92ZXJzaW9ucyAweEZGRkZGRkZGCmV4dGVybiAgZW51bSBjbG50X3N0YXQgcnBjX2xvY19hcGlfYXBpX3ZlcnNpb25zXzB4MDAwMTAwMDEodm9pZCAqLCBycGNfbG9jX2FwaV9hcGlfdmVyc2lvbnNfcmV0cyAqLCBDTElFTlQgKik7CmV4dGVybiAgYm9vbF90IHJwY19sb2NfYXBpX2FwaV92ZXJzaW9uc18weDAwMDEwMDAxX3N2Yyh2b2lkICosIHJwY19sb2NfYXBpX2FwaV92ZXJzaW9uc19yZXRzICosIHN0cnVjdCBzdmNfcmVxICopOwpleHRlcm4gaW50IGxvY19hcGlwcm9nXzB4MDAwMTAwMDFfZnJlZXJlc3VsdCAoU1ZDWFBSVCAqLCB4ZHJwcm9jX3QsIGNhZGRyX3QpOwoKI2Vsc2UgLyogSyZSIEMgKi8KI2RlZmluZSBycGNfbG9jX2FwaV9udWxsIDAKZXh0ZXJuICBlbnVtIGNsbnRfc3RhdCBycGNfbG9jX2FwaV9udWxsXzB4MDAwMTAwMDEoKTsKZXh0ZXJuICBib29sX3QgcnBjX2xvY19hcGlfbnVsbF8weDAwMDEwMDAxX3N2YygpOwojZGVmaW5lIHJwY19sb2NfYXBpX3JwY19nbHVlX2NvZGVfaW5mb19yZW1vdGUgMQpleHRlcm4gIGVudW0gY2xudF9zdGF0IHJwY19sb2NfYXBpX3JwY19nbHVlX2NvZGVfaW5mb19yZW1vdGVfMHgwMDAxMDAwMSgpOwpleHRlcm4gIGJvb2xfdCBycGNfbG9jX2FwaV9ycGNfZ2x1ZV9jb2RlX2luZm9fcmVtb3RlXzB4MDAwMTAwMDFfc3ZjKCk7CiNkZWZpbmUgcnBjX2xvY19vcGVuIDIKZXh0ZXJuICBlbnVtIGNsbnRfc3RhdCBycGNfbG9jX29wZW5fMHgwMDAxMDAwMSgpOwpleHRlcm4gIGJvb2xfdCBycGNfbG9jX29wZW5fMHgwMDAxMDAwMV9zdmMoKTsKI2RlZmluZSBycGNfbG9jX2Nsb3NlIDMKZXh0ZXJuICBlbnVtIGNsbnRfc3RhdCBycGNfbG9jX2Nsb3NlXzB4MDAwMTAwMDEoKTsKZXh0ZXJuICBib29sX3QgcnBjX2xvY19jbG9zZV8weDAwMDEwMDAxX3N2YygpOwojZGVmaW5lIHJwY19sb2Nfc3RhcnRfZml4IDQKZXh0ZXJuICBlbnVtIGNsbnRfc3RhdCBycGNfbG9jX3N0YXJ0X2ZpeF8weDAwMDEwMDAxKCk7CmV4dGVybiAgYm9vbF90IHJwY19sb2Nfc3RhcnRfZml4XzB4MDAwMTAwMDFfc3ZjKCk7CiNkZWZpbmUgcnBjX2xvY19zdG9wX2ZpeCA1CmV4dGVybiAgZW51bSBjbG50X3N0YXQgcnBjX2xvY19zdG9wX2ZpeF8weDAwMDEwMDAxKCk7CmV4dGVybiAgYm9vbF90IHJwY19sb2Nfc3RvcF9maXhfMHgwMDAxMDAwMV9zdmMoKTsKI2RlZmluZSBycGNfbG9jX2lvY3RsIDYKZXh0ZXJuICBlbnVtIGNsbnRfc3RhdCBycGNfbG9jX2lvY3RsXzB4MDAwMTAwMDEoKTsKZXh0ZXJuICBib29sX3QgcnBjX2xvY19pb2N0bF8weDAwMDEwMDAxX3N2YygpOwojZGVmaW5lIHJwY19sb2NfYXBpX2FwaV92ZXJzaW9ucyAweEZGRkZGRkZGCmV4dGVybiAgZW51bSBjbG50X3N0YXQgcnBjX2xvY19hcGlfYXBpX3ZlcnNpb25zXzB4MDAwMTAwMDEoKTsKZXh0ZXJuICBib29sX3QgcnBjX2xvY19hcGlfYXBpX3ZlcnNpb25zXzB4MDAwMTAwMDFfc3ZjKCk7CmV4dGVybiBpbnQgbG9jX2FwaXByb2dfMHgwMDAxMDAwMV9mcmVlcmVzdWx0ICgpOwojZW5kaWYgLyogSyZSIEMgKi8KCi8qIHRoZSB4ZHIgZnVuY3Rpb25zICovCgojaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKZXh0ZXJuICBib29sX3QgeGRyX3JwY19sb2NfYXBpX2FwaV92ZXJzaW9uc19yZXR1cm5fdHlwZSAoWERSICosIHJwY19sb2NfYXBpX2FwaV92ZXJzaW9uc19yZXR1cm5fdHlwZSopOwpleHRlcm4gIGJvb2xfdCB4ZHJfcnBjX2xvY19ldmVudF9jYl9mX3R5cGUgKFhEUiAqLCBycGNfbG9jX2V2ZW50X2NiX2ZfdHlwZSopOwpleHRlcm4gIGJvb2xfdCB4ZHJfcnBjX2xvY19vcGVuX2FyZ3MgKFhEUiAqLCBycGNfbG9jX29wZW5fYXJncyopOwpleHRlcm4gIGJvb2xfdCB4ZHJfcnBjX2xvY19jbG9zZV9hcmdzIChYRFIgKiwgcnBjX2xvY19jbG9zZV9hcmdzKik7CmV4dGVybiAgYm9vbF90IHhkcl9ycGNfbG9jX3N0YXJ0X2ZpeF9hcmdzIChYRFIgKiwgcnBjX2xvY19zdGFydF9maXhfYXJncyopOwpleHRlcm4gIGJvb2xfdCB4ZHJfcnBjX2xvY19zdG9wX2ZpeF9hcmdzIChYRFIgKiwgcnBjX2xvY19zdG9wX2ZpeF9hcmdzKik7CmV4dGVybiAgYm9vbF90IHhkcl9ycGNfbG9jX2lvY3RsX2FyZ3MgKFhEUiAqLCBycGNfbG9jX2lvY3RsX2FyZ3MqKTsKZXh0ZXJuICBib29sX3QgeGRyX3JwY19sb2NfYXBpX2FwaV92ZXJzaW9uX3NfYXJncyAoWERSICosIHJwY19sb2NfYXBpX2FwaV92ZXJzaW9uX3NfYXJncyopOwpleHRlcm4gIGJvb2xfdCB4ZHJfcnBjX2xvY19hcGlfcnBjX2dsdWVfY29kZV9pbmZvX3JlbW90ZV9yZXRzIChYRFIgKiwgcnBjX2xvY19hcGlfcnBjX2dsdWVfY29kZV9pbmZvX3JlbW90ZV9yZXRzKik7CmV4dGVybiAgYm9vbF90IHhkcl9ycGNfbG9jX29wZW5fcmV0cyAoWERSICosIHJwY19sb2Nfb3Blbl9yZXRzKik7CmV4dGVybiAgYm9vbF90IHhkcl9ycGNfbG9jX2Nsb3NlX3JldHMgKFhEUiAqLCBycGNfbG9jX2Nsb3NlX3JldHMqKTsKZXh0ZXJuICBib29sX3QgeGRyX3JwY19sb2Nfc3RhcnRfZml4X3JldHMgKFhEUiAqLCBycGNfbG9jX3N0YXJ0X2ZpeF9yZXRzKik7CmV4dGVybiAgYm9vbF90IHhkcl9ycGNfbG9jX3N0b3BfZml4X3JldHMgKFhEUiAqLCBycGNfbG9jX3N0b3BfZml4X3JldHMqKTsKZXh0ZXJuICBib29sX3QgeGRyX3JwY19sb2NfaW9jdGxfcmV0cyAoWERSICosIHJwY19sb2NfaW9jdGxfcmV0cyopOwpleHRlcm4gIGJvb2xfdCB4ZHJfcnBjX2xvY19hcGlfYXBpX3ZlcnNpb25zX3JldHMgKFhEUiAqLCBycGNfbG9jX2FwaV9hcGlfdmVyc2lvbnNfcmV0cyopOwoKI2Vsc2UgLyogSyZSIEMgKi8KZXh0ZXJuIGJvb2xfdCB4ZHJfcnBjX2xvY19hcGlfYXBpX3ZlcnNpb25zX3JldHVybl90eXBlICgpOwpleHRlcm4gYm9vbF90IHhkcl9ycGNfbG9jX2V2ZW50X2NiX2ZfdHlwZSAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfcnBjX2xvY19vcGVuX2FyZ3MgKCk7CmV4dGVybiBib29sX3QgeGRyX3JwY19sb2NfY2xvc2VfYXJncyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfcnBjX2xvY19zdGFydF9maXhfYXJncyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfcnBjX2xvY19zdG9wX2ZpeF9hcmdzICgpOwpleHRlcm4gYm9vbF90IHhkcl9ycGNfbG9jX2lvY3RsX2FyZ3MgKCk7CmV4dGVybiBib29sX3QgeGRyX3JwY19sb2NfYXBpX2FwaV92ZXJzaW9uX3NfYXJncyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfcnBjX2xvY19hcGlfcnBjX2dsdWVfY29kZV9pbmZvX3JlbW90ZV9yZXRzICgpOwpleHRlcm4gYm9vbF90IHhkcl9ycGNfbG9jX29wZW5fcmV0cyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfcnBjX2xvY19jbG9zZV9yZXRzICgpOwpleHRlcm4gYm9vbF90IHhkcl9ycGNfbG9jX3N0YXJ0X2ZpeF9yZXRzICgpOwpleHRlcm4gYm9vbF90IHhkcl9ycGNfbG9jX3N0b3BfZml4X3JldHMgKCk7CmV4dGVybiBib29sX3QgeGRyX3JwY19sb2NfaW9jdGxfcmV0cyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfcnBjX2xvY19hcGlfYXBpX3ZlcnNpb25zX3JldHMgKCk7CgojZW5kaWYgLyogSyZSIEMgKi8KCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKI2VuZGlmIC8qICFfTE9DX0FQSV9IX1JQQ0dFTiAqLwo=