LyoKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcwogKgogKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqIGV0MTMxMF90eC5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0byBkYXRhCiAqICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uLgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKgogKiBTT0ZUV0FSRSBMSUNFTlNFCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAogKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCiAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgogKgogKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAqCiAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCiAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogKiAgICBkaXN0cmlidXRpb24uCiAqCiAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIERpc2NsYWltZXIKICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCiAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQogKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgogKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAogKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAogKiBEQU1BR0UuCiAqCiAqLwoKI2lmbmRlZiBfX0VUMTMxMF9UWF9IX18KI2RlZmluZSBfX0VUMTMxMF9UWF9IX18KCgovKiBUeXBlZGVmcyBmb3IgVHggRGVzY3JpcHRvciBSaW5nICovCgovKgogKiBUWERFU0NfV09SRDJfdCBzdHJ1Y3R1cmUgaG9sZHMgcGFydCBvZiB0aGUgY29udHJvbCBiaXRzIGluIHRoZSBUeCBEZXNjcmlwdG9yCiAqIHJpbmcgZm9yIHRoZSBFVC0xMzEwCiAqLwp0eXBlZGVmIHVuaW9uIF90eGRlc2Nfd29yZDJfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB2bGFuX3ByaW86MzsJCS8vIGJpdHMgMjktMzEoVkxBTiBwcmlvcml0eSkKCQl1MzIgdmxhbl9jZmk6MTsJCS8vIGJpdCAyOChjZmkpCgkJdTMyIHZsYW5fdGFnOjEyOwkJLy8gYml0cyAxNi0yNyhWTEFOIHRhZykKCQl1MzIgbGVuZ3RoX2luX2J5dGVzOjE2OwkvLyBiaXRzICAwLTE1KHBhY2tldCBsZW5ndGgpCiNlbHNlCgkJdTMyIGxlbmd0aF9pbl9ieXRlczoxNjsJLy8gYml0cyAgMC0xNShwYWNrZXQgbGVuZ3RoKQoJCXUzMiB2bGFuX3RhZzoxMjsJCS8vIGJpdHMgMTYtMjcoVkxBTiB0YWcpCgkJdTMyIHZsYW5fY2ZpOjE7CQkvLyBiaXQgMjgoY2ZpKQoJCXUzMiB2bGFuX3ByaW86MzsJCS8vIGJpdHMgMjktMzEoVkxBTiBwcmlvcml0eSkKI2VuZGlmCS8qIF9CSVRfRklFTERTX0hUT0wgKi8KCX0gYml0czsKfSBUWERFU0NfV09SRDJfdCwgKlBUWERFU0NfV09SRDJfdDsKCi8qCiAqIFRYREVTQ19XT1JEM190IHN0cnVjdHVyZSBob2xkcyBwYXJ0IG9mIHRoZSBjb250cm9sIGJpdHMgaW4gdGhlIFR4IERlc2NyaXB0b3IKICogcmluZyBmb3IgdGhlIEVULTEzMTAKICovCnR5cGVkZWYgdW5pb24gX3R4ZGVzY193b3JkM190IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDoxNzsJLy8gYml0cyAxNS0zMQoJCXUzMiB1ZHBhOjE7CS8vIGJpdCAxNChVRFAgY2hlY2tzdW0gYXNzaXN0KQoJCXUzMiB0Y3BhOjE7CS8vIGJpdCAxMyhUQ1AgY2hlY2tzdW0gYXNzaXN0KQoJCXUzMiBpcGE6MTsJCS8vIGJpdCAxMihJUCBjaGVja3N1bSBhc3Npc3QpCgkJdTMyIHZsYW46MTsJLy8gYml0IDExKGFwcGVuZCBWTEFOIHRhZykKCQl1MzIgaHA6MTsJCS8vIGJpdCAxMChQYWNrZXQgaXMgYSBIdWdlIHBhY2tldCkKCQl1MzIgcHA6MTsJCS8vIGJpdCAgOShwYWQgcGFja2V0KQoJCXUzMiBtYWM6MTsJCS8vIGJpdCAgOChNQUMgb3ZlcnJpZGUpCgkJdTMyIGNyYzoxOwkJLy8gYml0ICA3KGFwcGVuZCBDUkMpCgkJdTMyIGU6MTsJCS8vIGJpdCAgNihUeCBmcmFtZSBoYXMgZXJyb3IpCgkJdTMyIHBmOjE7CQkvLyBiaXQgIDUoc2VuZCBwYXVzZSBmcmFtZSkKCQl1MzIgYnA6MTsJCS8vIGJpdCAgNChJc3N1ZSBoYWxmLWR1cGxleCBiYWNrcHJlc3N1cmUgKFhPTi9YT0ZGKQoJCXUzMiBjdzoxOwkJLy8gYml0ICAzKENvbnRyb2wgd29yZCAtIG5vIHBhY2tldCBkYXRhKQoJCXUzMiBpcjoxOwkJLy8gYml0ICAyKGludGVycnVwdCB0aGUgcHJvY2Vzc29yIHdoZW4gdGhpcyBwa3Qgc2VudCkKCQl1MzIgZjoxOwkJLy8gYml0ICAxKGZpcnN0IHBhY2tldCBpbiB0aGUgc2VxdWVuY2UpCgkJdTMyIGw6MTsJCS8vIGJpdCAgMChsYXN0IHBhY2tldCBpbiB0aGUgc2VxdWVuY2UpCiNlbHNlCgkJdTMyIGw6MTsJCS8vIGJpdCAgMChsYXN0IHBhY2tldCBpbiB0aGUgc2VxdWVuY2UpCgkJdTMyIGY6MTsJCS8vIGJpdCAgMShmaXJzdCBwYWNrZXQgaW4gdGhlIHNlcXVlbmNlKQoJCXUzMiBpcjoxOwkJLy8gYml0ICAyKGludGVycnVwdCB0aGUgcHJvY2Vzc29yIHdoZW4gdGhpcyBwa3Qgc2VudCkKCQl1MzIgY3c6MTsJCS8vIGJpdCAgMyhDb250cm9sIHdvcmQgLSBubyBwYWNrZXQgZGF0YSkKCQl1MzIgYnA6MTsJCS8vIGJpdCAgNChJc3N1ZSBoYWxmLWR1cGxleCBiYWNrcHJlc3N1cmUgKFhPTi9YT0ZGKQoJCXUzMiBwZjoxOwkJLy8gYml0ICA1KHNlbmQgcGF1c2UgZnJhbWUpCgkJdTMyIGU6MTsJCS8vIGJpdCAgNihUeCBmcmFtZSBoYXMgZXJyb3IpCgkJdTMyIGNyYzoxOwkJLy8gYml0ICA3KGFwcGVuZCBDUkMpCgkJdTMyIG1hYzoxOwkJLy8gYml0ICA4KE1BQyBvdmVycmlkZSkKCQl1MzIgcHA6MTsJCS8vIGJpdCAgOShwYWQgcGFja2V0KQoJCXUzMiBocDoxOwkJLy8gYml0IDEwKFBhY2tldCBpcyBhIEh1Z2UgcGFja2V0KQoJCXUzMiB2bGFuOjE7CS8vIGJpdCAxMShhcHBlbmQgVkxBTiB0YWcpCgkJdTMyIGlwYToxOwkJLy8gYml0IDEyKElQIGNoZWNrc3VtIGFzc2lzdCkKCQl1MzIgdGNwYToxOwkvLyBiaXQgMTMoVENQIGNoZWNrc3VtIGFzc2lzdCkKCQl1MzIgdWRwYToxOwkvLyBiaXQgMTQoVURQIGNoZWNrc3VtIGFzc2lzdCkKCQl1MzIgdW51c2VkOjE3OwkvLyBiaXRzIDE1LTMxCiNlbmRpZgkvKiBfQklUX0ZJRUxEU19IVE9MICovCgl9IGJpdHM7Cn0gVFhERVNDX1dPUkQzX3QsICpQVFhERVNDX1dPUkQzX3Q7CgovKiBUWF9ERVNDX0VOVFJZX3QgaXMgc3J1Y3R1cmUgcmVwcmVzZW50aW5nIGVhY2ggZGVzY3JpcHRvciBvbiB0aGUgcmluZyAqLwp0eXBlZGVmIHN0cnVjdCBfdHhfZGVzY19lbnRyeV90IHsKCXUzMiBEYXRhQnVmZmVyUHRySGlnaDsKCXUzMiBEYXRhQnVmZmVyUHRyTG93OwoJVFhERVNDX1dPUkQyX3Qgd29yZDI7CS8vIGNvbnRyb2wgd29yZHMgaG93IHRvIHhtaXQgdGhlCglUWERFU0NfV09SRDNfdCB3b3JkMzsJLy8gZGF0YSAoZGV0YWlsZWQgYWJvdmUpCn0gVFhfREVTQ19FTlRSWV90LCAqUFRYX0RFU0NfRU5UUllfdDsKCgovKiBUeXBlZGVmcyBmb3IgVHggRE1BIGVuZ2luZSBzdGF0dXMgd3JpdGViYWNrICovCgovKgogKiBUWF9TVEFUVVNfQkxPQ0tfdCBpcyBzcnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgVHggRE1BIGVuZ2luZQogKiBpdCBzaXRzIGluIGZyZWUgbWVtb3J5LCBhbmQgaXMgcG9pbnRlZCB0byBieSAweDEwMWMgLyAweDEwMjAKICovCnR5cGVkZWYgdW5pb24gX3R4X3N0YXR1c19ibG9ja190IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDoyMTsJCS8vIGJpdHMgMTEtMzEKCQl1MzIgc2Vydl9jcGxfd3JhcDoxOwkvLyBiaXQgMTAKCQl1MzIgc2Vydl9jcGw6MTA7CQkvLyBiaXRzIDAtOQojZWxzZQoJCXUzMiBzZXJ2X2NwbDoxMDsJCS8vIGJpdHMgMC05CgkJdTMyIHNlcnZfY3BsX3dyYXA6MTsJLy8gYml0IDEwCgkJdTMyIHVudXNlZDoyMTsJCS8vIGJpdHMgMTEtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gVFhfU1RBVFVTX0JMT0NLX3QsICpQVFhfU1RBVFVTX0JMT0NLX3Q7CgovKiBUQ0IgKFRyYW5zbWl0IENvbnRyb2wgQmxvY2spICovCnR5cGVkZWYgc3RydWN0IF9NUF9UQ0IgewoJc3RydWN0IF9NUF9UQ0IgKk5leHQ7Cgl1MzIgRmxhZ3M7Cgl1MzIgQ291bnQ7Cgl1MzIgUGFja2V0U3RhbGVDb3VudDsKCXN0cnVjdCBza19idWZmICpQYWNrZXQ7Cgl1MzIgUGFja2V0TGVuZ3RoOwoJRE1BMTBXX3QgV3JJbmRleDsKCURNQTEwV190IFdySW5kZXhTdGFydDsKfSBNUF9UQ0IsICpQTVBfVENCOwoKLyogU3RydWN0dXJlIHRvIGhvbGQgdGhlIHNrYidzIGluIGEgbGlzdCAqLwp0eXBlZGVmIHN0cnVjdCB0eF9za2JfbGlzdF9lbGVtIHsKCXN0cnVjdCBsaXN0X2hlYWQgc2tiX2xpc3RfZWxlbTsKCXN0cnVjdCBza19idWZmICpza2I7Cn0gVFhfU0tCX0xJU1RfRUxFTSwgKlBUWF9TS0JfTElTVF9FTEVNOwoKLyogVFhfUklOR190IGlzIHNydWN0dXJlIHJlcHJlc2VudGluZyBvdXIgbG9jYWwgcmVmZXJlbmNlKHMpIHRvIHRoZSByaW5nICovCnR5cGVkZWYgc3RydWN0IF90eF9yaW5nX3QgewoJLyogVENCIChUcmFuc21pdCBDb250cm9sIEJsb2NrKSBtZW1vcnkgYW5kIGxpc3RzICovCglQTVBfVENCIE1wVGNiTWVtOwoKCS8qIExpc3Qgb2YgVENCcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkICovCglQTVBfVENCIFRDQlJlYWR5UXVldWVIZWFkOwoJUE1QX1RDQiBUQ0JSZWFkeVF1ZXVlVGFpbDsKCgkvKiBsaXN0IG9mIFRDQnMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHNlbnQuICBOT1RFIHRoYXQgYWNjZXNzIHRvIGFsbAoJICogdGhyZWUgb2YgdGhlc2UgKGluY2x1ZGluZyBuQnVzeVNlbmQpIGFyZSBjb250cm9sbGVkIHZpYSB0aGUKCSAqIFRDQlNlbmRRTG9jay4gIFRoaXMgbG9jayBzaG91bGQgYmUgc2VjdXJlZCBwcmlvciB0byBpbmNlbWVudGluZyAvCgkgKiBkZWNyZW1lbnRpbmcgbkJ1c3lTZW5kLCBvciBhbnkgcXVldWUgbWFuaXB1bGF0aW9uIG9uIEN1cnJTZW5kSGVhZCAvCgkgKiBUYWlsCgkgKi8KCVBNUF9UQ0IgQ3VyclNlbmRIZWFkOwoJUE1QX1RDQiBDdXJyU2VuZFRhaWw7CglpbnQzMl90IG5CdXN5U2VuZDsKCgkvKiBMaXN0IG9mIHBhY2tldHMgKG5vdCBUQ0JzKSB0aGF0IHdlcmUgcXVldWVkIGZvciBsYWNrIG9mIHJlc291cmNlcyAqLwoJc3RydWN0IGxpc3RfaGVhZCBTZW5kV2FpdFF1ZXVlOwoJaW50MzJfdCBuV2FpdFNlbmQ7CgoJLyogVGhlIGFjdHVhbCBkZXNjcmlwdG9yIHJpbmcgKi8KCVBUWF9ERVNDX0VOVFJZX3QgcFR4RGVzY1JpbmdWYTsKCWRtYV9hZGRyX3QgcFR4RGVzY1JpbmdQYTsKCXVpbnQ2NF90IHBUeERlc2NSaW5nQWRqdXN0ZWRQYTsKCXVpbnQ2NF90IFR4RGVzY09mZnNldDsKCgkvKiBSZWFkeVRvU2VuZCBpbmRpY2F0ZXMgd2hlcmUgd2UgbGFzdCB3cm90ZSB0byBpbiB0aGUgZGVzY3JpcHRvciByaW5nLiAqLwoJRE1BMTBXX3QgdHhEbWFSZWFkeVRvU2VuZDsKCgkvKiBUaGUgbG9jYXRpb24gb2YgdGhlIHdyaXRlLWJhY2sgc3RhdHVzIGJsb2NrICovCglQVFhfU1RBVFVTX0JMT0NLX3QgcFR4U3RhdHVzVmE7CglkbWFfYWRkcl90IHBUeFN0YXR1c1BhOwoKCS8qIEEgQmxvY2sgb2YgemVyb2VzIHVzZWQgdG8gcGFkIHBhY2tldHMgdGhhdCBhcmUgbGVzcyB0aGFuIDYwIGJ5dGVzICovCgl2b2lkICpwVHhEdW1teUJsa1ZhOwoJZG1hX2FkZHJfdCBwVHhEdW1teUJsa1BhOwoKCVRYTUFDX0VSUl90IFR4TWFjRXJyOwoKCS8qIFZhcmlhYmxlcyB0byB0cmFjayB0aGUgVHggaW50ZXJydXB0IGNvYWxlc2NpbmcgZmVhdHVyZXMgKi8KCWludDMyX3QgVHhQYWNrZXRzU2luY2VMYXN0aW50ZXJydXB0Owp9IFRYX1JJTkdfdCwgKlBUWF9SSU5HX3Q7CgovKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBmcmFnLWxpc3QgZm9yIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlcyAqLwp0eXBlZGVmIHN0cnVjdCBfTVBfRlJBR19MSVNUIE1QX0ZSQUdfTElTVCwgKlBNUF9GUkFHX0xJU1Q7CgovKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCnN0cnVjdCBldDEzMXhfYWRhcHRlcjsKCi8qIFBST1RPVFlQRVMgZm9yIGV0MTMxMF90eC5jICovCmludCBldDEzMXhfdHhfZG1hX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwp2b2lkIGV0MTMxeF90eF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKdm9pZCBDb25maWdUeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7CnZvaWQgZXQxMzF4X2luaXRfc2VuZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwp2b2lkIGV0MTMxeF90eF9kbWFfZGlzYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKdm9pZCBldDEzMXhfdHhfZG1hX2VuYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKdm9pZCBldDEzMXhfaGFuZGxlX3NlbmRfaW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwp2b2lkIGV0MTMxeF9mcmVlX2J1c3lfc2VuZF9wYWNrZXRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwppbnQgZXQxMzF4X3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKCiNlbmRpZiAvKiBfX0VUMTMxMF9UWF9IX18gKi8K