LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIE9NUDI0MjAvQVJNMTEzNiBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDA0CVRleGFzIEluc3RydW1lbnRzIDxyLXdvb2RydWZmMkB0aS5jb20+CiAqCiAqICBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdy9mdlciA8bWFnQHN5c2dvLmRlPgogKiAgQ29weXJpZ2h0IChjKSAyMDAyCUFsZXggWvxwa2UgPGF6dUBzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglHYXJ5IEplbm5lam9obiA8Z2pAZGVueC5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMwlSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDMJS3NoaXRpaiA8a3NoaXRpakB0aS5jb20+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKI2luY2x1ZGUgPGNvbmZpZy5oPgojaW5jbHVkZSA8dmVyc2lvbi5oPgouZ2xvYmwgX3N0YXJ0Cl9zdGFydDogYglyZXNldAojaWZkZWYgQ09ORklHX09ORU5BTkRfSVBMCglsZHIJcGMsIF9oYW5nCglsZHIJcGMsIF9oYW5nCglsZHIJcGMsIF9oYW5nCglsZHIJcGMsIF9oYW5nCglsZHIJcGMsIF9oYW5nCglsZHIJcGMsIF9oYW5nCglsZHIJcGMsIF9oYW5nCgpfaGFuZzoKCS53b3JkCWRvX2hhbmcKCS53b3JkCTB4MTIzNDU2NzgKCS53b3JkCTB4MTIzNDU2NzgKCS53b3JkCTB4MTIzNDU2NzgKCS53b3JkCTB4MTIzNDU2NzgKCS53b3JkCTB4MTIzNDU2NzgKCS53b3JkCTB4MTIzNDU2NzgKCS53b3JkCTB4MTIzNDU2NzgJLyogbm93IDE2KjQ9NjQgKi8KI2Vsc2UKCWxkcglwYywgX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgoJbGRyCXBjLCBfc29mdHdhcmVfaW50ZXJydXB0CglsZHIJcGMsIF9wcmVmZXRjaF9hYm9ydAoJbGRyCXBjLCBfZGF0YV9hYm9ydAoJbGRyCXBjLCBfbm90X3VzZWQKCWxkcglwYywgX2lycQoJbGRyCXBjLCBfZmlxCgpfdW5kZWZpbmVkX2luc3RydWN0aW9uOiAud29yZCB1bmRlZmluZWRfaW5zdHJ1Y3Rpb24KX3NvZnR3YXJlX2ludGVycnVwdDoJLndvcmQgc29mdHdhcmVfaW50ZXJydXB0Cl9wcmVmZXRjaF9hYm9ydDoJLndvcmQgcHJlZmV0Y2hfYWJvcnQKX2RhdGFfYWJvcnQ6CQkud29yZCBkYXRhX2Fib3J0Cl9ub3RfdXNlZDoJCS53b3JkIG5vdF91c2VkCl9pcnE6CQkJLndvcmQgaXJxCl9maXE6CQkJLndvcmQgZmlxCl9wYWQ6CQkJLndvcmQgMHgxMjM0NTY3OCAvKiBub3cgMTYqND02NCAqLwojZW5kaWYJLyogQ09ORklHX09ORU5BTkRfSVBMICovCi5nbG9iYWwgX2VuZF92ZWN0Cl9lbmRfdmVjdDoKCgkuYmFsaWdubCAxNiwweGRlYWRiZWVmCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFN0YXJ0dXAgQ29kZSAocmVzZXQgdmVjdG9yKQogKgogKiBkbyBpbXBvcnRhbnQgaW5pdCBvbmx5IGlmIHdlIGRvbid0IHN0YXJ0IGZyb20gbWVtb3J5IQogKiBzZXR1cCBNZW1vcnkgYW5kIGJvYXJkIHNwZWNpZmljIGJpdHMgcHJpb3IgdG8gcmVsb2NhdGlvbi4KICogcmVsb2NhdGUgYXJtYm9vdCB0byByYW0KICogc2V0dXAgc3RhY2sKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgpfVEVYVF9CQVNFOgoJLndvcmQJVEVYVF9CQVNFCgouZ2xvYmwgX2FybWJvb3Rfc3RhcnQKX2FybWJvb3Rfc3RhcnQ6Cgkud29yZCBfc3RhcnQKCi8qCiAqIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBib2FyZC1zcGVjaWZpYyBsaW5rZXIgc2NyaXB0LgogKi8KLmdsb2JsIF9ic3Nfc3RhcnQKX2Jzc19zdGFydDoKCS53b3JkIF9fYnNzX3N0YXJ0CgouZ2xvYmwgX2Jzc19lbmQKX2Jzc19lbmQ6Cgkud29yZCBfZW5kCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIElSUV9TVEFDS19TVEFSVApJUlFfU1RBQ0tfU1RBUlQ6Cgkud29yZAkweDBiYWRjMGRlCgovKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLwouZ2xvYmwgRklRX1NUQUNLX1NUQVJUCkZJUV9TVEFDS19TVEFSVDoKCS53b3JkIDB4MGJhZGMwZGUKI2VuZGlmCgovKgogKiB0aGUgYWN0dWFsIHJlc2V0IGNvZGUKICovCgpyZXNldDoKCS8qCgkgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCgkgKi8KCW1ycwlyMCxjcHNyCgliaWMJcjAscjAsIzB4MWYKCW9ycglyMCxyMCwjMHhkMwoJbXNyCWNwc3IscjAKCiNpZmRlZiBDT05GSUdfT01BUDI0MjBINAogICAgICAgLyogQ29weSB2ZWN0b3JzIHRvIG1hc2sgUk9NIGluZGlyZWN0IGFkZHIgKi8KCWFkcglyMCwgX3N0YXJ0CQkvKiByMCA8LSBjdXJyZW50IHBvc2l0aW9uIG9mIGNvZGUgICAqLwoJCWFkZCAgICAgcjAsIHIwLCAjNAkJCQkvKiBza2lwIHJlc2V0IHZlY3RvcgkJCSovCgltb3YJcjIsICM2NAkJCS8qIHIyIDwtIHNpemUgdG8gY29weSAgKi8KCWFkZAlyMiwgcjAsIHIyCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MJICAgICovCgltb3YJcjEsICNTUkFNX09GRlNFVDAJICAvKiBidWlsZCB2ZWN0IGFkZHIgKi8KCW1vdglyMywgI1NSQU1fT0ZGU0VUMQoJYWRkCXIxLCByMSwgcjMKCW1vdglyMywgI1NSQU1fT0ZGU0VUMgoJYWRkCXIxLCByMSwgcjMKbmV4dDoKCWxkbWlhCXIwISwge3IzLXIxMH0JCS8qIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdICAgICovCglzdG1pYQlyMSEsIHtyMy1yMTB9CQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLwoJY21wCXIwLCByMgkJCS8qIHVudGlsIHNvdXJjZSBlbmQgYWRkcmVzcyBbcjJdICAgICovCglibmUJbmV4dAkJCS8qIGxvb3AgdW50aWwgZXF1YWwgKi8KCWJsCWNweV9jbGtfY29kZQkJLyogcHV0IGRwbGwgYWRqdXN0IGNvZGUgYmVoaW5kIHZlY3RvcnMgKi8KI2VuZGlmCgkvKiB0aGUgbWFzayBST00gY29kZSBzaG91bGQgaGF2ZSBQTEwgYW5kIG90aGVycyBzdGFibGUgKi8KI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCglibCAgY3B1X2luaXRfY3JpdAojZW5kaWYKCiNpZm5kZWYgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKcmVsb2NhdGU6CQkJCS8qIHJlbG9jYXRlIFUtQm9vdCB0byBSQU0JICAgICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8KCWNtcAlyMCwgcjEJCQkvKiBkb24ndCByZWxvYyBkdXJpbmcgZGVidWcJICAgICovCiNpZm5kZWYgQ09ORklHX09ORU5BTkRfSVBMCgliZXEJc3RhY2tfc2V0dXAKI2VuZGlmCS8qIENPTkZJR19PTkVOQU5EX0lQTCAqLwoKCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKCWxkcglyMywgX2Jzc19zdGFydAoJc3ViCXIyLCByMywgcjIJCS8qIHIyIDwtIHNpemUgb2YgYXJtYm9vdAkgICAgKi8KCWFkZAlyMiwgcjAsIHIyCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MJICAgICovCgpjb3B5X2xvb3A6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlZWUgW3IyXSAgICAqLwoJYmxlCWNvcHlfbG9vcAojZW5kaWYJLyogQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QgKi8KCgkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCnN0YWNrX3NldHVwOgoJbGRyCXIwLCBfVEVYVF9CQVNFCQkvKiB1cHBlciAxMjggS2lCOiByZWxvY2F0ZWQgdWJvb3QgICAqLwojaWZkZWYgQ09ORklHX09ORU5BTkRfSVBMCglzdWIJc3AsIHIwLCAjMTI4CQkvKiBsZWF2ZSAzMiB3b3JkcyBmb3IgYWJvcnQtc3RhY2sgICAqLwojZWxzZQoJc3ViCXIwLCByMCwgI0NGR19NQUxMT0NfTEVOIC8qIG1hbGxvYyBhcmVhCQkJICAgICovCglzdWIJcjAsIHIwLCAjQ0ZHX0dCTF9EQVRBX1NJWkUgLyogYmRpbmZvCQkJICAgICovCiNpZmRlZiBDT05GSUdfVVNFX0lSUQoJc3ViCXIwLCByMCwgIyhDT05GSUdfU1RBQ0tTSVpFX0lSUStDT05GSUdfU1RBQ0tTSVpFX0ZJUSkKI2VuZGlmCglzdWIJc3AsIHIwLCAjMTIJCS8qIGxlYXZlIDMgd29yZHMgZm9yIGFib3J0LXN0YWNrICAgICovCiNlbmRpZgkvKiBDT05GSUdfT05FTkFORF9JUEwgKi8KCmNsZWFyX2JzczoKCWxkcglyMCwgX2Jzc19zdGFydAkJLyogZmluZCBzdGFydCBvZiBic3Mgc2VnbWVudAkgICAgKi8KCWxkcglyMSwgX2Jzc19lbmQJCS8qIHN0b3AgaGVyZQkJCSAgICAqLwoJbW92CXIyLCAjMHgwMDAwMDAwMAkJLyogY2xlYXIJCQkgICAgKi8KCiNpZm5kZWYgQ09ORklHX09ORU5BTkRfSVBMCmNsYnNzX2w6c3RyCXIyLCBbcjBdCQkvKiBjbGVhciBsb29wLi4uCQkgICAgKi8KCWFkZAlyMCwgcjAsICM0CgljbXAJcjAsIHIxCglibmUJY2xic3NfbAojZW5kaWYKCglsZHIJcGMsIF9zdGFydF9hcm1ib290CgojaWZkZWYgQ09ORklHX09ORU5BTkRfSVBMCl9zdGFydF9hcm1ib290OiAud29yZCBzdGFydF9vbmVib290CiNlbHNlCl9zdGFydF9hcm1ib290OiAud29yZCBzdGFydF9hcm1ib290CiNlbmRpZgoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIENQVV9pbml0X2NyaXRpY2FsIHJlZ2lzdGVycwogKgogKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCiAqIHNldHVwIG1lbW9yeSB0aW1pbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmNwdV9pbml0X2NyaXQ6CgkvKgoJICogZmx1c2ggdjQgSS9EIGNhY2hlcwoJICovCgltb3YJcjAsICMwCgltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCgltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCS8qIGZsdXNoIHY0IFRMQiAqLwoKCS8qCgkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCgkgKi8KCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKCWJpYwlyMCwgcjAsICMweDAwMDAyMzAwCUAgY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpCgliaWMJcjAsIHIwLCAjMHgwMDAwMDA4NwlAIGNsZWFyIGJpdHMgNywgMjowIChCLS0tIC1DQU0pCglvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMiAoQSkgQWxpZ24KCW9ycglyMCwgcjAsICMweDAwMDAxMDAwCUAgc2V0IGJpdCAxMiAoSSkgSS1DYWNoZQoJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoKCS8qCgkgKiBKdW1wIHRvIGJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLi4uIFRoZSBNYXNrIFJPTSB3aWxsIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZAoJICogYmFzaWMgbWVtb3J5LiAgR28gaGVyZSB0byBidW1wIHVwIGNsb2NrIHJhdGUgYW5kIGhhbmRsZSB3YWtlIHVwIGNvbmRpdGlvbnMuCgkgKi8KCW1vdglpcCwgbHIJCS8qIHBlcnNldmVyZSBsaW5rIHJlZyBhY3Jvc3MgY2FsbCAqLwoJYmwJbG93bGV2ZWxfaW5pdAkvKiBnbyBzZXR1cCBwbGwsbXV4LG1lbW9yeSAqLwoJbW92CWxyLCBpcAkJLyogcmVzdG9yZSBsaW5rICovCgltb3YJcGMsIGxyCQkvKiBiYWNrIHRvIG15IGNhbGxlciAqLwoKI2lmbmRlZiBDT05GSUdfT05FTkFORF9JUEwKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSW50ZXJydXB0IGhhbmRsaW5nCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwpACkAgSVJRIHN0YWNrIGZyYW1lLgpACiNkZWZpbmUgU19GUkFNRV9TSVpFCTcyCgojZGVmaW5lIFNfT0xEX1IwCTY4CiNkZWZpbmUgU19QU1IJCTY0CiNkZWZpbmUgU19QQwkJNjAKI2RlZmluZSBTX0xSCQk1NgojZGVmaW5lIFNfU1AJCTUyCgojZGVmaW5lIFNfSVAJCTQ4CiNkZWZpbmUgU19GUAkJNDQKI2RlZmluZSBTX1IxMAkJNDAKI2RlZmluZSBTX1I5CQkzNgojZGVmaW5lIFNfUjgJCTMyCiNkZWZpbmUgU19SNwkJMjgKI2RlZmluZSBTX1I2CQkyNAojZGVmaW5lIFNfUjUJCTIwCiNkZWZpbmUgU19SNAkJMTYKI2RlZmluZSBTX1IzCQkxMgojZGVmaW5lIFNfUjIJCTgKI2RlZmluZSBTX1IxCQk0CiNkZWZpbmUgU19SMAkJMAoKI2RlZmluZSBNT0RFX1NWQyAweDEzCiNkZWZpbmUgSV9CSVQJIDB4ODAKCi8qCiAqIHVzZSBiYWRfc2F2ZV91c2VyX3JlZ3MgZm9yIGFib3J0L3ByZWZldGNoL3VuZGVmL3N3aSAuLi4KICogdXNlIGlycV9zYXZlX3VzZXJfcmVncyAvIGlycV9yZXN0b3JlX3VzZXJfcmVncyBmb3IgSVJRL0ZJUSBoYW5kbGluZwogKi8KCgkubWFjcm8JYmFkX3NhdmVfdXNlcl9yZWdzCglzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCQlAIGNhcnZlIG91dCBhIGZyYW1lIG9uIGN1cnJlbnQgdXNlciBzdGFjawoJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIFNhdmUgdXNlciByZWdpc3RlcnMgKG5vdyBpbiBzdmMgbW9kZSkgcjAtcjEyCgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJc3ViCXIyLCByMiwgIyhDRkdfTUFMTE9DX0xFTikKCXN1YglyMiwgcjIsICMoQ0ZHX0dCTF9EQVRBX1NJWkUrOCkJQCBzZXQgYmFzZSAyIHdvcmRzIGludG8gYWJvcnQgc3RhY2sKCWxkbWlhCXIyLCB7cjIgLSByM30JCQlAIGdldCB2YWx1ZXMgZm9yICJhYm9ydGVkIiBwYyBhbmQgY3BzciAoaW50byBwYXJtIHJlZ3MpCglhZGQJcjAsIHNwLCAjU19GUkFNRV9TSVpFCQlAIGdyYWIgcG9pbnRlciB0byBvbGQgc3RhY2sKCglhZGQJcjUsIHNwLCAjU19TUAoJbW92CXIxLCBscgoJc3RtaWEJcjUsIHtyMCAtIHIzfQkJCUAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IKCW1vdglyMCwgc3AJCQkJQCBzYXZlIGN1cnJlbnQgc3RhY2sgaW50byByMCAocGFyYW0gcmVnaXN0ZXIpCgkuZW5kbQoKCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkCXI4LCBzcCwgI1NfUEMJCQlAICEhISEgUjggTkVFRFMgdG8gYmUgc2F2ZWQgISEhISBhIHJlc2VydmVkIHN0YWNrIHNwb3Qgd291bGQgYmUgZ29vZC4KCXN0bWRiCXI4LCB7c3AsIGxyfV4JCQlAIENhbGxpbmcgU1AsIExSCglzdHIJbHIsIFtyOCwgIzBdCQkJQCBTYXZlIGNhbGxpbmcgUEMKCW1ycwlyNiwgc3BzcgoJc3RyCXI2LCBbcjgsICM0XQkJCUAgU2F2ZSBDUFNSCglzdHIJcjAsIFtyOCwgIzhdCQkJQCBTYXZlIE9MRF9SMAoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCglsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgQ2FsbGluZyByMCAtIGxyCgltb3YJcjAsIHIwCglsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN1YnMJcGMsIGxyLCAjNAkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKCS5lbmRtCgoJLm1hY3JvIGdldF9iYWRfc3RhY2sKCWxkcglyMTMsIF9hcm1ib290X3N0YXJ0CQlAIHNldHVwIG91ciBtb2RlIHN0YWNrIChlbnRlciBpbiBiYW5rZWQgbW9kZSkKCXN1YglyMTMsIHIxMywgIyhDRkdfTUFMTE9DX0xFTikJQCBtb3ZlIHBhc3QgbWFsbG9jIHBvb2wKCXN1YglyMTMsIHIxMywgIyhDRkdfR0JMX0RBVEFfU0laRSs4KSBAIG1vdmUgdG8gcmVzZXJ2ZWQgYSBjb3VwbGUgc3BvdHMgZm9yIGFib3J0IHN0YWNrCgoJc3RyCWxyLCBbcjEzXQkJCUAgc2F2ZSBjYWxsZXIgbHIgaW4gcG9zaXRpb24gMCBvZiBzYXZlZCBzdGFjawoJbXJzCWxyLCBzcHNyCQkJQCBnZXQgdGhlIHNwc3IKCXN0cglsciwgW3IxMywgIzRdCQkJQCBzYXZlIHNwc3IgaW4gcG9zaXRpb24gMSBvZiBzYXZlZCBzdGFjawoKCW1vdglyMTMsICNNT0RFX1NWQwkJCUAgcHJlcGFyZSBTVkMtTW9kZQoJQCBtc3IJc3Bzcl9jLCByMTMKCW1zcglzcHNyLCByMTMJCQlAIHN3aXRjaCBtb2RlcywgbWFrZSBzdXJlIG1vdmVzIHdpbGwgZXhlY3V0ZQoJbW92CWxyLCBwYwkJCQlAIGNhcHR1cmUgcmV0dXJuIHBjCgltb3ZzCXBjLCBscgkJCQlAIGp1bXAgdG8gbmV4dCBpbnN0cnVjdGlvbiAmIHN3aXRjaCBtb2Rlcy4KCS5lbmRtCgoJLm1hY3JvIGdldF9iYWRfc3RhY2tfc3dpCglzdWIJcjEzLCByMTMsICM0CQkJQCBzcGFjZSBvbiBjdXJyZW50IHN0YWNrIGZvciBzY3JhdGNoIHJlZy4KCXN0cglyMCwgW3IxM10JCQlAIHNhdmUgUjAncyB2YWx1ZS4KCWxkcglyMCwgX2FybWJvb3Rfc3RhcnQJCUAgZ2V0IGRhdGEgcmVnaW9ucyBzdGFydAoJc3ViCXIwLCByMCwgIyhDRkdfTUFMTE9DX0xFTikJQCBtb3ZlIHBhc3QgbWFsbG9jIHBvb2wKCXN1YglyMCwgcjAsICMoQ0ZHX0dCTF9EQVRBX1NJWkUrOCkJQCBtb3ZlIHBhc3QgZ2JsIGFuZCBhIGNvdXBsZSBzcG90cyBmb3IgYWJvcnQgc3RhY2sKCXN0cglsciwgW3IwXQkJCUAgc2F2ZSBjYWxsZXIgbHIgaW4gcG9zaXRpb24gMCBvZiBzYXZlZCBzdGFjawoJbXJzCXIwLCBzcHNyCQkJQCBnZXQgdGhlIHNwc3IKCXN0cglsciwgW3IwLCAjNF0JCQlAIHNhdmUgc3BzciBpbiBwb3NpdGlvbiAxIG9mIHNhdmVkIHN0YWNrCglsZHIJcjAsIFtyMTNdCQkJQCByZXN0b3JlIHIwCglhZGQJcjEzLCByMTMsICM0CQkJQCBwb3Agc3RhY2sgZW50cnkKCS5lbmRtCgoJLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjawoJbGRyCXNwLCBJUlFfU1RBQ0tfU1RBUlQKCS5lbmRtCgoJLm1hY3JvIGdldF9maXFfc3RhY2sJCQlAIHNldHVwIEZJUSBzdGFjawoJbGRyCXNwLCBGSVFfU1RBQ0tfU1RBUlQKCS5lbmRtCiNlbmRpZgkvKiBDT05GSUdfT05FTkFORF9JUEwgKi8KCi8qCiAqIGV4Y2VwdGlvbiBoYW5kbGVycwogKi8KI2lmZGVmIENPTkZJR19PTkVOQU5EX0lQTAoJLmFsaWduCTUKZG9faGFuZzoKCWxkcglzcCwgX1RFWFRfQkFTRQkJCS8qIHVzZSAzMiB3b3JkcyBhYm91dCBzdGFjayAqLwoJYmwJaGFuZwkJCQkvKiBoYW5nIGFuZCBuZXZlciByZXR1cm4gKi8KI2Vsc2UJLyogIUNPTkZJR19PTkVOQU5EIElQTCAqLwoJLmFsaWduCTUKdW5kZWZpbmVkX2luc3RydWN0aW9uOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCgkuYWxpZ24JNQpzb2Z0d2FyZV9pbnRlcnJ1cHQ6CglnZXRfYmFkX3N0YWNrX3N3aQoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19zb2Z0d2FyZV9pbnRlcnJ1cHQKCgkuYWxpZ24JNQpwcmVmZXRjaF9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fcHJlZmV0Y2hfYWJvcnQKCgkuYWxpZ24JNQpkYXRhX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19kYXRhX2Fib3J0CgoJLmFsaWduCTUKbm90X3VzZWQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX25vdF91c2VkCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKCgkuYWxpZ24JNQppcnE6CglnZXRfaXJxX3N0YWNrCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2ZpcV9zdGFjawoJLyogc29tZW9uZSBvdWdodCB0byB3cml0ZSBhIG1vcmUgZWZmaWN0aW9uIGZpcV9zYXZlX3VzZXJfcmVncyAqLwoJaXJxX3NhdmVfdXNlcl9yZWdzCglibAlkb19maXEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKI2Vsc2UKCgkuYWxpZ24JNQppcnE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoKCS5hbGlnbgk1CmZpcToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZmlxCgojZW5kaWYKCS5hbGlnbiA1Ci5nbG9iYWwgYXJtMTEzNl9jYWNoZV9mbHVzaAphcm0xMTM2X2NhY2hlX2ZsdXNoOgoJCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEkgY2FjaGUKCQltb3YJcGMsIGxyCQkJQCBiYWNrIHRvIGNhbGxlcgojZW5kaWYJLyogQ09ORklHX09ORU5BTkRfSVBMICovCg==