LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgdzgzOTc3YWZfaXIuaAogKiBWZXJzaW9uOiAgICAgICAKICogRGVzY3JpcHRpb246ICAgCiAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KICogQXV0aG9yOiAgICAgICAgUGF1bCBWYW5kZXJTcGVrCiAqIENyZWF0ZWQgYXQ6ICAgIFRodSBOb3YgMTkgMTM6NTU6MzQgMTk5OAogKiBNb2RpZmllZCBhdDogICBUdWUgSmFuIDExIDEzOjA4OjE5IDIwMDAKICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogKiAKICogICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogKiAgICAgIAogKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAogKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICogIAogKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgogKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAqICAgICAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBXODM5NzdBRl9JUl9ICiNkZWZpbmUgVzgzOTc3QUZfSVJfSAoKI2luY2x1ZGUgPGFzbS9pby5oPgojaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KCi8qIEZsYWdzIGZvciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIENSRjAgKi8KI2RlZmluZSBFTkJOS1NFTAkweDAxCiNkZWZpbmUgQVBFRENSQwkJMHgwMgojZGVmaW5lIFRYVzRDICAgICAgICAgICAweDA0CiNkZWZpbmUgUlhXNEMgICAgICAgICAgIDB4MDgKCi8qIEJhbmsgMCAqLwojZGVmaW5lIFJCUiAgICAgICAgICAgICAweDAwIC8qIFJlY2VpdmVyIGJ1ZmZlciByZWdpc3RlciAqLwojZGVmaW5lIFRCUiAgICAgICAgICAgICAweDAwIC8qIFRyYW5zbWl0dGVyIGJ1ZmZlciByZWdpc3RlciAqLwoKI2RlZmluZSBJQ1IJCTB4MDEgLyogSW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KI2RlZmluZSBJQ1JfRVJCUkkgICAgICAgMHgwMSAvKiBSZWNlaXZlciBidWZmZXIgcmVnaXN0ZXIgaW50ZXJydXB0ICovCiNkZWZpbmUgSUNSX0VUQlJFSSAgICAgIDB4MDIgLyogVHJhbnNlaXZlciBlbXB0eSBpbnRlcnJ1cHQgKi8KI2RlZmluZSBJQ1JfRVVTUkkJMHgwNC8vKiBJUiBzdGF0dXMgaW50ZXJydXB0ICovCiNkZWZpbmUgSUNSX0VIU1JJICAgICAgIDB4MDQKI2RlZmluZSBJQ1JfRVRYVVJJICAgICAgMHgwNCAvKiBUeCB1bmRlcnJ1biAqLwojZGVmaW5lIElDUl9FRE1BSQkweDEwIC8qIERNQSBpbnRlcnJ1cHQgKi8KI2RlZmluZSBJQ1JfRVRYVEhJICAgICAgMHgyMCAvKiBUcmFuc21pdHRlciB0aHJlc2hvbGQgaW50ZXJydXB0ICovCiNkZWZpbmUgSUNSX0VGU0ZJICAgICAgIDB4NDAgLyogRnJhbWUgc3RhdHVzIEZJRk8gaW50ZXJydXB0ICovCiNkZWZpbmUgSUNSX0VUTVJJICAgICAgIDB4ODAgLyogVGltZXIgaW50ZXJydXB0ICovCgojZGVmaW5lIFVGUgkJMHgwMiAvKiBGSUZPIGNvbnRyb2wgcmVnaXN0ZXIgKi8KI2RlZmluZSBVRlJfRU5fRklGTyAgICAgMHgwMSAvKiBFbmFibGUgRklGTydzICovCiNkZWZpbmUgVUZSX1JYRl9SU1QgICAgIDB4MDIgLyogUmVzZXQgUnggRklGTyAqLwojZGVmaW5lIFVGUl9UWEZfUlNUICAgICAweDA0IC8qIFJlc2V0IFR4IEZJRk8gKi8KI2RlZmluZSBVRlJfUlhUTAkweDgwIC8qIFJ4IEZJRk8gdGhyZXNob2xkIChzZXQgdG8gMTYpICovCiNkZWZpbmUgVUZSX1RYVEwJMHgyMCAvKiBUeCBGSUZPIHRocmVzaG9sZCAoc2V0IHRvIDE3KSAqLwoKI2RlZmluZSBJU1IJCTB4MDIgLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwojZGVmaW5lIElTUl9SWFRIX0kJMHgwMSAvKiBSZWNlaXZlIHRocmVzaG9sZCBpbnRlcnJ1cHQgKi8KI2RlZmluZSBJU1JfVFhFTVBfSSAgICAgMHgwMiAvKiBUcmFuc21pdHRlciBlbXB0eSBpbnRlcnJ1cHQgKi8KI2RlZmluZSBJU1JfRkVORF9JCTB4MDQKI2RlZmluZSBJU1JfRE1BX0kJMHgxMAojZGVmaW5lIElTUl9UWFRIX0kJMHgyMCAvKiBUcmFuc21pdHRlciB0aHJlc2hvbGQgaW50ZXJydXB0ICovCiNkZWZpbmUgSVNSX0ZTRl9JICAgICAgIDB4NDAKI2RlZmluZSBJU1JfVE1SX0kgICAgICAgMHg4MCAvKiBUaW1lciBpbnRlcnJ1cHQgKi8KCiNkZWZpbmUgVUNSICAgICAgICAgICAgIDB4MDMgLyogVWFydCBjb250cm9sIHJlZ2lzdGVyICovCiNkZWZpbmUgVUNSX0RMUzggICAgICAgIDB4MDMgLyogOE4xICovCgojZGVmaW5lIFNTUiAJICAgICAgICAweDAzIC8qIFNldHMgc2VsZWN0IHJlZ2lzdGVyICovCiNkZWZpbmUgU0VUMCAJICAgICAgICBVQ1JfRExTOCAgICAgICAgLyogTWFrZSBzdXJlIHdlIGtlZXAgOE4xICovCiNkZWZpbmUgU0VUMQkgICAgICAgICgweDgwfFVDUl9ETFM4KSAvKiBNYWtlIHN1cmUgd2Uga2VlcCA4TjEgKi8KI2RlZmluZSBTRVQyCSAgICAgICAgMHhFMAojZGVmaW5lIFNFVDMJICAgICAgICAweEU0CiNkZWZpbmUgU0VUNAkgICAgICAgIDB4RTgKI2RlZmluZSBTRVQ1CSAgICAgICAgMHhFQwojZGVmaW5lIFNFVDYJICAgICAgICAweEYwCiNkZWZpbmUgU0VUNwkgICAgICAgIDB4RjQKCiNkZWZpbmUgSENSCQkweDA0CiNkZWZpbmUgSENSX01PREVfTUFTSwl+KDB4RDApCiNkZWZpbmUgSENSX1NJUiAgICAgICAgIDB4NjAKI2RlZmluZSBIQ1JfTUlSXzU3NiAgCTB4MjAJCiNkZWZpbmUgSENSX01JUl8xMTUyCTB4ODAKI2RlZmluZSBIQ1JfRklSCQkweEEwCiNkZWZpbmUgSENSX0VOX0RNQQkweDA0CiNkZWZpbmUgSENSX0VOX0lSUQkweDA4CiNkZWZpbmUgSENSX1RYX1dUCTB4MDgKCiNkZWZpbmUgVVNSICAgICAgICAgICAgIDB4MDUgLyogSVIgc3RhdHVzIHJlZ2lzdGVyICovCiNkZWZpbmUgVVNSX1JEUiAgICAgICAgIDB4MDEgLyogUmVjZWl2ZSBkYXRhIHJlYWR5ICovCiNkZWZpbmUgVVNSX1RTUkUgICAgICAgIDB4NDAgLyogVHJhbnNtaXR0ZXIgZW1wdHk/ICovCgojZGVmaW5lIEFVRFIgICAgICAgICAgICAweDA3CiNkZWZpbmUgQVVEUl9TRkVORCAgICAgIDB4MDggLyogU2V0IGEgZnJhbWUgZW5kICovCiNkZWZpbmUgQVVEUl9SWEJTWSAgICAgIDB4MjAgLyogUnggYnVzeSAqLwojZGVmaW5lIEFVRFJfVU5EUiAgICAgICAweDQwIC8qIFRyYW5zZWl2ZXIgdW5kZXJydW4gKi8KCi8qIFNldCAyICovCiNkZWZpbmUgQUJMTCAgICAgICAgICAgIDB4MDAgLyogQWR2YW5jZWQgYmF1ZCByYXRlIGRpdmlzb3IgbGF0Y2ggKGxvdyBieXRlKSAqLwojZGVmaW5lIEFCSEwgICAgICAgICAgICAweDAxIC8qIEFkdmFuY2VkIGJhdWQgcmF0ZSBkaXZpc29yIGxhdGNoIChoaWdoIGJ5dGUpICovCgojZGVmaW5lIEFEQ1IxCQkweDAyCiNkZWZpbmUgQURDUjFfQURWX1NMCTB4MDEJCiNkZWZpbmUgQURDUjFfRF9DSFNXCTB4MDgJLyogdGhlIHNwZWNzIGFyZSB3cm9uZy4gaXRzIGJpdCAzLCBub3QgNCAqLwojZGVmaW5lIEFEQ1IxX0RNQV9GCTB4MDIKCiNkZWZpbmUgQURDUjIJCTB4MDQKI2RlZmluZSBBRENSMl9UWEZTMzIJMHgwMQojZGVmaW5lIEFEQ1IyX1JYRlMzMgkweDA0CgojZGVmaW5lIFJYRkRUSCAgICAgICAgICAweDA3CgovKiBTZXQgMyAqLwojZGVmaW5lIEFVSUQJCTB4MDAKCi8qIFNldCA0ICovCiNkZWZpbmUgVE1STCAgICAgICAgICAgIDB4MDAgLyogVGltZXIgdmFsdWUgcmVnaXN0ZXIgKGxvdyBieXRlKSAqLwojZGVmaW5lIFRNUkggICAgICAgICAgICAweDAxIC8qIFRpbWVyIHZhbHVlIHJlZ2lzdGVyIChoaWdoIGJ5dGUpICovCgojZGVmaW5lIElSX01TTCAgICAgICAgICAweDAyIC8qIEluZnJhcmVkIG1vZGUgc2VsZWN0ICovCiNkZWZpbmUgSVJfTVNMX0VOX1RNUiAgIDB4MDEgLyogRW5hYmxlIHRpbWVyICovCgojZGVmaW5lIFRGUkxMCQkweDA0IC8qIFRyYW5zbWl0dGVyIGZyYW1lIGxlbmd0aCAobG93IGJ5dGUpICovCiNkZWZpbmUgVEZSTEgJCTB4MDUgLyogVHJhbnNtaXR0ZXIgZnJhbWUgbGVuZ3RoIChoaWdoIGJ5dGUpICovCiNkZWZpbmUgUkZSTEwJCTB4MDYgLyogUmVjZWl2ZXIgZnJhbWUgbGVuZ3RoIChsb3cgYnl0ZSkgKi8KI2RlZmluZSBSRlJMSAkJMHgwNyAvKiBSZWNlaXZlciBmcmFtZSBsZW5ndGggKGhpZ2ggYnl0ZSkgKi8KCi8qIFNldCA1ICovCgojZGVmaW5lIEZTX0ZPICAgICAgICAgICAweDA1IC8qIEZyYW1lIHN0YXR1cyBGSUZPICovCiNkZWZpbmUgRlNfRk9fRlNGRFIgICAgIDB4ODAgLyogRnJhbWUgc3RhdHVzIEZJRk8gZGF0YSByZWFkeSAqLwojZGVmaW5lIEZTX0ZPX0xTVF9GUiAgICAweDQwIC8qIEZyYW1lIGxvc3QgKi8KI2RlZmluZSBGU19GT19NWF9MRVggICAgMHgxMCAvKiBNYXggZnJhbWUgbGVuIGV4Y2VlZGVkICovCiNkZWZpbmUgRlNfRk9fUEhZX0VSUiAgIDB4MDggLyogUGh5c2ljYWwgbGF5ZXIgZXJyb3IgKi8KI2RlZmluZSBGU19GT19DUkNfRVJSICAgMHgwNCAKI2RlZmluZSBGU19GT19SWF9PViAgICAgMHgwMiAvKiBSZWNlaXZlIG92ZXJydW4gKi8KI2RlZmluZSBGU19GT19GU0ZfT1YgICAgMHgwMSAvKiBGcmFtZSBzdGF0dXMgRklGTyBvdmVycnVuICovCiNkZWZpbmUgRlNfRk9fRVJSX01TSyAgIDB4NWYgLyogRXJyb3IgbWFzayAqLwoKI2RlZmluZSBSRkxGTCAgICAgICAgICAgMHgwNgojZGVmaW5lIFJGTEZIICAgICAgICAgICAweDA3CgovKiBTZXQgNiAqLwojZGVmaW5lIElSX0NGRzIJCTB4MDAKI2RlZmluZSBJUl9DRkcyX0RJU19DUkMJMHgwMgoKLyogU2V0IDcgKi8KI2RlZmluZSBJUk1fQ1IJCTB4MDcgLyogSW5mcmFyZWQgbW9kdWxlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KI2RlZmluZSBJUk1fQ1JfSVJYX01TTAkweDQwCiNkZWZpbmUgSVJNX0NSX0FGX01OVCAgIDB4ODAgLyogQXV0b21hdGljIGZvcm1hdCAqLwoKLyogRm9yIHN0b3JpbmcgZW50cmllcyBpbiB0aGUgc3RhdHVzIEZJRk8gKi8Kc3RydWN0IHN0X2ZpZm9fZW50cnkgewoJaW50IHN0YXR1czsKCWludCBsZW47Cn07CgpzdHJ1Y3Qgc3RfZmlmbyB7CglzdHJ1Y3Qgc3RfZmlmb19lbnRyeSBlbnRyaWVzWzEwXTsKCWludCBoZWFkOwoJaW50IHRhaWw7CglpbnQgbGVuOwp9OwoKLyogUHJpdmF0ZSBkYXRhIGZvciBlYWNoIGluc3RhbmNlICovCnN0cnVjdCB3ODM5NzdhZl9pciB7CglzdHJ1Y3Qgc3RfZmlmbyBzdF9maWZvOwoKCWludCB0eF9idWZmX29mZnNldHNbMTBdOyAvKiBPZmZzZXRzIGJldHdlZW4gZnJhbWVzIGluIHR4X2J1ZmYgKi8KCWludCB0eF9sZW47ICAgICAgICAgIC8qIE51bWJlciBvZiBmcmFtZXMgaW4gdHhfYnVmZiAqLwoKCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7IC8qIFllcyEgd2UgYXJlIHNvbWUga2luZCBvZiBuZXRkZXZpY2UgKi8KCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwoJCglzdHJ1Y3QgaXJsYXBfY2IgICAgKmlybGFwOyAvKiBUaGUgbGluayBsYXllciB3ZSBhcmUgYmluZGVkIHRvICovCglzdHJ1Y3QgcW9zX2luZm8gICAgIHFvczsgICAvKiBRb1MgY2FwYWJpbGl0aWVzIGZvciB0aGlzIGRldmljZSAqLwoJCgljaGlwaW9fdCBpbzsgICAgICAgICAgICAgICAvKiBJckRBIGNvbnRyb2xsZXIgaW5mb3JtYXRpb24gKi8KCWlvYnVmZl90IHR4X2J1ZmY7ICAgICAgICAgIC8qIFRyYW5zbWl0IGJ1ZmZlciAqLwoJaW9idWZmX3QgcnhfYnVmZjsgICAgICAgICAgLyogUmVjZWl2ZSBidWZmZXIgKi8KCWRtYV9hZGRyX3QgdHhfYnVmZl9kbWE7CglkbWFfYWRkcl90IHJ4X2J1ZmZfZG1hOwoKCS8qIE5vdGUgOiBjdXJyZW50bHkgbG9ja2luZyBpcyAqdmVyeSogaW5jb21wbGV0ZSwgYnV0IHRoaXMKCSAqIHdpbGwgZ2V0IHlvdSBzdGFydGVkLiBDaGVjayBpbiBuc2MtaXJjYy5jIGZvciBhIHByb3BlcgoJICogbG9ja2luZyBzdHJhdGVneS4gLSBKZWFuIElJICovCglzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAvKiBGb3Igc2VyaWFsaXppbmcgb3BlcmF0aW9ucyAqLwoJCglfX3UzMiBuZXdfc3BlZWQ7Cn07CgpzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX2JhbmsoIGludCBpb2Jhc2UsIGludCBzZXQpCnsKCW91dGIoc2V0LCBpb2Jhc2UrU1NSKTsKfQoKI2VuZGlmCg==