LyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCiAqIHRoYXQgbWF5IGFwcGx5OgogKi8KLyoKICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKICogQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICovCiNpZm5kZWYgU05NUF9BUElfSAojZGVmaW5lIFNOTVBfQVBJX0gKCi8qCiAqIEBmaWxlIHNubXBfYXBpLmggLSBBUEkgZm9yIGFjY2VzcyB0byBzbm1wLgogKiAKICogQGFkZHRvZ3JvdXAgbGlicmFyeQogKgogKiBDYXV0aW9uOiB3aGVuIHVzaW5nIHRoaXMgbGlicmFyeSBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLAogKiB0aGUgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMgInNubXBfZXJybm8iIGFuZCAic25tcF9kZXRhaWwiCiAqIGNhbm5vdCBiZSByZWxpYWJseSBkZXRlcm1pbmVkLiAgU3VnZ2VzdCB1c2luZyBzbm1wX2Vycm9yKCkKICogdG8gb2J0YWluIHRoZSBsaWJyYXJ5IGVycm9yIGNvZGVzLgogKgogKiBAewogKi8KCiNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgojaW5jbHVkZSA8bmV0LXNubXAvdmFyYmluZF9hcGkuaD4KI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KI2luY2x1ZGUgPG5ldC1zbm1wL3BkdV9hcGkuaD4KI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+CgojaWZuZGVmIERPTlRfU0hBUkVfRVJST1JfV0lUSF9PVEhFUl9USFJFQURTCiNkZWZpbmUgU0VUX1NOTVBfRVJST1IoeCkgc25tcF9lcnJubz0oeCkKI2Vsc2UKI2RlZmluZSBTRVRfU05NUF9FUlJPUih4KQojZW5kaWYKCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICAgICAgICAgICJDIiB7CiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCglDb3B5cmlnaHQgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQoKICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKClBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwpkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCnByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCnN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgQ01VIG5vdCBiZQp1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgoKQ01VIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcKQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMCkNNVSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IKQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLApXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCkFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKU09GVFdBUkUuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCnN0cnVjdCB0aW1ldmFsOwovKgogKiBBIGxpc3Qgb2YgYWxsIHRoZSBvdXRzdGFuZGluZyByZXF1ZXN0cyBmb3IgYSBwYXJ0aWN1bGFyIHNlc3Npb24uCiAqLwojaWZkZWYgU05NUF9ORUVEX1JFUVVFU1RfTElTVAp0eXBlZGVmIHN0cnVjdCByZXF1ZXN0X2xpc3QgewogICAgc3RydWN0IHJlcXVlc3RfbGlzdCAqbmV4dF9yZXF1ZXN0OwogICAgbG9uZyAgICAgICAgICAgIHJlcXVlc3RfaWQ7ICAgICAvKiByZXF1ZXN0IGlkICovCiAgICBsb25nICAgICAgICAgICAgbWVzc2FnZV9pZDsgICAgIC8qIG1lc3NhZ2UgaWQgKi8KICAgIG5ldHNubXBfY2FsbGJhY2sgY2FsbGJhY2s7ICAgICAgLyogdXNlciBjYWxsYmFjayBwZXIgcmVxdWVzdCAoTlVMTCBpZiB1bnVzZWQpICovCiAgICB2b2lkICAgICAgICAgICAqY2JfZGF0YTsgICAgICAgIC8qIHVzZXIgY2FsbGJhY2sgZGF0YSBwZXIgcmVxdWVzdCAoTlVMTCBpZiB1bnVzZWQpICovCiAgICBpbnQgICAgICAgICAgICAgcmV0cmllczsgICAgICAgIC8qIE51bWJlciBvZiByZXRyaWVzICovCiAgICB1X2xvbmcgICAgICAgICAgdGltZW91dDsgICAgICAgIC8qIGxlbmd0aCB0byB3YWl0IGZvciB0aW1lb3V0ICovCiAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZTsgICAvKiBUaW1lIHRoaXMgcmVxdWVzdCB3YXMgbWFkZSAqLwogICAgc3RydWN0IHRpbWV2YWwgIGV4cGlyZTsgLyogdGltZSB0aGlzIHJlcXVlc3QgaXMgZHVlIHRvIGV4cGlyZSAqLwogICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKICAgIG5ldHNubXBfcGR1ICAgICpwZHU7ICAgIC8qIFRoZSBwZHUgZm9yIHRoaXMgcmVxdWVzdAoJCQkgICAgICogKHNhdmVkIHNvIGl0IGNhbiBiZSByZXRyYW5zbWl0dGVkICovCn0gbmV0c25tcF9yZXF1ZXN0X2xpc3Q7CiNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUF9ORUVEX1JFUVVFU1RfTElTVCAqLwoKICAgIC8qCiAgICAgKiBTZXQgZmllbGRzIGluIHNlc3Npb24gYW5kIHBkdSB0byB0aGUgZm9sbG93aW5nIHRvIGdldCBhIGRlZmF1bHQgb3IgdW5jb25maWd1cmVkIHZhbHVlLgogICAgICovCiNkZWZpbmUgU05NUF9ERUZBVUxUX0NPTU1VTklUWV9MRU4gIDAgICAvKiB0byBnZXQgYSBkZWZhdWx0IGNvbW11bml0eSBuYW1lICovCiNkZWZpbmUgU05NUF9ERUZBVUxUX1JFVFJJRVMJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX1RJTUVPVVQJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX1JFTVBPUlQJICAgIDAKI2RlZmluZSBTTk1QX0RFRkFVTFRfUkVRSUQJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX01TR0lECSAgICAtMQojZGVmaW5lIFNOTVBfREVGQVVMVF9FUlJTVEFUCSAgICAtMQojZGVmaW5lIFNOTVBfREVGQVVMVF9FUlJJTkRFWAkgICAgLTEKI2RlZmluZSBTTk1QX0RFRkFVTFRfQUREUkVTUwkgICAgMAojZGVmaW5lIFNOTVBfREVGQVVMVF9QRUVSTkFNRQkgICAgTlVMTAojZGVmaW5lIFNOTVBfREVGQVVMVF9FTlRFUlBSSVNFX0xFTkdUSAkwCiNkZWZpbmUgU05NUF9ERUZBVUxUX1RJTUUJICAgIDAKI2RlZmluZSBTTk1QX0RFRkFVTFRfVkVSU0lPTgkgICAgLTEKI2RlZmluZSBTTk1QX0RFRkFVTFRfU0VDTU9ERUwJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX0NPTlRFWFQgICAgICAgICIiCiNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQojZGVmaW5lIFNOTVBfREVGQVVMVF9BVVRIX1BST1RPICAgICB1c21ITUFDTUQ1QXV0aFByb3RvY29sCiNlbHNlCiNkZWZpbmUgU05NUF9ERUZBVUxUX0FVVEhfUFJPVE8gICAgIHVzbUhNQUNTSEExQXV0aFByb3RvY29sCiNlbmRpZgojZGVmaW5lIFNOTVBfREVGQVVMVF9BVVRIX1BST1RPTEVOICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0KI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCiNkZWZpbmUgU05NUF9ERUZBVUxUX1BSSVZfUFJPVE8gICAgIHVzbURFU1ByaXZQcm90b2NvbAojZWxzZQojZGVmaW5lIFNOTVBfREVGQVVMVF9QUklWX1BST1RPICAgICB1c21BRVNQcml2UHJvdG9jb2wKI2VuZGlmCiNkZWZpbmUgU05NUF9ERUZBVUxUX1BSSVZfUFJPVE9MRU4gIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STQoKICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgICAgIHNubXBfc2V0X2RldGFpbChjb25zdCBjaGFyICopOwoKI2RlZmluZSBTTk1QX01BWF9NU0dfU0laRSAgICAgICAgICAxNDcyIC8qIGV0aGVybmV0IE1UVSBtaW51cyBJUC9VRFAgaGVhZGVyICovCiNkZWZpbmUgU05NUF9NQVhfTVNHX1YzX0hEUlMgICAgICAgKDQrMys0KzcrNyszKzcrMTYpICAgLyogZnVkZ2UgZmFjdG9yPTE2ICovCiNkZWZpbmUgU05NUF9NQVhfRU5HX1NJWkUgICAgICAgICAgMzIKI2RlZmluZSBTTk1QX01BWF9TRUNfTkFNRV9TSVpFICAgICAyNTYKI2RlZmluZSBTTk1QX01BWF9DT05URVhUX1NJWkUgICAgICAyNTYKI2RlZmluZSBTTk1QX1NFQ19QQVJBTV9CVUZfU0laRSAgICAyNTYKCiAgICAvKgogICAgICogc2V0IHRvIG9uZSB0byBpZ25vcmUgdW5hdXRoZW50aWNhdGVkIFJlcG9ydHMgCiAgICAgKi8KI2RlZmluZSBTTk1QVjNfSUdOT1JFX1VOQVVUSF9SRVBPUlRTIDAKCiAgICAvKgogICAgICogYXV0aG9yaXRhdGl2ZSBlbmdpbmUgZGVmaW5pdGlvbnMgCiAgICAgKi8KI2RlZmluZSBTTk1QX1NFU1NfTk9OQVVUSE9SSVRBVElWRSAwICAgIC8qIHNob3VsZCBiZSAwIHRvIGRlZmF1bHQgdG8gdGhpcyAqLwojZGVmaW5lIFNOTVBfU0VTU19BVVRIT1JJVEFUSVZFICAgIDEgICAgLyogZG9uJ3QgbGVhcm4gZW5naW5lSURzICovCiNkZWZpbmUgU05NUF9TRVNTX1VOS05PV05BVVRIICAgICAgMiAgICAvKiBzb21ldGltZXMgKGxpa2UgTlJzKSAqLwoKICAgIC8qCiAgICAgKiB0byBkZXRlcm1pbmUgdHlwZSBvZiBSZXBvcnQgZnJvbSB2YXJiaW5kX2xpc3QgCiAgICAgKi8KI2RlZmluZSBSRVBPUlRfU1RBVFNfTEVOICA5CS8qIExlbmd0aCBvZiBwcmVmaXggZm9yIE1QRC9VU00gcmVwb3J0IHN0YXRpc3RpYyBvYmplY3RzICovCiNkZWZpbmUgUkVQT1JUX1NUQVRTX0xFTjIgOAkvKiBMZW5ndGggb2YgcHJlZml4IGZvciBUYXJnZXQgcmVwb3J0IHN0YXRpc3RpYyBvYmplY3RzICovCi8qIEZyb20gU05NUC1NUEQtTUlCICovCiNkZWZpbmUgUkVQT1JUX3NubXBVbmtub3duU2VjdXJpdHlNb2RlbHNfTlVNIDEKI2RlZmluZSBSRVBPUlRfc25tcEludmFsaWRNc2dzX05VTSAgICAgICAgICAgMgojZGVmaW5lIFJFUE9SVF9zbm1wVW5rbm93blBEVUhhbmRsZXJzX05VTSAgICAzCi8qIEZyb20gU05NUC1VU0VSLUJBU0VELVNNLU1JQiAqLwojZGVmaW5lIFJFUE9SVF91c21TdGF0c1Vuc3VwcG9ydGVkU2VjTGV2ZWxzX05VTSAxCiNkZWZpbmUgUkVQT1JUX3VzbVN0YXRzTm90SW5UaW1lV2luZG93c19OVU0gMgojZGVmaW5lIFJFUE9SVF91c21TdGF0c1Vua25vd25Vc2VyTmFtZXNfTlVNIDMKI2RlZmluZSBSRVBPUlRfdXNtU3RhdHNVbmtub3duRW5naW5lSURzX05VTSA0CiNkZWZpbmUgUkVQT1JUX3VzbVN0YXRzV3JvbmdEaWdlc3RzX05VTSAgICAgNQojZGVmaW5lIFJFUE9SVF91c21TdGF0c0RlY3J5cHRpb25FcnJvcnNfTlVNIDYKLyogRnJvbSBTTk1QLVRBUkdFVC1NSUIgKi8KI2RlZmluZSBSRVBPUlRfc25tcFVuYXZhaWxhYmxlQ29udGV4dHNfTlVNICA0CiNkZWZpbmUgUkVQT1JUX3NubXBVbmtub3duQ29udGV4dHNfTlVNICAgICAgNQoKI2RlZmluZSBTTk1QX0RFVEFJTF9TSVpFICAgICAgICA1MTIKCiNkZWZpbmUgU05NUF9GTEFHU19VRFBfQlJPQURDQVNUICAgMHg4MDAKI2RlZmluZSBTTk1QX0ZMQUdTX1JFU1BfQ0FMTEJBQ0sgICAweDQwMCAgICAgIC8qIEFkZGl0aW9uYWwgY2FsbGJhY2sgb24gcmVzcG9uc2UgKi8KI2RlZmluZSBTTk1QX0ZMQUdTX1VTRVJfQ1JFQVRFRCAgICAweDIwMCAgICAgIC8qIFVTTSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQgKi8KI2RlZmluZSBTTk1QX0ZMQUdTX0RPTlRfUFJPQkUgICAgICAweDEwMCAgICAgIC8qIGRvbid0IHByb2JlIGZvciBhbiBlbmdpbmVJRCAqLwojZGVmaW5lIFNOTVBfRkxBR1NfU1RSRUFNX1NPQ0tFVCAgIDB4ODAKI2RlZmluZSBTTk1QX0ZMQUdTX0xJU1RFTklORyAgICAgICAweDQwIC8qIFNlcnZlciBzdHJlYW0gc29ja2V0cyBvbmx5ICovCiNkZWZpbmUgU05NUF9GTEFHU19TVUJTRVNTSU9OICAgICAgMHgyMAojZGVmaW5lIFNOTVBfRkxBR1NfU1RSSUtFMiAgICAgICAgIDB4MDIKI2RlZmluZSBTTk1QX0ZMQUdTX1NUUklLRTEgICAgICAgICAweDAxCgojZGVmaW5lIENMRUFSX1NOTVBfU1RSSUtFX0ZMQUdTKHgpIFwKCXggJj0gfihTTk1QX0ZMQUdTX1NUUklLRTJ8U05NUF9GTEFHU19TVFJJS0UxKQoKICAgIC8qCiAgICAgKiByZXR1cm5zICcxJyBpZiB0aGUgc2Vzc2lvbiBpcyB0byBiZSByZWdhcmRlZCBhcyBkZWFkLAogICAgICogb3RoZXJ3aXNlIHNldCB0aGUgc3RyaWtlIGZsYWdzIGFwcHJvcHJpYXRlbHksIGFuZCByZXR1cm4gMAogICAgICovCiNkZWZpbmUgU0VUX1NOTVBfU1RSSUtFX0ZMQUdTKHgpIFwKCSgoICAgeCAmIFNOTVBfRkxBR1NfU1RSSUtFMiApID8gMSA6CQkJCVwKCSAoKCggeCAmIFNOTVBfRkxBR1NfU1RSSUtFMSApID8gKCB4IHw9IFNOTVBfRkxBR1NfU1RSSUtFMiApIDoJXAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHggfD0gU05NUF9GTEFHU19TVFJJS0UxICkpLAlcCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQoKICAgIC8qCiAgICAgKiBFcnJvciByZXR1cm4gdmFsdWVzLgogICAgICoKICAgICAqIFNOTVBFUlJfU1VDQ0VTUyBpcyB0aGUgbm9uLVBEVSAic3VjY2VzcyIgY29kZS4KICAgICAqCiAgICAgKiBYWFggIFRoZXNlIHNob3VsZCBiZSBtZXJnZWQgd2l0aCBTTk1QX0VSUl8qIGRlZmluZXMgYW5kIGNvbmZpbmVkCiAgICAgKiAgICAgIHRvIHZhbHVlcyA8IDAuICA/Pz8KICAgICAqLwojZGVmaW5lIFNOTVBFUlJfU1VDQ0VTUwkJCSgwKSAgICAgLyogWFhYICBOb24tUERVICJzdWNjZXNzIiBjb2RlLiAqLwojZGVmaW5lIFNOTVBFUlJfR0VORVJSCQkJKC0xKQojZGVmaW5lIFNOTVBFUlJfQkFEX0xPQ1BPUlQJCSgtMikKI2RlZmluZSBTTk1QRVJSX0JBRF9BRERSRVNTCQkoLTMpCiNkZWZpbmUgU05NUEVSUl9CQURfU0VTU0lPTgkJKC00KQojZGVmaW5lIFNOTVBFUlJfVE9PX0xPTkcJCSgtNSkKI2RlZmluZSBTTk1QRVJSX05PX1NPQ0tFVAkJKC02KQojZGVmaW5lIFNOTVBFUlJfVjJfSU5fVjEJCSgtNykKI2RlZmluZSBTTk1QRVJSX1YxX0lOX1YyCQkoLTgpCiNkZWZpbmUgU05NUEVSUl9CQURfUkVQRUFURVJTCQkoLTkpCiNkZWZpbmUgU05NUEVSUl9CQURfUkVQRVRJVElPTlMJCSgtMTApCiNkZWZpbmUgU05NUEVSUl9CQURfQVNOMV9CVUlMRAkJKC0xMSkKI2RlZmluZSBTTk1QRVJSX0JBRF9TRU5EVE8JCSgtMTIpCiNkZWZpbmUgU05NUEVSUl9CQURfUEFSU0UJCSgtMTMpCiNkZWZpbmUgU05NUEVSUl9CQURfVkVSU0lPTgkJKC0xNCkKI2RlZmluZSBTTk1QRVJSX0JBRF9TUkNfUEFSVFkJCSgtMTUpCiNkZWZpbmUgU05NUEVSUl9CQURfRFNUX1BBUlRZCQkoLTE2KQojZGVmaW5lIFNOTVBFUlJfQkFEX0NPTlRFWFQJCSgtMTcpCiNkZWZpbmUgU05NUEVSUl9CQURfQ09NTVVOSVRZCQkoLTE4KQojZGVmaW5lIFNOTVBFUlJfTk9BVVRIX0RFU1BSSVYJCSgtMTkpCiNkZWZpbmUgU05NUEVSUl9CQURfQUNMCQkJKC0yMCkKI2RlZmluZSBTTk1QRVJSX0JBRF9QQVJUWQkJKC0yMSkKI2RlZmluZSBTTk1QRVJSX0FCT1JUCQkJKC0yMikKI2RlZmluZSBTTk1QRVJSX1VOS05PV05fUERVCQkoLTIzKQojZGVmaW5lIFNOTVBFUlJfVElNRU9VVCAJCSgtMjQpCiNkZWZpbmUgU05NUEVSUl9CQURfUkVDVkZST00gCQkoLTI1KQojZGVmaW5lIFNOTVBFUlJfQkFEX0VOR19JRCAJCSgtMjYpCiNkZWZpbmUgU05NUEVSUl9CQURfU0VDX05BTUUgCQkoLTI3KQojZGVmaW5lIFNOTVBFUlJfQkFEX1NFQ19MRVZFTCAJCSgtMjgpCiNkZWZpbmUgU05NUEVSUl9BU05fUEFSU0VfRVJSICAgICAgICAgICAoLTI5KQojZGVmaW5lIFNOTVBFUlJfVU5LTk9XTl9TRUNfTU9ERUwgCSgtMzApCiNkZWZpbmUgU05NUEVSUl9JTlZBTElEX01TRyAgICAgICAgICAgICAoLTMxKQojZGVmaW5lIFNOTVBFUlJfVU5LTk9XTl9FTkdfSUQgICAgICAgICAgKC0zMikKI2RlZmluZSBTTk1QRVJSX1VOS05PV05fVVNFUl9OQU1FIAkoLTMzKQojZGVmaW5lIFNOTVBFUlJfVU5TVVBQT1JURURfU0VDX0xFVkVMIAkoLTM0KQojZGVmaW5lIFNOTVBFUlJfQVVUSEVOVElDQVRJT05fRkFJTFVSRSAJKC0zNSkKI2RlZmluZSBTTk1QRVJSX05PVF9JTl9USU1FX1dJTkRPVyAJKC0zNikKI2RlZmluZSBTTk1QRVJSX0RFQ1JZUFRJT05fRVJSICAgICAgICAgICgtMzcpCiNkZWZpbmUgU05NUEVSUl9TQ19HRU5FUkFMX0ZBSUxVUkUJKC0zOCkKI2RlZmluZSBTTk1QRVJSX1NDX05PVF9DT05GSUdVUkVECSgtMzkpCiNkZWZpbmUgU05NUEVSUl9LVF9OT1RfQVZBSUxBQkxFCSgtNDApCiNkZWZpbmUgU05NUEVSUl9VTktOT1dOX1JFUE9SVCAgICAgICAgICAoLTQxKQojZGVmaW5lIFNOTVBFUlJfVVNNX0dFTkVSSUNFUlJPUgkJKC00MikKI2RlZmluZSBTTk1QRVJSX1VTTV9VTktOT1dOU0VDVVJJVFlOQU1FCQkoLTQzKQojZGVmaW5lIFNOTVBFUlJfVVNNX1VOU1VQUE9SVEVEU0VDVVJJVFlMRVZFTAkoLTQ0KQojZGVmaW5lIFNOTVBFUlJfVVNNX0VOQ1JZUFRJT05FUlJPUgkJKC00NSkKI2RlZmluZSBTTk1QRVJSX1VTTV9BVVRIRU5USUNBVElPTkZBSUxVUkUJKC00NikKI2RlZmluZSBTTk1QRVJSX1VTTV9QQVJTRUVSUk9SCQkJKC00NykKI2RlZmluZSBTTk1QRVJSX1VTTV9VTktOT1dORU5HSU5FSUQJCSgtNDgpCiNkZWZpbmUgU05NUEVSUl9VU01fTk9USU5USU1FV0lORE9XCQkoLTQ5KQojZGVmaW5lIFNOTVBFUlJfVVNNX0RFQ1JZUFRJT05FUlJPUgkJKC01MCkKI2RlZmluZSBTTk1QRVJSX05PTUlCCQkJKC01MSkKI2RlZmluZSBTTk1QRVJSX1JBTkdFCQkJKC01MikKI2RlZmluZSBTTk1QRVJSX01BWF9TVUJJRAkJKC01MykKI2RlZmluZSBTTk1QRVJSX0JBRF9TVUJJRAkJKC01NCkKI2RlZmluZSBTTk1QRVJSX0xPTkdfT0lECQkoLTU1KQojZGVmaW5lIFNOTVBFUlJfQkFEX05BTUUJCSgtNTYpCiNkZWZpbmUgU05NUEVSUl9WQUxVRQkJCSgtNTcpCiNkZWZpbmUgU05NUEVSUl9VTktOT1dOX09CSklECQkoLTU4KQojZGVmaW5lIFNOTVBFUlJfTlVMTF9QRFUJCSgtNTkpCiNkZWZpbmUgU05NUEVSUl9OT19WQVJTCQkJKC02MCkKI2RlZmluZSBTTk1QRVJSX1ZBUl9UWVBFCQkoLTYxKQojZGVmaW5lIFNOTVBFUlJfTUFMTE9DCQkJKC02MikKI2RlZmluZSBTTk1QRVJSX0tSQjUJCQkoLTYzKQojZGVmaW5lIFNOTVBFUlJfUFJPVE9DT0wJCSgtNjQpCiNkZWZpbmUgU05NUEVSUl9PSURfTk9OSU5DUkVBU0lORyAgICAgICAoLTY1KQojZGVmaW5lIFNOTVBFUlJfSlVTVF9BX0NPTlRFWFRfUFJPQkUgICAgKC02NikKI2RlZmluZSBTTk1QRVJSX1RSQU5TUE9SVF9OT19DT05GSUcgICAgICgtNjcpCiNkZWZpbmUgU05NUEVSUl9UUkFOU1BPUlRfQ09ORklHX0VSUk9SICAoLTY4KQojZGVmaW5lIFNOTVBFUlJfVExTX05PX0NFUlRJRklDQVRFICAgICAgKC02OSkKCiNkZWZpbmUgU05NUEVSUl9NQVgJCQkoLTY5KQoKCiAgICAvKgogICAgICogR2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gVXNlIHRoZXNlIGZ1bmN0aW9ucyB0bwogICAgICogYWxsb2NhdGUgbWVtb3J5IHRoYXQgbWF5IGJlIHJlYWxsb2NhdGVkIG9yIGZyZWVkIGJ5IHRoZSBOZXQtU05NUAogICAgICogbGlicmFyeSBvciB0byByZWFsbG9jYXRlIG9yIGZyZWUgbWVtb3J5IHRoYXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZQogICAgICogTmV0LVNOTVAgbGlicmFyeSwgYW5kIHdoZW4gd29ya2luZyBpbiBhIGNvbnRleHQgd2hlcmUgdGhlcmUgaXMgbW9yZSB0aGFuCiAgICAgKiBvbmUgaGVhcC4gRXhhbXBsZXMgYXJlOgogICAgICogLSBQZXJsIFhTVUIncy4KICAgICAqIC0gTVNWQyBvciBNaW5HVyB3aXRoIHRoZSBOZXQtU05NUCBsaWJyYXJ5IGNvbXBpbGVkIGFzIGEgRExMIGluc3RlYWQgb2YKICAgICAqICAgYSBzdGF0aWMgbGlicmFyeS4KICAgICAqLwogICAgTkVUU05NUF9JTVBPUlQgdm9pZCAqbmV0c25tcF9tYWxsb2Moc2l6ZV90IHNpemUpOwogICAgTkVUU05NUF9JTVBPUlQgdm9pZCAqbmV0c25tcF9jYWxsb2Moc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKTsKICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgKm5ldHNubXBfcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgbmV0c25tcF9mcmVlKHZvaWQgKnB0cik7CiAgICBORVRTTk1QX0lNUE9SVCBjaGFyICpuZXRzbm1wX3N0cmR1cChjb25zdCBjaGFyICpzMSk7CgogICAgLyoKICAgICAqIHZvaWQKICAgICAqIHNubXBfZnJlZV9wZHUocGR1KQogICAgICogICAgIG5ldHNubXBfcGR1ICpwZHU7CiAgICAgKgogICAgICogRnJlZXMgdGhlIHBkdSBhbmQgYW55IG1hbGxvYydkIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICovCgogICAgTkVUU05NUF9JTVBPUlQgdm9pZCBzbm1wX2ZyZWVfdmFyX2ludGVybmFscyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKik7ICAgICAvKiBmcmVlcyBjb250ZW50cyBvbmx5ICovCgoKICAgIC8qCiAgICAgKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBzdXBwbGllZCBieSB0aGUgYXBwbGljYXRpb246CiAgICAgKgogICAgICogdV9jaGFyICphdXRoZW50aWNhdG9yKHBkdSwgbGVuZ3RoLCBjb21tdW5pdHksIGNvbW11bml0eV9sZW4pCiAgICAgKiB1X2NoYXIgKnBkdTsgICAgICAgICBUaGUgcmVzdCBvZiB0aGUgUERVIHRvIGJlIGF1dGhlbnRpY2F0ZWQKICAgICAqIGludCAqbGVuZ3RoOyAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIFBEVSAodXBkYXRlZCBieSB0aGUgYXV0aGVudGljYXRvcikKICAgICAqIHVfY2hhciAqY29tbXVuaXR5OyAgIFRoZSBjb21tdW5pdHkgbmFtZSB0byBhdXRoZW50aWNhdGUgdW5kZXIuCiAgICAgKiBpbnQgIGNvbW11bml0eV9sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBjb21tdW5pdHkgbmFtZS4KICAgICAqCiAgICAgKiBSZXR1cm5zIHRoZSBhdXRoZW50aWNhdGVkIHBkdSwgb3IgTlVMTCBpZiBhdXRoZW50aWNhdGlvbiBmYWlsZWQuCiAgICAgKiBJZiBudWxsIGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQsIHRoZSBhdXRoZW50aWNhdG9yIGluIHNubXBfc2Vzc2lvbiBjYW4gYmUKICAgICAqIHNldCB0byBOVUxMKDApLgogICAgICovCgoKCiAgICAvKgogICAgICogVGhpcyByb3V0aW5lIG11c3QgYmUgc3VwcGxpZWQgYnkgdGhlIGFwcGxpY2F0aW9uOgogICAgICoKICAgICAqIGludCBjYWxsYmFjayhvcGVyYXRpb24sIHNlc3Npb24sIHJlcWlkLCBwZHUsIG1hZ2ljKQogICAgICogaW50IG9wZXJhdGlvbjsKICAgICAqIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsgICAgVGhlIHNlc3Npb24gYXV0aGVudGljYXRlZCB1bmRlci4KICAgICAqIGludCByZXFpZDsgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXF1ZXN0IGlkIG9mIHRoaXMgcGR1ICgwIGZvciBUUkFQKQogICAgICogbmV0c25tcF9wZHUgKnBkdTsgICAgICAgIFRoZSBwZHUgaW5mb3JtYXRpb24uCiAgICAgKiB2b2lkICptYWdpYyAgICAgICAgICAgICAgICAgICAgICBBIGxpbmsgdG8gdGhlIGRhdGEgZm9yIHRoaXMgcm91dGluZS4KICAgICAqCiAgICAgKiBSZXR1cm5zIDEgaWYgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bCwgMCBpZiBpdCBzaG91bGQgYmUga2VwdCBwZW5kaW5nLgogICAgICogQW55IGRhdGEgaW4gdGhlIHBkdSBtdXN0IGJlIGNvcGllZCBiZWNhdXNlIGl0IHdpbGwgYmUgZnJlZWQgZWxzZXdoZXJlLgogICAgICogT3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBiZWxvdzoKICAgICAqLwoKI2RlZmluZSBORVRTTk1QX0NBTExCQUNLX09QX1JFQ0VJVkVEX01FU1NBR0UJMQojZGVmaW5lIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfVElNRURfT1VUCQkyCiNkZWZpbmUgTkVUU05NUF9DQUxMQkFDS19PUF9TRU5EX0ZBSUxFRAkJMwojZGVmaW5lIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfQ09OTkVDVAkJNAojZGVmaW5lIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfRElTQ09OTkVDVAkJNQoKICAgIGxvbmcgICAgICAgICAgICBzbm1wX2dldF9uZXh0X21zZ2lkKHZvaWQpOwogICAgbG9uZyAgICAgICAgICAgIHNubXBfZ2V0X25leHRfcmVxaWQodm9pZCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgbG9uZyAgICAgICAgICAgIHNubXBfZ2V0X25leHRfc2Vzc2lkKHZvaWQpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGxvbmcgICAgICAgICAgICBzbm1wX2dldF9uZXh0X3RyYW5zaWQodm9pZCk7CgogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBzbm1wX29pZF9jb21wYXJlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgIGludCAgICAgICAgICAgICBzbm1wX29pZF9uY29tcGFyZShjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsIHNpemVfdCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIHNubXBfb2lkdHJlZV9jb21wYXJlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIHNubXBfb2lkc3VidHJlZV9jb21wYXJlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2NvbXBhcmVfbGwoY29uc3Qgb2lkICogaW5fbmFtZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICogaW5fbmFtZTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuMiwgc2l6ZV90ICpvZmZwdCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2VxdWFscyhjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29pZF90cmVlX2VxdWFscyhjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29pZF9pc19zdWJ0cmVlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfZmluZF9wcmVmaXgoY29uc3Qgb2lkICogaW5fbmFtZTEsIHNpemVfdCBsZW4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIGluX25hbWUyLCBzaXplX3QgbGVuMik7CiAgICBORVRTTk1QX0lNUE9SVAogICAgdm9pZCAgICAgICAgICAgIGluaXRfc25tcChjb25zdCBjaGFyICopOwogICAgdV9jaGFyICAgICAgICAgKnNubXBfcGR1X2J1aWxkKG5ldHNubXBfcGR1ICosIHVfY2hhciAqLCBzaXplX3QgKik7CiNpZmRlZiBORVRTTk1QX1VTRV9SRVZFUlNFX0FTTkVOQ09ESU5HCiAgICB1X2NoYXIgICAgICAgICAqc25tcF9wZHVfcmJ1aWxkKG5ldHNubXBfcGR1ICosIHVfY2hhciAqLCBzaXplX3QgKik7CiNlbmRpZgogICAgaW50ICAgICAgICAgICAgIHNubXB2M19wYXJzZShuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKiwgbmV0c25tcF9zZXNzaW9uICopOwogICAgaW50ICAgICAgICAgICAgIHNubXB2M19wYWNrZXRfYnVpbGQobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBwYWNrZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogcGR1X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGR1X2RhdGFfbGVuKTsKICAgIGludCAgICAgICAgICAgICBzbm1wdjNfcGFja2V0X3JidWlsZChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBwYWNrZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBwZHVfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGR1X2RhdGFfbGVuKTsKICAgIGludCAgICAgICAgICAgICBzbm1wdjNfbWFrZV9yZXBvcnQobmV0c25tcF9wZHUgKnBkdSwgaW50IGVycm9yKTsKICAgIGludCAgICAgICAgICAgICBzbm1wdjNfZ2V0X3JlcG9ydF90eXBlKG5ldHNubXBfcGR1ICpwZHUpOwogICAgaW50ICAgICAgICAgICAgIHNubXBfcGR1X3BhcnNlKG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoKTsKICAgIHVfY2hhciAgICAgICAgICpzbm1wdjNfc2NvcGVkUERVX3BhcnNlKG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIGNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB2b2lkICAgICAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoY29uc3QgY2hhciAqdHlwZSk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgdm9pZCAgICAgICAgICAgIHNubXBfc3RvcmVfaWZfbmVlZGVkKHZvaWQpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIHZvaWQgICAgICAgICAgICBzbm1wX3N0b3JlKGNvbnN0IGNoYXIgKnR5cGUpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NodXRkb3duKGNvbnN0IGNoYXIgKnR5cGUpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBzbm1wX2FkZF92YXIobmV0c25tcF9wZHUgKiwgY29uc3Qgb2lkICosIHNpemVfdCwgY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBvaWQgICAgICAgICAgICAqc25tcF9kdXBsaWNhdGVfb2JqaWQoY29uc3Qgb2lkICogb2JqVG9Db3B5LCBzaXplX3QpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIHVfaW50ICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoaW50IHdoaWNoKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB1X2ludCAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5KGludCB3aGljaCwgaW50IGNvdW50KTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB1X2ludCAgICAgICAgICAgc25tcF9nZXRfc3RhdGlzdGljKGludCB3aGljaCk7CiAgICB2b2lkICAgICAgICAgICAgc25tcF9pbml0X3N0YXRpc3RpY3Modm9pZCk7CiAgICBpbnQgICAgICAgICAgICAgY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24pOwogICAgaW50IHNubXBfZ2V0X2ZkX2Zvcl9zZXNzaW9uKHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3NwKTsKICAgIGludCBzbm1wdjNfcHJvYmVfY29udGV4dEVuZ2luZUlEX3JmYzUzNDModm9pZCAqc2xwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pOwoKICAgIC8qCiAgICAgKiBOZXcgcmUtYWxsb2NhdGluZyByZXZlcnNlIGVuY29kaW5nIGZ1bmN0aW9ucy4gIAogICAgICovCiNpZmRlZiBORVRTTk1QX1VTRV9SRVZFUlNFX0FTTkVOQ09ESU5HCgogICAgaW50ICAgICAgICBzbm1wdjNfcGFja2V0X3JlYWxsb2NfcmJ1aWxkKHVfY2hhciAqKiBwa3QsIHNpemVfdCAqIHBrdF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSwgdV9jaGFyICogcGR1X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGR1X2RhdGFfbGVuKTsKCiAgICBpbnQgICAgICAgIHNubXBfcGR1X3JlYWxsb2NfcmJ1aWxkKHVfY2hhciAqKiBwa3QsIHNpemVfdCAqIHBrdF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb2Zmc2V0LCBuZXRzbm1wX3BkdSAqcGR1KTsKI2VuZGlmCgoKCnN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zOwoKICAgIC8qCiAgICAgKiBFeHRlbmRlZCBvcGVuOyBmcHJlX3BhcnNlIGhhcyBjaGFuZ2VkLiAgCiAgICAgKi8KCiAgICBORVRTTk1QX0lNUE9SVAogICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX29wZW5fZXgobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcHJlX3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfcyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBvc3RfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZidWlsZCkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcmJ1aWxkKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgdV9jaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqLCBzaXplX3QgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmY2hlY2spICh1X2NoYXIgKiwgc2l6ZV90KSk7CgogICAgLyoKICAgICAqIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4gIERvbid0IHVzZSB0aGVzZSBmdW5jdGlvbnMuCiAgICAgKiBTZWUgc25tcF9kZWJ1Zy5oIGFuZCBzbm1wX2RlYnVnLmMgaW5zdGVhZC4KICAgICAqLwoKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKGludCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIHNubXBfZ2V0X2RvX2RlYnVnZ2luZyh2b2lkKTsKCgogICAgTkVUU05NUF9JTVBPUlQKICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3Nlc3NfbG9nX2Vycm9yKGludCBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2dfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc3MpOwogICAgY29uc3QgY2hhciAqICAgIHNubXBfcGR1X3R5cGUoaW50IHR5cGUpOwoKICAgIC8qCiAgICAgKiBSZXR1cm4gdGhlIG5ldHNubXBfdHJhbnNwb3J0IHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG9wYXF1ZQogICAgICogcG9pbnRlci4gIAogICAgICovCgogICAgTkVUU05NUF9JTVBPUlQKICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICpzbm1wX3Nlc3NfdHJhbnNwb3J0KHZvaWQgKik7CiAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX3RyYW5zcG9ydF9zZXQodm9pZCAqLAoJCQkJCSAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqKTsKCiAgICBORVRTTk1QX0lNUE9SVCBpbnQKICAgIG5ldHNubXBfc2Vzc19jb25maWdfdHJhbnNwb3J0KHN0cnVjdCBuZXRzbm1wX2NvbnRhaW5lcl9zICp0cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICp0cmFuc3BvcnQpOwoKICAgIE5FVFNOTVBfSU1QT1JUIGludAogICAgbmV0c25tcF9zZXNzX2NvbmZpZ19hbmRfb3Blbl90cmFuc3BvcnQobmV0c25tcF9zZXNzaW9uICppbl9zZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnRyYW5zcG9ydCk7CgogICAgLyoKICAgICAqIEVYVEVOREVEIFNFU1NJT04gQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAgICAqIAogICAgICogc25tcF9zZXNzX2FkZF9leCwgc25tcF9zZXNzX2FkZCwgc25tcF9hZGQgCiAgICAgKiAKICAgICAqIEFuYWxvZ291cyB0byBzbm1wX29wZW4gZmFtaWx5IG9mIGZ1bmN0aW9ucywgYnV0IHRha2luZyBhbgogICAgICogbmV0c25tcF90cmFuc3BvcnQgcG9pbnRlciBhcyBhbiBleHRyYSBhcmd1bWVudC4gIFVubGlrZSBzbm1wX29wZW4gZXQKICAgICAqIGFsLiBpdCBkb2Vzbid0IGF0dGVtcHQgdG8gaW50ZXJwcmV0IHRoZSBpbl9zZXNzaW9uLT5wZWVybmFtZSBhcyBhCiAgICAgKiB0cmFuc3BvcnQgZW5kcG9pbnQgc3BlY2lmaWVyLCBidXQgaW5zdGVhZCB1c2VzIHRoZSBzdXBwbGllZCB0cmFuc3BvcnQuCiAgICAgKiBKQlBOCiAgICAgKiAKICAgICAqLwoKICAgIHZvaWQgICAgICAgICAgICpzbm1wX3Nlc3NfYWRkX2V4KG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgdm9pZCAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9wZHUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqLCBzaXplX3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBvc3RfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfcGR1ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmYnVpbGQpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3BkdSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICosIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZyYnVpbGQpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9wZHUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiosIHNpemVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZjaGVjaykgKHVfY2hhciAqLCBzaXplX3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKigqZmNyZWF0ZV9wZHUpIChzdHJ1Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCkpOwoKICAgIHZvaWQgICAgICAgICAgICpzbm1wX3Nlc3NfYWRkKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9zICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBvc3RfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgaW50KSk7CgogICAgTkVUU05NUF9JTVBPUlQKICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9hZGQobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCB2b2lkICosIGludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwb3N0X3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgaW50KSk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX2FkZF9mdWxsKG5ldHNubXBfc2Vzc2lvbiAqIGluX3Nlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnRyYW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcHJlX3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIHZvaWQgKiwgaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwb3N0X3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZidWlsZCkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcmJ1aWxkKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKiwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmY2hlY2spICh1X2NoYXIgKiwgc2l6ZV90KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqKCpmY3JlYXRlX3BkdSkgKHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KQogICAgICAgICk7CiAgICAvKgogICAgICogZW5kIHNpbmdsZSBzZXNzaW9uIEFQSSAKICAgICAqLwoKICAgIC8qCiAgICAgKiBnZW5lcmljIHN0YXRpc3RpYyBjb3VudGVycyAKICAgICAqLwoKICAgIC8qCiAgICAgKiBzbm1wdjMgc3RhdGlzdGljcyAKICAgICAqLwoKICAgIC8qCiAgICAgKiBtcGQgc3RhdHMgCiAgICAgKi8KI2RlZmluZSAgIFNUQVRfU05NUFVOS05PV05TRUNVUklUWU1PREVMUyAgICAgMAojZGVmaW5lICAgU1RBVF9TTk1QSU5WQUxJRE1TR1MgICAgICAgICAgICAgICAxCiNkZWZpbmUgICBTVEFUX1NOTVBVTktOT1dOUERVSEFORExFUlMgICAgICAgIDIKI2RlZmluZSAgIFNUQVRfTVBEX1NUQVRTX1NUQVJUICAgICAgICAgICAgICAgU1RBVF9TTk1QVU5LTk9XTlNFQ1VSSVRZTU9ERUxTCiNkZWZpbmUgICBTVEFUX01QRF9TVEFUU19FTkQgICAgICAgICAgICAgICAgIFNUQVRfU05NUFVOS05PV05QRFVIQU5ETEVSUwoKICAgIC8qCiAgICAgKiB1c20gc3RhdHMgCiAgICAgKi8KI2RlZmluZSAgIFNUQVRfVVNNU1RBVFNVTlNVUFBPUlRFRFNFQ0xFVkVMUyAgMwojZGVmaW5lICAgU1RBVF9VU01TVEFUU05PVElOVElNRVdJTkRPV1MgICAgICA0CiNkZWZpbmUgICBTVEFUX1VTTVNUQVRTVU5LTk9XTlVTRVJOQU1FUyAgICAgIDUKI2RlZmluZSAgIFNUQVRfVVNNU1RBVFNVTktOT1dORU5HSU5FSURTICAgICAgNgojZGVmaW5lICAgU1RBVF9VU01TVEFUU1dST05HRElHRVNUUyAgICAgICAgICA3CiNkZWZpbmUgICBTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUyAgICAgIDgKI2RlZmluZSAgIFNUQVRfVVNNX1NUQVRTX1NUQVJUICAgICAgICAgICAgICAgU1RBVF9VU01TVEFUU1VOU1VQUE9SVEVEU0VDTEVWRUxTCiNkZWZpbmUgICBTVEFUX1VTTV9TVEFUU19FTkQgICAgICAgICAgICAgICAgIFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTCgogICAgLyoKICAgICAqIHNubXAgY291bnRlcnMgCiAgICAgKi8KI2RlZmluZSAgU1RBVF9TTk1QSU5QS1RTICAgICAgICAgICAgICAgICAgICAgOQojZGVmaW5lICBTVEFUX1NOTVBPVVRQS1RTICAgICAgICAgICAgICAgICAgICAxMAojZGVmaW5lICBTVEFUX1NOTVBJTkJBRFZFUlNJT05TICAgICAgICAgICAgICAxMQojZGVmaW5lICBTVEFUX1NOTVBJTkJBRENPTU1VTklUWU5BTUVTICAgICAgICAxMgojZGVmaW5lICBTVEFUX1NOTVBJTkJBRENPTU1VTklUWVVTRVMgICAgICAgICAxMwojZGVmaW5lICBTVEFUX1NOTVBJTkFTTlBBUlNFRVJSUyAgICAgICAgICAgICAxNAogICAgLyoKICAgICAqICNkZWZpbmUgIFNUQVRfU05NUElOQkFEVFlQRVMgICAgICAgICAgICAgIDE1IAogICAgICovCiNkZWZpbmUgIFNUQVRfU05NUElOVE9PQklHUyAgICAgICAgICAgICAgICAgIDE2CiNkZWZpbmUgIFNUQVRfU05NUElOTk9TVUNITkFNRVMgICAgICAgICAgICAgIDE3CiNkZWZpbmUgIFNUQVRfU05NUElOQkFEVkFMVUVTICAgICAgICAgICAgICAgIDE4CiNkZWZpbmUgIFNUQVRfU05NUElOUkVBRE9OTFlTICAgICAgICAgICAgICAgIDE5CiNkZWZpbmUgIFNUQVRfU05NUElOR0VORVJSUyAgICAgICAgICAgICAgICAgIDIwCiNkZWZpbmUgIFNUQVRfU05NUElOVE9UQUxSRVFWQVJTICAgICAgICAgICAgIDIxCiNkZWZpbmUgIFNUQVRfU05NUElOVE9UQUxTRVRWQVJTICAgICAgICAgICAgIDIyCiNkZWZpbmUgIFNUQVRfU05NUElOR0VUUkVRVUVTVFMgICAgICAgICAgICAgIDIzCiNkZWZpbmUgIFNUQVRfU05NUElOR0VUTkVYVFMgICAgICAgICAgICAgICAgIDI0CiNkZWZpbmUgIFNUQVRfU05NUElOU0VUUkVRVUVTVFMgICAgICAgICAgICAgIDI1CiNkZWZpbmUgIFNUQVRfU05NUElOR0VUUkVTUE9OU0VTICAgICAgICAgICAgIDI2CiNkZWZpbmUgIFNUQVRfU05NUElOVFJBUFMgICAgICAgICAgICAgICAgICAgIDI3CiNkZWZpbmUgIFNUQVRfU05NUE9VVFRPT0JJR1MgICAgICAgICAgICAgICAgIDI4CiNkZWZpbmUgIFNUQVRfU05NUE9VVE5PU1VDSE5BTUVTICAgICAgICAgICAgIDI5CiNkZWZpbmUgIFNUQVRfU05NUE9VVEJBRFZBTFVFUyAgICAgICAgICAgICAgIDMwCiAgICAvKgogICAgICogI2RlZmluZSAgU1RBVF9TTk1QT1VUUkVBRE9OTFlTICAgICAgICAgICAgMzEgCiAgICAgKi8KI2RlZmluZSAgU1RBVF9TTk1QT1VUR0VORVJSUyAgICAgICAgICAgICAgICAgMzIKI2RlZmluZSAgU1RBVF9TTk1QT1VUR0VUUkVRVUVTVFMgICAgICAgICAgICAgMzMKI2RlZmluZSAgU1RBVF9TTk1QT1VUR0VUTkVYVFMgICAgICAgICAgICAgICAgMzQKI2RlZmluZSAgU1RBVF9TTk1QT1VUU0VUUkVRVUVTVFMgICAgICAgICAgICAgMzUKI2RlZmluZSAgU1RBVF9TTk1QT1VUR0VUUkVTUE9OU0VTICAgICAgICAgICAgMzYKI2RlZmluZSAgU1RBVF9TTk1QT1VUVFJBUFMgICAgICAgICAgICAgICAgICAgMzcKICAgIC8qCiAgICAgKiBBVVRIVFJBUEVOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOCAKICAgICAqLwojZGVmaW5lICBTVEFUX1NOTVBTSUxFTlREUk9QUwkJICAgICAzOQojZGVmaW5lICBTVEFUX1NOTVBQUk9YWURST1BTCQkgICAgIDQwCiNkZWZpbmUgIFNUQVRfU05NUF9TVEFUU19TVEFSVCAgICAgICAgICAgICAgIFNUQVRfU05NUElOUEtUUwojZGVmaW5lICBTVEFUX1NOTVBfU1RBVFNfRU5EICAgICAgICAgICAgICAgICBTVEFUX1NOTVBQUk9YWURST1BTCgogICAgLyoKICAgICAqIHRhcmdldCBtaWIgY291bnRlcnMgCiAgICAgKi8KI2RlZmluZSAgU1RBVF9TTk1QVU5BVkFJTEFCTEVDT05URVhUUwkgICAgIDQxCiNkZWZpbmUgIFNUQVRfU05NUFVOS05PV05DT05URVhUUwkgICAgIDQyCiNkZWZpbmUgIFNUQVRfVEFSR0VUX1NUQVRTX1NUQVJUICAgICAgICAgICAgIFNUQVRfU05NUFVOQVZBSUxBQkxFQ09OVEVYVFMKI2RlZmluZSAgU1RBVF9UQVJHRVRfU1RBVFNfRU5EICAgICAgICAgICAgICAgU1RBVF9TTk1QVU5LTk9XTkNPTlRFWFRTCgogICAgLyoKICAgICAqIFRTTSBjb3VudGVycwogICAgICovCiNkZWZpbmUgIFNUQVRfVFNNX1NOTVBUU01JTlZBTElEQ0FDSEVTICAgICAgICAgICAgIDQzCiNkZWZpbmUgIFNUQVRfVFNNX1NOTVBUU01JTkFERVFVQVRFU0VDVVJJVFlMRVZFTFMgIDQ0CiNkZWZpbmUgIFNUQVRfVFNNX1NOTVBUU01VTktOT1dOUFJFRklYRVMgICAgICAgICAgIDQ1CiNkZWZpbmUgIFNUQVRfVFNNX1NOTVBUU01JTlZBTElEUFJFRklYRVMgICAgICAgICAgIDQ2CiNkZWZpbmUgIFNUQVRfVFNNX1NUQVRTX1NUQVJUICAgICAgICAgICAgICAgICBTVEFUX1RTTV9TTk1QVFNNSU5WQUxJRENBQ0hFUwojZGVmaW5lICBTVEFUX1RTTV9TVEFUU19FTkQgICAgICAgICAgICAgICAgICAgU1RBVF9UU01fU05NUFRTTUlOVkFMSURQUkVGSVhFUwoKICAgIC8qCiAgICAgKiBUTFNUTSBjb3VudGVycwogICAgICovCiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5TICAgICAgICAgICAgICAgICAgICAgIDQ3CiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTkNMSUVOVENMT1NFUyAgICAgICAgICAgICAgIDQ4CiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5FUlJPUlMgICAgICAgICAgICAgICAgIDQ5CiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTkFDQ0VQVFMgICAgICAgICAgICAgICAgICAgIDUwCiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTlNFUlZFUkNMT1NFUyAgICAgICAgICAgICAgIDUxCiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk5PU0VTU0lPTlMgICAgICAgICAgICAgICAgIDUyCiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDTElFTlRDRVJUSUZJQ0FURVMgIDUzCiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTlVOS05PV05TRVJWRVJDRVJUSUZJQ0FURSAgIDU0CiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURTRVJWRVJDRVJUSUZJQ0FURVMgIDU1CiNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDQUNIRVMgICAgICAgICAgICAgIDU2CgojZGVmaW5lICBTVEFUX1RMU1RNX1NUQVRTX1NUQVJUICAgICAgICAgICAgICAgICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVOUwojZGVmaW5lICBTVEFUX1RMU1RNX1NUQVRTX0VORCAgICAgICAgICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEQ0FDSEVTCgogICAgLyogdGhpcyBwcmV2aW91c2x5IHdhcyBlbmQrMTsgZG9uJ3Qga25vdyB3aHkgdGhlICsxIGlzIG5lZWRlZDsKICAgICAgIFhYWDogY2hlY2sgdGhlIGNvZGUgKi8KI2RlZmluZSAgTkVUU05NUF9TVEFUX01BWF9TVEFUUyAgICAgICAgICAgICAgKFNUQVRfVExTVE1fU1RBVFNfRU5EKzEpCi8qKiBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSAqLwojZGVmaW5lIE1BWF9TVEFUUyBORVRTTk1QX1NUQVRfTUFYX1NUQVRTCgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYKI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QX0FQSV9IICovCg==