LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTkyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDIJR2FyeSBKZW5uZWpvaG4gPGdhcnlqQGRlbnguZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBKdW1wIHZlY3RvciB0YWJsZSBhcyBpbiB0YWJsZSAzLjEgaW4gWzFdCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKCi5nbG9ibCBfc3RhcnQKX3N0YXJ0OgliICAgICAgIHJlc2V0CglsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAoJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKCWxkcglwYywgX2RhdGFfYWJvcnQKCWxkcglwYywgX25vdF91c2VkCglsZHIJcGMsIF9pcnEKCWxkcglwYywgX2ZpcQoKX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoJLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCl9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdApfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Cl9kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydApfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZApfaXJxOgkJCS53b3JkIGlycQpfZmlxOgkJCS53b3JkIGZpcQoKCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKICoKICogZG8gaW1wb3J0YW50IGluaXQgb25seSBpZiB3ZSBkb24ndCBzdGFydCBmcm9tIG1lbW9yeSEKICogcmVsb2NhdGUgYXJtYm9vdCB0byByYW0KICogc2V0dXAgc3RhY2sKICoganVtcCB0byBzZWNvbmQgc3RhZ2UKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgouZ2xvYmwgX1RFWFRfQkFTRQpfVEVYVF9CQVNFOgoJLndvcmQJVEVYVF9CQVNFCgojaWYgZGVmaW5lZChDT05GSUdfU1lTX0FSTV9XSVRIT1VUX1JFTE9DKQouZ2xvYmwgX2FybWJvb3Rfc3RhcnQKX2FybWJvb3Rfc3RhcnQ6Cgkud29yZCBfc3RhcnQKI2VuZGlmCgovKgogKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiB0aGUgYm9hcmQtc3BlY2lmaWMgbGlua2VyIHNjcmlwdC4KICovCi5nbG9ibCBfYnNzX3N0YXJ0Cl9ic3Nfc3RhcnQ6Cgkud29yZCBfX2Jzc19zdGFydAoKLmdsb2JsIF9ic3NfZW5kCl9ic3NfZW5kOgoJLndvcmQgX2VuZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBJUlFfU1RBQ0tfU1RBUlQKSVJRX1NUQUNLX1NUQVJUOgoJLndvcmQJMHgwYmFkYzBkZQoKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIEZJUV9TVEFDS19TVEFSVApGSVFfU1RBQ0tfU1RBUlQ6Cgkud29yZCAweDBiYWRjMGRlCiNlbmRpZgoKI2lmICFkZWZpbmVkKENPTkZJR19TWVNfQVJNX1dJVEhPVVRfUkVMT0MpCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICsgOCBieXRlcyAqLwouZ2xvYmwgSVJRX1NUQUNLX1NUQVJUX0lOCklSUV9TVEFDS19TVEFSVF9JTjoKCS53b3JkCTB4MGJhZGMwZGUKCi5nbG9ibCBfZGF0YXJlbF9zdGFydApfZGF0YXJlbF9zdGFydDoKCS53b3JkIF9fZGF0YXJlbF9zdGFydAoKLmdsb2JsIF9kYXRhcmVscm9sb2NhbF9zdGFydApfZGF0YXJlbHJvbG9jYWxfc3RhcnQ6Cgkud29yZCBfX2RhdGFyZWxyb2xvY2FsX3N0YXJ0CgouZ2xvYmwgX2RhdGFyZWxsb2NhbF9zdGFydApfZGF0YXJlbGxvY2FsX3N0YXJ0OgoJLndvcmQgX19kYXRhcmVsbG9jYWxfc3RhcnQKCi5nbG9ibCBfZGF0YXJlbHJvX3N0YXJ0Cl9kYXRhcmVscm9fc3RhcnQ6Cgkud29yZCBfX2RhdGFyZWxyb19zdGFydAoKLmdsb2JsIF9nb3Rfc3RhcnQKX2dvdF9zdGFydDoKCS53b3JkIF9fZ290X3N0YXJ0CgouZ2xvYmwgX2dvdF9lbmQKX2dvdF9lbmQ6Cgkud29yZCBfX2dvdF9lbmQKCi8qCiAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQogKi8KCnJlc2V0OgoJLyoKCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKCSAqLwoJbXJzCXIwLGNwc3IKCWJpYwlyMCxyMCwjMHgxZgoJb3JyCXIwLHIwLCMweGQzCgltc3IJY3BzcixyMAoKI2RlZmluZSBwV0RUQ1RMCQkweDgwMDAxNDAwICAvKiBXYXRjaGRvZyBUaW1lciBjb250cm9sIHJlZ2lzdGVyICovCiNkZWZpbmUgcElOVEVOQwkJMHg4MDAwMDUwQyAgLyogSW50ZXJ1cHQtQ29udHJvbGxlciBlbmFibGUgY2xlYXIgcmVnaXN0ZXIgKi8KI2RlZmluZSBwQ0xLU0VUCQkweDgwMDAwNDIwICAvKiBjbG9jayBkaXZpc29yIHJlZ2lzdGVyICovCgoJLyogZGlzYWJsZSB3YXRjaGRvZywgc2V0IHdhdGNoZG9nIGNvbnRyb2wgcmVnaXN0ZXIgdG8KCSAqIGFsbCB6ZXJvcyAoZGVmYXVsdCByZXNldCkKCSAqLwoJbGRyICAgICByMCwgPXBXRFRDVEwKCW1vdiAgICAgcjEsICMweDAKCXN0ciAgICAgcjEsIFtyMF0KCgkvKgoJICogbWFzayBhbGwgSVJRcyBieSBzZXR0aW5nIGFsbCBiaXRzIGluIHRoZSBJTlRFTkMgcmVnaXN0ZXIgKGRlZmF1bHQpCgkgKi8KCW1vdglyMSwgIzB4ZmZmZmZmZmYKCWxkcglyMCwgPXBJTlRFTkMKCXN0cglyMSwgW3IwXQoKCS8qIEZDTEs6SENMSzpQQ0xLID0gMToyOjIgKi8KCS8qIGRlZmF1bHQgRkNMSyBpcyAyMDAgTUh6LCB1c2luZyAxNC43NDU2IE1IeiBmaW4gKi8KCWxkcglyMCwgPXBDTEtTRVQKCWxkciByMSwgPTB4MDAwNGVlMzkKQAlsZHIgcjEsID0weDAwMDVlZTM5CUAgMTogMjogNAoJc3RyCXIxLCBbcjBdCgoJLyoKCSAqIHdlIGRvIHN5cy1jcml0aWNhbCBpbml0cyBvbmx5IGF0IHJlYm9vdCwKCSAqIG5vdCB3aGVuIGJvb3RpbmcgZnJvbSByYW0hCgkgKi8KI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCglibAljcHVfaW5pdF9jcml0CiNlbmRpZgoKLyogU2V0IHN0YWNrcG9pbnRlciBpbiBpbnRlcm5hbCBSQU0gdG8gY2FsbCBib2FyZF9pbml0X2YgKi8KY2FsbF9ib2FyZF9pbml0X2Y6CglsZHIJc3AsID0oQ09ORklHX1NZU19JTklUX1NQX0FERFIpCglsZHIJcjAsPTB4MDAwMDAwMDAKCWJsCWJvYXJkX2luaXRfZgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLyoKICogdm9pZCByZWxvY2F0ZV9jb2RlIChhZGRyX3NwLCBnZCwgYWRkcl9tb25pKQogKgogKiBUaGlzICJmdW5jdGlvbiIgZG9lcyBub3QgcmV0dXJuLCBpbnN0ZWFkIGl0IGNvbnRpbnVlcyBpbiBSQU0KICogYWZ0ZXIgcmVsb2NhdGluZyB0aGUgbW9uaXRvciBjb2RlLgogKgogKi8KCS5nbG9ibAlyZWxvY2F0ZV9jb2RlCnJlbG9jYXRlX2NvZGU6Cgltb3YJcjQsIHIwCS8qIHNhdmUgYWRkcl9zcCAqLwoJbW92CXI1LCByMQkvKiBzYXZlIGFkZHIgb2YgZ2QgKi8KCW1vdglyNiwgcjIJLyogc2F2ZSBhZGRyIG9mIGRlc3RpbmF0aW9uICovCgltb3YJcjcsIHIyCS8qIHNhdmUgYWRkciBvZiBkZXN0aW5hdGlvbiAqLwoKCS8qIFNldCB1cCB0aGUgc3RhY2sJCQkJCQkgICAgKi8Kc3RhY2tfc2V0dXA6Cgltb3YJc3AsIHI0CgoJYWRyCXIwLCBfc3RhcnQKCWxkcglyMiwgX1RFWFRfQkFTRQoJbGRyCXIzLCBfYnNzX3N0YXJ0CglzdWIJcjIsIHIzLCByMgkJLyogcjIgPC0gc2l6ZSBvZiBhcm1ib290CSAgICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcwkgICAgKi8KCWNtcAlyMCwgcjYKCWJlcQljbGVhcl9ic3MKCiNpZm5kZWYgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKY29weV9sb29wOgoJbGRtaWEJcjAhLCB7cjktcjEwfQkJLyogY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0gICAgKi8KCXN0bWlhCXI2ISwge3I5LXIxMH0JCS8qIGNvcHkgdG8gICB0YXJnZXQgYWRkcmVzcyBbcjFdICAgICovCgljbXAJcjAsIHIyCQkJLyogdW50aWwgc291cmNlIGVuZCBhZGRyZXNzIFtyMl0gICAgKi8KCWJsbwljb3B5X2xvb3AKCiNpZm5kZWYgQ09ORklHX1BSRUxPQURFUgoJLyogZml4IGdvdCBlbnRyaWVzICovCglsZHIJcjEsIF9URVhUX0JBU0UJCS8qIFRleHQgYmFzZSAqLwoJbW92CXIwLCByNwkJCS8qIHJlbG9jIGFkZHIgKi8KCWxkcglyMiwgX2dvdF9zdGFydAkJLyogYWRkciBpbiBGbGFzaCAqLwoJbGRyCXIzLCBfZ290X2VuZAkJLyogYWRkciBpbiBGbGFzaCAqLwoJc3ViCXIzLCByMywgcjEKCWFkZAlyMywgcjMsIHIwCglzdWIJcjIsIHIyLCByMQoJYWRkCXIyLCByMiwgcjAKCmZpeGxvb3A6CglsZHIJcjQsIFtyMl0KCXN1YglyNCwgcjQsIHIxCglhZGQJcjQsIHI0LCByMAoJc3RyCXI0LCBbcjJdCglhZGQJcjIsIHIyLCAjNAoJY21wCXIyLCByMwoJYm5lCWZpeGxvb3AKI2VuZGlmCiNlbmRpZgkvKiAjaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UICovCgpjbGVhcl9ic3M6CiNpZm5kZWYgQ09ORklHX1BSRUxPQURFUgoJbGRyCXIwLCBfYnNzX3N0YXJ0CglsZHIJcjEsIF9ic3NfZW5kCglsZHIJcjMsIF9URVhUX0JBU0UJCS8qIFRleHQgYmFzZSAqLwoJbW92CXI0LCByNwkJCS8qIHJlbG9jIGFkZHIgKi8KCXN1YglyMCwgcjAsIHIzCglhZGQJcjAsIHIwLCByNAoJc3ViCXIxLCByMSwgcjMKCWFkZAlyMSwgcjEsIHI0Cgltb3YJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhcgkJCSAgICAqLwoKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4JCSAgICAqLwoJYWRkCXIwLCByMCwgIzQKCWNtcAlyMCwgcjEKCWJuZQljbGJzc19sCiNlbmRpZgoKLyoKICogV2UgYXJlIGRvbmUuIERvIG5vdCByZXR1cm4sIGluc3RlYWQgYnJhbmNoIHRvIHNlY29uZCBwYXJ0IG9mIGJvYXJkCiAqIGluaXRpYWxpemF0aW9uLCBub3cgcnVubmluZyBmcm9tIFJBTS4KICovCglsZHIJcjAsIF9URVhUX0JBU0UKCWxkcglyMiwgX2JvYXJkX2luaXRfcgoJc3ViCXIyLCByMiwgcjAKCWFkZAlyMiwgcjIsIHI3CS8qIHBvc2l0aW9uIGZyb20gYm9hcmRfaW5pdF9yIGluIFJBTSAqLwoJLyogc2V0dXAgcGFyYW1ldGVycyBmb3IgYm9hcmRfaW5pdF9yICovCgltb3YJcjAsIHI1CQkvKiBnZF90ICovCgltb3YJcjEsIHI3CQkvKiBkZXN0X2FkZHIgKi8KCS8qIGp1bXAgdG8gaXQgLi4uICovCgltb3YJbHIsIHIyCgltb3YJcGMsIGxyCgpfYm9hcmRfaW5pdF9yOiAud29yZCBib2FyZF9pbml0X3IKCiNlbHNlIC8qICNpZiAhZGVmaW5lZChDT05GSUdfU1lTX0FSTV9XSVRIT1VUX1JFTE9DKSAqLwovKgogKiB0aGUgYWN0dWFsIHJlc2V0IGNvZGUKICovCgpyZXNldDoKCS8qCgkgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCgkgKi8KCW1ycwlyMCxjcHNyCgliaWMJcjAscjAsIzB4MWYKCW9ycglyMCxyMCwjMHhkMwoJbXNyCWNwc3IscjAKCiNkZWZpbmUgcFdEVENUTAkJMHg4MDAwMTQwMCAgLyogV2F0Y2hkb2cgVGltZXIgY29udHJvbCByZWdpc3RlciAqLwojZGVmaW5lIHBJTlRFTkMJCTB4ODAwMDA1MEMgIC8qIEludGVydXB0LUNvbnRyb2xsZXIgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyICovCiNkZWZpbmUgcENMS1NFVAkJMHg4MDAwMDQyMCAgLyogY2xvY2sgZGl2aXNvciByZWdpc3RlciAqLwoKCS8qIGRpc2FibGUgd2F0Y2hkb2csIHNldCB3YXRjaGRvZyBjb250cm9sIHJlZ2lzdGVyIHRvCgkgKiBhbGwgemVyb3MgKGRlZmF1bHQgcmVzZXQpCgkgKi8KCWxkciAgICAgcjAsID1wV0RUQ1RMCgltb3YgICAgIHIxLCAjMHgwCglzdHIgICAgIHIxLCBbcjBdCgoJLyoKCSAqIG1hc2sgYWxsIElSUXMgYnkgc2V0dGluZyBhbGwgYml0cyBpbiB0aGUgSU5URU5DIHJlZ2lzdGVyIChkZWZhdWx0KQoJICovCgltb3YJcjEsICMweGZmZmZmZmZmCglsZHIJcjAsID1wSU5URU5DCglzdHIJcjEsIFtyMF0KCgkvKiBGQ0xLOkhDTEs6UENMSyA9IDE6MjoyICovCgkvKiBkZWZhdWx0IEZDTEsgaXMgMjAwIE1IeiwgdXNpbmcgMTQuNzQ1NiBNSHogZmluICovCglsZHIJcjAsID1wQ0xLU0VUCglsZHIgcjEsID0weDAwMDRlZTM5CkAJbGRyIHIxLCA9MHgwMDA1ZWUzOQlAIDE6IDI6IDQKCXN0cglyMSwgW3IwXQoKCS8qCgkgKiB3ZSBkbyBzeXMtY3JpdGljYWwgaW5pdHMgb25seSBhdCByZWJvb3QsCgkgKiBub3Qgd2hlbiBib290aW5nIGZyb20gcmFtIQoJICovCiNpZm5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAoJYmwJY3B1X2luaXRfY3JpdAojZW5kaWYKCiNpZm5kZWYgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKcmVsb2NhdGU6CQkJCS8qIHJlbG9jYXRlIFUtQm9vdCB0byBSQU0JICAgICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8KCWNtcCAgICAgcjAsIHIxICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgcmVsb2MgZHVyaW5nIGRlYnVnICAgICAgICAgKi8KCWJlcSAgICAgc3RhY2tfc2V0dXAKCglsZHIJcjIsIF9hcm1ib290X3N0YXJ0CglsZHIJcjMsIF9ic3Nfc3RhcnQKCXN1YglyMiwgcjMsIHIyCQkvKiByMiA8LSBzaXplIG9mIGFybWJvb3QgICAgICAgICAgICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcyAgICAgICAgICovCgpjb3B5X2xvb3A6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlc3MgW3IyXSAgICAqLwoJYmxvCWNvcHlfbG9vcAojZW5kaWYJLyogQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QgKi8KCgkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCnN0YWNrX3NldHVwOgoJbGRyCXIwLCBfVEVYVF9CQVNFCQkvKiB1cHBlciAxMjggS2lCOiByZWxvY2F0ZWQgdWJvb3QgICAqLwoJc3ViCXIwLCByMCwgI0NPTkZJR19TWVNfTUFMTE9DX0xFTgkvKiBtYWxsb2MgYXJlYSAgICAgICAgICAgICAgICAgICAgICAqLwoJc3ViCXIwLCByMCwgI0NPTkZJR19TWVNfR0JMX0RBVEFfU0laRSAvKiBiZGluZm8gICAgICAgICAgICAgICAgICAgICAgICAqLwojaWZkZWYgQ09ORklHX1VTRV9JUlEKCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEpCiNlbmRpZgoJc3ViCXNwLCByMCwgIzEyCQkvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAgICAqLwoJYmljCXNwLCBzcCwgIzcJCS8qIDgtYnl0ZSBhbGlnbm1lbnQgZm9yIEFCSSBjb21wbGlhbmNlICovCgpjbGVhcl9ic3M6CglsZHIJcjAsIF9ic3Nfc3RhcnQJCS8qIGZpbmQgc3RhcnQgb2YgYnNzIHNlZ21lbnQgICAgICAgICovCglAYWRkCXIwLCByMCwgIzQJCS8qIHN0YXJ0IGF0IGZpcnN0IGJ5dGUgb2YgYnNzICAgICAgICovCgkJCQkJLyogICB3aHkgaW5jLiA0IGJ5dGVzIHBhc3QgdGhlbj8gICAgKi8KCWxkcglyMSwgX2Jzc19lbmQJCS8qIHN0b3AgaGVyZSAgICAgICAgICAgICAgICAgICAgICAgICovCgltb3YJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4gICAgICAgICAgICAgICAgICAgICovCglhZGQJcjAsIHIwLCAjNAoJY21wCXIwLCByMQoJYmxvCWNsYnNzX2wKCglsZHIJcGMsIF9zdGFydF9hcm1ib290Cgpfc3RhcnRfYXJtYm9vdDoJLndvcmQgc3RhcnRfYXJtYm9vdAojZW5kaWYgLyogI2lmICFkZWZpbmVkKENPTkZJR19TWVNfQVJNX1dJVEhPVVRfUkVMT0MpICovCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDUFVfaW5pdF9jcml0aWNhbCByZWdpc3RlcnMKICoKICogc2V0dXAgaW1wb3J0YW50IHJlZ2lzdGVycwogKiBzZXR1cCBtZW1vcnkgdGltaW5nCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKCmNwdV9pbml0X2NyaXQ6CgkvKgoJICogZmx1c2ggdjQgSS9EIGNhY2hlcwoJICovCgltb3YJcjAsICMwCgltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCgltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCS8qIGZsdXNoIHY0IFRMQiAqLwoKCS8qCgkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCgkgKi8KCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKCWJpYwlyMCwgcjAsICMweDAwMDAyMzAwCUAgY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpCgliaWMJcjAsIHIwLCAjMHgwMDAwMDA4NwlAIGNsZWFyIGJpdHMgNywgMjowIChCLS0tIC1DQU0pCglvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMiAoQSkgQWxpZ24KCW9ycglyMCwgcjAsICMweDAwMDAxMDAwCUAgc2V0IGJpdCAxMiAoSSkgSS1DYWNoZQoJb3JyCXIwLCByMCwgIzB4NDAwMDAwMDAJQCBzZXQgYml0IDMwIChuRikgbm90RmFzdEJ1cwoJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoKCgkvKgoJICogYmVmb3JlIHJlbG9jYXRpbmcsIHdlIGhhdmUgdG8gc2V0dXAgUkFNIHRpbWluZwoJICogYmVjYXVzZSBtZW1vcnkgdGltaW5nIGlzIGJvYXJkLWRlcGVuZGVuZCwgeW91IHdpbGwKCSAqIGZpbmQgYSBsb3dsZXZlbF9pbml0LlMgaW4geW91ciBib2FyZCBkaXJlY3RvcnkuCgkgKi8KCW1vdglpcCwgbHIKCWJsCWxvd2xldmVsX2luaXQKCW1vdglsciwgaXAKCgltb3YJcGMsIGxyCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSW50ZXJydXB0IGhhbmRsaW5nCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKQApAIElSUSBzdGFjayBmcmFtZS4KQAojZGVmaW5lIFNfRlJBTUVfU0laRQk3MgoKI2RlZmluZSBTX09MRF9SMAk2OAojZGVmaW5lIFNfUFNSCQk2NAojZGVmaW5lIFNfUEMJCTYwCiNkZWZpbmUgU19MUgkJNTYKI2RlZmluZSBTX1NQCQk1MgoKI2RlZmluZSBTX0lQCQk0OAojZGVmaW5lIFNfRlAJCTQ0CiNkZWZpbmUgU19SMTAJCTQwCiNkZWZpbmUgU19SOQkJMzYKI2RlZmluZSBTX1I4CQkzMgojZGVmaW5lIFNfUjcJCTI4CiNkZWZpbmUgU19SNgkJMjQKI2RlZmluZSBTX1I1CQkyMAojZGVmaW5lIFNfUjQJCTE2CiNkZWZpbmUgU19SMwkJMTIKI2RlZmluZSBTX1IyCQk4CiNkZWZpbmUgU19SMQkJNAojZGVmaW5lIFNfUjAJCTAKCiNkZWZpbmUgTU9ERV9TVkMgMHgxMwojZGVmaW5lIElfQklUCSAweDgwCgovKgogKiB1c2UgYmFkX3NhdmVfdXNlcl9yZWdzIGZvciBhYm9ydC9wcmVmZXRjaC91bmRlZi9zd2kgLi4uCiAqIHVzZSBpcnFfc2F2ZV91c2VyX3JlZ3MgLyBpcnFfcmVzdG9yZV91c2VyX3JlZ3MgZm9yIElSUS9GSVEgaGFuZGxpbmcKICovCgoJLm1hY3JvCWJhZF9zYXZlX3VzZXJfcmVncwoJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCiNpZiBkZWZpbmVkKENPTkZJR19TWVNfQVJNX1dJVEhPVVRfUkVMT0MpCglsZHIJcjIsIF9hcm1ib290X3N0YXJ0CglzdWIJcjIsIHIyLCAjKENPTkZJR19TVEFDS1NJWkUrQ09ORklHX1NZU19NQUxMT0NfTEVOKQoJc3ViCXIyLCByMiwgIyhDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUrOCkgIEAgc2V0IGJhc2UgMiB3b3JkcyBpbnRvIGFib3J0IHN0YWNrCiNlbHNlCglsZHIJcjIsIElSUV9TVEFDS19TVEFSVF9JTgojZW5kaWYKCWxkbWlhCXIyLCB7cjIgLSByM30JCQlAIGdldCBwYywgY3BzcgoJYWRkCXIwLCBzcCwgI1NfRlJBTUVfU0laRQkJQCByZXN0b3JlIHNwX1NWQwoKCWFkZAlyNSwgc3AsICNTX1NQCgltb3YJcjEsIGxyCglzdG1pYQlyNSwge3IwIC0gcjN9CQkJQCBzYXZlIHNwX1NWQywgbHJfU1ZDLCBwYywgY3BzcgoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3NhdmVfdXNlcl9yZWdzCglzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMC1yMTIKCWFkZCAgICAgcjgsIHNwLCAjU19QQwoJc3RtZGIgICByOCwge3NwLCBscn1eICAgICAgICAgICAgICAgICAgIEAgQ2FsbGluZyBTUCwgTFIKCXN0ciAgICAgbHIsIFtyOCwgIzBdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgY2FsbGluZyBQQwoJbXJzICAgICByNiwgc3BzcgoJc3RyICAgICByNiwgW3I4LCAjNF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBDUFNSCglzdHIgICAgIHIwLCBbcjgsICM4XSAgICAgICAgICAgICAgICAgICAgQCBTYXZlIE9MRF9SMAoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCglsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgQ2FsbGluZyByMCAtIGxyCgltb3YJcjAsIHIwCglsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN1YnMJcGMsIGxyLCAjNAkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKCS5lbmRtCgoJLm1hY3JvIGdldF9iYWRfc3RhY2sKI2lmIGRlZmluZWQoQ09ORklHX1NZU19BUk1fV0lUSE9VVF9SRUxPQykKCWxkcglyMTMsIF9hcm1ib290X3N0YXJ0CQlAIHNldHVwIG91ciBtb2RlIHN0YWNrCglzdWIJcjEzLCByMTMsICMoQ09ORklHX1NUQUNLU0laRStDT05GSUdfU1lTX01BTExPQ19MRU4pCglzdWIJcjEzLCByMTMsICMoQ09ORklHX1NZU19HQkxfREFUQV9TSVpFKzgpIEAgcmVzZXJ2ZWQgYSBjb3VwbGUgc3BvdHMgaW4gYWJvcnQgc3RhY2sKI2Vsc2UKCWxkcglyMTMsIElSUV9TVEFDS19TVEFSVF9JTgkJQCBzZXR1cCBvdXIgbW9kZSBzdGFjawojZW5kaWYKCglzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciAvIHNwc3IKCW1ycwlsciwgc3BzcgoJc3RyICAgICBsciwgW3IxMywgIzRdCgoJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCglAIG1zcglzcHNyX2MsIHIxMwoJbXNyCXNwc3IsIHIxMwoJbW92CWxyLCBwYwoJbW92cwlwYywgbHIKCS5lbmRtCgoJLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjawoJbGRyCXNwLCBJUlFfU1RBQ0tfU1RBUlQKCS5lbmRtCgoJLm1hY3JvIGdldF9maXFfc3RhY2sJCQlAIHNldHVwIEZJUSBzdGFjawoJbGRyCXNwLCBGSVFfU1RBQ0tfU1RBUlQKCS5lbmRtCgovKgogKiBleGNlcHRpb24gaGFuZGxlcnMKICovCgkuYWxpZ24gIDUKdW5kZWZpbmVkX2luc3RydWN0aW9uOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCgkuYWxpZ24JNQpzb2Z0d2FyZV9pbnRlcnJ1cHQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX3NvZnR3YXJlX2ludGVycnVwdAoKCS5hbGlnbgk1CnByZWZldGNoX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19wcmVmZXRjaF9hYm9ydAoKCS5hbGlnbgk1CmRhdGFfYWJvcnQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2RhdGFfYWJvcnQKCgkuYWxpZ24JNQpub3RfdXNlZDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fbm90X3VzZWQKCiNpZmRlZiBDT05GSUdfVVNFX0lSUQoKCS5hbGlnbgk1CmlycToKCWdldF9pcnFfc3RhY2sKCWlycV9zYXZlX3VzZXJfcmVncwoJYmwJZG9faXJxCglpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCgkuYWxpZ24JNQpmaXE6CglnZXRfZmlxX3N0YWNrCgkvKiBzb21lb25lIG91Z2h0IHRvIHdyaXRlIGEgbW9yZSBlZmZpY3Rpb24gZmlxX3NhdmVfdXNlcl9yZWdzICovCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2ZpcQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgojZWxzZQoKCS5hbGlnbgk1CmlycToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9faXJxCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19maXEKCiNlbmRpZgoKCS5hbGlnbgk1Ci5nbG9ibCByZXNldF9jcHUKcmVzZXRfY3B1OgoJYmwJZGlzYWJsZV9pbnRlcnJ1cHRzCgoJLyogRGlzYWJsZSB3YXRjaGRvZyAqLwoJbGRyCXIxLCA9cFdEVENUTAoJbW92CXIzLCAjMAoJc3RyCXIzLCBbcjFdCgoJLyogcmVzZXQgY291bnRlciAqLwoJbGRyCXIzLCA9MHgwMDAwMTk4NAoJc3RyCXIzLCBbcjEsICM0XQoKCS8qIEVuYWJsZSB0aGUgd2F0Y2hkb2cgKi8KCW1vdglyMywgIzEKCXN0cglyMywgW3IxXQoKX2xvb3BfZm9yZXZlcjoKCWIJX2xvb3BfZm9yZXZlcgo=