From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail4.dataductus.se (ns3.dataductus.se [213.199.99.203]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTP id 497FFDDEE8 for ; Fri, 21 Dec 2007 10:59:34 +1100 (EST) Received: from ddskmerak.dataductus.se ([192.168.4.26]) by mail4.dataductus.se (8.13.4/8.13.4) with ESMTP id lBKMfVeS009963 for ; Thu, 20 Dec 2007 23:41:31 +0100 Received: from localhost ([127.0.0.1]) by ddskmerak.dataductus.se (IceWarp 9.1.0) with SMTP id ZIJ68711 for ; Thu, 20 Dec 2007 23:41:11 +0100 Date: Thu, 20 Dec 2007 23:41:11 +0100 From: "Ronnie Hedlund" To: linuxppc-embedded@ozlabs.org Subject: ppc4xx_dma Message-ID: <544637600cfb52005d8bce33fec6e5a5@dataductus.se> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="--EE3B6242DBEBA914A74B4E97AD5F0ED5" Reply-To: Ronnie Hedlund List-Id: Linux on Embedded PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This is a multi-part message in MIME format. ----EE3B6242DBEBA914A74B4E97AD5F0ED5 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Hi, DMA code (for the EBC) is broken for ppc4xx as it is (for all CPUs) in the linux kernel. This (or some of it) should be implemented in the ppc kernel (since the same broken code has been provided for many years). This works, and is thread safe. It can use more than one channel in parallel, without causing the "one in a million"-type of errors that WILL happen using the current code. The old post regarding this matter. http://ozlabs.org/pipermail/linuxppc-embedded/2005-December/021225.html It is true that this code does handle the dma-memory in a new way, memory for the sg list is allocated dynamically, which takes a little more CPU time at allocation, but it can still operate on any DMA transfer size (as opposed to the hard coded value (<600Kb) used in current code). Reallocation can be prevented by keeping an allocation for many concurrent transfers. Hope to help someone, but I'm somewhat shocked that the DMA code in the current 2.6 kernel is in the same state as it was many years ago in the 2.4 kernel, even though patches exists... Seems everyone that uses the DMA->PLB3 (EBC) needs to patch the kernel code them selves (I'm probably the only one using it/has the hardware to run it, since not much has happened). [Maybe patches like this are implemented already, then this post was not necessary] Which you a nice DMA. /Ronnie Hedlund ----EE3B6242DBEBA914A74B4E97AD5F0ED5 Content-Type: text/plain; name="ppc4xx_dma.h" Content-Transfer-Encoding: base64 LyoKICogaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9kbWEuaAogKgogKiBJQk0g UFBDNHh4IERNQSBlbmdpbmUgbGlicmFyeQogKgogKiBDb3B5cmlnaHQgMjAw MC0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgogKgogKiBDbGVhbmVk IHVwIGEgYml0IG1vcmUsIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5j cmFzaGluZy5vcmc+CiAqCiAqIE9yaWdpbmFsIGNvZGUgYnkgQXJtaW4gS3Vz dGVyIDxha3VzdGVyQG12aXN0YS5jb20+CiAqIGFuZCBQZXRlIFBvcG92IDxw cG9wb3ZAbXZpc3RhLmNvbT4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9k aWZ5IGl0CiAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJh bCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogKiBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKICogb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCiAq IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogKiA2NzUgTWFzcyBBdmUs IENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCgojaWZkZWYgX19LRVJO RUxfXwojaWZuZGVmIF9fQVNNUFBDX1BQQzR4eF9ETUFfSAojZGVmaW5lIF9f QVNNUFBDX1BQQzR4eF9ETUFfSAoKI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ CiNpbmNsdWRlIDxhc20vbW11Lmg+CiNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+ CgojdW5kZWYgREVCVUdfNHh4RE1BCgojZGVmaW5lIE1BWF9QUEM0eHhfRE1B X0NIQU5ORUxTCQk0CgovKgogKiBGdW5jdGlvbiByZXR1cm4gc3RhdHVzIGNv ZGVzCiAqIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB3aGV0 aGVyIG9yIG5vdCB0aGUgZnVuY3Rpb24KICogY2FsbCB3YXMgc3VjY2Vzc2Z1 bCwgb3IgYSBiYWQvaW52YWxpZCBwYXJhbWV0ZXIgd2FzIHBhc3NlZC4KICov CiNkZWZpbmUgRE1BX1NUQVRVU19HT09ECQkJMAojZGVmaW5lIERNQV9TVEFU VVNfQkFEX0NIQU5ORUwJCTEKI2RlZmluZSBETUFfU1RBVFVTX0JBRF9IQU5E TEUJCTIKI2RlZmluZSBETUFfU1RBVFVTX0JBRF9NT0RFCQkzCiNkZWZpbmUg RE1BX1NUQVRVU19OVUxMX1BPSU5URVIJCTQKI2RlZmluZSBETUFfU1RBVFVT X09VVF9PRl9NRU1PUlkJNQojZGVmaW5lIERNQV9TVEFUVVNfU0dMX0xJU1Rf RU1QVFkJNgojZGVmaW5lIERNQV9TVEFUVVNfR0VORVJBTF9FUlJPUgk3CiNk ZWZpbmUgRE1BX1NUQVRVU19DSEFOTkVMX05PVEZSRUUJOAoKI2RlZmluZSBE TUFfQ0hBTk5FTF9CVVNZCQkweDgwMDAwMDAwCgovKgogKiBUaGVzZSBpbmRp Y2F0ZSBzdGF0dXMgYXMgcmV0dXJuZWQgZnJvbSB0aGUgRE1BIFN0YXR1cyBS ZWdpc3Rlci4KICovCiNkZWZpbmUgRE1BX1NUQVRVU19OT19FUlJPUgkwCiNk ZWZpbmUgRE1BX1NUQVRVU19DUwkJMQkvKiBDb3VudCBTdGF0dXMgICAgICAg ICovCiNkZWZpbmUgRE1BX1NUQVRVU19UUwkJMgkvKiBUcmFuc2ZlciBTdGF0 dXMgICAgICovCiNkZWZpbmUgRE1BX1NUQVRVU19ETUFfRVJST1IJMwkvKiBE TUEgRXJyb3IgT2NjdXJyZWQgICovCiNkZWZpbmUgRE1BX1NUQVRVU19ETUFf QlVTWQk0CS8qIFRoZSBjaGFubmVsIGlzIGJ1c3kgKi8KCgovKgogKiBETUEg Q2hhbm5lbCBDb250cm9sIFJlZ2lzdGVycwogKi8KCiNpZiBkZWZpbmVkKENP TkZJR180NHgpICYmICFkZWZpbmVkKENPTkZJR180NDBFUCkKI2RlZmluZQlQ UEM0eHhfRE1BXzY0QklUCiNkZWZpbmUgRE1BX0NSX09GRlNFVCAxCiNlbHNl CiNkZWZpbmUgRE1BX0NSX09GRlNFVCAwCiNlbmRpZgoKI2RlZmluZSBETUFf Q0VfRU5BQkxFICAgICAgICAoMTw8MzEpCS8qIERNQSBDaGFubmVsIEVuYWJs ZSAqLwojZGVmaW5lIFNFVF9ETUFfQ0VfRU5BQkxFKHgpICgoKHgpJjB4MSk8 PDMxKQojZGVmaW5lIEdFVF9ETUFfQ0VfRU5BQkxFKHgpICgoKHgpJkRNQV9D RV9FTkFCTEUpPj4zMSkKCiNkZWZpbmUgRE1BX0NJRV9FTkFCTEUgICAgICAg ICgxPDwzMCkJLyogRE1BIENoYW5uZWwgSW50ZXJydXB0IEVuYWJsZSAqLwoj ZGVmaW5lIFNFVF9ETUFfQ0lFX0VOQUJMRSh4KSAoKCh4KSYweDEpPDwzMCkK I2RlZmluZSBHRVRfRE1BX0NJRV9FTkFCTEUoeCkgKCgoeCkmRE1BX0NJRV9F TkFCTEUpPj4zMCkKCiNkZWZpbmUgRE1BX1REICAgICAgICAgICAgICAgICgx PDwyOSkKI2RlZmluZSBTRVRfRE1BX1REKHgpICAgICAgICAgKCgoeCkmMHgx KTw8MjkpCiNkZWZpbmUgR0VUX0RNQV9URCh4KSAgICAgICAgICgoKHgpJkRN QV9URCk+PjI5KQoKI2RlZmluZSBETUFfUEwgICAgICAgICAgICAgICAgKDE8 PDI4KQkvKiBQZXJpcGhlcmFsIExvY2F0aW9uICovCiNkZWZpbmUgU0VUX0RN QV9QTCh4KSAgICAgICAgICgoKHgpJjB4MSk8PDI4KQojZGVmaW5lIEdFVF9E TUFfUEwoeCkgICAgICAgICAoKCh4KSZETUFfUEwpPj4yOCkKCiNkZWZpbmUg RVhURVJOQUxfUEVSSVBIRVJBTCAgICAwCiNkZWZpbmUgSU5URVJOQUxfUEVS SVBIRVJBTCAgICAxCgojZGVmaW5lIFNFVF9ETUFfUFcoeCkgICAgICgoKHgp JjB4Myk8PCgyNi1ETUFfQ1JfT0ZGU0VUKSkJLyogUGVyaXBoZXJhbCBXaWR0 aCAqLwojZGVmaW5lIERNQV9QV19NQVNLICAgICAgIFNFVF9ETUFfUFcoMykK I2RlZmluZSAgIFBXXzggICAgICAgICAgICAgICAgIDAKI2RlZmluZSAgIFBX XzE2ICAgICAgICAgICAgICAgIDEKI2RlZmluZSAgIFBXXzMyICAgICAgICAg ICAgICAgIDIKI2RlZmluZSAgIFBXXzY0ICAgICAgICAgICAgICAgIDMKLyog RklYTUU6IEFkZCBQV18xMjggc3VwcG9ydCBmb3IgNDQwR1AgRE1BIGJsb2Nr ICovCiNkZWZpbmUgR0VUX0RNQV9QVyh4KSAgICAgKCgoeCkmRE1BX1BXX01B U0spPj4oMjYtRE1BX0NSX09GRlNFVCkpCgojZGVmaW5lIERNQV9EQUkgICAg ICAgICAgICgxPDwoMjUtRE1BX0NSX09GRlNFVCkpCS8qIERlc3RpbmF0aW9u IEFkZHJlc3MgSW5jcmVtZW50ICovCiNkZWZpbmUgU0VUX0RNQV9EQUkoeCkg ICAgKCgoeCkmMHgxKTw8KDI1LURNQV9DUl9PRkZTRVQpKQoKI2RlZmluZSBE TUFfU0FJICAgICAgICAgICAoMTw8KDI0LURNQV9DUl9PRkZTRVQpKQkvKiBT b3VyY2UgQWRkcmVzcyBJbmNyZW1lbnQgKi8KI2RlZmluZSBTRVRfRE1BX1NB SSh4KSAgICAoKCh4KSYweDEpPDwoMjQtRE1BX0NSX09GRlNFVCkpCgojZGVm aW5lIERNQV9CRU4gICAgICAgICAgICgxPDwoMjMtRE1BX0NSX09GRlNFVCkp CS8qIEJ1ZmZlciBFbmFibGUgKi8KI2RlZmluZSBTRVRfRE1BX0JFTih4KSAg ICAoKCh4KSYweDEpPDwoMjMtRE1BX0NSX09GRlNFVCkpCgojZGVmaW5lIFNF VF9ETUFfVE0oeCkgICAgICgoKHgpJjB4Myk8PCgyMS1ETUFfQ1JfT0ZGU0VU KSkJLyogVHJhbnNmZXIgTW9kZSAqLwojZGVmaW5lIERNQV9UTV9NQVNLICAg ICAgIFNFVF9ETUFfVE0oMykKI2RlZmluZSAgIFRNX1BFUklQSEVSQUwgICAg ICAgIDAJLyogUGVyaXBoZXJhbCAqLwojZGVmaW5lICAgVE1fUkVTRVJWRUQg ICAgICAgICAgMQkvKiBSZXNlcnZlZCAqLwojZGVmaW5lICAgVE1fU19NTSAg ICAgICAgICAgICAgMgkvKiBNZW1vcnkgdG8gTWVtb3J5ICovCiNkZWZpbmUg ICBUTV9EX01NICAgICAgICAgICAgICAzCS8qIERldmljZSBQYWNlZCBNZW1v cnkgdG8gTWVtb3J5ICovCiNkZWZpbmUgR0VUX0RNQV9UTSh4KSAgICAgKCgo eCkmRE1BX1RNX01BU0spPj4oMjEtRE1BX0NSX09GRlNFVCkpCgojZGVmaW5l IFNFVF9ETUFfUFNDKHgpICAgICgoKHgpJjB4Myk8PCgxOS1ETUFfQ1JfT0ZG U0VUKSkJLyogUGVyaXBoZXJhbCBTZXR1cCBDeWNsZXMgKi8KI2RlZmluZSBE TUFfUFNDX01BU0sgICAgICBTRVRfRE1BX1BTQygzKQojZGVmaW5lIEdFVF9E TUFfUFNDKHgpICAgICgoKHgpJkRNQV9QU0NfTUFTSyk+PigxOS1ETUFfQ1Jf T0ZGU0VUKSkKCiNkZWZpbmUgU0VUX0RNQV9QV0MoeCkgICAgKCgoeCkmMHgz Rik8PCgxMy1ETUFfQ1JfT0ZGU0VUKSkJLyogUGVyaXBoZXJhbCBXYWl0IEN5 Y2xlcyAqLwojZGVmaW5lIERNQV9QV0NfTUFTSyAgICAgIFNFVF9ETUFfUFdD KDB4M0YpCiNkZWZpbmUgR0VUX0RNQV9QV0MoeCkgICAgKCgoeCkmRE1BX1BX Q19NQVNLKT4+KDEzLURNQV9DUl9PRkZTRVQpKQoKI2RlZmluZSBTRVRfRE1B X1BIQyh4KSAgICAoKCh4KSYweDcpPDwoMTAtRE1BX0NSX09GRlNFVCkpCS8q IFBlcmlwaGVyYWwgSG9sZCBDeWNsZXMgKi8KI2RlZmluZSBETUFfUEhDX01B U0sgICAgICBTRVRfRE1BX1BIQygweDcpCiNkZWZpbmUgR0VUX0RNQV9QSEMo eCkgICAgKCgoeCkmRE1BX1BIQ19NQVNLKT4+KDEwLURNQV9DUl9PRkZTRVQp KQoKI2RlZmluZSBETUFfRVREX09VVFBVVCAgICAgKDE8PCg5LURNQV9DUl9P RkZTRVQpKQkvKiBFT1QgcGluIGlzIGEgVEMgb3V0cHV0ICovCiNkZWZpbmUg U0VUX0RNQV9FVEQoeCkgICAgICgoKHgpJjB4MSk8PCg5LURNQV9DUl9PRkZT RVQpKQoKI2RlZmluZSBETUFfVENFX0VOQUJMRSAgICAgKDE8PCg4LURNQV9D Ul9PRkZTRVQpKQojZGVmaW5lIFNFVF9ETUFfVENFKHgpICAgICAoKCh4KSYw eDEpPDwoOC1ETUFfQ1JfT0ZGU0VUKSkKCiNkZWZpbmUgRE1BX0RFQyAgICAg ICAgICAgICgxPDwoMikpCS8qIEFkZHJlc3MgRGVjcmVtZW50ICovCiNkZWZp bmUgU0VUX0RNQV9ERUMoeCkgICAgICgoKHgpJjB4MSk8PDIpCiNkZWZpbmUg R0VUX0RNQV9ERUMoeCkgICAgICgoKHgpJkRNQV9ERUMpPj4yKQoKCi8qCiAq IFRyYW5zZmVyIE1vZGVzCiAqIFRoZXNlIG1vZGVzIGFyZSBkZWZpbmVkIGlu IGEgd2F5IHRoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8KICogc2ltcGx5ICJv ciIgaW4gdGhlIHZhbHVlIGluIHRoZSBjb250cm9sIHJlZ2lzdGVyLgogKi8K CiNkZWZpbmUgRE1BX01PREVfTU0JCShTRVRfRE1BX1RNKFRNX1NfTU0pKQkv KiBtZW1vcnkgdG8gbWVtb3J5ICovCgoJCQkJLyogRGV2aWNlLXBhY2VkIG1l bW9yeSB0byBtZW1vcnksICovCgkJCQkvKiBkZXZpY2UgaXMgYXQgc291cmNl IGFkZHJlc3MgICAgKi8KI2RlZmluZSBETUFfTU9ERV9NTV9ERVZBVFNSQwko RE1BX1REIHwgU0VUX0RNQV9UTShUTV9EX01NKSkKCgkJCQkvKiBEZXZpY2Ut cGFjZWQgbWVtb3J5IHRvIG1lbW9yeSwgICAgICAqLwoJCQkJLyogZGV2aWNl IGlzIGF0IGRlc3RpbmF0aW9uIGFkZHJlc3MgICAgKi8KI2RlZmluZSBETUFf TU9ERV9NTV9ERVZBVERTVAkoU0VUX0RNQV9UTShUTV9EX01NKSkKCi8qIDQw NWdwLzQ0MGdwICovCiNkZWZpbmUgU0VUX0RNQV9QUkVGRVRDSCh4KSAgICgo KHgpJjB4Myk8PCg0LURNQV9DUl9PRkZTRVQpKQkvKiBNZW1vcnkgUmVhZCBQ cmVmZXRjaCAqLwojZGVmaW5lIERNQV9QUkVGRVRDSF9NQVNLICAgICAgU0VU X0RNQV9QUkVGRVRDSCgzKQojZGVmaW5lICAgUFJFRkVUQ0hfMSAgICAgICAg ICAgMAkvKiBQcmVmZXRjaCAxIERvdWJsZSBXb3JkICovCiNkZWZpbmUgICBQ UkVGRVRDSF8yICAgICAgICAgICAxCiNkZWZpbmUgICBQUkVGRVRDSF80ICAg ICAgICAgICAyCiNkZWZpbmUgR0VUX0RNQV9QUkVGRVRDSCh4KSAoKCh4KSZE TUFfUFJFRkVUQ0hfTUFTSyk+Pig0LURNQV9DUl9PRkZTRVQpKQoKI2RlZmlu ZSBETUFfUENFICAgICAgICAgICAgKDE8PCgzLURNQV9DUl9PRkZTRVQpKQkv KiBQYXJpdHkgQ2hlY2sgRW5hYmxlICovCiNkZWZpbmUgU0VUX0RNQV9QQ0Uo eCkgICAgICgoKHgpJjB4MSk8PCgzLURNQV9DUl9PRkZTRVQpKQojZGVmaW5l IEdFVF9ETUFfUENFKHgpICAgICAoKCh4KSZETUFfUENFKT4+KDMtRE1BX0NS X09GRlNFVCkpCgovKiBzdGIzeCAqLwoKI2RlZmluZSBETUFfRUNFX0VOQUJM RSAoMTw8NSkKI2RlZmluZSBTRVRfRE1BX0VDRSh4KSAoKCh4KSYweDEpPDw1 KQojZGVmaW5lIEdFVF9ETUFfRUNFKHgpICgoKHgpJkRNQV9FQ0VfRU5BQkxF KT4+NSkKCiNkZWZpbmUgRE1BX1RDRF9ESVNBQkxFCSgxPDw0KQojZGVmaW5l IFNFVF9ETUFfVENEKHgpICgoKHgpJjB4MSk8PDQpCiNkZWZpbmUgR0VUX0RN QV9UQ0QoeCkgKCgoeCkmRE1BX1RDRF9ESVNBQkxFKT4+NCkKCnR5cGVkZWYg dWludDMyX3Qgc2dsX2hhbmRsZV90OwoKI2lmZGVmIENPTkZJR19QUEM0eHhf RURNQQoKI2lmZGVmIENPTkZJR19WRFIKI2RlZmluZSBTR0xfTElTVF9TSVpF ICg4KjQwOTYpCiNlbHNlCiNkZWZpbmUgU0dMX0xJU1RfU0laRSA0MDk2CiNl bmRpZgojZGVmaW5lIERNQV9QUEM0eHhfU0laRSBTR0xfTElTVF9TSVpFCgoj ZGVmaW5lIFNFVF9ETUFfUFJJT1JJVFkoeCkgICAoKCh4KSYweDMpPDwoNi1E TUFfQ1JfT0ZGU0VUKSkJLyogRE1BIENoYW5uZWwgUHJpb3JpdHkgKi8KI2Rl ZmluZSBETUFfUFJJT1JJVFlfTUFTSyBTRVRfRE1BX1BSSU9SSVRZKDMpCiNk ZWZpbmUgUFJJT1JJVFlfTE9XICAgICAgICAgICAwCiNkZWZpbmUgUFJJT1JJ VFlfTUlEX0xPVyAgICAgICAxCiNkZWZpbmUgUFJJT1JJVFlfTUlEX0hJR0gg ICAgICAyCiNkZWZpbmUgUFJJT1JJVFlfSElHSCAgICAgICAgICAzCiNkZWZp bmUgR0VUX0RNQV9QUklPUklUWSh4KSAoKCh4KSZETUFfUFJJT1JJVFlfTUFT Syk+Pig2LURNQV9DUl9PRkZTRVQpKQoKLyoKICogRE1BIFBvbGFyaXR5IENv bmZpZ3VyYXRpb24gUmVnaXN0ZXIKICovCiNkZWZpbmUgRE1BUmVxX0FjdGl2 ZUxvdyhjaGFuKSAoMTw8KDMxLShjaGFuKjMpKSkKI2RlZmluZSBETUFBY2tf QWN0aXZlTG93KGNoYW4pICgxPDwoMzAtKGNoYW4qMykpKQojZGVmaW5lIEVP VF9BY3RpdmVMb3coY2hhbikgICAgKDE8PCgyOS0oY2hhbiozKSkpCS8qIEVu ZCBvZiBUcmFuc2ZlciAqLwoKLyoKICogRE1BIFNsZWVwIE1vZGUgUmVnaXN0 ZXIKICovCiNkZWZpbmUgU0xFRVBfTU9ERV9FTkFCTEUgKDE8PDIxKQoKLyoK ICogRE1BIFN0YXR1cyBSZWdpc3RlcgogKi8KI2RlZmluZSBETUFfQ1MwICAg ICAgICAgICAoMTw8MzEpCS8qIFRlcm1pbmFsIENvdW50IGhhcyBiZWVuIHJl YWNoZWQgKi8KI2RlZmluZSBETUFfQ1MxICAgICAgICAgICAoMTw8MzApCiNk ZWZpbmUgRE1BX0NTMiAgICAgICAgICAgKDE8PDI5KQojZGVmaW5lIERNQV9D UzMgICAgICAgICAgICgxPDwyOCkKCiNkZWZpbmUgRE1BX1RTMCAgICAgICAg ICAgKDE8PDI3KQkvKiBFbmQgb2YgVHJhbnNmZXIgaGFzIGJlZW4gcmVxdWVz dGVkICovCiNkZWZpbmUgRE1BX1RTMSAgICAgICAgICAgKDE8PDI2KQojZGVm aW5lIERNQV9UUzIgICAgICAgICAgICgxPDwyNSkKI2RlZmluZSBETUFfVFMz ICAgICAgICAgICAoMTw8MjQpCgojZGVmaW5lIERNQV9DSDBfRVJSICAgICAg ICgxPDwyMykJLyogRE1BIENoYW5lbCAwIEVycm9yICovCiNkZWZpbmUgRE1B X0NIMV9FUlIgICAgICAgKDE8PDIyKQojZGVmaW5lIERNQV9DSDJfRVJSICAg ICAgICgxPDwyMSkKI2RlZmluZSBETUFfQ0gzX0VSUiAgICAgICAoMTw8MjAp CgojZGVmaW5lIERNQV9JTl9ETUFfUkVRMCAgICgxPDwxOSkJLyogSW50ZXJu YWwgRE1BIFJlcXVlc3QgaXMgcGVuZGluZyAqLwojZGVmaW5lIERNQV9JTl9E TUFfUkVRMSAgICgxPDwxOCkKI2RlZmluZSBETUFfSU5fRE1BX1JFUTIgICAo MTw8MTcpCiNkZWZpbmUgRE1BX0lOX0RNQV9SRVEzICAgKDE8PDE2KQoKI2Rl ZmluZSBETUFfRVhUX0RNQV9SRVEwICAoMTw8MTUpCS8qIEV4dGVybmFsIERN QSBSZXF1ZXN0IGlzIHBlbmRpbmcgKi8KI2RlZmluZSBETUFfRVhUX0RNQV9S RVExICAoMTw8MTQpCiNkZWZpbmUgRE1BX0VYVF9ETUFfUkVRMiAgKDE8PDEz KQojZGVmaW5lIERNQV9FWFRfRE1BX1JFUTMgICgxPDwxMikKCiNkZWZpbmUg RE1BX0NIMF9CVVNZICAgICAgKDE8PDExKQkvKiBETUEgQ2hhbm5lbCAwIEJ1 c3kgKi8KI2RlZmluZSBETUFfQ0gxX0JVU1kgICAgICAoMTw8MTApCiNkZWZp bmUgRE1BX0NIMl9CVVNZICAgICAgICgxPDw5KQojZGVmaW5lIERNQV9DSDNf QlVTWSAgICAgICAoMTw8OCkKCiNkZWZpbmUgRE1BX1NHMCAgICAgICAgICAg ICgxPDw3KQkvKiBETUEgQ2hhbm5lbCAwIFNjYXR0ZXIvR2F0aGVyIGluIHBy b2dyZXNzICovCiNkZWZpbmUgRE1BX1NHMSAgICAgICAgICAgICgxPDw2KQoj ZGVmaW5lIERNQV9TRzIgICAgICAgICAgICAoMTw8NSkKI2RlZmluZSBETUFf U0czICAgICAgICAgICAgKDE8PDQpCgovKiBETUEgQ2hhbm5lbCBDb3VudCBS ZWdpc3RlciAqLwojZGVmaW5lIERNQV9DVENfQlRFTiAgICAgKDE8PDIzKSAg ICAvKiBCdXJzdCBFbmFibGUvRGlzYWJsZSBiaXQgKi8KI2RlZmluZSBETUFf Q1RDX0JTSVpfTVNLICgzPDwyMSkgICAgLyogTWFzayBvZiB0aGUgQnVyc3Qg c2l6ZSBiaXRzICovCiNkZWZpbmUgRE1BX0NUQ19CU0laXzIgICAoMCkKI2Rl ZmluZSBETUFfQ1RDX0JTSVpfNCAgICgxPDwyMSkKI2RlZmluZSBETUFfQ1RD X0JTSVpfOCAgICgyPDwyMSkKI2RlZmluZSBETUFfQ1RDX0JTSVpfMTYgICgz PDwyMSkKCi8qCiAqIERNQSBTRyBDb21tYW5kIFJlZ2lzdGVyCiAqLwojZGVm aW5lIFNTR19FTkFCTEUoY2hhbikgICAJKDE8PCgzMS1jaGFuKSkJLyogU3Rh cnQgU2NhdHRlciBHYXRoZXIgKi8KI2RlZmluZSBTU0dfTUFTS19FTkFCTEUo Y2hhbikJKDE8PCgxNS1jaGFuKSkJLyogRW5hYmxlIHdyaXRpbmcgdG8gU1NH MCBiaXQgKi8KCi8qCiAqIERNQSBTY2F0dGVyL0dhdGhlciBEZXNjcmlwdG9y IEJpdCBmaWVsZHMKICovCiNkZWZpbmUgU0dfTElOSyAgICAgICAgICAgICgx PDwzMSkJLyogTGluayAqLwojZGVmaW5lIFNHX1RDSV9FTkFCTEUgICAgICAo MTw8MjkpCS8qIEVuYWJsZSBUZXJtaW5hbCBDb3VudCBJbnRlcnJ1cHQgKi8K I2RlZmluZSBTR19FVElfRU5BQkxFICAgICAgKDE8PDI4KQkvKiBFbmFibGUg RW5kIG9mIFRyYW5zZmVyIEludGVycnVwdCAqLwojZGVmaW5lIFNHX0VSSV9F TkFCTEUgICAgICAoMTw8MjcpCS8qIEVuYWJsZSBFcnJvciBJbnRlcnJ1cHQg Ki8KI2RlZmluZSBTR19DT1VOVF9NQVNLICAgICAgIDB4RkZGRgkvKiBDb3Vu dCBGaWVsZCAqLwoKI2RlZmluZSBTRVRfRE1BX0NPTlRST0wgXAogCQkoU0VU X0RNQV9DSUVfRU5BQkxFKHBfaW5pdC0+aW50X2VuYWJsZSkgfCAvKiBpbnRl cnJ1cHQgZW5hYmxlICAgICAgICAgKi8gXAogCQlTRVRfRE1BX0JFTihwX2lu aXQtPmJ1ZmZlcl9lbmFibGUpICAgICB8IC8qIGJ1ZmZlciBlbmFibGUgICAg ICAgICAgICAqL1wKCQlTRVRfRE1BX0VURChwX2luaXQtPmV0ZF9vdXRwdXQp ICAgICAgICB8IC8qIGVuZCBvZiB0cmFuc2ZlciBwaW4gICAgICAqLyBcCgkg ICAgICAgCVNFVF9ETUFfVENFKHBfaW5pdC0+dGNlX2VuYWJsZSkgICAgICAg IHwgLyogdGVybWluYWwgY291bnQgZW5hYmxlICAgICovIFwKICAgICAgICAg ICAgICAgIFNFVF9ETUFfUEwocF9pbml0LT5wbCkgICAgICAgICAgICAgICAg IHwgLyogcGVyaXBoZXJhbCBsb2NhdGlvbiAgICAgICovIFwKICAgICAgICAg ICAgICAgIFNFVF9ETUFfREFJKHBfaW5pdC0+ZGFpKSAgICAgICAgICAgICAg IHwgLyogZGVzdCBhZGRyIGluY3JlbWVudCAgICAgICovIFwKICAgICAgICAg ICAgICAgIFNFVF9ETUFfU0FJKHBfaW5pdC0+c2FpKSAgICAgICAgICAgICAg IHwgLyogc3JjIGFkZHIgaW5jcmVtZW50ICAgICAgICovIFwKICAgICAgICAg ICAgICAgIFNFVF9ETUFfUFJJT1JJVFkocF9pbml0LT5jcCkgICAgICAgICAg IHwgIC8qIGNoYW5uZWwgcHJpb3JpdHkgICAgICAgICovIFwKICAgICAgICAg ICAgICAgIFNFVF9ETUFfUFcocF9pbml0LT5wd2lkdGgpICAgICAgICAgICAg IHwgIC8qIHBlcmlwaGVyYWwvYnVzIHdpZHRoICAgICovIFwKICAgICAgICAg ICAgICAgIFNFVF9ETUFfUFNDKHBfaW5pdC0+cHNjKSAgICAgICAgICAgICAg IHwgIC8qIHBlcmlwaGVyYWwgc2V0dXAgY3ljbGVzICovIFwKICAgICAgICAg ICAgICAgIFNFVF9ETUFfUFdDKHBfaW5pdC0+cHdjKSAgICAgICAgICAgICAg IHwgIC8qIHBlcmlwaGVyYWwgd2FpdCBjeWNsZXMgICovIFwKICAgICAgICAg ICAgICAgIFNFVF9ETUFfUEhDKHBfaW5pdC0+cGhjKSAgICAgICAgICAgICAg IHwgIC8qIHBlcmlwaGVyYWwgaG9sZCBjeWNsZXMgICovIFwKICAgICAgICAg ICAgICAgIFNFVF9ETUFfUFJFRkVUQ0gocF9pbml0LT5wZikgICAgICAgICAg ICAgIC8qIHJlYWQgcHJlZmV0Y2ggICAgICAgICAgICovKQoKI2RlZmluZSBH RVRfRE1BX1BPTEFSSVRZKGNoYW4pIChETUFSZXFfQWN0aXZlTG93KGNoYW4p IHwgRE1BQWNrX0FjdGl2ZUxvdyhjaGFuKSB8IEVPVF9BY3RpdmVMb3coY2hh bikpCgojZWxpZiBkZWZpbmVkKENPTkZJR19TVEIwM3h4eCkJCS8qIHN0YjAz eHh4ICovCgojZGVmaW5lIERNQV9QUEM0eHhfU0laRQk0MDk2CgovKgogKiBE TUEgU3RhdHVzIFJlZ2lzdGVyCiAqLwoKI2RlZmluZSBTRVRfRE1BX1BSSU9S SVRZKHgpICAgKCgoeCkmMHgwMDgwMDAwMSkpCS8qIERNQSBDaGFubmVsIFBy aW9yaXR5ICovCiNkZWZpbmUgRE1BX1BSSU9SSVRZX01BU0sJMHgwMDgwMDAw MQojZGVmaW5lICAgUFJJT1JJVFlfTE9XICAgICAgICAgCTB4MDAwMDAwMDAK I2RlZmluZSAgIFBSSU9SSVRZX01JRF9MT1cgICAgIAkweDAwMDAwMDAxCiNk ZWZpbmUgICBQUklPUklUWV9NSURfSElHSCAgICAJMHgwMDgwMDAwMAojZGVm aW5lICAgUFJJT1JJVFlfSElHSCAgICAgICAgCTB4MDA4MDAwMDEKI2RlZmlu ZSBHRVRfRE1BX1BSSU9SSVRZKHgpICgoKCgoeCkmRE1BX1BSSU9SSVRZX01B U0spICYweDAwODAwMDAwKSA+PiAyMiApIHwgKCgoeCkmRE1BX1BSSU9SSVRZ X01BU0spICYweDAwMDAwMDAxKSkKCiNkZWZpbmUgRE1BX0NTMCAgICAgICAg ICAgKDE8PDMxKQkvKiBUZXJtaW5hbCBDb3VudCBoYXMgYmVlbiByZWFjaGVk ICovCiNkZWZpbmUgRE1BX0NTMSAgICAgICAgICAgKDE8PDMwKQojZGVmaW5l IERNQV9DUzIgICAgICAgICAgICgxPDwyOSkKI2RlZmluZSBETUFfQ1MzICAg ICAgICAgICAoMTw8MjgpCgojZGVmaW5lIERNQV9UUzAgICAgICAgICAgICgx PDwyNykJLyogRW5kIG9mIFRyYW5zZmVyIGhhcyBiZWVuIHJlcXVlc3RlZCAq LwojZGVmaW5lIERNQV9UUzEgICAgICAgICAgICgxPDwyNikKI2RlZmluZSBE TUFfVFMyICAgICAgICAgICAoMTw8MjUpCiNkZWZpbmUgRE1BX1RTMyAgICAg ICAgICAgKDE8PDI0KQoKI2RlZmluZSBETUFfQ0gwX0VSUiAgICAgICAoMTw8 MjMpCS8qIERNQSBDaGFuZWwgMCBFcnJvciAqLwojZGVmaW5lIERNQV9DSDFf RVJSICAgICAgICgxPDwyMikKI2RlZmluZSBETUFfQ0gyX0VSUiAgICAgICAo MTw8MjEpCiNkZWZpbmUgRE1BX0NIM19FUlIgICAgICAgKDE8PDIwKQoKI2Rl ZmluZSBETUFfQ1QwCQkgICgxPDwxOSkJLyogQ2hhaW5lZCB0cmFuc2ZlcmUg Ki8KCiNkZWZpbmUgRE1BX0lOX0RNQV9SRVEwICAgKDE8PDE4KQkvKiBJbnRl cm5hbCBETUEgUmVxdWVzdCBpcyBwZW5kaW5nICovCiNkZWZpbmUgRE1BX0lO X0RNQV9SRVExICAgKDE8PDE3KQojZGVmaW5lIERNQV9JTl9ETUFfUkVRMiAg ICgxPDwxNikKI2RlZmluZSBETUFfSU5fRE1BX1JFUTMgICAoMTw8MTUpCgoj ZGVmaW5lIERNQV9FWFRfRE1BX1JFUTAgICgxPDwxNCkJLyogRXh0ZXJuYWwg RE1BIFJlcXVlc3QgaXMgcGVuZGluZyAqLwojZGVmaW5lIERNQV9FWFRfRE1B X1JFUTEgICgxPDwxMykKI2RlZmluZSBETUFfRVhUX0RNQV9SRVEyICAoMTw8 MTIpCiNkZWZpbmUgRE1BX0VYVF9ETUFfUkVRMyAgKDE8PDExKQoKI2RlZmlu ZSBETUFfQ0gwX0JVU1kgICAgICAoMTw8MTApCS8qIERNQSBDaGFubmVsIDAg QnVzeSAqLwojZGVmaW5lIERNQV9DSDFfQlVTWSAgICAgICgxPDw5KQojZGVm aW5lIERNQV9DSDJfQlVTWSAgICAgICAoMTw8OCkKI2RlZmluZSBETUFfQ0gz X0JVU1kgICAgICAgKDE8PDcpCgojZGVmaW5lIERNQV9DVDEgICAgICAgICAg ICAoMTw8NikJLyogQ2hhaW5lZCB0cmFuc2ZlcmUgKi8KI2RlZmluZSBETUFf Q1QyICAgICAgICAgICAgKDE8PDUpCiNkZWZpbmUgRE1BX0NUMyAgICAgICAg ICAgICgxPDw0KQoKI2RlZmluZSBETUFfQ0hfRU5BQkxFICgxPDw3KQojZGVm aW5lIFNFVF9ETUFfQ0goeCkgKCgoeCkmMHgxKTw8NykKI2RlZmluZSBHRVRf RE1BX0NIKHgpICgoKHgpJkRNQV9DSF9FTkFCTEUpPj43KQoKLyogU1RCeDI1 eHh4IGRtYSB1bmlxdWUgKi8KLyogZW5hYmxlIGRldmljZSBwb3J0IG9uIGEg ZG1hIGNoYW5uZWwKICogZXhhbXBsZSBleHQgMCBvbiBkbWEgMQogKi8KCiNk ZWZpbmUJU1NQMF9SRUNWCTE1CiNkZWZpbmUJU1NQMF9YTUlUCTE0CiNkZWZp bmUgRVhUX0RNQV8wCTEyCiNkZWZpbmUJU0MxX1hNSVQJMTEKI2RlZmluZSBT QzFfUkVDVgkxMAojZGVmaW5lIEVYVF9ETUFfMgk5CiNkZWZpbmUJRVhUX0RN QV8zCTgKI2RlZmluZSBTRVJJQUwyX1hNSVQJNwojZGVmaW5lIFNFUklBTDJf UkVDVgk2CiNkZWZpbmUgU0MwX1hNSVQgCTUKI2RlZmluZQlTQzBfUkVDVgk0 CiNkZWZpbmUJU0VSSUFMMV9YTUlUCTMKI2RlZmluZSBTRVJJQUwxX1JFQ1YJ MgojZGVmaW5lCVNFUklBTDBfWE1JVAkxCiNkZWZpbmUgU0VSSUFMMF9SRUNW CTAKCiNkZWZpbmUgRE1BX0NIQU5fMAkxCiNkZWZpbmUgRE1BX0NIQU5fMQky CiNkZWZpbmUgRE1BX0NIQU5fMgkzCiNkZWZpbmUgRE1BX0NIQU5fMwk0Cgov KiBlbmQgU1RCeDI1eHggKi8KCi8qCiAqIEJpdCAzMCBtdXN0IGJlIG9uZSBm b3IgUmVkd29vZHMsIG90aGVyd2lzZSB0cmFuc2ZlcnMgbWF5IHJlY2VpdmUg ZXJyb3JzLgogKi8KI2RlZmluZSBETUFfQ1JfTUIwIDB4MgoKI2RlZmluZSBT RVRfRE1BX0NPTlRST0wgXAogICAgICAgCQkoU0VUX0RNQV9DSUVfRU5BQkxF KHBfaW5pdC0+aW50X2VuYWJsZSkgfCAgLyogaW50ZXJydXB0IGVuYWJsZSAg ICAgICAgICovIFwKCQlTRVRfRE1BX0VURChwX2luaXQtPmV0ZF9vdXRwdXQp ICAgICAgICB8ICAvKiBlbmQgb2YgdHJhbnNmZXIgcGluICAgICAgKi8gXAoJ CVNFVF9ETUFfVENFKHBfaW5pdC0+dGNlX2VuYWJsZSkgICAgICAgIHwgIC8q IHRlcm1pbmFsIGNvdW50IGVuYWJsZSAgICAqLyBcCgkJU0VUX0RNQV9QTChw X2luaXQtPnBsKSAgICAgICAgICAgICAgICAgfCAgLyogcGVyaXBoZXJhbCBs b2NhdGlvbiAgICAgICovIFwKCQlTRVRfRE1BX0RBSShwX2luaXQtPmRhaSkg ICAgICAgICAgICAgICB8ICAvKiBkZXN0IGFkZHIgaW5jcmVtZW50ICAgICAg Ki8gXAoJCVNFVF9ETUFfU0FJKHBfaW5pdC0+c2FpKSAgICAgICAgICAgICAg IHwgIC8qIHNyYyBhZGRyIGluY3JlbWVudCAgICAgICAqLyBcCgkJU0VUX0RN QV9QUklPUklUWShwX2luaXQtPmNwKSAgICAgICAgICAgfCAgLyogY2hhbm5l bCBwcmlvcml0eSAgICAgICAgKi8gIFwKCQlTRVRfRE1BX1BXKHBfaW5pdC0+ cHdpZHRoKSAgICAgICAgICAgICB8ICAvKiBwZXJpcGhlcmFsL2J1cyB3aWR0 aCAgICAqLyBcCgkJU0VUX0RNQV9QU0MocF9pbml0LT5wc2MpICAgICAgICAg ICAgICAgfCAgLyogcGVyaXBoZXJhbCBzZXR1cCBjeWNsZXMgKi8gXAoJCVNF VF9ETUFfUFdDKHBfaW5pdC0+cHdjKSAgICAgICAgICAgICAgIHwgIC8qIHBl cmlwaGVyYWwgd2FpdCBjeWNsZXMgICovIFwKCQlTRVRfRE1BX1BIQyhwX2lu aXQtPnBoYykgICAgICAgICAgICAgICB8ICAvKiBwZXJpcGhlcmFsIGhvbGQg Y3ljbGVzICAqLyBcCgkJU0VUX0RNQV9UQ0QocF9pbml0LT50Y2RfZGlzYWJs ZSkJICB8ICAvKiBUQyBjaGFpbiBtb2RlIGRpc2FibGUgICAqLyBcCgkJU0VU X0RNQV9FQ0UocF9pbml0LT5lY2VfZW5hYmxlKQkgIHwgIC8qIEVDRSBjaGFu aW4gbW9kZSBlbmFibGUgICovIFwKCQlTRVRfRE1BX0NIKHBfaW5pdC0+Y2hf ZW5hYmxlKQl8ICAgIC8qIENoYWluIGVuYWJsZSAJICAgICAgICAqLyBcCgkJ RE1BX0NSX01CMAkJCQkvKiBtdXN0IGJlIG9uZSAqLykKCiNkZWZpbmUgR0VU X0RNQV9QT0xBUklUWShjaGFuKSBjaGFuCgojZW5kaWYKCnR5cGVkZWYgc3Ry dWN0IHsKCXVuc2lnbmVkIHNob3J0IGluX3VzZTsJLyogc2V0IHdoZW4gY2hh bm5lbCBpcyBiZWluZyB1c2VkLCBjbHIgd2hlbgoJCQkJICogYXZhaWxhYmxl LgoJCQkJICovCgkvKgoJICogVmFsaWQgcG9sYXJpdHkgc2V0dGluZ3M6Cgkg KiAgIERNQVJlcV9BY3RpdmVMb3cobikKCSAqICAgRE1BQWNrX0FjdGl2ZUxv dyhuKQoJICogICBFT1RfQWN0aXZlTG93KG4pCgkgKgoJICogICBuIGlzIDAg dG8gbWF4IGRtYSBjaGFucwoJICovCgl1bnNpZ25lZCBpbnQgcG9sYXJpdHk7 CgoJY2hhciBidWZmZXJfZW5hYmxlOwkvKiBCb29sZWFuOiBidWZmZXIgZW5h YmxlICAgICAgICAgICAgKi8KCWNoYXIgdGNlX2VuYWJsZTsJLyogQm9vbGVh bjogdGVybWluYWwgY291bnQgZW5hYmxlICAgICovCgljaGFyIGV0ZF9vdXRw dXQ7CS8qIEJvb2xlYW46IGVvdCBwaW4gaXMgYSB0YyBvdXRwdXQgICAqLwoJ Y2hhciBwY2U7CQkvKiBCb29sZWFuOiBwYXJpdHkgY2hlY2sgZW5hYmxlICAg ICAgKi8KCgkvKgoJICogUGVyaXBoZXJhbCBsb2NhdGlvbjoKCSAqIElOVEVS TkFMX1BFUklQSEVSQUwgKFVBUlQwIG9uIHRoZSA0MDVHUCkKCSAqIEVYVEVS TkFMX1BFUklQSEVSQUwKCSAqLwoJY2hhciBwbDsJCS8qIGludGVybmFsL2V4 dGVybmFsIHBlcmlwaGVyYWwgICAgICAqLwoKCS8qCgkgKiBWYWxpZCBwd2lk dGggc2V0dGluZ3M6CgkgKiAgIFBXXzgKCSAqICAgUFdfMTYKCSAqICAgUFdf MzIKCSAqICAgUFdfNjQKCSAqLwoJdW5zaWduZWQgaW50IHB3aWR0aDsKCglj aGFyIGRhaTsJCS8qIEJvb2xlYW46IGRzdCBhZGRyZXNzIGluY3JlbWVudCAg ICovCgljaGFyIHNhaTsJCS8qIEJvb2xlYW46IHNyYyBhZGRyZXNzIGluY3Jl bWVudCAgICovCgoJLyoKCSAqIFZhbGlkIHBzYyBzZXR0aW5nczogMC0zCgkg Ki8KCXVuc2lnbmVkIGludCBwc2M7CS8qIFBlcmlwaGVyYWwgU2V0dXAgQ3lj bGVzICAgICAgICAgKi8KCgkvKgoJICogVmFsaWQgcHdjIHNldHRpbmdzOgoJ ICogMC02MwoJICovCgl1bnNpZ25lZCBpbnQgcHdjOwkvKiBQZXJpcGhlcmFs IFdhaXQgQ3ljbGVzICAgICAgICAgICovCgoJLyoKCSAqIFZhbGlkIHBoYyBz ZXR0aW5nczoKCSAqIDAtNwoJICovCgl1bnNpZ25lZCBpbnQgcGhjOwkvKiBQ ZXJpcGhlcmFsIEhvbGQgQ3ljbGVzICAgICAgICAgICovCgoJLyoKCSAqIFZh bGlkIGNwIChjaGFubmVsIHByaW9yaXR5KSBzZXR0aW5nczoKCSAqICAgUFJJ T1JJVFlfTE9XCgkgKiAgIFBSSU9SSVRZX01JRF9MT1cKCSAqICAgUFJJT1JJ VFlfTUlEX0hJR0gKCSAqICAgUFJJT1JJVFlfSElHSAoJICovCgl1bnNpZ25l ZCBpbnQgY3A7CS8qIGNoYW5uZWwgcHJpb3JpdHkgICAgICAgICAgICAgICAg Ki8KCgkvKgoJICogVmFsaWQgcGYgKG1lbW9yeSByZWFkIHByZWZldGNoKSBz ZXR0aW5nczoKCSAqCgkgKiAgIFBSRUZFVENIXzEKCSAqICAgUFJFRkVUQ0hf MgoJICogICBQUkVGRVRDSF80CgkgKi8KCXVuc2lnbmVkIGludCBwZjsJLyog bWVtb3J5IHJlYWQgcHJlZmV0Y2ggICAgICAgICAgICAqLwoKCS8qCgkgKiBC b29sZWFuOiBjaGFubmVsIGludGVycnVwdCBlbmFibGUKCSAqIE5PVEU6IGZv ciBzZ2wgdHJhbnNmZXJzLCBvbmx5IHRoZSBsYXN0IGRlc2NyaXB0b3Igd2ls bCBiZSBzZXR1cCB0bwoJICogaW50ZXJydXB0LgoJICovCgljaGFyIGludF9l bmFibGU7CgoJY2hhciBzaGlmdDsJCS8qIGVhc3kgYWNjZXNzIHRvIGJ5dGVf Y291bnQgc2hpZnQsIGJhc2VkIG9uICovCgkvKiB0aGUgd2lkdGggb2YgdGhl IGNoYW5uZWwgICAgICAgICAgICAgICAgICAqLwoKCXVpbnQzMl90IGNvbnRy b2w7CS8qIGNoYW5uZWwgY29udHJvbCB3b3JkICAgICAgICAgICAgICAgICAg ICAgICovCgoJLyogVGhlc2UgdmFyaWFibGVkIGFyZSB1c2VkIE9OTFkgaW4g c2luZ2xlIGRtYSB0cmFuc2ZlcnMgICAgICAgICAgICAgICovCgl1bnNpZ25l ZCBpbnQgbW9kZTsJLyogdHJhbnNmZXIgbW9kZSAgICAgICAgICAgICAgICAg ICAgICovCglwaHlzX2FkZHJfdCBhZGRyOwoJY2hhciBjZTsJCS8qIGNoYW5u ZWwgZW5hYmxlICovCiNpZmRlZiBDT05GSUdfU1RCMDN4eHgKCWNoYXIgY2hf ZW5hYmxlOwoJY2hhciB0Y2RfZGlzYWJsZTsKCWNoYXIgZWNlX2VuYWJsZTsK CWNoYXIgdGQ7CQkvKiB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KI2VuZGlmCgoJ Y2hhciBpbnRfb25fZmluYWxfc2c7LyogZm9yIHNjYXR0ZXIvZ2F0aGVyIC0g b25seSBpbnRlcnJ1cHQgb24gbGFzdCBzZyAqLwp9IHBwY19kbWFfY2hfdDsK Ci8qCiAqIFBQQzQ0eCBETUEgaW1wbGVtZW50YXRpb25zIGhhdmUgYSBzbGln aHRseSBkaWZmZXJlbnQKICogZGVzY3JpcHRvciBsYXlvdXQuICBQcm9iYWJs eSBtb3ZlZCBhYm91dCBkdWUgdG8gdGhlCiAqIGNoYW5nZSB0byA2NC1iaXQg YWRkcmVzc2VzIGFuZCBsaW5rIHBvaW50ZXIuIEkgZG9uJ3QKICoga25vdyB3 aHkgdGhleSBkaWRuJ3QganVzdCBsZWF2ZSBjb250cm9sX2NvdW50IGFmdGVy CiAqIHRoZSBkc3RfYWRkci4KICovCiNpZmRlZiBQUEM0eHhfRE1BXzY0QklU CnR5cGVkZWYgc3RydWN0IHsKCXVpbnQzMl90IGNvbnRyb2w7Cgl1aW50MzJf dCBjb250cm9sX2NvdW50OwoJcGh5c19hZGRyX3Qgc3JjX2FkZHI7CglwaHlz X2FkZHJfdCBkc3RfYWRkcjsKCXBoeXNfYWRkcl90IG5leHQ7Cn0gcHBjX3Nn bF90OwojZWxzZQp0eXBlZGVmIHN0cnVjdCB7Cgl1aW50MzJfdCBjb250cm9s OwoJdWludDMyX3Qgc3JjX2FkZHI7Cgl1aW50MzJfdCBkc3RfYWRkcjsKCXVp bnQzMl90IGNvbnRyb2xfY291bnQ7Cgl1aW50MzJfdCBuZXh0Owp9IHBwY19z Z2xfdDsKI2VuZGlmCgp0eXBlZGVmIHN0cnVjdCB7Cgl1bnNpZ25lZCBpbnQg ZG1hbnI7Cgl1aW50MzJfdCBjb250cm9sOwkvKiBjaGFubmVsIGN0cmwgd29y ZDsgbG9hZGVkIGZyb20gZWFjaCBkZXNjcnB0ciAqLwoJdWludDMyX3Qgc2ds X2NvbnRyb2w7CS8qIExLLCBUQ0ksIEVUSSwgYW5kIEVSSSBiaXRzIGluIHNn bCBkZXNjcmlwdG9yICovCglkbWFfYWRkcl90IGRtYV9hZGRyOwkvKiBkbWEg KHBoeXNpY2FsKSBhZGRyZXNzIG9mIHRoaXMgbGlzdCAgICAgICAgICAqLwoJ cHBjX3NnbF90ICpwaGVhZDsKCWRtYV9hZGRyX3QgcGhlYWRfZG1hOwoJcHBj X3NnbF90ICpwdGFpbDsKCWRtYV9hZGRyX3QgcHRhaWxfZG1hOwp9IHNnbF9s aXN0X2luZm9fdDsKCnR5cGVkZWYgc3RydWN0IHsKCXBoeXNfYWRkcl90ICpz cmNfYWRkcjsKCXBoeXNfYWRkcl90ICpkc3RfYWRkcjsKCXBoeXNfYWRkcl90 IGRtYV9zcmNfYWRkcjsKCXBoeXNfYWRkcl90IGRtYV9kc3RfYWRkcjsKfSBw Y2lfYWxsb2NfZGVzY190OwoKZXh0ZXJuIHBwY19kbWFfY2hfdCBkbWFfY2hh bm5lbHNbXTsKCi8qCiAqIFRoZSBETUEgQVBJIGFyZSBpbiBwcGM0eHhfZG1h LmMgYW5kIHBwYzR4eF9zZ2RtYS5jCiAqLwpleHRlcm4gaW50IHBwYzR4eF9p bml0X2RtYV9jaGFubmVsKHVuc2lnbmVkIGludCwgcHBjX2RtYV9jaF90ICop OwpleHRlcm4gaW50IHBwYzR4eF9nZXRfY2hhbm5lbF9jb25maWcodW5zaWdu ZWQgaW50LCBwcGNfZG1hX2NoX3QgKik7CmV4dGVybiBpbnQgcHBjNHh4X3Nl dF9jaGFubmVsX3ByaW9yaXR5KHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50 KTsKZXh0ZXJuIHVuc2lnbmVkIGludCBwcGM0eHhfZ2V0X3BlcmlwaGVyYWxf d2lkdGgodW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgcHBjNHh4X3NldF9z Z19hZGRyKGludCwgcGh5c19hZGRyX3QpOwpleHRlcm4gaW50IHBwYzR4eF9h ZGRfZG1hX3NnbChzZ2xfaGFuZGxlX3QsIHBoeXNfYWRkcl90LCBwaHlzX2Fk ZHJfdCwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgcHBjNHh4X2VuYWJs ZV9kbWFfc2dsKHNnbF9oYW5kbGVfdCk7CmV4dGVybiB2b2lkIHBwYzR4eF9k aXNhYmxlX2RtYV9zZ2woc2dsX2hhbmRsZV90KTsKZXh0ZXJuIHZvaWQgcHBj NHh4X2Rpc2FibGVfZG1hX3NnbF9ucih1bnNpZ25lZCBpbnQgZG1hbnIpOwpl eHRlcm4gaW50IHBwYzR4eF9nZXRfZG1hX3NnbF9yZXNpZHVlKHNnbF9oYW5k bGVfdCwgcGh5c19hZGRyX3QgKiwgcGh5c19hZGRyX3QgKik7CmV4dGVybiBp bnQgcHBjNHh4X2RlbGV0ZV9kbWFfc2dsX2VsZW1lbnQoc2dsX2hhbmRsZV90 LCBwaHlzX2FkZHJfdCAqLCBwaHlzX2FkZHJfdCAqKTsKZXh0ZXJuIGludCBw cGM0eHhfYWxsb2NfZG1hX2hhbmRsZShzZ2xfaGFuZGxlX3QgKiwgdW5zaWdu ZWQgaW50LCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBwcGM0eHhfZnJl ZV9kbWFfaGFuZGxlKHNnbF9oYW5kbGVfdCk7CmV4dGVybiBpbnQgcHBjNHh4 X2dldF9kbWFfc3RhdHVzKHZvaWQpOwpleHRlcm4gaW50IHBwYzR4eF9lbmFi bGVfYnVyc3QodW5zaWduZWQgaW50KTsKZXh0ZXJuIGludCBwcGM0eHhfZGlz YWJsZV9idXJzdCh1bnNpZ25lZCBpbnQpOwpleHRlcm4gaW50IHBwYzR4eF9z ZXRfYnVyc3Rfc2l6ZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CmV4 dGVybiB2b2lkIHBwYzR4eF9zZXRfc3JjX2FkZHIoaW50IGRtYW5yLCBwaHlz X2FkZHJfdCBzcmNfYWRkcik7CmV4dGVybiB2b2lkIHBwYzR4eF9zZXRfZHN0 X2FkZHIoaW50IGRtYW5yLCBwaHlzX2FkZHJfdCBkc3RfYWRkcik7CmV4dGVy biB2b2lkIHBwYzR4eF9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucik7 CmV4dGVybiB2b2lkIHBwYzR4eF9kaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQg ZG1hbnIpOwpleHRlcm4gdm9pZCBwcGM0eHhfc2V0X2RtYV9jb3VudCh1bnNp Z25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBjb3VudCk7CmV4dGVybiBp bnQgcHBjNHh4X2dldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIp OwpleHRlcm4gdm9pZCBwcGM0eHhfc2V0X2RtYV9hZGRyMih1bnNpZ25lZCBp bnQgZG1hbnIsIHBoeXNfYWRkcl90IHNyY19kbWFfYWRkciwKCQkJCSBwaHlz X2FkZHJfdCBkc3RfZG1hX2FkZHIpOwpleHRlcm4gaW50IHBwYzR4eF9lbmFi bGVfZG1hX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgZG1hbnIpOwpleHRlcm4g aW50IHBwYzR4eF9kaXNhYmxlX2RtYV9pbnRlcnJ1cHQodW5zaWduZWQgaW50 IGRtYW5yKTsKZXh0ZXJuIGludCBwcGM0eHhfY2xyX2RtYV9zdGF0dXModW5z aWduZWQgaW50IGRtYW5yKTsKZXh0ZXJuIGludCBwcGM0eHhfbWFwX2RtYV9w b3J0KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IG9jcF9kbWEs c2hvcnQgZG1hX2NoYW4pOwpleHRlcm4gaW50IHBwYzR4eF9kaXNhYmxlX2Rt YV9wb3J0KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IG9jcF9k bWEsc2hvcnQgZG1hX2NoYW4pOwpleHRlcm4gaW50IHBwYzR4eF9zZXRfZG1h X21vZGUodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgbW9kZSk7 CgovKiBUaGVzZSBhcmUgaW4ga2VybmVsL2RtYS5jOiAqLwoKLyogcmVzZXJ2 ZSBhIERNQSBjaGFubmVsICovCmV4dGVybiBpbnQgcmVxdWVzdF9kbWEodW5z aWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpOwovKiBy ZWxlYXNlIGl0IGFnYWluICovCmV4dGVybiB2b2lkIGZyZWVfZG1hKHVuc2ln bmVkIGludCBkbWFucik7CiNlbmRpZgojZW5kaWYJCQkJLyogX19LRVJORUxf XyAqLwo= ----EE3B6242DBEBA914A74B4E97AD5F0ED5 Content-Type: text/plain; name="ppc4xx_dma.c" Content-Transfer-Encoding: base64 LyoKICogSUJNIFBQQzR4eCBETUEgZW5naW5lIGNvcmUgbGlicmFyeQogKgog KiBDb3B5cmlnaHQgMjAwMC0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5j LgogKgogKiBDbGVhbmVkIHVwIGFuZCBjb252ZXJ0ZWQgdG8gbmV3IERDUiBh Y2Nlc3MKICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5n Lm9yZz4KICoKICogT3JpZ2luYWwgY29kZSBieSBBcm1pbiBLdXN0ZXIgPGFr dXN0ZXJAbXZpc3RhLmNvbT4KICogYW5kIFBldGUgUG9wb3YgPHBwb3BvdkBt dmlzdGEuY29tPgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQK ICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAqIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNl bnNlLCBvciAoYXQgeW91cgogKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKICogd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4sCiAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJp ZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KCiNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KI2luY2x1ZGUgPGxpbnV4L21tLmg+CiNpbmNsdWRlIDxsaW51eC9t aXNjZGV2aWNlLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KCiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiNp bmNsdWRlIDxhc20vaW8uaD4KI2luY2x1ZGUgPGFzbS9kbWEuaD4KI2luY2x1 ZGUgPGFzbS9wcGM0eHhfZG1hLmg+CgpwcGNfZG1hX2NoX3QgZG1hX2NoYW5u ZWxzW01BWF9QUEM0eHhfRE1BX0NIQU5ORUxTXTsKCmludApwcGM0eHhfZ2V0 X2RtYV9zdGF0dXModm9pZCkKewoJcmV0dXJuIChtZmRjcihEQ1JOX0RNQVNS KSk7Cn0KCnZvaWQKcHBjNHh4X3NldF9zcmNfYWRkcihpbnQgZG1hbnIsIHBo eXNfYWRkcl90IHNyY19hZGRyKQp7CglpZiAoZG1hbnIgPj0gTUFYX1BQQzR4 eF9ETUFfQ0hBTk5FTFMpIHsKCQlwcmludGsoInNldF9zcmNfYWRkcjogYmFk IGNoYW5uZWw6ICVkXG4iLCBkbWFucik7CgkJcmV0dXJuOwoJfQoKI2lmZGVm IFBQQzR4eF9ETUFfNjRCSVQKCW10ZGNyKERDUk5fRE1BU0FIMCArIGRtYW5y KjIsICh1MzIpKHNyY19hZGRyID4+IDMyKSk7CiNlbHNlCgltdGRjcihEQ1JO X0RNQVNBMCArIGRtYW5yKjIsICh1MzIpc3JjX2FkZHIpOwojZW5kaWYKfQoK dm9pZApwcGM0eHhfc2V0X2RzdF9hZGRyKGludCBkbWFuciwgcGh5c19hZGRy X3QgZHN0X2FkZHIpCnsKCWlmIChkbWFuciA+PSBNQVhfUFBDNHh4X0RNQV9D SEFOTkVMUykgewoJCXByaW50aygic2V0X2RzdF9hZGRyOiBiYWQgY2hhbm5l bDogJWRcbiIsIGRtYW5yKTsKCQlyZXR1cm47Cgl9CgojaWZkZWYgUFBDNHh4 X0RNQV82NEJJVAoJbXRkY3IoRENSTl9ETUFEQUgwICsgZG1hbnIqMiwgKHUz MikoZHN0X2FkZHIgPj4gMzIpKTsKI2Vsc2UKCW10ZGNyKERDUk5fRE1BREEw ICsgZG1hbnIqMiwgKHUzMilkc3RfYWRkcik7CiNlbmRpZgp9Cgp2b2lkCnBw YzR4eF9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKewoJdW5zaWdu ZWQgaW50IGNvbnRyb2w7CglwcGNfZG1hX2NoX3QgKnBfZG1hX2NoID0gJmRt YV9jaGFubmVsc1tkbWFucl07Cgl1bnNpZ25lZCBpbnQgc3RhdHVzX2JpdHNb XSA9IHsgRE1BX0NTMCB8IERNQV9UUzAgfCBETUFfQ0gwX0VSUiwKCQkJCSAg ICAgICBETUFfQ1MxIHwgRE1BX1RTMSB8IERNQV9DSDFfRVJSLAoJCQkJICAg ICAgIERNQV9DUzIgfCBETUFfVFMyIHwgRE1BX0NIMl9FUlIsCgkJCQkgICAg ICAgRE1BX0NTMyB8IERNQV9UUzMgfCBETUFfQ0gzX0VSUn07CgoJaWYgKHBf ZG1hX2NoLT5pbl91c2UpIHsKCQlwcmludGsoImVuYWJsZV9kbWE6IGNoYW5u ZWwgJWQgaW4gdXNlXG4iLCBkbWFucik7CgkJcmV0dXJuOwoJfQoKCWlmIChk bWFuciA+PSBNQVhfUFBDNHh4X0RNQV9DSEFOTkVMUykgewoJCXByaW50aygi ZW5hYmxlX2RtYTogYmFkIGNoYW5uZWw6ICVkXG4iLCBkbWFucik7CgkJcmV0 dXJuOwoJfQoKCWlmIChwX2RtYV9jaC0+bW9kZSA9PSBETUFfTU9ERV9SRUFE KSB7CgkJLyogcGVyaXBoZXJhbCB0byBtZW1vcnkgKi8KCQlwcGM0eHhfc2V0 X3NyY19hZGRyKGRtYW5yLCAwKTsKCQlwcGM0eHhfc2V0X2RzdF9hZGRyKGRt YW5yLCBwX2RtYV9jaC0+YWRkcik7Cgl9IGVsc2UgaWYgKHBfZG1hX2NoLT5t b2RlID09IERNQV9NT0RFX1dSSVRFKSB7CgkJLyogbWVtb3J5IHRvIHBlcmlw aGVyYWwgKi8KCQlwcGM0eHhfc2V0X3NyY19hZGRyKGRtYW5yLCBwX2RtYV9j aC0+YWRkcik7CgkJcHBjNHh4X3NldF9kc3RfYWRkcihkbWFuciwgMCk7Cgl9 CgoJLyogZm9yIG90aGVyIHhmZXIgbW9kZXMsIHRoZSBhZGRyZXNzZXMgYXJl IGFscmVhZHkgc2V0ICovCgljb250cm9sID0gbWZkY3IoRENSTl9ETUFDUjAg KyAoZG1hbnIgKiAweDgpKTsKCgljb250cm9sICY9IH4oRE1BX1RNX01BU0sg fCBETUFfVEQpOwkvKiBjbGVhciBhbGwgbW9kZSBiaXRzICovCglpZiAocF9k bWFfY2gtPm1vZGUgPT0gRE1BX01PREVfTU0pIHsKCQkvKiBzb2Z0d2FyZSBp bml0aWF0ZWQgbWVtb3J5IHRvIG1lbW9yeSAqLwoJCWNvbnRyb2wgfD0gRE1B X0VURF9PVVRQVVQgfCBETUFfVENFX0VOQUJMRTsKCX0KCgltdGRjcihEQ1JO X0RNQUNSMCArIChkbWFuciAqIDB4OCksIGNvbnRyb2wpOwoKCS8qCgkgKiBD bGVhciB0aGUgQ1MsIFRTLCBSSSBiaXRzIGZvciB0aGUgY2hhbm5lbCBmcm9t IERNQVNSLiAgVGhpcwoJICogaGFzIGJlZW4gb2JzZXJ2ZWQgdG8gaGFwcGVu IGNvcnJlY3RseSBvbmx5IGFmdGVyIHRoZSBtb2RlIGFuZAoJICogRVREL0RD RSBiaXRzIGluIERNQUNSeCBhcmUgc2V0IGFib3ZlLiAgTXVzdCBkbyB0aGlz IGJlZm9yZQoJICogZW5hYmxpbmcgdGhlIGNoYW5uZWwuCgkgKi8KCgltdGRj cihEQ1JOX0RNQVNSLCBzdGF0dXNfYml0c1tkbWFucl0pOwoKCS8qCgkgKiBG b3IgZGV2aWNlLXBhY2VkIHRyYW5zZmVycywgVGVybWluYWwgQ291bnQgRW5h YmxlIGFwcGFyZW50bHkKCSAqIG11c3QgYmUgb24sIGFuZCB0aGlzIG11c3Qg YmUgdHVybmVkIG9uIGFmdGVyIHRoZSBtb2RlLCBldGMuCgkgKiBiaXRzIGFy ZSBjbGVhcmVkIGFib3ZlIChhdCBsZWFzdCBvbiBSZWR3b29kLTYpLgoJICov CgoJaWYgKChwX2RtYV9jaC0+bW9kZSA9PSBETUFfTU9ERV9NTV9ERVZBVERT VCkgfHwKCSAgICAocF9kbWFfY2gtPm1vZGUgPT0gRE1BX01PREVfTU1fREVW QVRTUkMpKQoJCWNvbnRyb2wgfD0gRE1BX1RDRV9FTkFCTEU7CgoJLyoKCSAq IE5vdyBlbmFibGUgdGhlIGNoYW5uZWwuCgkgKi8KCgljb250cm9sIHw9IChw X2RtYV9jaC0+bW9kZSB8IERNQV9DRV9FTkFCTEUpOwoKCW10ZGNyKERDUk5f RE1BQ1IwICsgKGRtYW5yICogMHg4KSwgY29udHJvbCk7CgoJcF9kbWFfY2gt PmluX3VzZSA9IDE7Cn0KCnZvaWQKcHBjNHh4X2Rpc2FibGVfZG1hKHVuc2ln bmVkIGludCBkbWFucikKewoJdW5zaWduZWQgaW50IGNvbnRyb2w7CglwcGNf ZG1hX2NoX3QgKnBfZG1hX2NoID0gJmRtYV9jaGFubmVsc1tkbWFucl07CgoJ aWYgKCFwX2RtYV9jaC0+aW5fdXNlKSB7CgkgIC8vCQlwcmludGsoImRpc2Fi bGVfZG1hOiBjaGFubmVsICVkIG5vdCBpbiB1c2VcbiIsIGRtYW5yKTsKCQly ZXR1cm47Cgl9CgoJaWYgKGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5O RUxTKSB7CgkJcHJpbnRrKCJkaXNhYmxlX2RtYTogYmFkIGNoYW5uZWw6ICVk XG4iLCBkbWFucik7CgkJcmV0dXJuOwoJfQoKCWNvbnRyb2wgPSBtZmRjcihE Q1JOX0RNQUNSMCArIChkbWFuciAqIDB4OCkpOwoJY29udHJvbCAmPSB+RE1B X0NFX0VOQUJMRTsKCW10ZGNyKERDUk5fRE1BQ1IwICsgKGRtYW5yICogMHg4 KSwgY29udHJvbCk7CgoJcF9kbWFfY2gtPmluX3VzZSA9IDA7Cn0KCi8qCiAq IFNldHMgdGhlIGRtYSBtb2RlIGZvciBzaW5nbGUgRE1BIHRyYW5zZmVycyBv bmx5LgogKiBGb3Igc2NhdHRlci9nYXRoZXIgdHJhbnNmZXJzLCB0aGUgbW9k ZSBpcyBwYXNzZWQgdG8gdGhlCiAqIGFsbG9jX2RtYV9oYW5kbGUoKSBmdW5j dGlvbiBhcyBvbmUgb2YgdGhlIHBhcmFtZXRlcnMuCiAqCiAqIFRoZSBtb2Rl IGlzIHNpbXBseSBzYXZlZCBhbmQgdXNlZCBsYXRlci4gIFRoaXMgYWxsb3dz CiAqIHRoZSBkcml2ZXIgdG8gY2FsbCBzZXRfZG1hX21vZGUoKSBhbmQgc2V0 X2RtYV9hZGRyKCkgaW4KICogYW55IG9yZGVyLgogKgogKiBWYWxpZCBtb2Rl IHZhbHVlcyBhcmU6CiAqCiAqIERNQV9NT0RFX1JFQUQgICAgICAgICAgcGVy aXBoZXJhbCB0byBtZW1vcnkKICogRE1BX01PREVfV1JJVEUgICAgICAgICBt ZW1vcnkgdG8gcGVyaXBoZXJhbAogKiBETUFfTU9ERV9NTSAgICAgICAgICAg IG1lbW9yeSB0byBtZW1vcnkKICogRE1BX01PREVfTU1fREVWQVRTUkMgICBk ZXZpY2UtcGFjZWQgbWVtb3J5IHRvIG1lbW9yeSwgZGV2aWNlIGF0IHNyYwog KiBETUFfTU9ERV9NTV9ERVZBVERTVCAgIGRldmljZS1wYWNlZCBtZW1vcnkg dG8gbWVtb3J5LCBkZXZpY2UgYXQgZHN0CiAqLwppbnQKcHBjNHh4X3NldF9k bWFfbW9kZSh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBtb2Rl KQp7CglwcGNfZG1hX2NoX3QgKnBfZG1hX2NoID0gJmRtYV9jaGFubmVsc1tk bWFucl07CgoJaWYgKGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxT KSB7CgkJcHJpbnRrKCJzZXRfZG1hX21vZGU6IGJhZCBjaGFubmVsIDB4JXhc biIsIGRtYW5yKTsKCQlyZXR1cm4gRE1BX1NUQVRVU19CQURfQ0hBTk5FTDsK CX0KCglwX2RtYV9jaC0+bW9kZSA9IG1vZGU7CgoJcmV0dXJuIERNQV9TVEFU VVNfR09PRDsKfQoKLyoKICogU2V0cyB0aGUgRE1BIENvdW50IHJlZ2lzdGVy LiBOb3RlIHRoYXQgJ2NvdW50JyBpcyBpbiBieXRlcy4KICogSG93ZXZlciwg dGhlIERNQSBDb3VudCByZWdpc3RlciBjb3VudHMgdGhlIG51bWJlciBvZiAi dHJhbnNmZXJzIiwKICogd2hlcmUgZWFjaCB0cmFuc2ZlciBpcyBlcXVhbCB0 byB0aGUgYnVzIHdpZHRoLiAgVGh1cywgY291bnQKICogTVVTVCBiZSBhIG11 bHRpcGxlIG9mIHRoZSBidXMgd2lkdGguCiAqLwp2b2lkCnBwYzR4eF9zZXRf ZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNv dW50KQp7CglwcGNfZG1hX2NoX3QgKnBfZG1hX2NoID0gJmRtYV9jaGFubmVs c1tkbWFucl07CgojaWZkZWYgREVCVUdfNHh4RE1BCgl7CgkJaW50IGVycm9y ID0gMDsKCQlzd2l0Y2ggKHBfZG1hX2NoLT5wd2lkdGgpIHsKCQljYXNlIFBX Xzg6CgkJCWJyZWFrOwoJCWNhc2UgUFdfMTY6CgkJCWlmIChjb3VudCAmIDB4 MSkKCQkJCWVycm9yID0gMTsKCQkJYnJlYWs7CgkJY2FzZSBQV18zMjoKCQkJ aWYgKGNvdW50ICYgMHgzKQoJCQkJZXJyb3IgPSAxOwoJCQlicmVhazsKCQlj YXNlIFBXXzY0OgoJCQlpZiAoY291bnQgJiAweDcpCgkJCQllcnJvciA9IDE7 CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCXByaW50aygic2V0X2RtYV9jb3Vu dDogaW52YWxpZCBidXMgd2lkdGg6IDB4JXhcbiIsCgkJCSAgICAgICBwX2Rt YV9jaC0+cHdpZHRoKTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoZXJyb3IpCgkJ CXByaW50awoJCQkgICAgKCJXYXJuaW5nOiBzZXRfZG1hX2NvdW50IGNvdW50 IDB4JXggYnVzIHdpZHRoICVkXG4iLAoJCQkgICAgIGNvdW50LCBwX2RtYV9j aC0+cHdpZHRoKTsKCX0KI2VuZGlmCgoJY291bnQgPSBjb3VudCA+PiBwX2Rt YV9jaC0+c2hpZnQ7CgoJbXRkY3IoRENSTl9ETUFDVDAgKyAoZG1hbnIgKiAw eDgpLCBjb3VudCk7Cn0KCi8qCiAqICAgUmV0dXJucyB0aGUgbnVtYmVyIG9m IGJ5dGVzIGxlZnQgdG8gYmUgdHJhbnNmZXJlZC4KICogICBBZnRlciBhIERN QSB0cmFuc2ZlciwgdGhpcyBzaG91bGQgcmV0dXJuIHplcm8uCiAqICAgUmVh ZGluZyB0aGlzIHdoaWxlIGEgRE1BIHRyYW5zZmVyIGlzIHN0aWxsIGluIHBy b2dyZXNzIHdpbGwgcmV0dXJuCiAqICAgdW5wcmVkaWN0YWJsZSByZXN1bHRz LgogKi8KaW50CnBwYzR4eF9nZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50 IGRtYW5yKQp7Cgl1bnNpZ25lZCBpbnQgY291bnQ7CglwcGNfZG1hX2NoX3Qg KnBfZG1hX2NoID0gJmRtYV9jaGFubmVsc1tkbWFucl07CgoJaWYgKGRtYW5y ID49IE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTKSB7CgkJcHJpbnRrKCJwcGM0 eHhfZ2V0X2RtYV9yZXNpZHVlOiBiYWQgY2hhbm5lbCAweCV4XG4iLCBkbWFu cik7CgkJcmV0dXJuIERNQV9TVEFUVVNfQkFEX0NIQU5ORUw7Cgl9CgoJY291 bnQgPSBtZmRjcihEQ1JOX0RNQUNUMCArIChkbWFuciAqIDB4OCkpOwoKCXJl dHVybiAoY291bnQgPDwgcF9kbWFfY2gtPnNoaWZ0KTsKfQoKLyoKICogU2V0 cyB0aGUgRE1BIGFkZHJlc3MgZm9yIGEgbWVtb3J5IHRvIHBlcmlwaGVyYWwg b3IgcGVyaXBoZXJhbAogKiB0byBtZW1vcnkgdHJhbnNmZXIuICBUaGUgYWRk cmVzcyBpcyBqdXN0IHNhdmVkIGluIHRoZSBjaGFubmVsCiAqIHN0cnVjdHVy ZSBmb3Igbm93IGFuZCB1c2VkIGxhdGVyIGluIGVuYWJsZV9kbWEoKS4KICov CnZvaWQKcHBjNHh4X3NldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIs IHBoeXNfYWRkcl90IGFkZHIpCnsKCXBwY19kbWFfY2hfdCAqcF9kbWFfY2gg PSAmZG1hX2NoYW5uZWxzW2RtYW5yXTsKCglpZiAoZG1hbnIgPj0gTUFYX1BQ QzR4eF9ETUFfQ0hBTk5FTFMpIHsKCQlwcmludGsoInBwYzR4eF9zZXRfZG1h X2FkZHI6IGJhZCBjaGFubmVsOiAlZFxuIiwgZG1hbnIpOwoJCXJldHVybjsK CX0KCiNpZmRlZiBERUJVR180eHhETUEKCXsKCQlpbnQgZXJyb3IgPSAwOwoJ CXN3aXRjaCAocF9kbWFfY2gtPnB3aWR0aCkgewoJCWNhc2UgUFdfODoKCQkJ YnJlYWs7CgkJY2FzZSBQV18xNjoKCQkJaWYgKCh1bnNpZ25lZCkgYWRkciAm IDB4MSkKCQkJCWVycm9yID0gMTsKCQkJYnJlYWs7CgkJY2FzZSBQV18zMjoK CQkJaWYgKCh1bnNpZ25lZCkgYWRkciAmIDB4MykKCQkJCWVycm9yID0gMTsK CQkJYnJlYWs7CgkJY2FzZSBQV182NDoKCQkJaWYgKCh1bnNpZ25lZCkgYWRk ciAmIDB4NykKCQkJCWVycm9yID0gMTsKCQkJYnJlYWs7CgkJZGVmYXVsdDoK CQkJcHJpbnRrKCJwcGM0eHhfc2V0X2RtYV9hZGRyOiBpbnZhbGlkIGJ1cyB3 aWR0aDogMHgleFxuIiwKCQkJICAgICAgIHBfZG1hX2NoLT5wd2lkdGgpOwoJ CQlyZXR1cm47CgkJfQoJCWlmIChlcnJvcikKCQkJcHJpbnRrKCJXYXJuaW5n OiBwcGM0eHhfc2V0X2RtYV9hZGRyIGFkZHIgMHgleCBidXMgd2lkdGggJWRc biIsCgkJCSAgICAgICBhZGRyLCBwX2RtYV9jaC0+cHdpZHRoKTsKCX0KI2Vu ZGlmCgoJLyogc2F2ZSBkbWEgYWRkcmVzcyBhbmQgcHJvZ3JhbSBpdCBsYXRl ciBhZnRlciB3ZSBrbm93IHRoZSB4ZmVyIG1vZGUgKi8KCXBfZG1hX2NoLT5h ZGRyID0gYWRkcjsKfQoKLyoKICogU2V0cyBib3RoIERNQSBhZGRyZXNzZXMg Zm9yIGEgbWVtb3J5IHRvIG1lbW9yeSB0cmFuc2Zlci4KICogRm9yIG1lbW9y eSB0byBwZXJpcGhlcmFsIG9yIHBlcmlwaGVyYWwgdG8gbWVtb3J5IHRyYW5z ZmVycwogKiB0aGUgZnVuY3Rpb24gc2V0X2RtYV9hZGRyKCkgc2hvdWxkIGJl IHVzZWQgaW5zdGVhZC4KICovCnZvaWQKcHBjNHh4X3NldF9kbWFfYWRkcjIo dW5zaWduZWQgaW50IGRtYW5yLCBwaHlzX2FkZHJfdCBzcmNfZG1hX2FkZHIs CgkJICAgICBwaHlzX2FkZHJfdCBkc3RfZG1hX2FkZHIpCnsKCWlmIChkbWFu ciA+PSBNQVhfUFBDNHh4X0RNQV9DSEFOTkVMUykgewoJCXByaW50aygicHBj NHh4X3NldF9kbWFfYWRkcjI6IGJhZCBjaGFubmVsOiAlZFxuIiwgZG1hbnIp OwoJCXJldHVybjsKCX0KCiNpZmRlZiBERUJVR180eHhETUEKCXsKCQlwcGNf ZG1hX2NoX3QgKnBfZG1hX2NoID0gJmRtYV9jaGFubmVsc1tkbWFucl07CgkJ aW50IGVycm9yID0gMDsKCQlzd2l0Y2ggKHBfZG1hX2NoLT5wd2lkdGgpIHsK CQkJY2FzZSBQV184OgoJCQkJYnJlYWs7CgkJCWNhc2UgUFdfMTY6CgkJCQlp ZiAoKCh1bnNpZ25lZCkgc3JjX2RtYV9hZGRyICYgMHgxKSB8fAoJCQkJCQko KHVuc2lnbmVkKSBkc3RfZG1hX2FkZHIgJiAweDEpCgkJCQkgICApCgkJCQkJ ZXJyb3IgPSAxOwoJCQkJYnJlYWs7CgkJCWNhc2UgUFdfMzI6CgkJCQlpZiAo KCh1bnNpZ25lZCkgc3JjX2RtYV9hZGRyICYgMHgzKSB8fAoJCQkJCQkoKHVu c2lnbmVkKSBkc3RfZG1hX2FkZHIgJiAweDMpCgkJCQkgICApCgkJCQkJZXJy b3IgPSAxOwoJCQkJYnJlYWs7CgkJCWNhc2UgUFdfNjQ6CgkJCQlpZiAoKCh1 bnNpZ25lZCkgc3JjX2RtYV9hZGRyICYgMHg3KSB8fAoJCQkJCQkoKHVuc2ln bmVkKSBkc3RfZG1hX2FkZHIgJiAweDcpCgkJCQkgICApCgkJCQkJZXJyb3Ig PSAxOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQlwcmludGsoInBwYzR4 eF9zZXRfZG1hX2FkZHIyOiBpbnZhbGlkIGJ1cyB3aWR0aDogMHgleFxuIiwK CQkJCQkJcF9kbWFfY2gtPnB3aWR0aCk7CgkJCQlyZXR1cm47CgkJfQoJCWlm IChlcnJvcikKCQkJcHJpbnRrCgkJCQkoIldhcm5pbmc6IHBwYzR4eF9zZXRf ZG1hX2FkZHIyIHNyYyAweCV4IGRzdCAweCV4IGJ1cyB3aWR0aCAlZFxuIiwK CQkJCSBzcmNfZG1hX2FkZHIsIGRzdF9kbWFfYWRkciwgcF9kbWFfY2gtPnB3 aWR0aCk7Cgl9CiNlbmRpZgoKCXBwYzR4eF9zZXRfc3JjX2FkZHIoZG1hbnIs IHNyY19kbWFfYWRkcik7CglwcGM0eHhfc2V0X2RzdF9hZGRyKGRtYW5yLCBk c3RfZG1hX2FkZHIpOwp9CgovKgogKiBFbmFibGVzIHRoZSBjaGFubmVsIGlu dGVycnVwdC4KICoKICogSWYgcGVyZm9ybWluZyBhIHNjYXR0ZXIvZ2F0dGVy IHRyYW5zZmVyLCB0aGlzIGZ1bmN0aW9uCiAqIE1VU1QgYmUgY2FsbGVkIGJl Zm9yZSBjYWxsaW5nIGFsbG9jX2RtYV9oYW5kbGUoKSBhbmQgYnVpbGRpbmcK ICogdGhlIHNnbCBsaXN0LiAgT3RoZXJ3aXNlLCBpbnRlcnJ1cHRzIHdpbGwg bm90IGJlIGVuYWJsZWQsIGlmCiAqIHRoZXkgd2VyZSBwcmV2aW91c2x5IGRp c2FibGVkLgogKi8KaW50CnBwYzR4eF9lbmFibGVfZG1hX2ludGVycnVwdCh1 bnNpZ25lZCBpbnQgZG1hbnIpCnsKCXVuc2lnbmVkIGludCBjb250cm9sOwoJ cHBjX2RtYV9jaF90ICpwX2RtYV9jaCA9ICZkbWFfY2hhbm5lbHNbZG1hbnJd OwoKCWlmIChkbWFuciA+PSBNQVhfUFBDNHh4X0RNQV9DSEFOTkVMUykgewoJ CXByaW50aygicHBjNHh4X2VuYWJsZV9kbWFfaW50ZXJydXB0OiBiYWQgY2hh bm5lbDogJWRcbiIsIGRtYW5yKTsKCQlyZXR1cm4gRE1BX1NUQVRVU19CQURf Q0hBTk5FTDsKCX0KCglwX2RtYV9jaC0+aW50X2VuYWJsZSA9IDE7CgoJY29u dHJvbCA9IG1mZGNyKERDUk5fRE1BQ1IwICsgKGRtYW5yICogMHg4KSk7Cglj b250cm9sIHw9IERNQV9DSUVfRU5BQkxFOwkvKiBDaGFubmVsIEludGVycnVw dCBFbmFibGUgKi8KCW10ZGNyKERDUk5fRE1BQ1IwICsgKGRtYW5yICogMHg4 KSwgY29udHJvbCk7CgoJcmV0dXJuIERNQV9TVEFUVVNfR09PRDsKfQoKLyoK ICogRGlzYWJsZXMgdGhlIGNoYW5uZWwgaW50ZXJydXB0LgogKgogKiBJZiBw ZXJmb3JtaW5nIGEgc2NhdHRlci9nYXR0ZXIgdHJhbnNmZXIsIHRoaXMgZnVu Y3Rpb24KICogTVVTVCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYWxsb2Nf ZG1hX2hhbmRsZSgpIGFuZCBidWlsZGluZwogKiB0aGUgc2dsIGxpc3QuICBP dGhlcndpc2UsIGludGVycnVwdHMgd2lsbCBub3QgYmUgZGlzYWJsZWQsIGlm CiAqIHRoZXkgd2VyZSBwcmV2aW91c2x5IGVuYWJsZWQuCiAqLwppbnQKcHBj NHh4X2Rpc2FibGVfZG1hX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgZG1hbnIp CnsKCXVuc2lnbmVkIGludCBjb250cm9sOwoJcHBjX2RtYV9jaF90ICpwX2Rt YV9jaCA9ICZkbWFfY2hhbm5lbHNbZG1hbnJdOwoKCWlmIChkbWFuciA+PSBN QVhfUFBDNHh4X0RNQV9DSEFOTkVMUykgewoJCXByaW50aygicHBjNHh4X2Rp c2FibGVfZG1hX2ludGVycnVwdDogYmFkIGNoYW5uZWw6ICVkXG4iLCBkbWFu cik7CgkJcmV0dXJuIERNQV9TVEFUVVNfQkFEX0NIQU5ORUw7Cgl9CgoJcF9k bWFfY2gtPmludF9lbmFibGUgPSAwOwoKCWNvbnRyb2wgPSBtZmRjcihEQ1JO X0RNQUNSMCArIChkbWFuciAqIDB4OCkpOwoJY29udHJvbCAmPSB+RE1BX0NJ RV9FTkFCTEU7CS8qIENoYW5uZWwgSW50ZXJydXB0IEVuYWJsZSAqLwoJbXRk Y3IoRENSTl9ETUFDUjAgKyAoZG1hbnIgKiAweDgpLCBjb250cm9sKTsKCgly ZXR1cm4gRE1BX1NUQVRVU19HT09EOwp9CgovKgogKiBDb25maWd1cmVzIGEg RE1BIGNoYW5uZWwsIGluY2x1ZGluZyB0aGUgcGVyaXBoZXJhbCBidXMgd2lk dGgsIGlmIGEKICogcGVyaXBoZXJhbCBpcyBhdHRhY2hlZCB0byB0aGUgY2hh bm5lbCwgdGhlIHBvbGFyaXR5IG9mIHRoZSBETUFSZXEgYW5kCiAqIERNQUFj ayBzaWduYWxzLCBldGMuICBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCByZWFs bHkgYmUgc2V0dXAgYnkgdGhlIGJvb3QKICogY29kZSwgc2luY2UgbW9zdCBs aWtlbHkgdGhlIGNvbmZpZ3VyYXRpb24gd29uJ3QgY2hhbmdlIGR5bmFtaWNh bGx5LgogKiBJZiB0aGUga2VybmVsIGhhcyB0byBjYWxsIHRoaXMgZnVuY3Rp b24sIGl0J3MgcmVjb21tZW5kZWQgdGhhdCBpdCdzCiAqIGNhbGxlZCBmcm9t IHBsYXRmb3JtIHNwZWNpZmljIGluaXQgY29kZS4gIFRoZSBkcml2ZXIgc2hv dWxkIG5vdCBuZWVkIHRvCiAqIGNhbGwgdGhpcyBmdW5jdGlvbi4KICovCmlu dApwcGM0eHhfaW5pdF9kbWFfY2hhbm5lbCh1bnNpZ25lZCBpbnQgZG1hbnIs IHBwY19kbWFfY2hfdCAqIHBfaW5pdCkKewoJdW5zaWduZWQgaW50IHN0YXR1 c19iaXRzW10gPSB7IERNQV9DUzAgfCBETUFfVFMwIHwgRE1BX0NIMF9FUlIs CgkJCQkgICAgICAgRE1BX0NTMSB8IERNQV9UUzEgfCBETUFfQ0gxX0VSUiwK CQkJCSAgICAgICBETUFfQ1MyIHwgRE1BX1RTMiB8IERNQV9DSDJfRVJSLAoJ CQkJICAgICAgIERNQV9DUzMgfCBETUFfVFMzIHwgRE1BX0NIM19FUlJ9OwoK CXVuc2lnbmVkIGludCBwb2xhcml0eTsKCXVpbnQzMl90IGNvbnRyb2wgPSAw OwoJcHBjX2RtYV9jaF90ICpwX2RtYV9jaCA9ICZkbWFfY2hhbm5lbHNbZG1h bnJdOwoKCURNQV9NT0RFX1JFQUQgPSAodW5zaWduZWQgbG9uZykgRE1BX1RE OwkvKiBQZXJpcGhlcmFsIHRvIE1lbW9yeSAqLwoJRE1BX01PREVfV1JJVEUg PSAwOwkvKiBNZW1vcnkgdG8gUGVyaXBoZXJhbCAqLwoKCWlmICghcF9pbml0 KSB7CgkJcHJpbnRrKCJwcGM0eHhfaW5pdF9kbWFfY2hhbm5lbDogTlVMTCBw X2luaXRcbiIpOwoJCXJldHVybiBETUFfU1RBVFVTX05VTExfUE9JTlRFUjsK CX0KCglpZiAoZG1hbnIgPj0gTUFYX1BQQzR4eF9ETUFfQ0hBTk5FTFMpIHsK CQlwcmludGsoInBwYzR4eF9pbml0X2RtYV9jaGFubmVsOiBiYWQgY2hhbm5l bCAlZFxuIiwgZG1hbnIpOwoJCXJldHVybiBETUFfU1RBVFVTX0JBRF9DSEFO TkVMOwoJfQoKI2lmIERDUk5fUE9MID4gMAoJcG9sYXJpdHkgPSBtZmRjcihE Q1JOX1BPTCk7CiNlbHNlCglwb2xhcml0eSA9IDA7CiNlbmRpZgoKCS8qIFNl dHVwIHRoZSBjb250cm9sIHJlZ2lzdGVyIGJhc2VkIG9uIHRoZSB2YWx1ZXMg cGFzc2VkIHRvCgkgKiB1cyBpbiBwX2luaXQuICBUaGVuLCBvdmVyLXdyaXRl IHRoZSBjb250cm9sIHJlZ2lzdGVyIHdpdGggdGhpcwoJICogbmV3IHZhbHVl LgoJICovCgljb250cm9sIHw9IFNFVF9ETUFfQ09OVFJPTDsKCgkvKiBjbGVh ciBhbGwgcG9sYXJpdHkgc2lnbmFscyBhbmQgdGhlbiAib3IiIGluIG5ldyBz aWduYWwgbGV2ZWxzICovCglwb2xhcml0eSAmPSB+R0VUX0RNQV9QT0xBUklU WShkbWFucik7Cglwb2xhcml0eSB8PSBwX2luaXQtPnBvbGFyaXR5OwojaWYg RENSTl9QT0wgPiAwCgltdGRjcihEQ1JOX1BPTCwgcG9sYXJpdHkpOwojZW5k aWYKCW10ZGNyKERDUk5fRE1BQ1IwICsgKGRtYW5yICogMHg4KSwgY29udHJv bCk7CgoJLyogc2F2ZSB0aGVzZSB2YWx1ZXMgaW4gb3VyIGRtYSBjaGFubmVs IHN0cnVjdHVyZSAqLwoJbWVtY3B5KHBfZG1hX2NoLCBwX2luaXQsIHNpemVv ZiAocHBjX2RtYV9jaF90KSk7CgoJLyoKCSAqIFRoZSBwZXJpcGhlcmFsIHdp ZHRoIHZhbHVlcyB3cml0dGVuIGluIHRoZSBjb250cm9sIHJlZ2lzdGVyIGFy ZToKCSAqICAgUFdfOCAgICAgICAgICAgICAgICAgMAoJICogICBQV18xNiAg ICAgICAgICAgICAgICAxCgkgKiAgIFBXXzMyICAgICAgICAgICAgICAgIDIK CSAqICAgUFdfNjQgICAgICAgICAgICAgICAgMwoJICoKCSAqICAgU2luY2Ug dGhlIERNQSBjb3VudCByZWdpc3RlciB0YWtlcyB0aGUgbnVtYmVyIG9mICJ0 cmFuc2ZlcnMiLAoJICogICB3ZSBuZWVkIHRvIGRpdmlkZSB0aGUgY291bnQg c2VudCB0byB1cyBpbiBjZXJ0YWluCgkgKiAgIGZ1bmN0aW9ucyBieSB0aGUg YXBwcm9wcmlhdGUgbnVtYmVyLiAgSXQgc28gaGFwcGVucyB0aGF0IG91cgoJ ICogICByaWdodCBzaGlmdCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcGVyaXBo ZXJhbCB3aWR0aCB2YWx1ZS4KCSAqLwoJcF9kbWFfY2gtPnNoaWZ0ID0gcF9p bml0LT5wd2lkdGg7CgoJLyoKCSAqIFNhdmUgdGhlIGNvbnRyb2wgd29yZCBm b3IgZWFzeSBhY2Nlc3MuCgkgKi8KCXBfZG1hX2NoLT5jb250cm9sID0gY29u dHJvbDsKCgkvKgoJICogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGZvciB0aGUg Y2hhbm5lbAoJICogb25seSBUUywgQ1MgYW5kIFJJIG5lZWRzIHRvIGJlIGNs ZWFyZWQuCgkgKi8KCW10ZGNyKERDUk5fRE1BU1IsIHN0YXR1c19iaXRzW2Rt YW5yXSk7CgkKCXJldHVybiBETUFfU1RBVFVTX0dPT0Q7Cn0KCi8qCiAqIFRo aXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2hhbm5lbCBjb25maWd1cmF0aW9u LgogKi8KaW50CnBwYzR4eF9nZXRfY2hhbm5lbF9jb25maWcodW5zaWduZWQg aW50IGRtYW5yLCBwcGNfZG1hX2NoX3QgKiBwX2RtYV9jaCkKewoJdW5zaWdu ZWQgaW50IHBvbGFyaXR5OwoJdW5zaWduZWQgaW50IGNvbnRyb2w7CgoJaWYg KGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTKSB7CgkJcHJpbnRr KCJwcGM0eHhfZ2V0X2NoYW5uZWxfY29uZmlnOiBiYWQgY2hhbm5lbCAlZFxu IiwgZG1hbnIpOwoJCXJldHVybiBETUFfU1RBVFVTX0JBRF9DSEFOTkVMOwoJ fQoKCW1lbWNweShwX2RtYV9jaCwgJmRtYV9jaGFubmVsc1tkbWFucl0sIHNp emVvZiAocHBjX2RtYV9jaF90KSk7CgojaWYgRENSTl9QT0wgPiAwCglwb2xh cml0eSA9IG1mZGNyKERDUk5fUE9MKTsKI2Vsc2UKCXBvbGFyaXR5ID0gMDsK I2VuZGlmCgoJcF9kbWFfY2gtPnBvbGFyaXR5ID0gcG9sYXJpdHkgJiBHRVRf RE1BX1BPTEFSSVRZKGRtYW5yKTsKCWNvbnRyb2wgPSBtZmRjcihEQ1JOX0RN QUNSMCArIChkbWFuciAqIDB4OCkpOwoKCXBfZG1hX2NoLT5jcCA9IEdFVF9E TUFfUFJJT1JJVFkoY29udHJvbCk7CglwX2RtYV9jaC0+cHdpZHRoID0gR0VU X0RNQV9QVyhjb250cm9sKTsKCXBfZG1hX2NoLT5wc2MgPSBHRVRfRE1BX1BT Qyhjb250cm9sKTsKCXBfZG1hX2NoLT5wd2MgPSBHRVRfRE1BX1BXQyhjb250 cm9sKTsKCXBfZG1hX2NoLT5waGMgPSBHRVRfRE1BX1BIQyhjb250cm9sKTsK CXBfZG1hX2NoLT5jZSA9IEdFVF9ETUFfQ0VfRU5BQkxFKGNvbnRyb2wpOwoJ cF9kbWFfY2gtPmludF9lbmFibGUgPSBHRVRfRE1BX0NJRV9FTkFCTEUoY29u dHJvbCk7CglwX2RtYV9jaC0+c2hpZnQgPSBHRVRfRE1BX1BXKGNvbnRyb2wp OwoKI2lmZGVmIENPTkZJR19QUEM0eHhfRURNQQoJcF9kbWFfY2gtPnBmID0g R0VUX0RNQV9QUkVGRVRDSChjb250cm9sKTsKI2Vsc2UKCXBfZG1hX2NoLT5j aF9lbmFibGUgPSBHRVRfRE1BX0NIKGNvbnRyb2wpOwoJcF9kbWFfY2gtPmVj ZV9lbmFibGUgPSBHRVRfRE1BX0VDRShjb250cm9sKTsKCXBfZG1hX2NoLT50 Y2RfZGlzYWJsZSA9IEdFVF9ETUFfVENEKGNvbnRyb2wpOwojZW5kaWYKCXJl dHVybiBETUFfU1RBVFVTX0dPT0Q7Cn0KCi8qCiAqIFNldHMgdGhlIHByaW9y aXR5IGZvciB0aGUgRE1BIGNoYW5uZWwgZG1hbnIuCiAqIFNpbmNlIHRoaXMg aXMgc2V0dXAgYnkgdGhlIGhhcmR3YXJlIGluaXQgZnVuY3Rpb24sIHRoaXMg ZnVuY3Rpb24KICogY2FuIGJlIHVzZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdl IHRoZSBwcmlvcml0eSBvZiBhIGNoYW5uZWwuCiAqCiAqIEFjY2VwdGFibGUg cHJpb3JpdGllczoKICoKICogUFJJT1JJVFlfTE9XCiAqIFBSSU9SSVRZX01J RF9MT1cKICogUFJJT1JJVFlfTUlEX0hJR0gKICogUFJJT1JJVFlfSElHSAog KgogKi8KaW50CnBwYzR4eF9zZXRfY2hhbm5lbF9wcmlvcml0eSh1bnNpZ25l ZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBwcmlvcml0eSkKewoJdW5zaWdu ZWQgaW50IGNvbnRyb2w7CgoJaWYgKGRtYW5yID49IE1BWF9QUEM0eHhfRE1B X0NIQU5ORUxTKSB7CgkJcHJpbnRrKCJwcGM0eHhfc2V0X2NoYW5uZWxfcHJp b3JpdHk6IGJhZCBjaGFubmVsICVkXG4iLCBkbWFucik7CgkJcmV0dXJuIERN QV9TVEFUVVNfQkFEX0NIQU5ORUw7Cgl9CgoJaWYgKChwcmlvcml0eSAhPSBQ UklPUklUWV9MT1cpICYmCgkgICAgKHByaW9yaXR5ICE9IFBSSU9SSVRZX01J RF9MT1cpICYmCgkgICAgKHByaW9yaXR5ICE9IFBSSU9SSVRZX01JRF9ISUdI KSAmJiAocHJpb3JpdHkgIT0gUFJJT1JJVFlfSElHSCkpIHsKCQlwcmludGso InBwYzR4eF9zZXRfY2hhbm5lbF9wcmlvcml0eTogYmFkIHByaW9yaXR5OiAw eCV4XG4iLCBwcmlvcml0eSk7Cgl9CgoJY29udHJvbCA9IG1mZGNyKERDUk5f RE1BQ1IwICsgKGRtYW5yICogMHg4KSk7Cgljb250cm9sIHw9IFNFVF9ETUFf UFJJT1JJVFkocHJpb3JpdHkpOwoJbXRkY3IoRENSTl9ETUFDUjAgKyAoZG1h bnIgKiAweDgpLCBjb250cm9sKTsKCglyZXR1cm4gRE1BX1NUQVRVU19HT09E Owp9CgovKgogKiBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgcGVyaXBoZXJh bCBhdHRhY2hlZCB0byB0aGlzIGNoYW5uZWwuIFRoaXMgYXNzdW1lcwogKiB0 aGF0IHNvbWVvbmUgd2hvIGtub3dzIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0 aW9uLCBib290IGNvZGUgb3Igc29tZSBvdGhlcgogKiBpbml0IGNvZGUsIGFs cmVhZHkgc2V0IHRoZSB3aWR0aC4KICoKICogVGhlIHJldHVybiB2YWx1ZSBp cyBvbmUgb2Y6CiAqICAgUFdfOAogKiAgIFBXXzE2CiAqICAgUFdfMzIKICog ICBQV182NAogKgogKiAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIDAgb24gZXJy b3IuCiAqLwp1bnNpZ25lZCBpbnQKcHBjNHh4X2dldF9wZXJpcGhlcmFsX3dp ZHRoKHVuc2lnbmVkIGludCBkbWFucikKewoJdW5zaWduZWQgaW50IGNvbnRy b2w7CgoJaWYgKGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTKSB7 CgkJcHJpbnRrKCJwcGM0eHhfZ2V0X3BlcmlwaGVyYWxfd2lkdGg6IGJhZCBj aGFubmVsICVkXG4iLCBkbWFucik7CgkJcmV0dXJuIERNQV9TVEFUVVNfQkFE X0NIQU5ORUw7Cgl9CgoJY29udHJvbCA9IG1mZGNyKERDUk5fRE1BQ1IwICsg KGRtYW5yICogMHg4KSk7CgoJcmV0dXJuIChHRVRfRE1BX1BXKGNvbnRyb2wp KTsKfQoKLyoKICogQ2xlYXJzIHRoZSBjaGFubmVsIHN0YXR1cyBiaXRzCiAq LwppbnQKcHBjNHh4X2Nscl9kbWFfc3RhdHVzKHVuc2lnbmVkIGludCBkbWFu cikKewoJaWYgKGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTKSB7 CgkJcHJpbnRrKEtFUk5fRVJSICJwcGM0eHhfY2xyX2RtYV9zdGF0dXM6IGJh ZCBjaGFubmVsOiAlZFxuIiwgZG1hbnIpOwoJCXJldHVybiBETUFfU1RBVFVT X0JBRF9DSEFOTkVMOwoJfQoJbXRkY3IoRENSTl9ETUFTUiwgKCh1MzIpRE1B X0NIMF9FUlIgfCAodTMyKURNQV9DUzAgfCAodTMyKURNQV9UUzApID4+IGRt YW5yKTsKCXJldHVybiBETUFfU1RBVFVTX0dPT0Q7Cn0KCiNpZmRlZiBDT05G SUdfUFBDNHh4X0VETUEKLyoKICogRW5hYmxlcyB0aGUgYnVyc3Qgb24gdGhl IGNoYW5uZWwgKEJURU4gYml0IGluIHRoZSBjb250cm9sL2NvdW50IHJlZ2lz dGVyKQogKiBOb3RlOgogKiBGb3Igc2NhdHRlci9nYXRoZXIgZG1hLCB0aGlz IGZ1bmN0aW9uIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSB0aGUKICogcHBjNHh4 X2FsbG9jX2RtYV9oYW5kbGUoKSBmdW5jIGFzIHRoZSBjaGFuIGNvdW50IHJl Z2lzdGVyIGlzIGNvcGllZCBpbnRvIHRoZQogKiBzZ2wgbGlzdCBhbmQgdXNl ZCBhcyBlYWNoIHNnbCBlbGVtZW50IGlzIGFkZGVkLgogKi8KaW50CnBwYzR4 eF9lbmFibGVfYnVyc3QodW5zaWduZWQgaW50IGRtYW5yKQp7Cgl1bnNpZ25l ZCBpbnQgY3RjOwoJaWYgKGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5O RUxTKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJwcGM0eHhfZW5hYmxlX2J1cnN0 OiBiYWQgY2hhbm5lbDogJWRcbiIsIGRtYW5yKTsKCQlyZXR1cm4gRE1BX1NU QVRVU19CQURfQ0hBTk5FTDsKCX0KICAgICAgICBjdGMgPSBtZmRjcihEQ1JO X0RNQUNUMCArIChkbWFuciAqIDB4OCkpIHwgRE1BX0NUQ19CVEVOOwoJbXRk Y3IoRENSTl9ETUFDVDAgKyAoZG1hbnIgKiAweDgpLCBjdGMpOwoJcmV0dXJu IERNQV9TVEFUVVNfR09PRDsKfQovKgogKiBEaXNhYmxlcyB0aGUgYnVyc3Qg b24gdGhlIGNoYW5uZWwgKEJURU4gYml0IGluIHRoZSBjb250cm9sL2NvdW50 IHJlZ2lzdGVyKQogKiBOb3RlOgogKiBGb3Igc2NhdHRlci9nYXRoZXIgZG1h LCB0aGlzIGZ1bmN0aW9uIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSB0aGUKICog cHBjNHh4X2FsbG9jX2RtYV9oYW5kbGUoKSBmdW5jIGFzIHRoZSBjaGFuIGNv dW50IHJlZ2lzdGVyIGlzIGNvcGllZCBpbnRvIHRoZQogKiBzZ2wgbGlzdCBh bmQgdXNlZCBhcyBlYWNoIHNnbCBlbGVtZW50IGlzIGFkZGVkLgogKi8KaW50 CnBwYzR4eF9kaXNhYmxlX2J1cnN0KHVuc2lnbmVkIGludCBkbWFucikKewoJ dW5zaWduZWQgaW50IGN0YzsKCWlmIChkbWFuciA+PSBNQVhfUFBDNHh4X0RN QV9DSEFOTkVMUykgewoJCXByaW50ayhLRVJOX0VSUiAicHBjNHh4X2Rpc2Fi bGVfYnVyc3Q6IGJhZCBjaGFubmVsOiAlZFxuIiwgZG1hbnIpOwoJCXJldHVy biBETUFfU1RBVFVTX0JBRF9DSEFOTkVMOwoJfQoJY3RjID0gbWZkY3IoRENS Tl9ETUFDVDAgKyAoZG1hbnIgKiAweDgpKSAmfiBETUFfQ1RDX0JURU47Cglt dGRjcihEQ1JOX0RNQUNUMCArIChkbWFuciAqIDB4OCksIGN0Yyk7CglyZXR1 cm4gRE1BX1NUQVRVU19HT09EOwp9Ci8qCiAqIFNldHMgdGhlIGJ1cnN0IHNp emUgKG51bWJlciBvZiBwZXJpcGhlcmFsIHdpZHRocykgZm9yIHRoZSBjaGFu bmVsCiAqIChCU0laIGJpdHMgaW4gdGhlIGNvbnRyb2wvY291bnQgcmVnaXN0 ZXIpKQogKiBtdXN0IGJlIG9uZSBvZjoKICogICAgRE1BX0NUQ19CU0laXzIK ICogICAgRE1BX0NUQ19CU0laXzQKICogICAgRE1BX0NUQ19CU0laXzgKICog ICAgRE1BX0NUQ19CU0laXzE2CiAqIE5vdGU6CiAqIEZvciBzY2F0dGVyL2dh dGhlciBkbWEsIHRoaXMgZnVuY3Rpb24gTVVTVCBiZSBjYWxsZWQgYmVmb3Jl IHRoZQogKiBwcGM0eHhfYWxsb2NfZG1hX2hhbmRsZSgpIGZ1bmMgYXMgdGhl IGNoYW4gY291bnQgcmVnaXN0ZXIgaXMgY29waWVkIGludG8gdGhlCiAqIHNn bCBsaXN0IGFuZCB1c2VkIGFzIGVhY2ggc2dsIGVsZW1lbnQgaXMgYWRkZWQu CiAqLwppbnQKcHBjNHh4X3NldF9idXJzdF9zaXplKHVuc2lnbmVkIGludCBk bWFuciwgdW5zaWduZWQgaW50IGJzaXplKQp7Cgl1bnNpZ25lZCBpbnQgY3Rj OwoJaWYgKGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTKSB7CgkJ cHJpbnRrKEtFUk5fRVJSICJwcGM0eHhfc2V0X2J1cnN0X3NpemU6IGJhZCBj aGFubmVsOiAlZFxuIiwgZG1hbnIpOwoJCXJldHVybiBETUFfU1RBVFVTX0JB RF9DSEFOTkVMOwoJfQoJY3RjID0gbWZkY3IoRENSTl9ETUFDVDAgKyAoZG1h bnIgKiAweDgpKSAmfiBETUFfQ1RDX0JTSVpfTVNLOwoJY3RjIHw9IChic2l6 ZSAmIERNQV9DVENfQlNJWl9NU0spOwoJbXRkY3IoRENSTl9ETUFDVDAgKyAo ZG1hbnIgKiAweDgpLCBjdGMpOwoJcmV0dXJuIERNQV9TVEFUVVNfR09PRDsK fQoKRVhQT1JUX1NZTUJPTChwcGM0eHhfZW5hYmxlX2J1cnN0KTsKRVhQT1JU X1NZTUJPTChwcGM0eHhfZGlzYWJsZV9idXJzdCk7CkVYUE9SVF9TWU1CT0wo cHBjNHh4X3NldF9idXJzdF9zaXplKTsKI2VuZGlmIC8qIENPTkZJR19QUEM0 eHhfRURNQSAqLwoKRVhQT1JUX1NZTUJPTChwcGM0eHhfaW5pdF9kbWFfY2hh bm5lbCk7CkVYUE9SVF9TWU1CT0wocHBjNHh4X2dldF9jaGFubmVsX2NvbmZp Zyk7CkVYUE9SVF9TWU1CT0wocHBjNHh4X3NldF9jaGFubmVsX3ByaW9yaXR5 KTsKRVhQT1JUX1NZTUJPTChwcGM0eHhfZ2V0X3BlcmlwaGVyYWxfd2lkdGgp OwpFWFBPUlRfU1lNQk9MKGRtYV9jaGFubmVscyk7CkVYUE9SVF9TWU1CT0wo cHBjNHh4X3NldF9zcmNfYWRkcik7CkVYUE9SVF9TWU1CT0wocHBjNHh4X3Nl dF9kc3RfYWRkcik7CkVYUE9SVF9TWU1CT0wocHBjNHh4X3NldF9kbWFfYWRk cik7CkVYUE9SVF9TWU1CT0wocHBjNHh4X3NldF9kbWFfYWRkcjIpOwpFWFBP UlRfU1lNQk9MKHBwYzR4eF9lbmFibGVfZG1hKTsKRVhQT1JUX1NZTUJPTChw cGM0eHhfZGlzYWJsZV9kbWEpOwpFWFBPUlRfU1lNQk9MKHBwYzR4eF9zZXRf ZG1hX21vZGUpOwpFWFBPUlRfU1lNQk9MKHBwYzR4eF9zZXRfZG1hX2NvdW50 KTsKRVhQT1JUX1NZTUJPTChwcGM0eHhfZ2V0X2RtYV9yZXNpZHVlKTsKRVhQ T1JUX1NZTUJPTChwcGM0eHhfZW5hYmxlX2RtYV9pbnRlcnJ1cHQpOwpFWFBP UlRfU1lNQk9MKHBwYzR4eF9kaXNhYmxlX2RtYV9pbnRlcnJ1cHQpOwpFWFBP UlRfU1lNQk9MKHBwYzR4eF9nZXRfZG1hX3N0YXR1cyk7CkVYUE9SVF9TWU1C T0wocHBjNHh4X2Nscl9kbWFfc3RhdHVzKTsKCg== ----EE3B6242DBEBA914A74B4E97AD5F0ED5 Content-Type: text/plain; name="ppc4xx_sgdma.c" Content-Transfer-Encoding: base64 LyoKICogSUJNIFBQQzR4eCBETUEgZW5naW5lIHNjYXR0ZXIvZ2F0aGVyIGxp YnJhcnkKICoKICogQ29weXJpZ2h0IDIwMDItMjAwMyBNb250YVZpc3RhIFNv ZnR3YXJlIEluYy4KICoKICogQ2xlYW5lZCB1cCBhbmQgY29udmVydGVkIHRv IG5ldyBEQ1IgYWNjZXNzCiAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5l bC5jcmFzaGluZy5vcmc+CiAqCiAqIE9yaWdpbmFsIGNvZGUgYnkgQXJtaW4g S3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CiAqIGFuZCBQZXRlIFBvcG92 IDxwcG9wb3ZAbXZpc3RhLmNvbT4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3Ig bW9kaWZ5IGl0CiAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2Vu ZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogKiBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKICogb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25n CiAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogKiA2NzUgTWFzcyBB dmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCgojaW5jbHVkZSA8 bGludXgva2VybmVsLmg+CiNpbmNsdWRlIDxsaW51eC9tbS5oPgojaW5jbHVk ZSA8bGludXgvaW5pdC5oPgojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiNp bmNsdWRlIDxsaW51eC9wY2kuaD4KCiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+ CiNpbmNsdWRlIDxhc20vaW8uaD4KI2luY2x1ZGUgPGFzbS9wcGM0eHhfZG1h Lmg+CiNpZmRlZiBDT05GSUdfVkRSCiNpbmNsdWRlIDxhc20vY2FjaGVmbHVz aC5oPgojZW5kaWYKCnZvaWQKcHBjNHh4X3NldF9zZ19hZGRyKGludCBkbWFu ciwgcGh5c19hZGRyX3Qgc2dfYWRkcikKewoJaWYgKGRtYW5yID49IE1BWF9Q UEM0eHhfRE1BX0NIQU5ORUxTKSB7CgkJcHJpbnRrKCJwcGM0eHhfc2V0X3Nn X2FkZHI6IGJhZCBjaGFubmVsOiAlZFxuIiwgZG1hbnIpOwoJCXJldHVybjsK CX0KCiNpZmRlZiBQUEM0eHhfRE1BXzY0QklUCgltdGRjcihEQ1JOX0FTR0gw ICsgKGRtYW5yICogMHg4KSwgKHUzMikoc2dfYWRkciA+PiAzMikpOwojZW5k aWYKCW10ZGNyKERDUk5fQVNHMCArIChkbWFuciAqIDB4OCksICh1MzIpc2df YWRkcik7Cn0KCi8qCiAqICAgQWRkIGEgbmV3IHNnbCBkZXNjcmlwdG9yIHRv IHRoZSBlbmQgb2YgYSBzY2F0dGVyL2dhdGhlciBsaXN0CiAqICAgd2hpY2gg d2FzIGNyZWF0ZWQgYnkgYWxsb2NfZG1hX2hhbmRsZSgpLgogKgogKiAgIEZv ciBhIG1lbW9yeSB0byBtZW1vcnkgdHJhbnNmZXIsIGJvdGggZG1hIGFkZHJl c3NlcyBtdXN0IGJlCiAqICAgdmFsaWQuIEZvciBhIHBlcmlwaGVyYWwgdG8g bWVtb3J5IHRyYW5zZmVyLCBvbmUgb2YgdGhlIGFkZHJlc3NlcwogKiAgIG11 c3QgYmUgc2V0IHRvIE5VTEwsIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9u IG9mIHRoZSB0cmFuc2ZlcjoKICogICBtZW1vcnkgdG8gcGVyaXBoZXJhbDog c2V0IGRzdF9hZGRyIHRvIE5VTEwsCiAqICAgcGVyaXBoZXJhbCB0byBtZW1v cnk6IHNldCBzcmNfYWRkciB0byBOVUxMLgogKi8KaW50CnBwYzR4eF9hZGRf ZG1hX3NnbChzZ2xfaGFuZGxlX3QgaGFuZGxlLCBwaHlzX2FkZHJfdCBzcmNf YWRkciwgcGh5c19hZGRyX3QgZHN0X2FkZHIsCgkJICAgdW5zaWduZWQgaW50 IGNvdW50KQp7CglzZ2xfbGlzdF9pbmZvX3QgKnBzZ2wgPSAoc2dsX2xpc3Rf aW5mb190ICopIGhhbmRsZTsKCXBwY19kbWFfY2hfdCAqcF9kbWFfY2g7CgoJ aWYgKCFoYW5kbGUpIHsKCQlwcmludGsoInBwYzR4eF9hZGRfZG1hX3NnbDog bnVsbCBoYW5kbGVcbiIpOwoJCXJldHVybiBETUFfU1RBVFVTX0JBRF9IQU5E TEU7Cgl9CgoJaWYgKHBzZ2wtPmRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NI QU5ORUxTKSB7CgkJcHJpbnRrKCJwcGM0eHhfYWRkX2RtYV9zZ2w6IGJhZCBj aGFubmVsOiAlZFxuIiwgcHNnbC0+ZG1hbnIpOwoJCXJldHVybiBETUFfU1RB VFVTX0JBRF9DSEFOTkVMOwoJfQoKCXBfZG1hX2NoID0gJmRtYV9jaGFubmVs c1twc2dsLT5kbWFucl07CgojaWZkZWYgREVCVUdfNHh4RE1BCgl7CgkJaW50 IGVycm9yID0gMDsKCQl1bnNpZ25lZCBpbnQgYWxpZ25lZCA9CgkJICAgICh1 bnNpZ25lZCkgc3JjX2FkZHIgfCAodW5zaWduZWQpIGRzdF9hZGRyIHwgY291 bnQ7CgkJc3dpdGNoIChwX2RtYV9jaC0+cHdpZHRoKSB7CgkJY2FzZSBQV184 OgoJCQlicmVhazsKCQljYXNlIFBXXzE2OgoJCQlpZiAoYWxpZ25lZCAmIDB4 MSkKCQkJCWVycm9yID0gMTsKCQkJYnJlYWs7CgkJY2FzZSBQV18zMjoKCQkJ aWYgKGFsaWduZWQgJiAweDMpCgkJCQllcnJvciA9IDE7CgkJCWJyZWFrOwoJ CWNhc2UgUFdfNjQ6CgkJCWlmIChhbGlnbmVkICYgMHg3KQoJCQkJZXJyb3Ig PSAxOwoJCQlicmVhazsKCQlkZWZhdWx0OgoJCQlwcmludGsoInBwYzR4eF9h ZGRfZG1hX3NnbDogaW52YWxpZCBidXMgd2lkdGg6IDB4JXhcbiIsCgkJCSAg ICAgICBwX2RtYV9jaC0+cHdpZHRoKTsKCQkJcmV0dXJuIERNQV9TVEFUVVNf R0VORVJBTF9FUlJPUjsKCQl9CgkJaWYgKGVycm9yKQoJCQlwcmludGsKCQkJ ICAgICgiQWxpZ25tZW50IHdhcm5pbmc6IHBwYzR4eF9hZGRfZG1hX3NnbCBz cmMgMHgleCBkc3QgMHgleCBjb3VudCAweCV4IGJ1cyB3aWR0aCB2YXIgJWRc biIsCgkJCSAgICAgc3JjX2FkZHIsIGRzdF9hZGRyLCBjb3VudCwgcF9kbWFf Y2gtPnB3aWR0aCk7CgoJfQojZW5kaWYKCiNpZmRlZiBDT05GSUdfVkRSCgkv KiBkeW5hbWljIGFsbG9jIGVhY2ggbGlzdCBlbGVtZW50ICovCgl7CgkJcHBj X3NnbF90ICpzZ2xfZWwgPSBrbWFsbG9jKHNpemVvZihwcGNfc2dsX3QpLCBH RlBfS0VSTkVMfEdGUF9ETUEpOwoJCWlmICghc2dsX2VsKQoJCQlyZXR1cm4g RE1BX1NUQVRVU19PVVRfT0ZfTUVNT1JZOwoKCQlpZiAoIXBzZ2wtPnBoZWFk KSB7IC8qIGxpc3Qgd2FzIGVtcHR5ICovCgkJCXBzZ2wtPnBoZWFkID0gc2ds X2VsOwoJCX0gZWxzZSB7IC8qIG5vdCBlbXB0eSwgdGFpbCBleGlzdHMgKi8K CQkJcHNnbC0+cHRhaWwtPm5leHQgPSAodWludDMyX3QpdmlydF90b19waHlz KHNnbF9lbCk7CgkJCWRtYV9jYWNoZV93YmFjaygodW5zaWduZWQgbG9uZylw c2dsLT5wdGFpbCwgc2l6ZW9mKHBwY19zZ2xfdCkpOwoJCX0KCQlwc2dsLT5w dGFpbCA9IHNnbF9lbDsKCX0KCglwc2dsLT5wdGFpbC0+Y29udHJvbCA9IHBz Z2wtPmNvbnRyb2w7Cglwc2dsLT5wdGFpbC0+c3JjX2FkZHIgPSAodWludDMy X3Qpc3JjX2FkZHI7Cglwc2dsLT5wdGFpbC0+ZHN0X2FkZHIgPSAodWludDMy X3QpZHN0X2FkZHI7Cglwc2dsLT5wdGFpbC0+Y29udHJvbF9jb3VudCA9IChj b3VudCA+PiBwX2RtYV9jaC0+c2hpZnQpIHwKCSAgICBwc2dsLT5zZ2xfY29u dHJvbDsKCXBzZ2wtPnB0YWlsLT5uZXh0ID0gKHVpbnQzMl90KXZpcnRfdG9f cGh5cyhOVUxMKTsKCWRtYV9jYWNoZV93YmFjaygodW5zaWduZWQgbG9uZylw c2dsLT5wdGFpbCwgc2l6ZW9mKHBwY19zZ2xfdCkpOyAvKiBoYW5kbGVkIGxh dGVyLCBza2lwIHRoaXMgb25lPyAqLwojZWxzZQoJaWYgKCh1bnNpZ25lZCkg KHBzZ2wtPnB0YWlsICsgMSkgPj0gKCh1bnNpZ25lZCkgcHNnbCArIFNHTF9M SVNUX1NJWkUpKSB7CgkJcHJpbnRrKCJzZ2wgaGFuZGxlIG91dCBvZiBtZW1v cnkgXG4iKTsKCQlyZXR1cm4gRE1BX1NUQVRVU19PVVRfT0ZfTUVNT1JZOwoJ fQoKCWlmICghcHNnbC0+cHRhaWwpIHsKCQlwc2dsLT5waGVhZCA9IChwcGNf c2dsX3QgKikKCQkgICAgKCh1bnNpZ25lZCkgcHNnbCArIHNpemVvZiAoc2ds X2xpc3RfaW5mb190KSk7CgkJcHNnbC0+cGhlYWRfZG1hID0gcHNnbC0+ZG1h X2FkZHIgKyBzaXplb2Yoc2dsX2xpc3RfaW5mb190KTsKCQlwc2dsLT5wdGFp bCA9IHBzZ2wtPnBoZWFkOwoJCXBzZ2wtPnB0YWlsX2RtYSA9IHBzZ2wtPnBo ZWFkX2RtYTsKCX0gZWxzZSB7CgkJaWYocF9kbWFfY2gtPmludF9vbl9maW5h bF9zZykgewoJCQkvKiBtYXNrIG91dCBhbGwgZG1hIGludGVycnVwdHMsIGV4 Y2VwdCBlcnJvciwgb24gdGFpbAoJCQliZWZvcmUgYWRkaW5nIG5ldyB0YWls LiAqLwoJCQlwc2dsLT5wdGFpbC0+Y29udHJvbF9jb3VudCAmPQoJCQkJfihT R19UQ0lfRU5BQkxFIHwgU0dfRVRJX0VOQUJMRSk7CgoJCQkvKiBQQVRSSUs6 IEFkZGVkICovCgkJCS8qIFJlcXVpcmUgVGVybWluYWwgQ291bnQgaW50ZXJy dXB0IG9uIGxhc3QgKi8KCQkJcHNnbC0+cHRhaWwtPmNvbnRyb2xfY291bnQg fD0gU0dfVENJX0VOQUJMRTsgCgkJfQoJCXBzZ2wtPnB0YWlsLT5uZXh0ID0g cHNnbC0+cHRhaWxfZG1hICsgc2l6ZW9mKHBwY19zZ2xfdCk7CgkJcHNnbC0+ cHRhaWwrKzsKCQlwc2dsLT5wdGFpbF9kbWEgKz0gc2l6ZW9mKHBwY19zZ2xf dCk7Cgl9CgoJcHNnbC0+cHRhaWwtPmNvbnRyb2wgPSBwc2dsLT5jb250cm9s OwoJcHNnbC0+cHRhaWwtPnNyY19hZGRyID0gc3JjX2FkZHI7Cglwc2dsLT5w dGFpbC0+ZHN0X2FkZHIgPSBkc3RfYWRkcjsKCXBzZ2wtPnB0YWlsLT5jb250 cm9sX2NvdW50ID0gKGNvdW50ID4+IHBfZG1hX2NoLT5zaGlmdCkgfAoJICAg IHBzZ2wtPnNnbF9jb250cm9sOwoJcHNnbC0+cHRhaWwtPm5leHQgPSAodWlu dDMyX3QpIE5VTEw7CiNlbmRpZgoKCXJldHVybiBETUFfU1RBVFVTX0dPT0Q7 Cn0KCi8qCiAqIEVuYWJsZSAoc3RhcnQpIHRoZSBETUEgZGVzY3JpYmVkIGJ5 IHRoZSBzZ2wgaGFuZGxlLgogKi8Kdm9pZApwcGM0eHhfZW5hYmxlX2RtYV9z Z2woc2dsX2hhbmRsZV90IGhhbmRsZSkKewoJc2dsX2xpc3RfaW5mb190ICpw c2dsID0gKHNnbF9saXN0X2luZm9fdCAqKSBoYW5kbGU7CglwcGNfZG1hX2No X3QgKnBfZG1hX2NoOwoJdWludDMyX3Qgc2dfY29tbWFuZDsKCglpZiAoIWhh bmRsZSkgewoJCXByaW50aygicHBjNHh4X2VuYWJsZV9kbWFfc2dsOiBudWxs IGhhbmRsZVxuIik7CgkJcmV0dXJuOwoJfSBlbHNlIGlmIChwc2dsLT5kbWFu ciA+IChNQVhfUFBDNHh4X0RNQV9DSEFOTkVMUyAtIDEpKSB7CgkJcHJpbnRr KCJwcGM0eHhfZW5hYmxlX2RtYV9zZ2w6IGJhZCBjaGFubmVsIGluIGhhbmRs ZSAlZFxuIiwKCQkgICAgICAgcHNnbC0+ZG1hbnIpOwoJCXJldHVybjsKCX0g ZWxzZSBpZiAoIXBzZ2wtPnBoZWFkKSB7CgkJcHJpbnRrKCJwcGM0eHhfZW5h YmxlX2RtYV9zZ2w6IHNnIGxpc3QgZW1wdHlcbiIpOwoJCXJldHVybjsKCX0K CglwX2RtYV9jaCA9ICZkbWFfY2hhbm5lbHNbcHNnbC0+ZG1hbnJdOwoJcHNn bC0+cHRhaWwtPmNvbnRyb2xfY291bnQgJj0gflNHX0xJTks7CS8qIG1ha2Ug dGhpcyB0aGUgbGFzdCBkc2NycHRyICovCglpZiAocF9kbWFfY2gtPmludF9l bmFibGUpCgl7CgkJLyogUmVxdWlyZSBUZXJtaW5hbCBDb3VudCBpbnRlcnJ1 cHQgb24gbGFzdCAqLwoJCXBzZ2wtPnB0YWlsLT5jb250cm9sX2NvdW50IHw9 IFNHX1RDSV9FTkFCTEU7IAoJfQoKI2lmZGVmIENPTkZJR19WRFIKCS8qIE5v IG1vcmUgY2hhbmdlcyB0byB0YWlsIG9iamVjdCBhbGxvd2VkICovCgkvL2Rt YV9jYWNoZV93YmFjaygodW5zaWduZWQgbG9uZylwc2dsLT5wdGFpbCwgc2l6 ZW9mKHBwY19zZ2xfdCkpOwoJZG1hX2NhY2hlX3diYWNrX2ludigodW5zaWdu ZWQgbG9uZylwc2dsLT5wdGFpbCwgc2l6ZW9mKHBwY19zZ2xfdCkpOwoJCglw cGM0eHhfc2V0X3NnX2FkZHIocHNnbC0+ZG1hbnIsIHZpcnRfdG9fcGh5cyhw c2dsLT5waGVhZCkpOwojZWxzZQoJcHBjNHh4X3NldF9zZ19hZGRyKHBzZ2wt PmRtYW5yLCBwc2dsLT5waGVhZF9kbWEpOwojZW5kaWYKCglzZ19jb21tYW5k ID0gU1NHX0VOQUJMRShwc2dsLT5kbWFucikgfCBTU0dfTUFTS19FTkFCTEUo cHNnbC0+ZG1hbnIpOwoJbXRkY3IoRENSTl9BU0dDLCBzZ19jb21tYW5kKTsJ Lyogc3RhcnQgdHJhbnNmZXIgKi8KfQoKLyoKICogSGFsdCBhbiBhY3RpdmUg c2NhdHRlci9nYXRoZXIgRE1BIG9wZXJhdGlvbiAoZnJvbSBoYW5kbGUpLgog Ki8Kdm9pZApwcGM0eHhfZGlzYWJsZV9kbWFfc2dsKHNnbF9oYW5kbGVfdCBo YW5kbGUpCnsKCXVpbnQzMl90IHNnX2NvbW1hbmQ7CgoJaWYgKCFoYW5kbGUp IHsKCQlwcmludGsoInBwYzR4eF9kaXNhYmxlX2RtYV9zZ2w6IG51bGwgaGFu ZGxlXG4iKTsKCQlyZXR1cm47Cgl9IGVsc2UgaWYgKHBzZ2wtPmRtYW5yID4g KE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTIC0gMSkpIHsKCQlwcmludGsoInBw YzR4eF9kaXNhYmxlX2RtYV9zZ2w6IGJhZCBjaGFubmVsIGluIGhhbmRsZSAl ZFxuIiwKCQkgICAgICAgcHNnbC0+ZG1hbnIpOwoJCXJldHVybjsKCX0KCQoJ c2dfY29tbWFuZCA9IFNTR19NQVNLX0VOQUJMRShwc2dsLT5kbWFucik7Cglt dGRjcihEQ1JOX0FTR0MsIHNnX2NvbW1hbmQpOwkvKiBzdG9wIHRyYW5zZmVy ICovCn0KCi8qCiAqIEhhbHQgYW4gYWN0aXZlIHNjYXR0ZXIvZ2F0aGVyIERN QSBvcGVyYXRpb24gKGZyb20gZG1hbnIpLgogKi8Kdm9pZApwcGM0eHhfZGlz YWJsZV9kbWFfc2dsX25yKHVuc2lnbmVkIGludCBkbWFucikKewoJdWludDMy X3Qgc2dfY29tbWFuZDsKCglpZiAoZG1hbnIgPiAoTUFYX1BQQzR4eF9ETUFf Q0hBTk5FTFMgLSAxKSkgewoJCXByaW50aygicHBjNHh4X2Rpc2FibGVfZG1h X3NnbF9ucjogYmFkIGNoYW5uZWwgJWRcbiIsIGRtYW5yKTsKCQlyZXR1cm47 Cgl9CgoJc2dfY29tbWFuZCA9IFNTR19NQVNLX0VOQUJMRShkbWFucik7Cglt dGRjcihEQ1JOX0FTR0MsIHNnX2NvbW1hbmQpOwkvKiBzdG9wIHRyYW5zZmVy ICovCn0KCi8qCiAqICBSZXR1cm5zIG51bWJlciBvZiBieXRlcyBsZWZ0IHRv IGJlIHRyYW5zZmVycmVkIGZyb20gdGhlIGVudGlyZSBzZ2wgbGlzdC4KICog ICpzcmNfYWRkciBhbmQgKmRzdF9hZGRyIGdldCBzZXQgdG8gdGhlIHNvdXJj ZS9kZXN0aW5hdGlvbiBhZGRyZXNzIG9mCiAqICB0aGUgc2dsIGRlc2NyaXB0 b3Igd2hlcmUgdGhlIERNQSBzdG9wcGVkLgogKgogKiAgQW4gc2dsIHRyYW5z ZmVyIG11c3QgTk9UIGJlIGFjdGl2ZSB3aGVuIHRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkLgogKiAgTm90ZTogTWFrZSBzdXJlIHBwYzR4eF9kaXNhYmxlX2Rt YV9zZ2wgaXMgY2FsbGVkIGJlZm9yZSByZXR1cm5pbmcgZnJvbQogKiAgaW50 ZXJydXB0IGhhbmRsZXIgKFRTbiwgQ1NuIHdpbGwgbm90IGRpc2FibGUgdGhl IHNnbCkhCiAqLwppbnQKcHBjNHh4X2dldF9kbWFfc2dsX3Jlc2lkdWUoc2ds X2hhbmRsZV90IGhhbmRsZSwgcGh5c19hZGRyX3QgKiBzcmNfYWRkciwKCQkJ ICAgcGh5c19hZGRyX3QgKiBkc3RfYWRkcikKewoJc2dsX2xpc3RfaW5mb190 ICpwc2dsID0gKHNnbF9saXN0X2luZm9fdCAqKSBoYW5kbGU7CglwcGNfZG1h X2NoX3QgKnBfZG1hX2NoOwoJcHBjX3NnbF90ICpwbmV4dCwgKnNnbF9hZGRy OwoJdWludDMyX3QgY291bnRfbGVmdDsKCglpZiAoIWhhbmRsZSkgewoJCXBy aW50aygicHBjNHh4X2dldF9kbWFfc2dsX3Jlc2lkdWU6IG51bGwgaGFuZGxl XG4iKTsKCQlyZXR1cm4gRE1BX1NUQVRVU19CQURfSEFORExFOwoJfSBlbHNl IGlmIChwc2dsLT5kbWFuciA+IChNQVhfUFBDNHh4X0RNQV9DSEFOTkVMUyAt IDEpKSB7CgkJcHJpbnRrKCJwcGM0eHhfZ2V0X2RtYV9zZ2xfcmVzaWR1ZTog YmFkIGNoYW5uZWwgaW4gaGFuZGxlICVkXG4iLAoJCSAgICAgICBwc2dsLT5k bWFucik7CgkJcmV0dXJuIERNQV9TVEFUVVNfQkFEX0NIQU5ORUw7Cgl9CgoJ c2dsX2FkZHIgPSAocHBjX3NnbF90ICopIF9fdmEobWZkY3IoRENSTl9BU0cw ICsgKHBzZ2wtPmRtYW5yICogMHg4KSkpOwoJY291bnRfbGVmdCA9IG1mZGNy KERDUk5fRE1BQ1QwICsgKHBzZ2wtPmRtYW5yICogMHg4KSkgJiBTR19DT1VO VF9NQVNLOwoKCiNpZmRlZiBDT05GSUdfVkRSCglpZiAoIXNnbF9hZGRyKSB7 CgkJLyogTGFzdCBpbiBsaXN0ICovCgkJcmV0dXJuIGNvdW50X2xlZnQ7Cgl9 CgoJcG5leHQgPSBzZ2xfYWRkcjsgLyogc2dsX2FkZHIgaXMgbmV4dCB0byBi ZSBsb2FkZWQgKi8KCgkvKgoJICogV2h5IHRoaXMgaW50ZXJmYWNlPyBCZXR0 ZXIgcmV0dXJuIG5vdGhpbmcgb3Igc2dsX2FkZHIgaW5zdGVhZC4uLj8KCSAq LwoJKnNyY19hZGRyID0gcG5leHQtPnNyY19hZGRyOwoJKmRzdF9hZGRyID0g cG5leHQtPmRzdF9hZGRyOwoKCS8qCgkgKiBOb3cgc2VhcmNoIHRoZSByZW1h aW5pbmcgZGVzY3JpcHRvcnMgYW5kIGFkZCB0aGVpciBjb3VudC4KCSAqIFdl IGFscmVhZHkgaGF2ZSB0aGUgcmVtYWluaW5nIGNvdW50IGZyb20gdGhpcyBk ZXNjcmlwdG9yIGluCgkgKiBjb3VudF9sZWZ0LgoJICovCgl3aGlsZSAocG5l eHQpIHsKCQljb3VudF9sZWZ0ICs9IHBuZXh0LT5jb250cm9sX2NvdW50ICYg U0dfQ09VTlRfTUFTSzsKCQlwbmV4dCA9IHBoeXNfdG9fdmlydChwbmV4dC0+ bmV4dCk7Cgl9CgoJLyogc3VjY2VzcyAqLwoJcF9kbWFfY2ggPSAmZG1hX2No YW5uZWxzW3BzZ2wtPmRtYW5yXTsKCXJldHVybiAoY291bnRfbGVmdCA8PCBw X2RtYV9jaC0+c2hpZnQpOwkvKiBjb3VudCBpbiBieXRlcyAqLwojZWxzZQoJ aWYgKCFzZ2xfYWRkcikgewoJCXByaW50aygicHBjNHh4X2dldF9kbWFfc2ds X3Jlc2lkdWU6IHNnbCBhZGRyIHJlZ2lzdGVyIGlzIG51bGxcbiIpOwoJCWdv dG8gZXJyb3I7Cgl9CglwbmV4dCA9IHBzZ2wtPnBoZWFkOwoJd2hpbGUgKHBu ZXh0ICYmCgkgICAgICAgKCh1bnNpZ25lZCkgcG5leHQgPCAoKHVuc2lnbmVk KSBwc2dsICsgU0dMX0xJU1RfU0laRSkgJiYKCQkocG5leHQgIT0gc2dsX2Fk ZHIpKQoJICAgICkgewoJCXBuZXh0Kys7Cgl9CgoJaWYgKHBuZXh0ID09IHNn bF9hZGRyKSB7CS8qIGZvdW5kIHRoZSBzZ2wgZGVzY3JpcHRvciAqLwoKCQkq c3JjX2FkZHIgPSBwbmV4dC0+c3JjX2FkZHI7CgkJKmRzdF9hZGRyID0gcG5l eHQtPmRzdF9hZGRyOwoKCQkvKgoJCSAqIE5vdyBzZWFyY2ggdGhlIHJlbWFp bmluZyBkZXNjcmlwdG9ycyBhbmQgYWRkIHRoZWlyIGNvdW50LgoJCSAqIFdl IGFscmVhZHkgaGF2ZSB0aGUgcmVtYWluaW5nIGNvdW50IGZyb20gdGhpcyBk ZXNjcmlwdG9yIGluCgkJICogY291bnRfbGVmdC4KCQkgKi8KCQlwbmV4dCsr OwoKCQl3aGlsZSAoKHBuZXh0ICE9IHBzZ2wtPnB0YWlsKSAmJgoJCSAgICAg ICAoKHVuc2lnbmVkKSBwbmV4dCA8ICgodW5zaWduZWQpIHBzZ2wgKyBTR0xf TElTVF9TSVpFKSkKCQkgICAgKSB7CgkJCWNvdW50X2xlZnQgKz0gcG5leHQt PmNvbnRyb2xfY291bnQgJiBTR19DT1VOVF9NQVNLOwoJCX0KCgkJaWYgKHBu ZXh0ICE9IHBzZ2wtPnB0YWlsKSB7CS8qIHNob3VsZCBuZXZlciBoYXBwZW4g Ki8KCQkJcHJpbnRrCgkJCSAgICAoInBwYzR4eF9nZXRfZG1hX3NnbF9yZXNp ZHVlIGVycm9yICgxKSBwc2dsLT5wdGFpbCAweCV4IGhhbmRsZSAweCV4XG4i LAoJCQkgICAgICh1bnNpZ25lZCBpbnQpIHBzZ2wtPnB0YWlsLCAodW5zaWdu ZWQgaW50KSBoYW5kbGUpOwoJCQlnb3RvIGVycm9yOwoJCX0KCgkJLyogc3Vj Y2VzcyAqLwoJCXBfZG1hX2NoID0gJmRtYV9jaGFubmVsc1twc2dsLT5kbWFu cl07CgkJcmV0dXJuIChjb3VudF9sZWZ0IDw8IHBfZG1hX2NoLT5zaGlmdCk7 CS8qIGNvdW50IGluIGJ5dGVzICovCgoJfSBlbHNlIHsKCQkvKiB0aGlzIHNo b3VsZG4ndCBoYXBwZW4gKi8KCQlwcmludGsKCQkgICAgKCJnZXRfZG1hX3Nn bF9yZXNpZHVlLCB1bmFibGUgdG8gbWF0Y2ggY3VycmVudCBhZGRyZXNzIDB4 JXgsIGhhbmRsZSAweCV4XG4iLAoJCSAgICAgKHVuc2lnbmVkIGludCkgc2ds X2FkZHIsICh1bnNpZ25lZCBpbnQpIGhhbmRsZSk7CgoJfQoKICAgICAgZXJy b3I6Cgkqc3JjX2FkZHIgPSAocGh5c19hZGRyX3QpIE5VTEw7CgkqZHN0X2Fk ZHIgPSAocGh5c19hZGRyX3QpIE5VTEw7CglyZXR1cm4gMDsKI2VuZGlmCn0K Ci8qCiAqIFJldHVybnMgdGhlIGFkZHJlc3MoZXMpIG9mIHRoZSBidWZmZXIo cykgY29udGFpbmVkIGluIHRoZSBoZWFkIGVsZW1lbnQgb2YKICogdGhlIHNj YXR0ZXIvZ2F0aGVyIGxpc3QuICBUaGUgZWxlbWVudCBpcyByZW1vdmVkIGZy b20gdGhlIHNjYXR0ZXIvZ2F0aGVyCiAqIGxpc3QgYW5kIHRoZSBuZXh0IGVs ZW1lbnQgYmVjb21lcyB0aGUgaGVhZC4KICoKICogVGhpcyBmdW5jdGlvbiBz aG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgRE1BIGlzIG5vdCBhY3Rp dmUuCiAqLwppbnQKcHBjNHh4X2RlbGV0ZV9kbWFfc2dsX2VsZW1lbnQoc2ds X2hhbmRsZV90IGhhbmRsZSwgcGh5c19hZGRyX3QgKiBzcmNfZG1hX2FkZHIs CgkJCSAgICAgIHBoeXNfYWRkcl90ICogZHN0X2RtYV9hZGRyKQp7CglzZ2xf bGlzdF9pbmZvX3QgKnBzZ2wgPSAoc2dsX2xpc3RfaW5mb190ICopIGhhbmRs ZTsKCglpZiAoIWhhbmRsZSkgewoJCXByaW50aygicHBjNHh4X2RlbGV0ZV9z Z2xfZWxlbWVudDogbnVsbCBoYW5kbGVcbiIpOwoJCXJldHVybiBETUFfU1RB VFVTX0JBRF9IQU5ETEU7Cgl9IGVsc2UgaWYgKHBzZ2wtPmRtYW5yID4gKE1B WF9QUEM0eHhfRE1BX0NIQU5ORUxTIC0gMSkpIHsKCQlwcmludGsoInBwYzR4 eF9kZWxldGVfc2dsX2VsZW1lbnQ6IGJhZCBjaGFubmVsIGluIGhhbmRsZSAl ZFxuIiwKCQkgICAgICAgcHNnbC0+ZG1hbnIpOwoJCXJldHVybiBETUFfU1RB VFVTX0JBRF9DSEFOTkVMOwoJfQoKCWlmICghcHNnbC0+cGhlYWQpIHsKCQkv KiBwcmludGsoInBwYzR4eF9kZWxldGVfc2dsX2VsZW1lbnQ6IHNnbCBsaXN0 IGVtcHR5XG4iKTsgLSBub3QgYW4gZXJyb3IgKi8KCQkqc3JjX2RtYV9hZGRy ID0gKHBoeXNfYWRkcl90KSBOVUxMOwoJCSpkc3RfZG1hX2FkZHIgPSAocGh5 c19hZGRyX3QpIE5VTEw7CgkJcmV0dXJuIERNQV9TVEFUVVNfU0dMX0xJU1Rf RU1QVFk7Cgl9CgoJKnNyY19kbWFfYWRkciA9IChwaHlzX2FkZHJfdCkgcHNn bC0+cGhlYWQtPnNyY19hZGRyOwoJKmRzdF9kbWFfYWRkciA9IChwaHlzX2Fk ZHJfdCkgcHNnbC0+cGhlYWQtPmRzdF9hZGRyOwoKCWlmIChwc2dsLT5waGVh ZCA9PSBwc2dsLT5wdGFpbCkgewoJCS8qIGxhc3QgZGVzY3JpcHRvciBvbiB0 aGUgbGlzdCAqLwojaWZkZWYgQ09ORklHX1ZEUgoJCWtmcmVlKHBzZ2wtPnBo ZWFkKTsKI2VuZGlmCQkKCQlwc2dsLT5waGVhZCA9IE5VTEw7CgkJcHNnbC0+ cHRhaWwgPSBOVUxMOwoJfSBlbHNlIHsKI2lmZGVmIENPTkZJR19WRFIKCQlw cGNfc2dsX3QgKm5leHQgPSBwaHlzX3RvX3ZpcnQocHNnbC0+cGhlYWQtPm5l eHQpOwoJCWtmcmVlKHBzZ2wtPnBoZWFkKTsKCQlwc2dsLT5waGVhZCA9IG5l eHQ7CiNlbHNlCgkJcHNnbC0+cGhlYWQrKzsKCQlwc2dsLT5waGVhZF9kbWEg Kz0gc2l6ZW9mKHBwY19zZ2xfdCk7CiNlbmRpZgoJfQoKCXJldHVybiBETUFf U1RBVFVTX0dPT0Q7Cn0KCgovKgogKiAgIENyZWF0ZSBhIHNjYXR0ZXIvZ2F0 aGVyIGxpc3QgaGFuZGxlLiAgVGhpcyBpcyBzaW1wbHkgYSBzdHJ1Y3R1cmUg d2hpY2gKICogICBkZXNjcmliZXMgYSBzY2F0dGVyL2dhdGhlciBsaXN0Lgog KgogKiAgIEEgaGFuZGxlIGlzIHJldHVybmVkIGluICJoYW5kbGUiIHdoaWNo IHRoZSBkcml2ZXIgc2hvdWxkIHNhdmUgaW4gb3JkZXIgdG8KICogICBiZSBh YmxlIHRvIGFjY2VzcyB0aGlzIGxpc3QgbGF0ZXIuICBBIGNodW5rIG9mIG1l bW9yeSB3aWxsIGJlIGFsbG9jYXRlZAogKiAgIHRvIGJlIHVzZWQgYnkgdGhl IEFQSSBmb3IgaW50ZXJuYWwgbWFuYWdlbWVudCBwdXJwb3NlcywgaW5jbHVk aW5nIG1hbmFnaW5nCiAqICAgdGhlIHNnIGxpc3QgYW5kIGFsbG9jYXRpbmcg bWVtb3J5IGZvciB0aGUgc2dsIGRlc2NyaXB0b3JzLiAgT25lIHBhZ2Ugc2hv dWxkCiAqICAgYmUgbW9yZSB0aGFuIGVub3VnaCBmb3IgdGhhdCBwdXJwb3Nl LiAgUGVyaGFwcyBpdCdzIGEgYml0IHdhc3RlZnVsIHRvIHVzZQogKiAgIGEg d2hvbGUgcGFnZSBmb3IgYSBzaW5nbGUgc2cgbGlzdCwgYnV0IG1vc3QgbGlr ZWx5IHRoZXJlIHdpbGwgYmUgb25seSBvbmUKICogICBzZyBsaXN0IHBlciBj aGFubmVsLgogKgogKiAgIEludGVycnVwdCBub3RlczoKICogICBFYWNoIHNn bCBkZXNjcmlwdG9yIGhhcyBhIGNvcHkgb2YgdGhlIERNQSBjb250cm9sIHdv cmQgd2hpY2ggdGhlIERNQSBlbmdpbmUKICogICBsb2FkcyBpbiB0aGUgY29u dHJvbCByZWdpc3Rlci4gIFRoZSBjb250cm9sIHdvcmQgaGFzIGEgImdsb2Jh bCIgaW50ZXJydXB0CiAqICAgZW5hYmxlIGJpdCBmb3IgdGhhdCBjaGFubmVs LiBJbnRlcnJ1cHRzIGFyZSBmdXJ0aGVyIHF1YWxpZmllZCBieSBhIGZldyBi aXRzCiAqICAgaW4gdGhlIHNnbCBkZXNjcmlwdG9yIGNvdW50IHJlZ2lzdGVy LiAgSW4gb3JkZXIgdG8gc2V0dXAgYW4gc2dsLCB3ZSBoYXZlIHRvCiAqICAg a25vdyBhaGVhZCBvZiB0aW1lIHdoZXRoZXIgb3Igbm90IGludGVycnVwdHMg d2lsbCBiZSBlbmFibGVkIGF0IHRoZSBjb21wbGV0aW9uCiAqICAgb2YgdGhl IHRyYW5zZmVycy4gIFRodXMsIGVuYWJsZV9kbWFfaW50ZXJydXB0KCkvZGlz YWJsZV9kbWFfaW50ZXJydXB0KCkgTVVTVAogKiAgIGJlIGNhbGxlZCBiZWZv cmUgY2FsbGluZyBhbGxvY19kbWFfaGFuZGxlKCkuICBJZiB0aGUgaW50ZXJy dXB0IG1vZGUgd2lsbCBuZXZlcgogKiAgIGNoYW5nZSBhZnRlciBwb3dlcnVw LCB0aGVuIGVuYWJsZV9kbWFfaW50ZXJydXB0KCkvZGlzYWJsZV9kbWFfaW50 ZXJydXB0KCkKICogICBkbyBub3QgaGF2ZSB0byBiZSBjYWxsZWQgLS0gaW50 ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQKICog ICBvbiBob3cgdGhlIGNoYW5uZWwgd2FzIGNvbmZpZ3VyZWQgYWZ0ZXIgcG93 ZXJ1cCBieSB0aGUgaHdfaW5pdF9kbWFfY2hhbm5lbCgpCiAqICAgZnVuY3Rp b24uICBFYWNoIHNnbCBkZXNjcmlwdG9yIHdpbGwgYmUgc2V0dXAgdG8gaW50 ZXJydXB0IGlmIGFuIGVycm9yIG9jY3VyczsKICogICBob3dldmVyLCBvbmx5 IHRoZSBsYXN0IGRlc2NyaXB0b3Igd2lsbCBiZSBzZXR1cCB0byBpbnRlcnJ1 cHQuIFRodXMsIGFuCiAqICAgaW50ZXJydXB0IHdpbGwgb2NjdXIgKGlmIGlu dGVycnVwdHMgYXJlIGVuYWJsZWQpIG9ubHkgYWZ0ZXIgdGhlIGNvbXBsZXRl CiAqICAgc2dsIHRyYW5zZmVyIGlzIGRvbmUuCiAqICAgRW5kIG9mIFRyYW5z ZmVyIEludGVycnVwdCBuZWVkcyB0byBiZSBlbmFibGVkIGluIGFsbCBkZXNj cmlwdG9ycywgc2luY2UgaXQKICogICBpcyBpbXBvc3NpYmxlIHRvIGtub3cg d2hpY2ggb25lIHdpbGwgYmUgdGhlIGxhc3QuLi4KICovCmludApwcGM0eHhf YWxsb2NfZG1hX2hhbmRsZShzZ2xfaGFuZGxlX3QgKiBwaGFuZGxlLCB1bnNp Z25lZCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRtYW5yKQp7CglzZ2xfbGlz dF9pbmZvX3QgKnBzZ2w9TlVMTDsKI2lmZGVmIENPTkZJR19WRFIKCXBwY19k bWFfY2hfdCAqcF9kbWFfY2ggPSAmZG1hX2NoYW5uZWxzW2RtYW5yXTsKI2Vs c2UKCWRtYV9hZGRyX3QgZG1hX2FkZHI7CglwcGNfZG1hX2NoX3QgKnBfZG1h X2NoID0gJmRtYV9jaGFubmVsc1tkbWFucl07Cgl1aW50MzJfdCBjdGNfc2V0 dGluZ3M7Cgl2b2lkICpyZXQ7CiNlbmRpZgoKCWlmIChkbWFuciA+PSBNQVhf UFBDNHh4X0RNQV9DSEFOTkVMUykgewoJCXByaW50aygicHBjNHh4X2FsbG9j X2RtYV9oYW5kbGU6IGludmFsaWQgY2hhbm5lbCAweCV4XG4iLCBkbWFucik7 CgkJcmV0dXJuIERNQV9TVEFUVVNfQkFEX0NIQU5ORUw7Cgl9CgoJaWYgKCFw aGFuZGxlKSB7CgkJcHJpbnRrKCJwcGM0eHhfYWxsb2NfZG1hX2hhbmRsZTog bnVsbCBoYW5kbGVcbiIpOwoJCXJldHVybiBETUFfU1RBVFVTX0JBRF9IQU5E TEU7Cgl9CgojaWZkZWYgQ09ORklHX1ZEUgoJLyogR2V0IG1lbW9yeSBmb3Ig dGhlIGxpc3RpbmZvIHN0cnVjdCAqLwoJcHNnbCA9IGttYWxsb2Moc2l6ZW9m KHNnbF9saXN0X2luZm9fdCksIEdGUF9LRVJORUwpOwoJaWYgKHBzZ2wgPT0g TlVMTCkgewoJCSpwaGFuZGxlID0gKHNnbF9oYW5kbGVfdCkgTlVMTDsKCQly ZXR1cm4gRE1BX1NUQVRVU19PVVRfT0ZfTUVNT1JZOwoJfQoJbWVtc2V0KHBz Z2wsIDAsIHNpemVvZihzZ2xfbGlzdF9pbmZvX3QpKTsKCQoJLyogZG1hX2Fk ZHIgaXMgdW51c2VkIG5vdyAqLwoJcHNnbC0+ZG1hbnIgPSBkbWFucjsKI2Vs c2UKCS8qIEdldCBhIHBhZ2Ugb2YgbWVtb3J5LCB3aGljaCBpcyB6ZXJvZWQg b3V0IGJ5IGNvbnNpc3RlbnRfYWxsb2MoKSAqLwoJcmV0ID0gZG1hX2FsbG9j X2NvaGVyZW50KE5VTEwsIERNQV9QUEM0eHhfU0laRSwgJmRtYV9hZGRyLCBH RlBfS0VSTkVMKTsKCWlmIChyZXQgIT0gTlVMTCkgewoJCW1lbXNldChyZXQs IDAsIERNQV9QUEM0eHhfU0laRSk7CgkJcHNnbCA9IChzZ2xfbGlzdF9pbmZv X3QgKikgcmV0OwoJfQoKCWlmIChwc2dsID09IE5VTEwpIHsKCQkqcGhhbmRs ZSA9IChzZ2xfaGFuZGxlX3QpIE5VTEw7CgkJcmV0dXJuIERNQV9TVEFUVVNf T1VUX09GX01FTU9SWTsKCX0KCglwc2dsLT5kbWFfYWRkciA9IGRtYV9hZGRy OwoJcHNnbC0+ZG1hbnIgPSBkbWFucjsKI2VuZGlmCgkvKgoJICogTW9kaWZ5 IGFuZCBzYXZlIHRoZSBjb250cm9sIHdvcmQuIFRoZXNlIHdvcmRzIHdpbGwg YmUKCSAqIHdyaXR0ZW4gdG8gZWFjaCBzZ2wgZGVzY3JpcHRvci4gIFRoZSBE TUEgZW5naW5lIHRoZW4KCSAqIGxvYWRzIHRoaXMgY29udHJvbCB3b3JkIGlu dG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKCSAqIGV2ZXJ5IHRpbWUgaXQgcmVh ZHMgYSBuZXcgZGVzY3JpcHRvci4KCSAqLwoJcHNnbC0+Y29udHJvbCA9IHBf ZG1hX2NoLT5jb250cm9sOwoJLyogQ2xlYXIgYWxsIG1vZGUgYml0cyAqLwoJ cHNnbC0+Y29udHJvbCAmPSB+KERNQV9UTV9NQVNLIHwgRE1BX1REKTsKCS8q IFNhdmUgY29udHJvbCB3b3JkIGFuZCBtb2RlICovCglwc2dsLT5jb250cm9s IHw9IChtb2RlIHwgRE1BX0NFX0VOQUJMRSk7CgkgLyogUFBDIEVycmF0YT8g RE1BIGVsc2UgaWdub3JlIGNvdW50IG9uIGZpcnN0IGluIGxpc3QgKi8KCXBz Z2wtPmNvbnRyb2wgfD0gU0VUX0RNQV9UQ0UoMSk7CgkKCS8qIEluIE1NIG1v ZGUsIHdlIG11c3Qgc2V0IEVURC9UQ0UgKi8KCWlmIChtb2RlID09IERNQV9N T0RFX01NKQoJCXBzZ2wtPmNvbnRyb2wgfD0gRE1BX0VURF9PVVRQVVQgfCBE TUFfVENFX0VOQUJMRTsKCglpZiAocF9kbWFfY2gtPmludF9lbmFibGUpIHsK CQkvKiBFbmFibGUgY2hhbm5lbCBpbnRlcnJ1cHQgKi8KCQlwc2dsLT5jb250 cm9sIHw9IERNQV9DSUVfRU5BQkxFOwoJfSBlbHNlIHsKCQlwc2dsLT5jb250 cm9sICY9IH5ETUFfQ0lFX0VOQUJMRTsKCX0KCgkvKiBFbmFibGUgU0dMIGNv bnRyb2wgYWNjZXNzICovCglwc2dsLT5zZ2xfY29udHJvbCA9IFNHX0VSSV9F TkFCTEUgfCBTR19MSU5LOwoKI2lmbmRlZiBDT05GSUdfVkRSCgkvKiBrZWVw IGNvbnRyb2wgY291bnQgcmVnaXN0ZXIgc2V0dGluZ3MgKi8KCWN0Y19zZXR0 aW5ncyA9IG1mZGNyKERDUk5fRE1BQ1QwICsgKGRtYW5yICogMHg4KSkKCQkm IChETUFfQ1RDX0JTSVpfTVNLIHwgRE1BX0NUQ19CVEVOKTsgLypidXJzdCBt b2RlIHNldHRpbmdzKi8KCXBzZ2wtPnNnbF9jb250cm9sIHw9IGN0Y19zZXR0 aW5nczsKI2VuZGlmCgoJaWYgKHBfZG1hX2NoLT5pbnRfZW5hYmxlKSB7CgkJ aWYgKHBfZG1hX2NoLT50Y2VfZW5hYmxlKQoJCQlwc2dsLT5zZ2xfY29udHJv bCB8PSBTR19UQ0lfRU5BQkxFOwoJCWVsc2UKCQkJcHNnbC0+c2dsX2NvbnRy b2wgfD0gU0dfRVRJX0VOQUJMRTsKCX0KCgkqcGhhbmRsZSA9IChzZ2xfaGFu ZGxlX3QpIHBzZ2w7CglyZXR1cm4gRE1BX1NUQVRVU19HT09EOwp9CgovKgog KiBEZXN0cm95IGEgc2NhdHRlci9nYXRoZXIgbGlzdCBoYW5kbGUgdGhhdCB3 YXMgY3JlYXRlZCBieSBhbGxvY19kbWFfaGFuZGxlKCkuCiAqIFRoZSBsaXN0 IG11c3QgYmUgZW1wdHkgKGNvbnRhaW4gbm8gZWxlbWVudHMpLgogKi8Kdm9p ZApwcGM0eHhfZnJlZV9kbWFfaGFuZGxlKHNnbF9oYW5kbGVfdCBoYW5kbGUp CnsKCXNnbF9saXN0X2luZm9fdCAqcHNnbCA9IChzZ2xfbGlzdF9pbmZvX3Qg KikgaGFuZGxlOwoKI2lmZGVmIENPTkZJR19WRFIKCWlmICghaGFuZGxlKSB7 CgkJcHJpbnRrKCJwcGM0eHhfZnJlZV9kbWFfaGFuZGxlOiBnb3QgTlVMTFxu Iik7CgkJcmV0dXJuOwoJfSBlbHNlIGlmIChwc2dsLT5waGVhZCkgeyAvKiBm cmVlIGxpc3QgaGVyZSwgd2h5IGRvIGl0IGV4dGVybmFseT8gKi8KCQlwaHlz X2FkZHJfdCBkdW1teTsKCQl3aGlsZSAocHBjNHh4X2RlbGV0ZV9kbWFfc2ds X2VsZW1lbnQoaGFuZGxlLCAmZHVtbXksICZkdW1teSkgPT0gRE1BX1NUQVRV U19HT09EKQoJCQkvKiBOT09QICovOwoJCS8qIHByaW50aygicHBjNHh4X2Zy ZWVfZG1hX2hhbmRsZTogbGlzdCBub3QgZW1wdHlcbiIpOyAqLwoJfQoKCWtm cmVlKCh2b2lkICopIHBzZ2wpOwojZWxzZQoJaWYgKCFoYW5kbGUpIHsKCQlw cmludGsoInBwYzR4eF9mcmVlX2RtYV9oYW5kbGU6IGdvdCBOVUxMXG4iKTsK CQlyZXR1cm47Cgl9IGVsc2UgaWYgKHBzZ2wtPnBoZWFkKSB7CgkJcHJpbnRr KCJwcGM0eHhfZnJlZV9kbWFfaGFuZGxlOiBsaXN0IG5vdCBlbXB0eVxuIik7 CgkJcmV0dXJuOwoJfSBlbHNlIGlmICghcHNnbC0+ZG1hX2FkZHIpIHsJLyog c2hvdWxkIG5ldmVyIGhhcHBlbiAqLwoJCXByaW50aygicHBjNHh4X2ZyZWVf ZG1hX2hhbmRsZTogbm8gZG1hIGFkZHJlc3NcbiIpOwoJCXJldHVybjsKCX0K CglkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBETUFfUFBDNHh4X1NJWkUsICh2 b2lkICopIHBzZ2wsIDApOwojZW5kaWYKfQoKRVhQT1JUX1NZTUJPTChwcGM0 eHhfYWxsb2NfZG1hX2hhbmRsZSk7CkVYUE9SVF9TWU1CT0wocHBjNHh4X2Zy ZWVfZG1hX2hhbmRsZSk7CkVYUE9SVF9TWU1CT0wocHBjNHh4X2FkZF9kbWFf c2dsKTsKRVhQT1JUX1NZTUJPTChwcGM0eHhfZGVsZXRlX2RtYV9zZ2xfZWxl bWVudCk7CkVYUE9SVF9TWU1CT0wocHBjNHh4X2VuYWJsZV9kbWFfc2dsKTsK RVhQT1JUX1NZTUJPTChwcGM0eHhfZGlzYWJsZV9kbWFfc2dsKTsKRVhQT1JU X1NZTUJPTChwcGM0eHhfZGlzYWJsZV9kbWFfc2dsX25yKTsKRVhQT1JUX1NZ TUJPTChwcGM0eHhfZ2V0X2RtYV9zZ2xfcmVzaWR1ZSk7Cg== ----EE3B6242DBEBA914A74B4E97AD5F0ED5--