LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTkyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDIJR2FyeSBKZW5uZWpvaG4gPGdhcnlqQGRlbnguZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBKdW1wIHZlY3RvciB0YWJsZSBhcyBpbiB0YWJsZSAzLjEgaW4gWzFdCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKCi5nbG9ibCBfc3RhcnQKX3N0YXJ0OgliICAgICAgIHJlc2V0CglsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAoJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKCWxkcglwYywgX2RhdGFfYWJvcnQKCWxkcglwYywgX25vdF91c2VkCglsZHIJcGMsIF9pcnEKCWxkcglwYywgX2ZpcQoKX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoJLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCl9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdApfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Cl9kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydApfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZApfaXJxOgkJCS53b3JkIGlycQpfZmlxOgkJCS53b3JkIGZpcQoKCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKICoKICogZG8gaW1wb3J0YW50IGluaXQgb25seSBpZiB3ZSBkb24ndCBzdGFydCBmcm9tIG1lbW9yeSEKICogcmVsb2NhdGUgYXJtYm9vdCB0byByYW0KICogc2V0dXAgc3RhY2sKICoganVtcCB0byBzZWNvbmQgc3RhZ2UKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgpfVEVYVF9CQVNFOgoJLndvcmQJVEVYVF9CQVNFCgouZ2xvYmwgX2FybWJvb3Rfc3RhcnQKX2FybWJvb3Rfc3RhcnQ6Cgkud29yZCBfc3RhcnQKCi8qCiAqIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBib2FyZC1zcGVjaWZpYyBsaW5rZXIgc2NyaXB0LgogKi8KLmdsb2JsIF9ic3Nfc3RhcnQKX2Jzc19zdGFydDoKCS53b3JkIF9fYnNzX3N0YXJ0CgouZ2xvYmwgX2Jzc19lbmQKX2Jzc19lbmQ6Cgkud29yZCBfZW5kCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIElSUV9TVEFDS19TVEFSVApJUlFfU1RBQ0tfU1RBUlQ6Cgkud29yZAkweDBiYWRjMGRlCgovKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLwouZ2xvYmwgRklRX1NUQUNLX1NUQVJUCkZJUV9TVEFDS19TVEFSVDoKCS53b3JkIDB4MGJhZGMwZGUKI2VuZGlmCgoKLyoKICogdGhlIGFjdHVhbCByZXNldCBjb2RlCiAqLwoKcmVzZXQ6CgkvKgoJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQoJICovCgltcnMJcjAsY3BzcgoJYmljCXIwLHIwLCMweDFmCglvcnIJcjAscjAsIzB4ZDMKCW1zcgljcHNyLHIwCgojZGVmaW5lIHBXRFRDVEwJCTB4ODAwMDE0MDAgIC8qIFdhdGNoZG9nIFRpbWVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KI2RlZmluZSBwSU5URU5DCQkweDgwMDAwNTBDICAvKiBJbnRlcnVwdC1Db250cm9sbGVyIGVuYWJsZSBjbGVhciByZWdpc3RlciAqLwojZGVmaW5lIHBDTEtTRVQJCTB4ODAwMDA0MjAgIC8qIGNsb2NrIGRpdmlzb3IgcmVnaXN0ZXIgKi8KCgkvKiBkaXNhYmxlIHdhdGNoZG9nLCBzZXQgd2F0Y2hkb2cgY29udHJvbCByZWdpc3RlciB0bwoJICogYWxsIHplcm9zIChkZWZhdWx0IHJlc2V0KQoJICovCglsZHIgICAgIHIwLCA9cFdEVENUTAoJbW92ICAgICByMSwgIzB4MAoJc3RyICAgICByMSwgW3IwXQoKCS8qCgkgKiBtYXNrIGFsbCBJUlFzIGJ5IHNldHRpbmcgYWxsIGJpdHMgaW4gdGhlIElOVEVOQyByZWdpc3RlciAoZGVmYXVsdCkKCSAqLwoJbW92CXIxLCAjMHhmZmZmZmZmZgoJbGRyCXIwLCA9cElOVEVOQwoJc3RyCXIxLCBbcjBdCgoJLyogRkNMSzpIQ0xLOlBDTEsgPSAxOjI6MiAqLwoJLyogZGVmYXVsdCBGQ0xLIGlzIDIwMCBNSHosIHVzaW5nIDE0Ljc0NTYgTUh6IGZpbiAqLwoJbGRyCXIwLCA9cENMS1NFVAoJbGRyIHIxLCA9MHgwMDA0ZWUzOQpACWxkciByMSwgPTB4MDAwNWVlMzkJQCAxOiAyOiA0CglzdHIJcjEsIFtyMF0KCgkvKgoJICogd2UgZG8gc3lzLWNyaXRpY2FsIGluaXRzIG9ubHkgYXQgcmVib290LAoJICogbm90IHdoZW4gYm9vdGluZyBmcm9tIHJhbSEKCSAqLwojaWZuZGVmIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKCWJsCWNwdV9pbml0X2NyaXQKI2VuZGlmCgojaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCnJlbG9jYXRlOgkJCQkvKiByZWxvY2F0ZSBVLUJvb3QgdG8gUkFNCSAgICAqLwoJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCglsZHIJcjEsIF9URVhUX0JBU0UJCS8qIHRlc3QgaWYgd2UgcnVuIGZyb20gZmxhc2ggb3IgUkFNICovCgljbXAgICAgIHIwLCByMSAgICAgICAgICAgICAgICAgIC8qIGRvbid0IHJlbG9jIGR1cmluZyBkZWJ1ZyAgICAgICAgICovCgliZXEgICAgIHN0YWNrX3NldHVwCgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJbGRyCXIzLCBfYnNzX3N0YXJ0CglzdWIJcjIsIHIzLCByMgkJLyogcjIgPC0gc2l6ZSBvZiBhcm1ib290ICAgICAgICAgICAgKi8KCWFkZAlyMiwgcjAsIHIyCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MgICAgICAgICAqLwoKY29weV9sb29wOgoJbGRtaWEJcjAhLCB7cjMtcjEwfQkJLyogY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0gICAgKi8KCXN0bWlhCXIxISwge3IzLXIxMH0JCS8qIGNvcHkgdG8gICB0YXJnZXQgYWRkcmVzcyBbcjFdICAgICovCgljbXAJcjAsIHIyCQkJLyogdW50aWwgc291cmNlIGVuZCBhZGRyZWVlIFtyMl0gICAgKi8KCWJsdAljb3B5X2xvb3AJCS8qIGEgJ2JsZScgaGVyZSBhY3R1YWxseSBjb3BpZXMgICAgICovCgkJCQkJLyogICBmb3VyIGJ5dGVzIG9mIGJzcyAgICAgICAgICAgICAgKi8KI2VuZGlmCS8qIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UICovCgoJLyogU2V0IHVwIHRoZSBzdGFjawkJCQkJCSAgICAqLwpzdGFja19zZXR1cDoKCWxkcglyMCwgX1RFWFRfQkFTRQkJLyogdXBwZXIgMTI4IEtpQjogcmVsb2NhdGVkIHVib290ICAgKi8KCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX01BTExPQ19MRU4JLyogbWFsbG9jIGFyZWEgICAgICAgICAgICAgICAgICAgICAgKi8KCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUgLyogYmRpbmZvICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2lmZGVmIENPTkZJR19VU0VfSVJRCglzdWIJcjAsIHIwLCAjKENPTkZJR19TVEFDS1NJWkVfSVJRK0NPTkZJR19TVEFDS1NJWkVfRklRKQojZW5kaWYKCXN1YglzcCwgcjAsICMxMgkJLyogbGVhdmUgMyB3b3JkcyBmb3IgYWJvcnQtc3RhY2sgICAgKi8KCmNsZWFyX2JzczoKCWxkcglyMCwgX2Jzc19zdGFydAkJLyogZmluZCBzdGFydCBvZiBic3Mgc2VnbWVudCAgICAgICAgKi8KCUBhZGQJcjAsIHIwLCAjNAkJLyogc3RhcnQgYXQgZmlyc3QgYnl0ZSBvZiBic3MgICAgICAgKi8KCQkJCQkvKiAgIHdoeSBpbmMuIDQgYnl0ZXMgcGFzdCB0aGVuPyAgICAqLwoJbGRyCXIxLCBfYnNzX2VuZAkJLyogc3RvcCBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgKi8KCW1vdglyMiwgIzB4MDAwMDAwMDAJCS8qIGNsZWFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgpjbGJzc19sOnN0cglyMiwgW3IwXQkJLyogY2xlYXIgbG9vcC4uLiAgICAgICAgICAgICAgICAgICAgKi8KCWFkZAlyMCwgcjAsICM0CgljbXAJcjAsIHIxCglibGUJY2xic3NfbAoKCWxkcglwYywgX3N0YXJ0X2FybWJvb3QKCl9zdGFydF9hcm1ib290Ogkud29yZCBzdGFydF9hcm1ib290CgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogQ1BVX2luaXRfY3JpdGljYWwgcmVnaXN0ZXJzCiAqCiAqIHNldHVwIGltcG9ydGFudCByZWdpc3RlcnMKICogc2V0dXAgbWVtb3J5IHRpbWluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCgpjcHVfaW5pdF9jcml0OgoJLyoKCSAqIGZsdXNoIHY0IEkvRCBjYWNoZXMKCSAqLwoJbW92CXIwLCAjMAoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkvKiBmbHVzaCB2My92NCBjYWNoZSAqLwoJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkvKiBmbHVzaCB2NCBUTEIgKi8KCgkvKgoJICogZGlzYWJsZSBNTVUgc3R1ZmYgYW5kIGNhY2hlcwoJICovCgltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCgliaWMJcjAsIHIwLCAjMHgwMDAwMjMwMAlAIGNsZWFyIGJpdHMgMTMsIDk6OCAoLS1WLSAtLVJTKQoJYmljCXIwLCByMCwgIzB4MDAwMDAwODcJQCBjbGVhciBiaXRzIDcsIDI6MCAoQi0tLSAtQ0FNKQoJb3JyCXIwLCByMCwgIzB4MDAwMDAwMDIJQCBzZXQgYml0IDIgKEEpIEFsaWduCglvcnIJcjAsIHIwLCAjMHgwMDAwMTAwMAlAIHNldCBiaXQgMTIgKEkpIEktQ2FjaGUKCW9ycglyMCwgcjAsICMweDQwMDAwMDAwCUAgc2V0IGJpdCAzMCAobkYpIG5vdEZhc3RCdXMKCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKCgoJLyoKCSAqIGJlZm9yZSByZWxvY2F0aW5nLCB3ZSBoYXZlIHRvIHNldHVwIFJBTSB0aW1pbmcKCSAqIGJlY2F1c2UgbWVtb3J5IHRpbWluZyBpcyBib2FyZC1kZXBlbmRlbmQsIHlvdSB3aWxsCgkgKiBmaW5kIGEgbG93bGV2ZWxfaW5pdC5TIGluIHlvdXIgYm9hcmQgZGlyZWN0b3J5LgoJICovCgltb3YJaXAsIGxyCglibAlsb3dsZXZlbF9pbml0Cgltb3YJbHIsIGlwCgoJbW92CXBjLCBscgoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEludGVycnVwdCBoYW5kbGluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCkAKQCBJUlEgc3RhY2sgZnJhbWUuCkAKI2RlZmluZSBTX0ZSQU1FX1NJWkUJNzIKCiNkZWZpbmUgU19PTERfUjAJNjgKI2RlZmluZSBTX1BTUgkJNjQKI2RlZmluZSBTX1BDCQk2MAojZGVmaW5lIFNfTFIJCTU2CiNkZWZpbmUgU19TUAkJNTIKCiNkZWZpbmUgU19JUAkJNDgKI2RlZmluZSBTX0ZQCQk0NAojZGVmaW5lIFNfUjEwCQk0MAojZGVmaW5lIFNfUjkJCTM2CiNkZWZpbmUgU19SOAkJMzIKI2RlZmluZSBTX1I3CQkyOAojZGVmaW5lIFNfUjYJCTI0CiNkZWZpbmUgU19SNQkJMjAKI2RlZmluZSBTX1I0CQkxNgojZGVmaW5lIFNfUjMJCTEyCiNkZWZpbmUgU19SMgkJOAojZGVmaW5lIFNfUjEJCTQKI2RlZmluZSBTX1IwCQkwCgojZGVmaW5lIE1PREVfU1ZDIDB4MTMKI2RlZmluZSBJX0JJVAkgMHg4MAoKLyoKICogdXNlIGJhZF9zYXZlX3VzZXJfcmVncyBmb3IgYWJvcnQvcHJlZmV0Y2gvdW5kZWYvc3dpIC4uLgogKiB1c2UgaXJxX3NhdmVfdXNlcl9yZWdzIC8gaXJxX3Jlc3RvcmVfdXNlcl9yZWdzIGZvciBJUlEvRklRIGhhbmRsaW5nCiAqLwoKCS5tYWNybwliYWRfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJc3ViCXIyLCByMiwgIyhDT05GSUdfU1RBQ0tTSVpFK0NPTkZJR19TWVNfTUFMTE9DX0xFTikKCXN1YglyMiwgcjIsICMoQ09ORklHX1NZU19HQkxfREFUQV9TSVpFKzgpICBAIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjawoJbGRtaWEJcjIsIHtyMiAtIHIzfQkJCUAgZ2V0IHBjLCBjcHNyCglhZGQJcjAsIHNwLCAjU19GUkFNRV9TSVpFCQlAIHJlc3RvcmUgc3BfU1ZDCgoJYWRkCXI1LCBzcCwgI1NfU1AKCW1vdglyMSwgbHIKCXN0bWlhCXI1LCB7cjAgLSByM30JCQlAIHNhdmUgc3BfU1ZDLCBscl9TVkMsIHBjLCBjcHNyCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkICAgICByOCwgc3AsICNTX1BDCglzdG1kYiAgIHI4LCB7c3AsIGxyfV4gICAgICAgICAgICAgICAgICAgQCBDYWxsaW5nIFNQLCBMUgoJc3RyICAgICBsciwgW3I4LCAjMF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBjYWxsaW5nIFBDCgltcnMgICAgIHI2LCBzcHNyCglzdHIgICAgIHI2LCBbcjgsICM0XSAgICAgICAgICAgICAgICAgICAgQCBTYXZlIENQU1IKCXN0ciAgICAgcjAsIFtyOCwgIzhdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgT0xEX1IwCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCWxkbWlhCXNwLCB7cjAgLSBscn1eCQkJQCBDYWxsaW5nIHIwIC0gbHIKCW1vdglyMCwgcjAKCWxkcglsciwgW3NwLCAjU19QQ10JCQlAIEdldCBQQwoJYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3VicwlwYywgbHIsICM0CQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgoJLmVuZG0KCgkubWFjcm8gZ2V0X2JhZF9zdGFjawoJbGRyCXIxMywgX2FybWJvb3Rfc3RhcnQJCUAgc2V0dXAgb3VyIG1vZGUgc3RhY2sKCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1RBQ0tTSVpFK0NPTkZJR19TWVNfTUFMTE9DX0xFTikKCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUrOCkgQCByZXNlcnZlZCBhIGNvdXBsZSBzcG90cyBpbiBhYm9ydCBzdGFjawoKCXN0cglsciwgW3IxM10JCQlAIHNhdmUgY2FsbGVyIGxyIC8gc3BzcgoJbXJzCWxyLCBzcHNyCglzdHIgICAgIGxyLCBbcjEzLCAjNF0KCgltb3YJcjEzLCAjTU9ERV9TVkMJCQlAIHByZXBhcmUgU1ZDLU1vZGUKCUAgbXNyCXNwc3JfYywgcjEzCgltc3IJc3BzciwgcjEzCgltb3YJbHIsIHBjCgltb3ZzCXBjLCBscgoJLmVuZG0KCgkubWFjcm8gZ2V0X2lycV9zdGFjawkJCUAgc2V0dXAgSVJRIHN0YWNrCglsZHIJc3AsIElSUV9TVEFDS19TVEFSVAoJLmVuZG0KCgkubWFjcm8gZ2V0X2ZpcV9zdGFjawkJCUAgc2V0dXAgRklRIHN0YWNrCglsZHIJc3AsIEZJUV9TVEFDS19TVEFSVAoJLmVuZG0KCi8qCiAqIGV4Y2VwdGlvbiBoYW5kbGVycwogKi8KCS5hbGlnbiAgNQp1bmRlZmluZWRfaW5zdHJ1Y3Rpb246CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgoKCS5hbGlnbgk1CnNvZnR3YXJlX2ludGVycnVwdDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fc29mdHdhcmVfaW50ZXJydXB0CgoJLmFsaWduCTUKcHJlZmV0Y2hfYWJvcnQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX3ByZWZldGNoX2Fib3J0CgoJLmFsaWduCTUKZGF0YV9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZGF0YV9hYm9ydAoKCS5hbGlnbgk1Cm5vdF91c2VkOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19ub3RfdXNlZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCgoJLmFsaWduCTUKaXJxOgoJZ2V0X2lycV9zdGFjawoJaXJxX3NhdmVfdXNlcl9yZWdzCglibAlkb19pcnEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKCS5hbGlnbgk1CmZpcToKCWdldF9maXFfc3RhY2sKCS8qIHNvbWVvbmUgb3VnaHQgdG8gd3JpdGUgYSBtb3JlIGVmZmljdGlvbiBmaXFfc2F2ZV91c2VyX3JlZ3MgKi8KCWlycV9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZmlxCglpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCiNlbHNlCgoJLmFsaWduCTUKaXJxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19pcnEKCgkuYWxpZ24JNQpmaXE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2ZpcQoKI2VuZGlmCgoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQpyZXNldF9jcHU6CglibAlkaXNhYmxlX2ludGVycnVwdHMKCgkvKiBEaXNhYmxlIHdhdGNoZG9nICovCglsZHIJcjEsID1wV0RUQ1RMCgltb3YJcjMsICMwCglzdHIJcjMsIFtyMV0KCgkvKiByZXNldCBjb3VudGVyICovCglsZHIJcjMsID0weDAwMDAxOTg0CglzdHIJcjMsIFtyMSwgIzRdCgoJLyogRW5hYmxlIHRoZSB3YXRjaGRvZyAqLwoJbW92CXIzLCAjMQoJc3RyCXIzLCBbcjFdCgpfbG9vcF9mb3JldmVyOgoJYglfbG9vcF9mb3JldmVyCg==